polfan-server-js-client 0.1.0 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.PServ=t():e.PServ=t()}(self,(()=>(()=>{"use strict";var e={d:(t,r)=>{for(var n in r)e.o(r,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,i(n.key),n)}}function o(e,t,r){return(t=i(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e){var t=function(e,t){if("object"!==r(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!==r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===r(t)?t:String(t)}e.r(t),e.d(t,{IndexedCollection:()=>D,IndexedObjectCollection:()=>J,ObservableIndexedCollection:()=>F,ObservableIndexedObjectCollection:()=>B,WebApiClient:()=>Re,WebSocketClient:()=>de});var a=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),o(this,"events",new Map),o(this,"onceEvents",new Map)}var t,r,i;return t=e,(r=[{key:"on",value:function(e,t){return this.addHandler(this.events,e,t),this}},{key:"once",value:function(e,t){return this.addHandler(this.onceEvents,e,t),this}},{key:"emit",value:function(e,t){return this.callHandlers(this.events,e,t),this.callHandlers(this.onceEvents,e,t),this.onceEvents.delete(e),this}},{key:"addHandler",value:function(e,t,r){var n,o=null!==(n=e.get(t))&&void 0!==n?n:[];o.push(r),e.set(t,o)}},{key:"callHandlers",value:function(e,t,r){var n;null===(n=e.get(t))||void 0===n||n.forEach((function(e){return e(r)}))}}])&&n(t.prototype,r),i&&n(t,i),Object.defineProperty(t,"prototype",{writable:!1}),e}();function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,b(n.key),n)}}function l(){return l="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=f(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(arguments.length<3?e:r):o.value}},l.apply(this,arguments)}function f(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=v(e)););return e}function h(e,t){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},h(e,t)}function p(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=v(e);if(t){var o=v(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return d(this,r)}}function d(e,t){if(t&&("object"===s(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return y(e)}function y(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function v(e){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},v(e)}function m(e,t,r){return(t=b(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e){var t=function(e,t){if("object"!==s(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===s(t)?t:String(t)}var g=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h(e,t)}(i,e);var t,r,n,o=p(i);function i(){var e;c(this,i);for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return m(y(e=o.call.apply(o,[this].concat(r))),"awaitingResponse",new Map),m(y(e),"sentCounter",0),e}return t=i,r=[{key:"on",value:function(e,t){return l(v(i.prototype),"on",this).call(this,e,t)}},{key:"once",value:function(e,t){return l(v(i.prototype),"once",this).call(this,e,t)}},{key:"createEnvelope",value:function(e,t){return{type:e,data:t,ref:(++this.sentCounter).toString()}}},{key:"createPromiseFromCommandEnvelope",value:function(e){var t=this;return new Promise((function(){for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return t.awaitingResponse.set(e.ref,n)}))}},{key:"handleIncomingEnvelope",value:function(e){if(this.awaitingResponse.has(e.ref)){var t="Error"===e.type;this.awaitingResponse.get(e.ref)[0]({data:t?null:e.data,error:t?e.data:null}),this.awaitingResponse.delete(e.ref)}}},{key:"handleEnvelopeSendError",value:function(e,t){this.awaitingResponse.has(e.ref)&&(this.awaitingResponse.get(e.ref)[0](t),this.awaitingResponse.delete(e.ref))}}],r&&u(t.prototype,r),n&&u(t,n),Object.defineProperty(t,"prototype",{writable:!1}),i}(a);function w(e){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w(e)}function k(){return k="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var n=S(e,t);if(n){var o=Object.getOwnPropertyDescriptor(n,t);return o.get?o.get.call(arguments.length<3?e:r):o.value}},k.apply(this,arguments)}function S(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=P(e)););return e}function j(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&O(e,t)}function O(e,t){return O=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},O(e,t)}function E(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=P(e);if(t){var o=P(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return x(this,r)}}function x(e,t){if(t&&("object"===w(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return R(e)}function R(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function P(e){return P=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},P(e)}function L(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=_(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function T(e){return function(e){if(Array.isArray(e))return M(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||_(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e,t){if(e){if("string"==typeof e)return M(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?M(e,t):void 0}}function M(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function I(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function A(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,C(n.key),n)}}function N(e,t,r){return t&&A(e.prototype,t),r&&A(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function G(e,t,r){return(t=C(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function C(e){var t=function(e,t){if("object"!==w(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==w(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===w(t)?t:String(t)}var D=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];I(this,e),G(this,"_items",new Map),this.set.apply(this,T(t))}return N(e,[{key:"items",get:function(){return this._items}},{key:"length",get:function(){return this._items.size}},{key:"set",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];for(var n=0,o=t;n<o.length;n++){var i=o[n];this._items.set(i[0],i[1])}}},{key:"get",value:function(e){return this.items.get(e)}},{key:"has",value:function(e){return this.items.has(e)}},{key:"delete",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];for(var n=0,o=t;n<o.length;n++){var i=o[n];this.items.delete(i)}}},{key:"deleteAll",value:function(){this.items.clear()}},{key:"findBy",value:function(t,r){for(var n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=new e;!((n=this.items.entries().next().value).done||o&&i.length===o);)n[1][t]===r&&i.set(n);return i}},{key:"map",value:function(e){return Array.from(this.items.entries()).map((function(t){return e(t[1],t[0])}))}}]),e}(),J=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];I(this,e),this.id=t,G(this,"_items",void 0),this._items=new D,this.set.apply(this,T(r))}return N(e,[{key:"items",get:function(){return Array.from(this._items.items.values())}},{key:"length",get:function(){return this._items.length}},{key:"set",value:function(){for(var e,t=this,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];(e=this._items).set.apply(e,T(n.map((function(e){return[t.getId(e),e]}))))}},{key:"get",value:function(e){return this._items.get(e)}},{key:"getAt",value:function(e){return this.items[e]}},{key:"has",value:function(e){return this._items.has(e)}},{key:"delete",value:function(){var e;(e=this._items).delete.apply(e,arguments)}},{key:"deleteAll",value:function(){this._items.deleteAll()}},{key:"findBy",value:function(t,r){var n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=new e(this.id),a=L(this.items);try{for(a.s();!(n=a.n()).done;){var s=n.value;if(o&&i.length===o)break;s[t]===r&&i.set(s)}}catch(e){a.e(e)}finally{a.f()}return i}},{key:"map",value:function(e){return this.items.map(e)}},{key:"getId",value:function(e){return"function"==typeof this.id?this.id(e):e[this.id]}}]),e}(),F=function(e){j(r,e);var t=E(r);function r(){var e;I(this,r);for(var n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];return G(R(e=t.call.apply(t,[this].concat(o))),"eventTarget",void 0),e}return N(r,[{key:"set",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var o;t.length&&((o=k(P(r.prototype),"set",this)).call.apply(o,[this].concat(t)),this.eventTarget.emit("change",{setItems:t.map((function(e){return e[0]}))}))}},{key:"delete",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var o;t.length&&((o=k(P(r.prototype),"delete",this)).call.apply(o,[this].concat(t)),this.eventTarget.emit("change",{deletedItems:t}))}},{key:"deleteAll",value:function(){if(this.length){var e=this._items.keys();k(P(r.prototype),"deleteAll",this).call(this),this.eventTarget.emit("change",{deletedItems:Array.from(e)})}}},{key:"on",value:function(e,t){return this.eventTarget.on(e,t),this}},{key:"once",value:function(e,t){return this.eventTarget.once(e,t),this}}]),r}(D),B=function(e){j(r,e);var t=E(r);function r(e){var n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return I(this,r),(n=t.call(this,e,o)).id=e,G(R(n),"eventTarget",void 0),n.eventTarget=new a,n}return N(r,[{key:"set",value:function(){for(var e,t=this,n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];o.length&&((e=k(P(r.prototype),"set",this)).call.apply(e,[this].concat(o)),this.eventTarget.emit("change",{setItems:o.map((function(e){return t.getId(e)}))}))}},{key:"delete",value:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var o;t.length&&((o=k(P(r.prototype),"delete",this)).call.apply(o,[this].concat(t)),this.eventTarget.emit("change",{deletedItems:t}))}},{key:"deleteAll",value:function(){if(this.length){var e=this._items.items.keys();k(P(r.prototype),"deleteAll",this).call(this),this.eventTarget.emit("change",{deletedItems:Array.from(e)})}}},{key:"on",value:function(e,t){return this.eventTarget.on(e,t),this}},{key:"once",value:function(e,t){return this.eventTarget.once(e,t),this}}]),r}(J);function Q(e){return Q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Q(e)}function H(e){return function(e){if(Array.isArray(e))return U(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return U(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return U(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Y(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */Y=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,o){var i=t&&t.prototype instanceof h?t:h,a=Object.create(i.prototype),s=new E(o||[]);return n(a,"_invoke",{value:k(e,r,s)}),a}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function p(){}function d(){}var y={};c(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(x([])));m&&m!==t&&r.call(m,i)&&(y=m);var b=d.prototype=h.prototype=Object.create(y);function g(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(n,i,a,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==Q(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,s)}),(function(e){o("throw",e,a,s)})):t.resolve(f).then((function(e){u.value=e,a(u)}),(function(e){return o("throw",e,a,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){o(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return R()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var s=S(a,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function E(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function x(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:R}}function R(){return{value:void 0,done:!0}}return p.prototype=d,n(b,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=c(d,s,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,c(e,s,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},g(w.prototype),c(w.prototype,a,(function(){return this})),e.AsyncIterator=w,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new w(u(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(b),c(b,s,"Generator"),c(b,i,(function(){return this})),c(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=x,E.prototype={constructor:E,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return a.type="throw",a.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),f},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:x(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function z(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function W(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){z(i,n,o,a,s,"next",e)}function s(e){z(i,n,o,a,s,"throw",e)}a(void 0)}))}}function $(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,K(n.key),n)}}function q(e,t,r){return(t=K(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function K(e){var t=function(e,t){if("object"!==Q(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Q(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Q(t)?t:String(t)}var V,X=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.client=t,q(this,"joinedSpaces",new B("id")),q(this,"joinedRooms",new B("id")),q(this,"spacesRoles",new D),q(this,"roomsTopics",new D),q(this,"topicsMessages",new D),q(this,"spacesRooms",new D),q(this,"spacesMembers",new D),q(this,"roomsMembers",new D),q(this,"deferredGetters",new D),q(this,"reconnecting",!1),q(this,"me",null),this.bind()}var t,r,n,o,i,a,s,c,u,l,f,h,p;return t=e,r=[{key:"getMe",value:(p=W(Y().mark((function e(){return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.deferredGetterReadiness("session");case 2:return e.abrupt("return",this.me);case 3:case"end":return e.stop()}}),e,this)}))),function(){return p.apply(this,arguments)})},{key:"getJoinedSpaces",value:(h=W(Y().mark((function e(){return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.deferredGetterReadiness("session");case 2:return e.abrupt("return",this.joinedSpaces);case 3:case"end":return e.stop()}}),e,this)}))),function(){return h.apply(this,arguments)})},{key:"getJoinedRooms",value:(f=W(Y().mark((function e(){return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.deferredGetterReadiness("session");case 2:return e.abrupt("return",this.joinedRooms);case 3:case"end":return e.stop()}}),e,this)}))),function(){return f.apply(this,arguments)})},{key:"getSpaceRoles",value:(l=W(Y().mark((function e(t){return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.deferredGetterReadiness("session");case 2:return e.abrupt("return",this.spacesRoles.get(t));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return l.apply(this,arguments)})},{key:"getRoomTopics",value:(u=W(Y().mark((function e(t){return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.deferredGetterReadiness("session");case 2:return e.abrupt("return",this.roomsTopics.get(t));case 3:case"end":return e.stop()}}),e,this)}))),function(e){return u.apply(this,arguments)})},{key:"getTopicMessages",value:(c=W(Y().mark((function e(t){return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.topicsMessages.get(t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return c.apply(this,arguments)})},{key:"getSpaceRooms",value:(s=W(Y().mark((function e(t){var r;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r="spaces-rooms-".concat(t),this.spacesRooms.has(t)||this.deferredGetters.has(r)||(this.createDeferredGetter(r),this.client.send("GetSpaceRooms",{id:t})),e.next=4,this.deferredGetterReadiness(r);case 4:return e.abrupt("return",this.spacesRooms.get(t));case 5:case"end":return e.stop()}}),e,this)}))),function(e){return s.apply(this,arguments)})},{key:"getSpaceMembers",value:(a=W(Y().mark((function e(t){var r;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r="spaces-members-".concat(t),this.spacesMembers.has(t)||this.deferredGetters.has(r)||(this.createDeferredGetter(r),this.client.send("GetSpaceMembers",{id:t})),e.next=4,this.deferredGetterReadiness(r);case 4:return e.abrupt("return",this.spacesMembers.get(t));case 5:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"getRoomMembers",value:(i=W(Y().mark((function e(t){var r;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r="rooms-members-".concat(t),this.roomsMembers.has(t)||this.deferredGetters.has(r)||(this.createDeferredGetter(r),this.client.send("GetRoomMembers",{id:t})),e.next=4,this.deferredGetterReadiness(r);case 4:return e.abrupt("return",this.roomsMembers.get(t));case 5:case"end":return e.stop()}}),e,this)}))),function(e){return i.apply(this,arguments)})},{key:"deferredGetterReadiness",value:(o=W(Y().mark((function e(t){var r;return Y().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.deferredGetters.has(t)){e.next=3;break}return e.next=3,null===(r=this.deferredGetters.get(t))||void 0===r?void 0:r.promise;case 3:case"end":return e.stop()}}),e,this)}))),function(e){return o.apply(this,arguments)})},{key:"bind",value:function(){var e=this;this.client.on(this.client.Event.disconnect,(function(t){return e.handleDisconnect(t)})),this.client.on("NewMessage",(function(t){return e.handleNewMessage(t)})),this.client.on("NewRole",(function(t){return e.handleNewRole(t)})),this.client.on("NewRoom",(function(t){return e.handleNewRoom(t)})),this.client.on("NewTopic",(function(t){return e.handleNewTopic(t)})),this.client.on("RoleDeleted",(function(t){return e.handleRoleDeleted(t)})),this.client.on("RoomDeleted",(function(t){return e.handleRoomDeleted(t)})),this.client.on("RoomJoined",(function(t){return e.handleRoomJoined(t)})),this.client.on("RoomLeft",(function(t){return e.handleRoomLeft(t)})),this.client.on("RoomMemberJoined",(function(t){return e.handleRoomMemberJoined(t)})),this.client.on("RoomMemberLeft",(function(t){return e.handleRoomMemberLeft(t)})),this.client.on("RoomMembers",(function(t){return e.handleRoomMembers(t)})),this.client.on("Session",(function(t){return e.handleSession(t)})),this.client.on("SpaceDeleted",(function(t){return e.handleSpaceDeleted(t)})),this.client.on("SpaceJoined",(function(t){return e.handleSpaceJoined(t)})),this.client.on("SpaceLeft",(function(t){return e.handleSpaceLeft(t)})),this.client.on("SpaceMemberJoined",(function(t){return e.handleSpaceMemberJoined(t)})),this.client.on("SpaceMemberLeft",(function(t){return e.handleSpaceMemberLeft(t)})),this.client.on("SpaceMembers",(function(t){return e.handleSpaceMembers(t)})),this.client.on("SpaceRooms",(function(t){return e.handleSpaceRooms(t)})),this.client.on("SpaceMemberUpdate",(function(t){return e.handleSpaceMemberUpdate(t)})),this.client.on("TopicDeleted",(function(t){return e.handleTopicDeleted(t)}))}},{key:"createDeferredGetter",value:function(e){if(!this.deferredGetters.has(e)){var t={promise:void 0,resolver:void 0};t.promise=new Promise((function(e){return t.resolver=e})),this.deferredGetters.set([e,t])}}},{key:"handleDisconnect",value:function(e){e&&(this.reconnecting=!0)}},{key:"handleNewMessage",value:function(e){this.topicsMessages.get(e.topicId).set(e.message)}},{key:"handleNewRole",value:function(e){var t=this.spacesRoles.get(e.spaceId);t.set(e.role),this.joinedSpaces.get(e.spaceId).roles=t.items}},{key:"handleNewRoom",value:function(e){var t;null===(t=this.spacesRooms.get(e.spaceId))||void 0===t||t.set(e.summary)}},{key:"handleNewTopic",value:function(e){var t=this.roomsTopics.get(e.roomId);t.set(e.topic),this.joinedRooms.get(e.roomId).topics=t.items}},{key:"handleRoleDeleted",value:function(e){var t=this.spacesRoles.get(e.spaceId);t.delete(e.id),this.joinedSpaces.get(e.spaceId).roles=t.items}},{key:"handleRoomDeleted",value:function(e){e.spaceId&&this.spacesRooms.get(e.spaceId).delete(e.id),this.joinedRooms.delete(e.id),this.roomsMembers.delete(e.id),this.roomsTopics.delete(e.id)}},{key:"handleRoomJoined",value:function(e){this.addJoinedRooms(e.room)}},{key:"addJoinedRooms",value:function(){for(var e,t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];(e=this.roomsTopics).set.apply(e,H(n.map((function(e){return[e.id,new B("id",e.topics)]})))),(t=this.joinedRooms).set.apply(t,n)}},{key:"handleRoomLeft",value:function(e){this.joinedRooms.delete(e.id),this.roomsMembers.delete(e.id),this.roomsTopics.delete(e.id)}},{key:"handleRoomMemberJoined",value:function(e){this.roomsMembers.has(e.roomId)&&this.roomsMembers.get(e.roomId).set(e.member)}},{key:"handleRoomMemberLeft",value:function(e){this.roomsMembers.has(e.roomId)&&this.roomsMembers.get(e.roomId).delete(e.userId)}},{key:"handleRoomMembers",value:function(e){var t;this.roomsMembers.has(e.id)||(this.roomsMembers.set([e.id,new B((function(e){var t;return null!==(t=null==e?void 0:e.user.id)&&void 0!==t?t:e.spaceMember.user.id}),e.members)]),null===(t=this.deferredGetters.get("rooms-members-".concat(e.id)))||void 0===t||t.resolver())}},{key:"handleSession",value:function(e){var t;this.me=e.user,this.me&&!this.reconnecting||(this.reconnecting=!1,this.joinedRooms.deleteAll(),this.roomsTopics.deleteAll(),this.roomsMembers.deleteAll(),this.joinedSpaces.deleteAll(),this.spacesRoles.deleteAll(),this.spacesRooms.deleteAll(),this.spacesMembers.deleteAll(),this.addJoinedRooms.apply(this,H(e.state.rooms)),this.addJoinedSpaces.apply(this,H(e.state.spaces)),null===(t=this.deferredGetters.get("session"))||void 0===t||t.resolver())}},{key:"handleSpaceDeleted",value:function(e){this.spacesRoles.delete(e.id),this.spacesMembers.delete(e.id),this.spacesRooms.delete(e.id),this.joinedSpaces.delete(e.id)}},{key:"handleSpaceJoined",value:function(e){this.addJoinedSpaces(e.space)}},{key:"addJoinedSpaces",value:function(){for(var e,t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];(e=this.spacesRoles).set.apply(e,H(n.map((function(e){return[e.id,new B("id",e.roles)]})))),(t=this.joinedSpaces).set.apply(t,n)}},{key:"handleSpaceLeft",value:function(e){this.spacesRoles.delete(e.id),this.spacesMembers.delete(e.id),this.spacesRooms.delete(e.id),this.joinedSpaces.delete(e.id)}},{key:"handleSpaceMemberJoined",value:function(e){this.spacesMembers.has(e.spaceId)&&this.spacesMembers.get(e.spaceId).set(e.member)}},{key:"handleSpaceMemberLeft",value:function(e){this.spacesMembers.has(e.spaceId)&&this.spacesMembers.get(e.spaceId).delete(e.userId)}},{key:"handleSpaceMembers",value:function(e){var t;this.spacesMembers.has(e.id)||(this.spacesMembers.set([e.id,new B((function(e){return null==e?void 0:e.user.id}),e.members)]),null===(t=this.deferredGetters.get("spaces-members-".concat(e.id)))||void 0===t||t.resolver())}},{key:"handleSpaceRooms",value:function(e){var t;this.spacesRooms.has(e.id)||(this.spacesRooms.set([e.id,new B("id",e.summaries)]),null===(t=this.deferredGetters.get("spaces-rooms-".concat(e.id)))||void 0===t||t.resolver())}},{key:"handleSpaceMemberUpdate",value:function(e){this.spacesMembers.has(e.spaceId)&&this.spacesMembers.get(e.spaceId).set(e.member)}},{key:"handleTopicDeleted",value:function(e){var t=this.roomsTopics.get(e.roomId);t.delete(e.id),this.joinedRooms.get(e.roomId).topics=t.items}}],r&&$(t.prototype,r),n&&$(t,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();function Z(e){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Z(e)}function ee(e){return function(e){if(Array.isArray(e))return te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return te(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return te(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function te(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function re(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */re=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,o){var i=t&&t.prototype instanceof h?t:h,a=Object.create(i.prototype),s=new E(o||[]);return n(a,"_invoke",{value:k(e,r,s)}),a}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function p(){}function d(){}var y={};c(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(x([])));m&&m!==t&&r.call(m,i)&&(y=m);var b=d.prototype=h.prototype=Object.create(y);function g(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(n,i,a,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==Z(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,s)}),(function(e){o("throw",e,a,s)})):t.resolve(f).then((function(e){u.value=e,a(u)}),(function(e){return o("throw",e,a,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){o(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return R()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var s=S(a,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function E(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function x(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:R}}function R(){return{value:void 0,done:!0}}return p.prototype=d,n(b,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=c(d,s,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,c(e,s,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},g(w.prototype),c(w.prototype,a,(function(){return this})),e.AsyncIterator=w,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new w(u(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(b),c(b,s,"Generator"),c(b,i,(function(){return this})),c(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=x,E.prototype={constructor:E,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return a.type="throw",a.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),f},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:x(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function ne(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function oe(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){ne(i,n,o,a,s,"next",e)}function s(e){ne(i,n,o,a,s,"throw",e)}a(void 0)}))}}function ie(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,he(n.key),n)}}function ae(e,t){return ae=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},ae(e,t)}function se(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=le(e);if(t){var o=le(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return ce(this,r)}}function ce(e,t){if(t&&("object"===Z(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return ue(e)}function ue(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function le(e){return le=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},le(e)}function fe(e,t,r){return(t=he(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function he(e){var t=function(e,t){if("object"!==Z(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==Z(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Z(t)?t:String(t)}!function(e){e.connect="connect",e.disconnect="disconnect",e.message="message",e.error="error"}(V||(V={}));var pe,de=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ae(e,t)}(s,e);var t,r,n,o,i,a=se(s);function s(e){var t,r;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),(r=a.call(this)).options=e,fe(ue(r),"Event",V),fe(ue(r),"state",void 0),fe(ue(r),"ws",null),fe(ue(r),"sendQueue",[]),fe(ue(r),"connectingTimeoutId",void 0),fe(ue(r),"authenticated",void 0),fe(ue(r),"authenticatedResolvers",void 0),!r.options.token&&!r.options.temporaryNick)throw new Error("Token or temporary nick is required");return(null===(t=r.options.stateTracking)||void 0===t||t)&&(r.state=new X(ue(r))),r}return t=s,r=[{key:"connect",value:(i=oe(re().mark((function e(){var t,r,n=this;return re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.options.token?"token=".concat(this.options.token):"nick=".concat(this.options.temporaryNick),this.ws=new WebSocket("".concat(this.options.url,"?").concat(r)),this.ws.onclose=function(e){return n.onClose(e)},this.ws.onmessage=function(e){return n.onMessage(e)},this.connectingTimeoutId=setTimeout((function(){return n.triggerConnectionTimeout()}),null!==(t=this.options.connectingTimeoutMs)&&void 0!==t?t:1e4),this.authenticated=!1,e.abrupt("return",new Promise((function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.authenticatedResolvers=t})));case 7:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"disconnect",value:function(){var e;this.sendQueue=[],null===(e=this.ws)||void 0===e||e.close(),this.ws=null}},{key:"send",value:(o=oe(re().mark((function e(t,r){var n;return re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.ws&&![this.ws.CLOSED,this.ws.CLOSING].includes(this.ws.readyState)){e.next=2;break}throw new Error("Cannot send; close or closing connection state");case 2:if(this.ws.readyState!==this.ws.CONNECTING&&this.authenticated){e.next=5;break}return this.sendQueue.push([t,r]),e.abrupt("return");case 5:if(this.ws.readyState===this.ws.OPEN){e.next=7;break}throw new Error("Invalid websocket state=".concat(this.ws.readyState));case 7:return n=this.createEnvelope(t,r),this.ws.send(JSON.stringify(n)),e.abrupt("return",this.createPromiseFromCommandEnvelope(n));case 10:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"onMessage",value:function(e){var t=JSON.parse(e.data);if(!this.authenticated){var r="Error"!==t.type;this.authenticated=r,r?(this.authenticatedResolvers[0](),this.emit(this.Event.connect),this.sendFromQueue()):this.authenticatedResolvers[1](t.data)}this.handleIncomingEnvelope(t),this.emit(t.type,t),this.emit(this.Event.message,t)}},{key:"onClose",value:function(e){clearTimeout(this.connectingTimeoutId);var t=1e3!==e.code;t&&this.connect(),this.emit(this.Event.disconnect,t)}},{key:"sendFromQueue",value:function(){var e=this,t=0,r=function(r){var n,o=e.sendQueue[r];setTimeout((function(){return e.send.apply(e,ee(o))}),t),t+=null!==(n=e.options.awaitQueueSendDelayMs)&&void 0!==n?n:500};for(var n in this.sendQueue)r(n);this.sendQueue=[],clearTimeout(this.connectingTimeoutId)}},{key:"triggerConnectionTimeout",value:function(){this.disconnect(),this.emit(this.Event.error,new Error("Connection timeout"))}}],r&&ie(t.prototype,r),n&&ie(t,n),Object.defineProperty(t,"prototype",{writable:!1}),s}(g);function ye(e){return ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ye(e)}function ve(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ve=function(){return e};var e={},t=Object.prototype,r=t.hasOwnProperty,n=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function u(e,t,r,o){var i=t&&t.prototype instanceof h?t:h,a=Object.create(i.prototype),s=new E(o||[]);return n(a,"_invoke",{value:k(e,r,s)}),a}function l(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var f={};function h(){}function p(){}function d(){}var y={};c(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(x([])));m&&m!==t&&r.call(m,i)&&(y=m);var b=d.prototype=h.prototype=Object.create(y);function g(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function w(e,t){function o(n,i,a,s){var c=l(e[n],e,i);if("throw"!==c.type){var u=c.arg,f=u.value;return f&&"object"==ye(f)&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){o("next",e,a,s)}),(function(e){o("throw",e,a,s)})):t.resolve(f).then((function(e){u.value=e,a(u)}),(function(e){return o("throw",e,a,s)}))}s(c.arg)}var i;n(this,"_invoke",{value:function(e,r){function n(){return new t((function(t,n){o(e,r,t,n)}))}return i=i?i.then(n,n):n()}})}function k(e,t,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return R()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var s=S(a,r);if(s){if(s===f)continue;return s}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var c=l(e,t,r);if("normal"===c.type){if(n=r.done?"completed":"suspendedYield",c.arg===f)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n="completed",r.method="throw",r.arg=c.arg)}}}function S(e,t){var r=t.method,n=e.iterator[r];if(void 0===n)return t.delegate=null,"throw"===r&&e.iterator.return&&(t.method="return",t.arg=void 0,S(e,t),"throw"===t.method)||"return"!==r&&(t.method="throw",t.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,f;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,f):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,f)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function E(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function x(e){if(e){var t=e[i];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:R}}function R(){return{value:void 0,done:!0}}return p.prototype=d,n(b,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=c(d,s,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,d):(e.__proto__=d,c(e,s,"GeneratorFunction")),e.prototype=Object.create(b),e},e.awrap=function(e){return{__await:e}},g(w.prototype),c(w.prototype,a,(function(){return this})),e.AsyncIterator=w,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new w(u(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then((function(e){return e.done?e.value:a.next()}))},g(b),c(b,s,"Generator"),c(b,i,(function(){return this})),c(b,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},e.values=x,E.prototype={constructor:E,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return a.type="throw",a.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var s=r.call(i,"catchLoc"),c=r.call(i,"finallyLoc");if(s&&c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=e,a.arg=t,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),f},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),f}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;O(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:x(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},e}function me(e,t,r,n,o,i,a){try{var s=e[i](a),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,o)}function be(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){me(i,n,o,a,s,"next",e)}function s(e){me(i,n,o,a,s,"throw",e)}a(void 0)}))}}function ge(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,xe(n.key),n)}}function we(e,t){return we=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},we(e,t)}function ke(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=Oe(e);if(t){var o=Oe(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return Se(this,r)}}function Se(e,t){if(t&&("object"===ye(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return je(e)}function je(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Oe(e){return Oe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Oe(e)}function Ee(e,t,r){return(t=xe(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function xe(e){var t=function(e,t){if("object"!==ye(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!==ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ye(t)?t:String(t)}!function(e){e.message="message",e.error="error",e.destroy="destroy"}(pe||(pe={}));var Re=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&we(e,t)}(s,e);var t,r,n,o,i,a=ke(s);function s(e){var t;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,s),(t=a.call(this)).options=e,Ee(je(t),"Event",pe),Ee(je(t),"sendStack",void 0),!t.options.token&&!t.options.temporaryNick)throw new Error("Token or temporary nick is required");return t}return t=s,r=[{key:"send",value:(i=be(ve().mark((function e(t,r){var n;return ve().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=this.createEnvelope(t,r),this.sendStack.push({data:n,attempts:0,lastTimeoutId:null}),this.makeApiCall(this.sendStack.length-1),e.abrupt("return",this.createPromiseFromCommandEnvelope(n));case 4:case"end":return e.stop()}}),e,this)}))),function(e,t){return i.apply(this,arguments)})},{key:"destroy",value:function(){var e=this;this.sendStack.forEach((function(t){t.lastTimeoutId&&clearTimeout(t.lastTimeoutId),e.awaitingResponse.delete(t.data.ref)})),this.sendStack=[],this.emit(this.Event.destroy,!1)}},{key:"onMessage",value:(o=be(ve().mark((function e(t,r){var n;return ve().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.sendStack.splice(t,1),e.next=3,r.json();case 3:n=e.sent,this.handleIncomingEnvelope(n),this.emit(n.type,n),this.emit(this.Event.message,n);case 7:case"end":return e.stop()}}),e,this)}))),function(e,t){return o.apply(this,arguments)})},{key:"onError",value:function(e,t){var r,n,o=this;if(this.sendStack[e].attempts>=(null!==(r=this.options.attemptsToSend)&&void 0!==r?r:10))return this.sendStack.splice(e,1),void this.handleEnvelopeSendError(this.sendStack[e].data,new Error("Cannot send ".concat(t,"; aborting after reaching the maximum connection errors")));this.sendStack[e].lastTimeoutId=setTimeout((function(){return o.makeApiCall(e)}),null!==(n=this.options.attemptDelayMs)&&void 0!==n?n:3e3)}},{key:"makeApiCall",value:function(e){var t=this;this.sendStack[e].attempts++;var r=JSON.stringify(this.sendStack[e].data),n={"Content-Type":"application/json",Accept:"application/json"};this.options.token?n.Authorization="Bearer ".concat(this.options.token):this.options.temporaryNick&&(n.Authorization="Temp ".concat(this.options.temporaryNick)),fetch(this.options.url,{headers:n,body:r,method:"POST"}).then((function(r){return t.onMessage(e,r)})).catch((function(){return t.onError(e,r)}))}}],r&&ge(t.prototype,r),n&&ge(t,n),Object.defineProperty(t,"prototype",{writable:!1}),s}(g);return t})()));
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.PServ=e():t.PServ=e()}(self,(()=>(()=>{"use strict";var t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function n(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function o(t,e,r){return(e=i(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t){var e=function(t,e){if("object"!==r(t)||null===t)return t;var n=t[Symbol.toPrimitive];if(void 0!==n){var o=n.call(t,e||"default");if("object"!==r(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===r(e)?e:String(e)}t.r(e),t.d(e,{AuthClient:()=>zt,IndexedCollection:()=>D,IndexedObjectCollection:()=>F,ObservableIndexedCollection:()=>J,ObservableIndexedObjectCollection:()=>B,WebApiChatClient:()=>Lt,WebSocketChatClient:()=>dt});var a=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),o(this,"events",new Map),o(this,"onceEvents",new Map)}var e,r,i;return e=t,(r=[{key:"on",value:function(t,e){return this.addHandler(this.events,t,e),this}},{key:"once",value:function(t,e){return this.addHandler(this.onceEvents,t,e),this}},{key:"emit",value:function(t,e){return this.callHandlers(this.events,t,e),this.callHandlers(this.onceEvents,t,e),this.onceEvents.delete(t),this}},{key:"addHandler",value:function(t,e,r){var n,o=null!==(n=t.get(e))&&void 0!==n?n:[];o.push(r),t.set(e,o)}},{key:"callHandlers",value:function(t,e,r){var n;null===(n=t.get(e))||void 0===n||n.forEach((function(t){return t(r)}))}}])&&n(e.prototype,r),i&&n(e,i),Object.defineProperty(e,"prototype",{writable:!1}),t}();function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,g(n.key),n)}}function l(){return l="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=f(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}},l.apply(this,arguments)}function f(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=v(t)););return t}function h(t,e){return h=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},h(t,e)}function p(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=v(t);if(e){var o=v(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return d(this,r)}}function d(t,e){if(e&&("object"===c(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return y(t)}function y(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function v(t){return v=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},v(t)}function m(t,e,r){return(e=g(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function g(t){var e=function(t,e){if("object"!==c(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===c(e)?e:String(e)}var b=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&h(t,e)}(i,t);var e,r,n,o=p(i);function i(){var t;u(this,i);for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return m(y(t=o.call.apply(o,[this].concat(r))),"awaitingResponse",new Map),m(y(t),"sentCounter",0),t}return e=i,r=[{key:"on",value:function(t,e){return l(v(i.prototype),"on",this).call(this,t,e)}},{key:"once",value:function(t,e){return l(v(i.prototype),"once",this).call(this,t,e)}},{key:"createEnvelope",value:function(t,e){return{type:t,data:e,ref:(++this.sentCounter).toString()}}},{key:"createPromiseFromCommandEnvelope",value:function(t){var e=this;return new Promise((function(){for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return e.awaitingResponse.set(t.ref,n)}))}},{key:"handleIncomingEnvelope",value:function(t){if(this.awaitingResponse.has(t.ref)){var e="Error"===t.type;this.awaitingResponse.get(t.ref)[0]({data:e?null:t.data,error:e?t.data:null}),this.awaitingResponse.delete(t.ref)}}},{key:"handleEnvelopeSendError",value:function(t,e){this.awaitingResponse.has(t.ref)&&(this.awaitingResponse.get(t.ref)[0](e),this.awaitingResponse.delete(t.ref))}}],r&&s(e.prototype,r),n&&s(e,n),Object.defineProperty(e,"prototype",{writable:!1}),i}(a);function w(t){return w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},w(t)}function k(){return k="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=S(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}},k.apply(this,arguments)}function S(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=P(t)););return t}function E(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&j(t,e)}function j(t,e){return j=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},j(t,e)}function x(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=P(t);if(e){var o=P(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return O(this,r)}}function O(t,e){if(e&&("object"===w(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return L(t)}function L(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function P(t){return P=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},P(t)}function _(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=T(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return a=t.done,t},e:function(t){c=!0,i=t},f:function(){try{a||null==r.return||r.return()}finally{if(c)throw i}}}}function R(t){return function(t){if(Array.isArray(t))return I(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||T(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(t,e){if(t){if("string"==typeof t)return I(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?I(t,e):void 0}}function I(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function M(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function A(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,C(n.key),n)}}function N(t,e,r){return e&&A(t.prototype,e),r&&A(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function G(t,e,r){return(e=C(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function C(t){var e=function(t,e){if("object"!==w(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==w(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===w(e)?e:String(e)}var D=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];M(this,t),G(this,"_items",new Map),this.set.apply(this,R(e))}return N(t,[{key:"items",get:function(){return this._items}},{key:"length",get:function(){return this._items.size}},{key:"set",value:function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];for(var n=0,o=e;n<o.length;n++){var i=o[n];this._items.set(i[0],i[1])}}},{key:"get",value:function(t){return this.items.get(t)}},{key:"has",value:function(t){return this.items.has(t)}},{key:"delete",value:function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];for(var n=0,o=e;n<o.length;n++){var i=o[n];this.items.delete(i)}}},{key:"deleteAll",value:function(){this.items.clear()}},{key:"findBy",value:function(e,r){for(var n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=new t;!((n=this.items.entries().next().value).done||o&&i.length===o);)n[1][e]===r&&i.set(n);return i}},{key:"map",value:function(t){return Array.from(this.items.entries()).map((function(e){return t(e[1],e[0])}))}}]),t}(),F=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];M(this,t),this.id=e,G(this,"_items",void 0),this._items=new D,this.set.apply(this,R(r))}return N(t,[{key:"items",get:function(){return Array.from(this._items.items.values())}},{key:"length",get:function(){return this._items.length}},{key:"set",value:function(){for(var t,e=this,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];(t=this._items).set.apply(t,R(n.map((function(t){return[e.getId(t),t]}))))}},{key:"get",value:function(t){return this._items.get(t)}},{key:"getAt",value:function(t){return this.items[t]}},{key:"has",value:function(t){return this._items.has(t)}},{key:"delete",value:function(){var t;(t=this._items).delete.apply(t,arguments)}},{key:"deleteAll",value:function(){this._items.deleteAll()}},{key:"findBy",value:function(e,r){var n,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=new t(this.id),a=_(this.items);try{for(a.s();!(n=a.n()).done;){var c=n.value;if(o&&i.length===o)break;c[e]===r&&i.set(c)}}catch(t){a.e(t)}finally{a.f()}return i}},{key:"map",value:function(t){return this.items.map(t)}},{key:"getId",value:function(t){return"function"==typeof this.id?this.id(t):t[this.id]}}]),t}(),J=function(t){E(r,t);var e=x(r);function r(){var t;M(this,r);for(var n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];return G(L(t=e.call.apply(e,[this].concat(o))),"eventTarget",void 0),t}return N(r,[{key:"set",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var o;e.length&&((o=k(P(r.prototype),"set",this)).call.apply(o,[this].concat(e)),this.eventTarget.emit("change",{setItems:e.map((function(t){return t[0]}))}))}},{key:"delete",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var o;e.length&&((o=k(P(r.prototype),"delete",this)).call.apply(o,[this].concat(e)),this.eventTarget.emit("change",{deletedItems:e}))}},{key:"deleteAll",value:function(){if(this.length){var t=this._items.keys();k(P(r.prototype),"deleteAll",this).call(this),this.eventTarget.emit("change",{deletedItems:Array.from(t)})}}},{key:"on",value:function(t,e){return this.eventTarget.on(t,e),this}},{key:"once",value:function(t,e){return this.eventTarget.once(t,e),this}}]),r}(D),B=function(t){E(r,t);var e=x(r);function r(t){var n,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return M(this,r),(n=e.call(this,t,o)).id=t,G(L(n),"eventTarget",void 0),n.eventTarget=new a,n}return N(r,[{key:"set",value:function(){for(var t,e=this,n=arguments.length,o=new Array(n),i=0;i<n;i++)o[i]=arguments[i];o.length&&((t=k(P(r.prototype),"set",this)).call.apply(t,[this].concat(o)),this.eventTarget.emit("change",{setItems:o.map((function(t){return e.getId(t)}))}))}},{key:"delete",value:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];var o;e.length&&((o=k(P(r.prototype),"delete",this)).call.apply(o,[this].concat(e)),this.eventTarget.emit("change",{deletedItems:e}))}},{key:"deleteAll",value:function(){if(this.length){var t=this._items.items.keys();k(P(r.prototype),"deleteAll",this).call(this),this.eventTarget.emit("change",{deletedItems:Array.from(t)})}}},{key:"on",value:function(t,e){return this.eventTarget.on(t,e),this}},{key:"once",value:function(t,e){return this.eventTarget.once(t,e),this}}]),r}(F);function U(t){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},U(t)}function Y(t){return function(t){if(Array.isArray(t))return Q(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return Q(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return Q(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Q(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function H(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */H=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function s(t,e,r,o){var i=e&&e.prototype instanceof h?e:h,a=Object.create(i.prototype),c=new x(o||[]);return n(a,"_invoke",{value:k(t,r,c)}),a}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=s;var f={};function h(){}function p(){}function d(){}var y={};u(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(O([])));m&&m!==e&&r.call(m,i)&&(y=m);var g=d.prototype=h.prototype=Object.create(y);function b(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function w(t,e){function o(n,i,a,c){var u=l(t[n],t,i);if("throw"!==u.type){var s=u.arg,f=s.value;return f&&"object"==U(f)&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){o("next",t,a,c)}),(function(t){o("throw",t,a,c)})):e.resolve(f).then((function(t){s.value=t,a(s)}),(function(t){return o("throw",t,a,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){o(t,r,e,n)}))}return i=i?i.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return L()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=S(a,r);if(c){if(c===f)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=l(t,e,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,f;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function j(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function O(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:L}}function L(){return{value:void 0,done:!0}}return p.prototype=d,n(g,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=u(d,c,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===p||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,u(t,c,"GeneratorFunction")),t.prototype=Object.create(g),t},t.awrap=function(t){return{__await:t}},b(w.prototype),u(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(s(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},b(g),u(g,c,"Generator"),u(g,i,(function(){return this})),u(g,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},t.values=O,x.prototype={constructor:x,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(j),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type="throw",a.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),f},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),j(r),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;j(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:O(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},t}function z(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function $(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){z(i,n,o,a,c,"next",t)}function c(t){z(i,n,o,a,c,"throw",t)}a(void 0)}))}}function W(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,K(n.key),n)}}function q(t,e,r){return(e=K(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function K(t){var e=function(t,e){if("object"!==U(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==U(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===U(e)?e:String(e)}var V,X=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.client=e,q(this,"joinedSpaces",new B("id")),q(this,"joinedRooms",new B("id")),q(this,"spacesRoles",new D),q(this,"roomsTopics",new D),q(this,"topicsMessages",new D),q(this,"spacesRooms",new D),q(this,"spacesMembers",new D),q(this,"roomsMembers",new D),q(this,"deferredGetters",new D),q(this,"reconnecting",!1),q(this,"me",null),this.bind()}var e,r,n,o,i,a,c,u,s,l,f,h,p;return e=t,r=[{key:"getMe",value:(p=$(H().mark((function t(){return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.deferredGetterReadiness("session");case 2:return t.abrupt("return",this.me);case 3:case"end":return t.stop()}}),t,this)}))),function(){return p.apply(this,arguments)})},{key:"getJoinedSpaces",value:(h=$(H().mark((function t(){return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.deferredGetterReadiness("session");case 2:return t.abrupt("return",this.joinedSpaces);case 3:case"end":return t.stop()}}),t,this)}))),function(){return h.apply(this,arguments)})},{key:"getJoinedRooms",value:(f=$(H().mark((function t(){return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.deferredGetterReadiness("session");case 2:return t.abrupt("return",this.joinedRooms);case 3:case"end":return t.stop()}}),t,this)}))),function(){return f.apply(this,arguments)})},{key:"getSpaceRoles",value:(l=$(H().mark((function t(e){return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.deferredGetterReadiness("session");case 2:return t.abrupt("return",this.spacesRoles.get(e));case 3:case"end":return t.stop()}}),t,this)}))),function(t){return l.apply(this,arguments)})},{key:"getRoomTopics",value:(s=$(H().mark((function t(e){return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.deferredGetterReadiness("session");case 2:return t.abrupt("return",this.roomsTopics.get(e));case 3:case"end":return t.stop()}}),t,this)}))),function(t){return s.apply(this,arguments)})},{key:"getTopicMessages",value:(u=$(H().mark((function t(e){return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",this.topicsMessages.get(e));case 1:case"end":return t.stop()}}),t,this)}))),function(t){return u.apply(this,arguments)})},{key:"getSpaceRooms",value:(c=$(H().mark((function t(e){var r;return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r="spaces-rooms-".concat(e),this.spacesRooms.has(e)||this.deferredGetters.has(r)||(this.createDeferredGetter(r),this.client.send("GetSpaceRooms",{id:e})),t.next=4,this.deferredGetterReadiness(r);case 4:return t.abrupt("return",this.spacesRooms.get(e));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return c.apply(this,arguments)})},{key:"getSpaceMembers",value:(a=$(H().mark((function t(e){var r;return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r="spaces-members-".concat(e),this.spacesMembers.has(e)||this.deferredGetters.has(r)||(this.createDeferredGetter(r),this.client.send("GetSpaceMembers",{id:e})),t.next=4,this.deferredGetterReadiness(r);case 4:return t.abrupt("return",this.spacesMembers.get(e));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return a.apply(this,arguments)})},{key:"getRoomMembers",value:(i=$(H().mark((function t(e){var r;return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r="rooms-members-".concat(e),this.roomsMembers.has(e)||this.deferredGetters.has(r)||(this.createDeferredGetter(r),this.client.send("GetRoomMembers",{id:e})),t.next=4,this.deferredGetterReadiness(r);case 4:return t.abrupt("return",this.roomsMembers.get(e));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return i.apply(this,arguments)})},{key:"deferredGetterReadiness",value:(o=$(H().mark((function t(e){var r;return H().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(!this.deferredGetters.has(e)){t.next=3;break}return t.next=3,null===(r=this.deferredGetters.get(e))||void 0===r?void 0:r.promise;case 3:case"end":return t.stop()}}),t,this)}))),function(t){return o.apply(this,arguments)})},{key:"bind",value:function(){var t=this;this.client.on(this.client.Event.disconnect,(function(e){return t.handleDisconnect(e)})),this.client.on("NewMessage",(function(e){return t.handleNewMessage(e)})),this.client.on("NewRole",(function(e){return t.handleNewRole(e)})),this.client.on("NewRoom",(function(e){return t.handleNewRoom(e)})),this.client.on("NewTopic",(function(e){return t.handleNewTopic(e)})),this.client.on("RoleDeleted",(function(e){return t.handleRoleDeleted(e)})),this.client.on("RoomDeleted",(function(e){return t.handleRoomDeleted(e)})),this.client.on("RoomJoined",(function(e){return t.handleRoomJoined(e)})),this.client.on("RoomLeft",(function(e){return t.handleRoomLeft(e)})),this.client.on("RoomMemberJoined",(function(e){return t.handleRoomMemberJoined(e)})),this.client.on("RoomMemberLeft",(function(e){return t.handleRoomMemberLeft(e)})),this.client.on("RoomMembers",(function(e){return t.handleRoomMembers(e)})),this.client.on("Session",(function(e){return t.handleSession(e)})),this.client.on("SpaceDeleted",(function(e){return t.handleSpaceDeleted(e)})),this.client.on("SpaceJoined",(function(e){return t.handleSpaceJoined(e)})),this.client.on("SpaceLeft",(function(e){return t.handleSpaceLeft(e)})),this.client.on("SpaceMemberJoined",(function(e){return t.handleSpaceMemberJoined(e)})),this.client.on("SpaceMemberLeft",(function(e){return t.handleSpaceMemberLeft(e)})),this.client.on("SpaceMembers",(function(e){return t.handleSpaceMembers(e)})),this.client.on("SpaceRooms",(function(e){return t.handleSpaceRooms(e)})),this.client.on("SpaceMemberUpdate",(function(e){return t.handleSpaceMemberUpdate(e)})),this.client.on("TopicDeleted",(function(e){return t.handleTopicDeleted(e)}))}},{key:"createDeferredGetter",value:function(t){if(!this.deferredGetters.has(t)){var e={promise:void 0,resolver:void 0};e.promise=new Promise((function(t){return e.resolver=t})),this.deferredGetters.set([t,e])}}},{key:"handleDisconnect",value:function(t){t&&(this.reconnecting=!0)}},{key:"handleNewMessage",value:function(t){this.topicsMessages.get(t.topicId).set(t.message)}},{key:"handleNewRole",value:function(t){var e=this.spacesRoles.get(t.spaceId);e.set(t.role),this.joinedSpaces.get(t.spaceId).roles=e.items}},{key:"handleNewRoom",value:function(t){var e;null===(e=this.spacesRooms.get(t.spaceId))||void 0===e||e.set(t.summary)}},{key:"handleNewTopic",value:function(t){var e=this.roomsTopics.get(t.roomId);e.set(t.topic),this.joinedRooms.get(t.roomId).topics=e.items}},{key:"handleRoleDeleted",value:function(t){var e=this.spacesRoles.get(t.spaceId);e.delete(t.id),this.joinedSpaces.get(t.spaceId).roles=e.items}},{key:"handleRoomDeleted",value:function(t){t.spaceId&&this.spacesRooms.get(t.spaceId).delete(t.id),this.joinedRooms.delete(t.id),this.roomsMembers.delete(t.id),this.roomsTopics.delete(t.id)}},{key:"handleRoomJoined",value:function(t){this.addJoinedRooms(t.room)}},{key:"addJoinedRooms",value:function(){for(var t,e,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];(t=this.roomsTopics).set.apply(t,Y(n.map((function(t){return[t.id,new B("id",t.topics)]})))),(e=this.joinedRooms).set.apply(e,n)}},{key:"handleRoomLeft",value:function(t){this.joinedRooms.delete(t.id),this.roomsMembers.delete(t.id),this.roomsTopics.delete(t.id)}},{key:"handleRoomMemberJoined",value:function(t){this.roomsMembers.has(t.roomId)&&this.roomsMembers.get(t.roomId).set(t.member)}},{key:"handleRoomMemberLeft",value:function(t){this.roomsMembers.has(t.roomId)&&this.roomsMembers.get(t.roomId).delete(t.userId)}},{key:"handleRoomMembers",value:function(t){var e;this.roomsMembers.has(t.id)||(this.roomsMembers.set([t.id,new B((function(t){var e;return null!==(e=null==t?void 0:t.user.id)&&void 0!==e?e:t.spaceMember.user.id}),t.members)]),null===(e=this.deferredGetters.get("rooms-members-".concat(t.id)))||void 0===e||e.resolver())}},{key:"handleSession",value:function(t){var e;this.me=t.user,this.me&&!this.reconnecting||(this.reconnecting=!1,this.joinedRooms.deleteAll(),this.roomsTopics.deleteAll(),this.roomsMembers.deleteAll(),this.joinedSpaces.deleteAll(),this.spacesRoles.deleteAll(),this.spacesRooms.deleteAll(),this.spacesMembers.deleteAll(),this.addJoinedRooms.apply(this,Y(t.state.rooms)),this.addJoinedSpaces.apply(this,Y(t.state.spaces)),null===(e=this.deferredGetters.get("session"))||void 0===e||e.resolver())}},{key:"handleSpaceDeleted",value:function(t){this.spacesRoles.delete(t.id),this.spacesMembers.delete(t.id),this.spacesRooms.delete(t.id),this.joinedSpaces.delete(t.id)}},{key:"handleSpaceJoined",value:function(t){this.addJoinedSpaces(t.space)}},{key:"addJoinedSpaces",value:function(){for(var t,e,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];(t=this.spacesRoles).set.apply(t,Y(n.map((function(t){return[t.id,new B("id",t.roles)]})))),(e=this.joinedSpaces).set.apply(e,n)}},{key:"handleSpaceLeft",value:function(t){this.spacesRoles.delete(t.id),this.spacesMembers.delete(t.id),this.spacesRooms.delete(t.id),this.joinedSpaces.delete(t.id)}},{key:"handleSpaceMemberJoined",value:function(t){this.spacesMembers.has(t.spaceId)&&this.spacesMembers.get(t.spaceId).set(t.member)}},{key:"handleSpaceMemberLeft",value:function(t){this.spacesMembers.has(t.spaceId)&&this.spacesMembers.get(t.spaceId).delete(t.userId)}},{key:"handleSpaceMembers",value:function(t){var e;this.spacesMembers.has(t.id)||(this.spacesMembers.set([t.id,new B((function(t){return null==t?void 0:t.user.id}),t.members)]),null===(e=this.deferredGetters.get("spaces-members-".concat(t.id)))||void 0===e||e.resolver())}},{key:"handleSpaceRooms",value:function(t){var e;this.spacesRooms.has(t.id)||(this.spacesRooms.set([t.id,new B("id",t.summaries)]),null===(e=this.deferredGetters.get("spaces-rooms-".concat(t.id)))||void 0===e||e.resolver())}},{key:"handleSpaceMemberUpdate",value:function(t){this.spacesMembers.has(t.spaceId)&&this.spacesMembers.get(t.spaceId).set(t.member)}},{key:"handleTopicDeleted",value:function(t){var e=this.roomsTopics.get(t.roomId);e.delete(t.id),this.joinedRooms.get(t.roomId).topics=e.items}}],r&&W(e.prototype,r),n&&W(e,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();function Z(t){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Z(t)}function tt(t){return function(t){if(Array.isArray(t))return et(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return et(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return et(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function et(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function rt(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */rt=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function s(t,e,r,o){var i=e&&e.prototype instanceof h?e:h,a=Object.create(i.prototype),c=new x(o||[]);return n(a,"_invoke",{value:k(t,r,c)}),a}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=s;var f={};function h(){}function p(){}function d(){}var y={};u(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(O([])));m&&m!==e&&r.call(m,i)&&(y=m);var g=d.prototype=h.prototype=Object.create(y);function b(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function w(t,e){function o(n,i,a,c){var u=l(t[n],t,i);if("throw"!==u.type){var s=u.arg,f=s.value;return f&&"object"==Z(f)&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){o("next",t,a,c)}),(function(t){o("throw",t,a,c)})):e.resolve(f).then((function(t){s.value=t,a(s)}),(function(t){return o("throw",t,a,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){o(t,r,e,n)}))}return i=i?i.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return L()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=S(a,r);if(c){if(c===f)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=l(t,e,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,f;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function j(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function O(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:L}}function L(){return{value:void 0,done:!0}}return p.prototype=d,n(g,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=u(d,c,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===p||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,u(t,c,"GeneratorFunction")),t.prototype=Object.create(g),t},t.awrap=function(t){return{__await:t}},b(w.prototype),u(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(s(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},b(g),u(g,c,"Generator"),u(g,i,(function(){return this})),u(g,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},t.values=O,x.prototype={constructor:x,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(j),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type="throw",a.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),f},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),j(r),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;j(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:O(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},t}function nt(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function ot(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){nt(i,n,o,a,c,"next",t)}function c(t){nt(i,n,o,a,c,"throw",t)}a(void 0)}))}}function it(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,ht(n.key),n)}}function at(t,e){return at=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},at(t,e)}function ct(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=lt(t);if(e){var o=lt(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return ut(this,r)}}function ut(t,e){if(e&&("object"===Z(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return st(t)}function st(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function lt(t){return lt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},lt(t)}function ft(t,e,r){return(e=ht(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function ht(t){var e=function(t,e){if("object"!==Z(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==Z(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===Z(e)?e:String(e)}!function(t){t.connect="connect",t.disconnect="disconnect",t.message="message",t.error="error"}(V||(V={}));var pt,dt=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&at(t,e)}(c,t);var e,r,n,o,i,a=ct(c);function c(t){var e,r;if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,c),(r=a.call(this)).options=t,ft(st(r),"Event",V),ft(st(r),"state",void 0),ft(st(r),"ws",null),ft(st(r),"sendQueue",[]),ft(st(r),"connectingTimeoutId",void 0),ft(st(r),"authenticated",void 0),ft(st(r),"authenticatedResolvers",void 0),!r.options.token&&!r.options.temporaryNick)throw new Error("Token or temporary nick is required");return(null===(e=r.options.stateTracking)||void 0===e||e)&&(r.state=new X(st(r))),r}return e=c,r=[{key:"connect",value:(i=ot(rt().mark((function t(){var e,r,n=this;return rt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=this.options.token?"token=".concat(this.options.token):"nick=".concat(this.options.temporaryNick),this.ws=new WebSocket("".concat(this.options.url,"?").concat(r)),this.ws.onclose=function(t){return n.onClose(t)},this.ws.onmessage=function(t){return n.onMessage(t)},this.connectingTimeoutId=setTimeout((function(){return n.triggerConnectionTimeout()}),null!==(e=this.options.connectingTimeoutMs)&&void 0!==e?e:1e4),this.authenticated=!1,t.abrupt("return",new Promise((function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return n.authenticatedResolvers=e})));case 7:case"end":return t.stop()}}),t,this)}))),function(){return i.apply(this,arguments)})},{key:"disconnect",value:function(){var t;this.sendQueue=[],null===(t=this.ws)||void 0===t||t.close(),this.ws=null}},{key:"send",value:(o=ot(rt().mark((function t(e,r){var n;return rt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(this.ws&&![this.ws.CLOSED,this.ws.CLOSING].includes(this.ws.readyState)){t.next=2;break}throw new Error("Cannot send; close or closing connection state");case 2:if(this.ws.readyState!==this.ws.CONNECTING&&this.authenticated){t.next=5;break}return this.sendQueue.push([e,r]),t.abrupt("return");case 5:if(this.ws.readyState===this.ws.OPEN){t.next=7;break}throw new Error("Invalid websocket state=".concat(this.ws.readyState));case 7:return n=this.createEnvelope(e,r),this.ws.send(JSON.stringify(n)),t.abrupt("return",this.createPromiseFromCommandEnvelope(n));case 10:case"end":return t.stop()}}),t,this)}))),function(t,e){return o.apply(this,arguments)})},{key:"onMessage",value:function(t){var e=JSON.parse(t.data);if(!this.authenticated){var r="Error"!==e.type;this.authenticated=r,r?(this.authenticatedResolvers[0](),this.emit(this.Event.connect),this.sendFromQueue()):this.authenticatedResolvers[1](e.data)}this.handleIncomingEnvelope(e),this.emit(e.type,e),this.emit(this.Event.message,e)}},{key:"onClose",value:function(t){clearTimeout(this.connectingTimeoutId);var e=1e3!==t.code;e&&this.connect(),this.emit(this.Event.disconnect,e)}},{key:"sendFromQueue",value:function(){var t=this,e=0,r=function(r){var n,o=t.sendQueue[r];setTimeout((function(){return t.send.apply(t,tt(o))}),e),e+=null!==(n=t.options.awaitQueueSendDelayMs)&&void 0!==n?n:500};for(var n in this.sendQueue)r(n);this.sendQueue=[],clearTimeout(this.connectingTimeoutId)}},{key:"triggerConnectionTimeout",value:function(){this.disconnect(),this.emit(this.Event.error,new Error("Connection timeout"))}}],r&&it(e.prototype,r),n&&it(e,n),Object.defineProperty(e,"prototype",{writable:!1}),c}(b);function yt(t){return yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yt(t)}function vt(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */vt=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function s(t,e,r,o){var i=e&&e.prototype instanceof h?e:h,a=Object.create(i.prototype),c=new x(o||[]);return n(a,"_invoke",{value:k(t,r,c)}),a}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=s;var f={};function h(){}function p(){}function d(){}var y={};u(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(O([])));m&&m!==e&&r.call(m,i)&&(y=m);var g=d.prototype=h.prototype=Object.create(y);function b(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function w(t,e){function o(n,i,a,c){var u=l(t[n],t,i);if("throw"!==u.type){var s=u.arg,f=s.value;return f&&"object"==yt(f)&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){o("next",t,a,c)}),(function(t){o("throw",t,a,c)})):e.resolve(f).then((function(t){s.value=t,a(s)}),(function(t){return o("throw",t,a,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){o(t,r,e,n)}))}return i=i?i.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return L()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=S(a,r);if(c){if(c===f)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=l(t,e,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,f;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function j(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function O(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:L}}function L(){return{value:void 0,done:!0}}return p.prototype=d,n(g,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=u(d,c,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===p||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,u(t,c,"GeneratorFunction")),t.prototype=Object.create(g),t},t.awrap=function(t){return{__await:t}},b(w.prototype),u(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(s(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},b(g),u(g,c,"Generator"),u(g,i,(function(){return this})),u(g,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},t.values=O,x.prototype={constructor:x,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(j),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type="throw",a.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),f},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),j(r),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;j(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:O(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},t}function mt(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function gt(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){mt(i,n,o,a,c,"next",t)}function c(t){mt(i,n,o,a,c,"throw",t)}a(void 0)}))}}function bt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Ot(n.key),n)}}function wt(t,e){return wt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},wt(t,e)}function kt(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=jt(t);if(e){var o=jt(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return St(this,r)}}function St(t,e){if(e&&("object"===yt(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return Et(t)}function Et(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function jt(t){return jt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},jt(t)}function xt(t,e,r){return(e=Ot(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ot(t){var e=function(t,e){if("object"!==yt(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==yt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===yt(e)?e:String(e)}!function(t){t.message="message",t.error="error",t.destroy="destroy"}(pt||(pt={}));var Lt=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&wt(t,e)}(c,t);var e,r,n,o,i,a=kt(c);function c(t){var e;if(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,c),(e=a.call(this)).options=t,xt(Et(e),"Event",pt),xt(Et(e),"sendStack",void 0),!e.options.token&&!e.options.temporaryNick)throw new Error("Token or temporary nick is required");return e}return e=c,r=[{key:"send",value:(i=gt(vt().mark((function t(e,r){var n;return vt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=this.createEnvelope(e,r),this.sendStack.push({data:n,attempts:0,lastTimeoutId:null}),this.makeApiCall(this.sendStack.length-1),t.abrupt("return",this.createPromiseFromCommandEnvelope(n));case 4:case"end":return t.stop()}}),t,this)}))),function(t,e){return i.apply(this,arguments)})},{key:"destroy",value:function(){var t=this;this.sendStack.forEach((function(e){e.lastTimeoutId&&clearTimeout(e.lastTimeoutId),t.awaitingResponse.delete(e.data.ref)})),this.sendStack=[],this.emit(this.Event.destroy,!1)}},{key:"onMessage",value:(o=gt(vt().mark((function t(e,r){var n;return vt().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return this.sendStack.splice(e,1),t.next=3,r.json();case 3:n=t.sent,this.handleIncomingEnvelope(n),this.emit(n.type,n),this.emit(this.Event.message,n);case 7:case"end":return t.stop()}}),t,this)}))),function(t,e){return o.apply(this,arguments)})},{key:"onError",value:function(t,e){var r,n,o=this;if(this.sendStack[t].attempts>=(null!==(r=this.options.attemptsToSend)&&void 0!==r?r:10))return this.sendStack.splice(t,1),void this.handleEnvelopeSendError(this.sendStack[t].data,new Error("Cannot send ".concat(e,"; aborting after reaching the maximum connection errors")));this.sendStack[t].lastTimeoutId=setTimeout((function(){return o.makeApiCall(t)}),null!==(n=this.options.attemptDelayMs)&&void 0!==n?n:3e3)}},{key:"makeApiCall",value:function(t){var e=this;this.sendStack[t].attempts++;var r=JSON.stringify(this.sendStack[t].data),n={"Content-Type":"application/json",Accept:"application/json"};this.options.token?n.Authorization="Bearer ".concat(this.options.token):this.options.temporaryNick&&(n.Authorization="Temp ".concat(this.options.temporaryNick)),fetch(this.options.url,{headers:n,body:r,method:"POST"}).then((function(r){return e.onMessage(t,r)})).catch((function(){return e.onError(t,r)}))}}],r&&bt(e.prototype,r),n&&bt(e,n),Object.defineProperty(e,"prototype",{writable:!1}),c}(b);function Pt(t){return Pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pt(t)}function _t(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */_t=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function s(t,e,r,o){var i=e&&e.prototype instanceof h?e:h,a=Object.create(i.prototype),c=new x(o||[]);return n(a,"_invoke",{value:k(t,r,c)}),a}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=s;var f={};function h(){}function p(){}function d(){}var y={};u(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(O([])));m&&m!==e&&r.call(m,i)&&(y=m);var g=d.prototype=h.prototype=Object.create(y);function b(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function w(t,e){function o(n,i,a,c){var u=l(t[n],t,i);if("throw"!==u.type){var s=u.arg,f=s.value;return f&&"object"==Pt(f)&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){o("next",t,a,c)}),(function(t){o("throw",t,a,c)})):e.resolve(f).then((function(t){s.value=t,a(s)}),(function(t){return o("throw",t,a,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){o(t,r,e,n)}))}return i=i?i.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return L()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=S(a,r);if(c){if(c===f)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=l(t,e,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,f;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function j(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function O(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:L}}function L(){return{value:void 0,done:!0}}return p.prototype=d,n(g,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=u(d,c,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===p||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,u(t,c,"GeneratorFunction")),t.prototype=Object.create(g),t},t.awrap=function(t){return{__await:t}},b(w.prototype),u(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(s(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},b(g),u(g,c,"Generator"),u(g,i,(function(){return this})),u(g,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},t.values=O,x.prototype={constructor:x,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(j),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type="throw",a.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),f},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),j(r),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;j(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:O(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},t}function Rt(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function Tt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,It(n.key),n)}}function It(t){var e=function(t,e){if("object"!==Pt(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==Pt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===Pt(e)?e:String(e)}function Mt(t){return Mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mt(t)}function At(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */At=function(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,n=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function s(t,e,r,o){var i=e&&e.prototype instanceof h?e:h,a=Object.create(i.prototype),c=new x(o||[]);return n(a,"_invoke",{value:k(t,r,c)}),a}function l(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=s;var f={};function h(){}function p(){}function d(){}var y={};u(y,i,(function(){return this}));var v=Object.getPrototypeOf,m=v&&v(v(O([])));m&&m!==e&&r.call(m,i)&&(y=m);var g=d.prototype=h.prototype=Object.create(y);function b(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function w(t,e){function o(n,i,a,c){var u=l(t[n],t,i);if("throw"!==u.type){var s=u.arg,f=s.value;return f&&"object"==Mt(f)&&r.call(f,"__await")?e.resolve(f.__await).then((function(t){o("next",t,a,c)}),(function(t){o("throw",t,a,c)})):e.resolve(f).then((function(t){s.value=t,a(s)}),(function(t){return o("throw",t,a,c)}))}c(u.arg)}var i;n(this,"_invoke",{value:function(t,r){function n(){return new e((function(e,n){o(t,r,e,n)}))}return i=i?i.then(n,n):n()}})}function k(t,e,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return L()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=S(a,r);if(c){if(c===f)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var u=l(t,e,r);if("normal"===u.type){if(n=r.done?"completed":"suspendedYield",u.arg===f)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n="completed",r.method="throw",r.arg=u.arg)}}}function S(t,e){var r=e.method,n=t.iterator[r];if(void 0===n)return e.delegate=null,"throw"===r&&t.iterator.return&&(e.method="return",e.arg=void 0,S(t,e),"throw"===e.method)||"return"!==r&&(e.method="throw",e.arg=new TypeError("The iterator does not provide a '"+r+"' method")),f;var o=l(n,t.iterator,e.arg);if("throw"===o.type)return e.method="throw",e.arg=o.arg,e.delegate=null,f;var i=o.arg;return i?i.done?(e[t.resultName]=i.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,f):i:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,f)}function E(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function j(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function x(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(E,this),this.reset(!0)}function O(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(r.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=void 0,e.done=!0,e};return o.next=o}}return{next:L}}function L(){return{value:void 0,done:!0}}return p.prototype=d,n(g,"constructor",{value:d,configurable:!0}),n(d,"constructor",{value:p,configurable:!0}),p.displayName=u(d,c,"GeneratorFunction"),t.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===p||"GeneratorFunction"===(e.displayName||e.name))},t.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,d):(t.__proto__=d,u(t,c,"GeneratorFunction")),t.prototype=Object.create(g),t},t.awrap=function(t){return{__await:t}},b(w.prototype),u(w.prototype,a,(function(){return this})),t.AsyncIterator=w,t.async=function(e,r,n,o,i){void 0===i&&(i=Promise);var a=new w(s(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},b(g),u(g,c,"Generator"),u(g,i,(function(){return this})),u(g,"toString",(function(){return"[object Generator]"})),t.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},t.values=O,x.prototype={constructor:x,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(j),!t)for(var e in this)"t"===e.charAt(0)&&r.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=void 0)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(r,n){return a.type="throw",a.arg=t,e.next=r,n&&(e.method="next",e.arg=void 0),!!n}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return n("end");if(i.tryLoc<=this.prev){var c=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return n(i.catchLoc,!0);if(this.prev<i.finallyLoc)return n(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return n(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return n(i.finallyLoc)}}}},abrupt:function(t,e){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,f):this.complete(a)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),f},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),j(r),f}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;j(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,r){return this.delegate={iterator:O(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),f}},t}function Nt(t,e,r,n,o,i,a){try{var c=t[i](a),u=c.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function Gt(t){return function(){var e=this,r=arguments;return new Promise((function(n,o){var i=t.apply(e,r);function a(t){Nt(i,n,o,a,c,"next",t)}function c(t){Nt(i,n,o,a,c,"throw",t)}a(void 0)}))}}function Ct(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dt(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,Ht(n.key),n)}}function Ft(t,e){return Ft=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},Ft(t,e)}function Jt(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var r,n=Yt(t);if(e){var o=Yt(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return Bt(this,r)}}function Bt(t,e){if(e&&("object"===Mt(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return Ut(t)}function Ut(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function Yt(t){return Yt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},Yt(t)}function Qt(t,e,r){return(e=Ht(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function Ht(t){var e=function(t,e){if("object"!==Mt(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!==Mt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"===Mt(e)?e:String(e)}var zt=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&Ft(t,e)}(u,t);var e,r,n,o,i,a,c=Jt(u);function u(){var t;Ct(this,u);for(var e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];return Qt(Ut(t=c.call.apply(c,[this].concat(r))),"defaultUrl","https://polfan.pl/webservice"),t}return e=u,r=[{key:"deleteToken",value:(a=Gt(At().mark((function t(e){var r;return At().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.send("DELETE","auth/tokens/".concat(e));case 2:if((r=t.sent).ok){t.next=5;break}throw new Error("Cannot delete access token: ".concat(r.data.errors[0]));case 5:case"end":return t.stop()}}),t,this)}))),function(t){return a.apply(this,arguments)})},{key:"getMe",value:(i=Gt(At().mark((function t(){var e;return At().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,this.send("GET","auth/me");case 2:if(!(e=t.sent).ok){t.next=6;break}return e.data.id=e.data.id.toString(),t.abrupt("return",e.data);case 6:throw new Error("Cannot get current user account: ".concat(e.data.errors[0]));case 7:case"end":return t.stop()}}),t,this)}))),function(){return i.apply(this,arguments)})}],n=[{key:"createToken",value:(o=Gt(At().mark((function t(e,r){var n,o,i=arguments;return At().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=i.length>2&&void 0!==i[2]?i[2]:"pserv-js-client",t.next=3,new u({token:null}).send("POST","auth/tokens",{login:e,password:r,client_name:n});case 3:if(!(o=t.sent).ok){t.next=6;break}return t.abrupt("return",o.data);case 6:throw new Error("Cannot create user token: ".concat(o.data.errors[0]));case 7:case"end":return t.stop()}}),t)}))),function(t,e){return o.apply(this,arguments)})}],r&&Dt(e.prototype,r),n&&Dt(e,n),Object.defineProperty(e,"prototype",{writable:!1}),u}(function(){function t(e){var r,n,o;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.options=e,r=this,o=void 0,(n=It(n="defaultUrl"))in r?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o}var e,r,n,o,i;return e=t,r=[{key:"send",value:(o=_t().mark((function t(e,r){var n,o,i,a,c,u=arguments;return _t().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=u.length>2&&void 0!==u[2]?u[2]:void 0,o={"Content-Type":"application/json",Accept:"application/json"},this.options.token&&(o.Authorization="Bearer ".concat(this.options.token)),i=this.getUrl(r),a=void 0,n&&(["GET","DELETE"].includes(e)?i+=new URLSearchParams(n).toString():a=JSON.stringify(n)),t.next=8,fetch(i,{method:e,body:a,headers:o});case 8:return c=t.sent,t.t0=c.ok,t.t1=c.status,t.next=13,c.json();case 13:return t.t2=t.sent,t.abrupt("return",{ok:t.t0,status:t.t1,data:t.t2});case 15:case"end":return t.stop()}}),t,this)})),i=function(){var t=this,e=arguments;return new Promise((function(r,n){var i=o.apply(t,e);function a(t){Rt(i,r,n,a,c,"next",t)}function c(t){Rt(i,r,n,a,c,"throw",t)}a(void 0)}))},function(t,e){return i.apply(this,arguments)})},{key:"getUrl",value:function(t){var e;return this.removeEndingSlash(null!==(e=this.options.url)&&void 0!==e?e:this.defaultUrl)+"/"+this.removeStartingSlash(t)}},{key:"removeStartingSlash",value:function(t){return t.replace(/^\/+/,"")}},{key:"removeEndingSlash",value:function(t){return t.replace(/\/+$/,"")}}],r&&Tt(e.prototype,r),n&&Tt(e,n),Object.defineProperty(e,"prototype",{writable:!1}),t}());return e})()));
2
2
  //# sourceMappingURL=index.js.map
@@ -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/AbstractClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/WebSocketStateTracker.ts","webpack://PServ/./src/WebSocketClient.ts","webpack://PServ/./src/WebApiClient.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}\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 emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Ok,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdate,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetUserPermissions,\n SetUserPermissions,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetRolePermissions,\n GetRolePermissions,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage, Envelope,\n} from \"pserv-ts-types\";\nimport {EventTarget} from \"./EventTarget\";\n\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\n\nexport abstract class AbstractClient extends EventTarget {\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\n protected sentCounter: number = 0;\n\n public abstract send<CommandType extends keyof CommandsMap>\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\n\n public on<EventName extends keyof EventsMap>\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\n return super.on(eventName, handler);\n }\n\n public once<EventName extends keyof EventsMap>\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\n return super.once(eventName, handler);\n }\n\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\n return {\n type, data, ref: (++this.sentCounter).toString()\n };\n }\n\n protected createPromiseFromCommandEnvelope\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\n return new Promise((...args) =>\n this.awaitingResponse.set(envelope.ref as string, args));\n }\n\n protected handleIncomingEnvelope(envelope: Envelope): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n const isError = envelope.type === 'Error';\n this.awaitingResponse.get(envelope.ref)[0]({\n data: isError ? null : envelope.data,\n error: isError ? envelope.data : null,\n } as CommandResult<any>);\n this.awaitingResponse.delete(envelope.ref);\n }\n\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n this.awaitingResponse.get(envelope.ref)[0](error);\n this.awaitingResponse.delete(envelope.ref);\n }\n}\n\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\n\n/**\n * Map of incoming events.\n */\nexport type EventsMap = {\n // General Events\n Bye: Bye,\n Ok: Ok,\n Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdate: SpaceMemberUpdate,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoomDeleted,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetUserPermissions: [SetUserPermissions, EventsMap['Permissions']],\n GetUserPermissions: [GetUserPermissions, EventsMap['Permissions']],\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\n // Space commands\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\n CreateRole: [CreateRole, EventsMap['NewRole']],\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdate']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdate']],\n SetRolePermissions: [SetRolePermissions, EventsMap['Permissions']],\n GetRolePermissions: [GetRolePermissions, EventsMap['Permissions']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | null {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | null {\n return this._items.get(id);\n }\n\n public getAt(index: number): T|null {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public 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\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, items);\n this.eventTarget = new EventTarget();\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}","import {WebSocketClient} from \"./WebSocketClient\";\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"./IndexedObjectCollection\";\nimport {\n Message,\n NewMessage,\n NewRole,\n NewRoom,\n NewTopic, Role,\n RoleDeleted,\n Room,\n RoomDeleted,\n RoomJoined,\n RoomLeft, RoomMember,\n RoomMemberJoined,\n RoomMemberLeft,\n RoomMembers, RoomSummary,\n Session,\n Space,\n SpaceDeleted,\n SpaceJoined,\n SpaceLeft, SpaceMember,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMembers,\n SpaceMemberUpdate,\n SpaceRooms, Topic,\n TopicDeleted, User\n} from \"pserv-ts-types\";\n\ntype Deferred = {resolver: () => void, promise: Promise<void>};\n\nexport class WebSocketStateTracker {\n private readonly joinedSpaces = new ObservableIndexedObjectCollection<Space>('id');\n private readonly joinedRooms = new ObservableIndexedObjectCollection<Room>('id');\n private readonly spacesRoles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\n private readonly roomsTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\n private readonly topicsMessages = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\n\n // lazy loaded collections\n private readonly spacesRooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\n private readonly spacesMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\n private readonly roomsMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\n private readonly deferredGetters = new IndexedCollection<string, Deferred>();\n\n private reconnecting: boolean = false;\n private me: User = null;\n\n public constructor(private readonly client: WebSocketClient) {\n this.bind();\n }\n\n public async getMe(): Promise<User> {\n await this.deferredGetterReadiness('session');\n return this.me;\n }\n\n public async getJoinedSpaces(): Promise<ObservableIndexedObjectCollection<Space>> {\n await this.deferredGetterReadiness('session');\n return this.joinedSpaces;\n }\n\n public async getJoinedRooms(): Promise<ObservableIndexedObjectCollection<Room>> {\n await this.deferredGetterReadiness('session');\n return this.joinedRooms;\n }\n\n public async getSpaceRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | null> {\n await this.deferredGetterReadiness('session');\n return this.spacesRoles.get(spaceId);\n }\n\n public async getRoomTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | null> {\n await this.deferredGetterReadiness('session');\n return this.roomsTopics.get(roomId);\n }\n\n public async getTopicMessages(topicId: string): Promise<ObservableIndexedObjectCollection<Message> | null> {\n return this.topicsMessages.get(topicId);\n }\n\n public async getSpaceRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | null> {\n const deferredGetterName = `spaces-rooms-${spaceId}`;\n if (!this.spacesRooms.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceRooms', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesRooms.get(spaceId);\n }\n\n public async getSpaceMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | null> {\n const deferredGetterName = `spaces-members-${spaceId}`;\n if (!this.spacesMembers.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceMembers', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesMembers.get(spaceId);\n }\n\n public async getRoomMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | null> {\n const deferredGetterName = `rooms-members-${roomId}`;\n if (!this.roomsMembers.has(roomId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetRoomMembers', {id: roomId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.roomsMembers.get(roomId);\n }\n\n private async deferredGetterReadiness(name: string): Promise<void> {\n if (this.deferredGetters.has(name)) {\n await this.deferredGetters.get(name)?.promise;\n }\n }\n\n private bind(): void {\n this.client.on(this.client.Event.disconnect, ev => this.handleDisconnect(ev as any as boolean));\n this.client.on('NewMessage', ev => this.handleNewMessage(ev));\n this.client.on('NewRole', ev => this.handleNewRole(ev));\n this.client.on('NewRoom', ev => this.handleNewRoom(ev));\n this.client.on('NewTopic', ev => this.handleNewTopic(ev));\n this.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\n this.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\n this.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\n this.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\n this.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\n this.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\n this.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\n this.client.on('Session', ev => this.handleSession(ev));\n this.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\n this.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\n this.client.on('SpaceLeft', ev => this.handleSpaceLeft(ev));\n this.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\n this.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\n this.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\n this.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\n this.client.on('SpaceMemberUpdate', ev => this.handleSpaceMemberUpdate(ev));\n this.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\n }\n\n private createDeferredGetter(name: string): void {\n if (this.deferredGetters.has(name)) {\n return;\n }\n const deferred: Deferred = {promise: undefined, resolver: undefined};\n deferred.promise = new Promise(resolve => deferred.resolver = resolve);\n this.deferredGetters.set([name, deferred]);\n }\n\n private handleDisconnect(reconnect: boolean): void {\n if (reconnect) {\n this.reconnecting = true;\n return;\n }\n }\n\n private handleNewMessage(ev: NewMessage): void {\n this.topicsMessages.get(ev.topicId).set(ev.message);\n }\n\n private handleNewRole(ev: NewRole): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.set(ev.role);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleNewRoom(ev: NewRoom): void {\n this.spacesRooms.get(ev.spaceId)?.set(ev.summary);\n }\n\n private handleNewTopic(ev: NewTopic): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.set(ev.topic);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n\n private handleRoleDeleted(ev: RoleDeleted): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.delete(ev.id);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleRoomDeleted(ev: RoomDeleted): void {\n if (ev.spaceId) {\n this.spacesRooms.get(ev.spaceId).delete(ev.id);\n }\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomJoined(ev: RoomJoined): void {\n this.addJoinedRooms(ev.room);\n }\n\n private addJoinedRooms(...rooms: Room[]): void {\n this.roomsTopics.set(...rooms.map<[string, ObservableIndexedObjectCollection<Topic>]>(room => [\n room.id,\n new ObservableIndexedObjectCollection<Topic>('id', room.topics)\n ]));\n this.joinedRooms.set(...rooms);\n }\n\n private handleRoomLeft(ev: RoomLeft): void {\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).set(ev.member);\n }\n }\n\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).delete(ev.userId);\n }\n }\n\n private handleRoomMembers(ev: RoomMembers): void {\n if (!this.roomsMembers.has(ev.id)) {\n this.roomsMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(\n member => member?.user.id ?? member.spaceMember.user.id,\n ev.members,\n )\n ]);\n this.deferredGetters.get(`rooms-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSession(ev: Session): void {\n this.me = ev.user;\n\n if (this.me && !this.reconnecting) {\n return;\n }\n\n this.reconnecting = false;\n\n this.joinedRooms.deleteAll();\n this.roomsTopics.deleteAll();\n this.roomsMembers.deleteAll();\n this.joinedSpaces.deleteAll();\n this.spacesRoles.deleteAll();\n this.spacesRooms.deleteAll();\n this.spacesMembers.deleteAll();\n\n this.addJoinedRooms(...ev.state.rooms);\n this.addJoinedSpaces(...ev.state.spaces);\n\n this.deferredGetters.get('session')?.resolver();\n }\n\n private handleSpaceDeleted(ev: SpaceDeleted): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n \n private handleSpaceJoined(ev: SpaceJoined): void {\n this.addJoinedSpaces(ev.space);\n }\n\n private addJoinedSpaces(...spaces: Space[]): void {\n this.spacesRoles.set(...(spaces.map(space => [\n space.id,\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\n this.joinedSpaces.set(...spaces);\n }\n\n private handleSpaceLeft(ev: SpaceLeft): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).delete(ev.userId);\n }\n }\n\n private handleSpaceMembers(ev: SpaceMembers): void {\n if (!this.spacesMembers.has(ev.id)) {\n this.spacesMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\n ]);\n this.deferredGetters.get(`spaces-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceRooms(ev: SpaceRooms): void {\n if (!this.spacesRooms.has(ev.id)) {\n this.spacesRooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\n this.deferredGetters.get(`spaces-rooms-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceMemberUpdate(ev: SpaceMemberUpdate): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleTopicDeleted(ev: TopicDeleted): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.delete(ev.id);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractClient, CommandResult, CommandsMap} from \"./AbstractClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {WebSocketStateTracker} from \"./WebSocketStateTracker\";\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 WebSocketClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketClient extends AbstractClient implements ObservableInterface {\n public readonly Event = WebSocketClientEvent;\n public readonly state?: WebSocketStateTracker;\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 WebSocketStateTracker(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 // 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 this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope);\n this.emit(this.Event.message, envelope);\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 {AbstractClient, CommandResult, CommandsMap} from \"./AbstractClient\";\nimport {ObservableInterface} from \"./EventTarget\";\nimport {Envelope} from \"pserv-ts-types\";\n\nexport interface WebApiClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n attemptsToSend?: number;\n attemptDelayMs?: number;\n}\n\nenum WebApiClientEvent {\n message = 'message',\n error = 'error',\n destroy = 'destroy',\n}\n\nexport class WebApiClient extends AbstractClient implements ObservableInterface {\n public readonly Event = WebApiClientEvent;\n\n protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];\n\n public constructor(private readonly options: WebApiClientOptions) {\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);\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}"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","EventTarget","Map","eventName","handler","this","addHandler","events","onceEvents","event","callHandlers","map","handlers","push","set","forEach","callback","AbstractClient","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","done","length","Array","from","entry","IndexedObjectCollection","values","getId","index","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","ObservableIndexedObjectCollection","i","WebSocketClientEvent","WebSocketStateTracker","client","bind","deferredGetterReadiness","me","joinedSpaces","joinedRooms","spaceId","spacesRoles","roomId","roomsTopics","topicId","topicsMessages","deferredGetterName","spacesRooms","deferredGetters","createDeferredGetter","send","spacesMembers","roomsMembers","name","promise","Event","disconnect","ev","handleDisconnect","handleNewMessage","handleNewRole","handleNewRoom","handleNewTopic","handleRoleDeleted","handleRoomDeleted","handleRoomJoined","handleRoomLeft","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleSession","handleSpaceDeleted","handleSpaceJoined","handleSpaceLeft","handleSpaceMemberJoined","handleSpaceMemberLeft","handleSpaceMembers","handleSpaceRooms","handleSpaceMemberUpdate","handleTopicDeleted","deferred","undefined","resolver","resolve","reconnect","reconnecting","message","collection","role","roles","summary","topic","topics","addJoinedRooms","room","rooms","member","userId","user","spaceMember","members","state","addJoinedSpaces","spaces","space","summaries","WebApiClientEvent","WebSocketClient","options","token","temporaryNick","Error","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","isAuthenticated","connect","sendFromQueue","handleIncomingEnvelope","clearTimeout","code","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","splice","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","then","onError"],"sourceRoot":""}
1
+ {"version":3,"file":"index.js","mappings":"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","sources":["webpack://PServ/webpack/universalModuleDefinition","webpack://PServ/webpack/bootstrap","webpack://PServ/webpack/runtime/define property getters","webpack://PServ/webpack/runtime/hasOwnProperty shorthand","webpack://PServ/webpack/runtime/make namespace object","webpack://PServ/./src/EventTarget.ts","webpack://PServ/./src/AbstractChatClient.ts","webpack://PServ/./src/IndexedObjectCollection.ts","webpack://PServ/./src/ChatStateTracker.ts","webpack://PServ/./src/WebSocketChatClient.ts","webpack://PServ/./src/WebApiChatClient.ts","webpack://PServ/./src/AbstractRestClient.ts","webpack://PServ/./src/AuthClient.ts"],"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}\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 emit(eventName: string, event?: EventT): this {\n this.callHandlers(this.events, eventName, event);\n this.callHandlers(this.onceEvents, eventName, event);\n this.onceEvents.delete(eventName);\n return this;\n }\n\n private addHandler(map: HandlersMap<EventT>, eventName: string, handler: EventHandler<EventT>): void {\n const handlers = map.get(eventName) ?? [];\n handlers.push(handler);\n map.set(eventName, handlers);\n }\n\n private callHandlers(map: HandlersMap<EventT>, eventName: string, event: EventT): void {\n map.get(eventName)?.forEach(callback => callback(event));\n }\n}","import {\n Bye,\n GetSession,\n JoinSpace,\n Ok,\n Session,\n SpaceJoined,\n Error as ErrorType,\n SpaceLeft,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMemberUpdate,\n SpaceDeleted,\n SpaceMembers,\n SpaceRooms,\n NewRole,\n RoomDeleted,\n RoomJoined,\n RoomLeft,\n RoomMemberLeft,\n RoomMemberJoined,\n RoomMembers,\n NewRoom,\n NewTopic,\n TopicDeleted,\n NewMessage,\n GetUserPermissions,\n SetUserPermissions,\n GetComputedPermissions,\n LeaveSpace,\n CreateSpace,\n DeleteSpace,\n GetSpaceMembers,\n GetSpaceRooms,\n CreateRole,\n DeleteRole,\n AssignRole,\n DeassignRole,\n SetRolePermissions,\n GetRolePermissions,\n JoinRoom,\n LeaveRoom,\n CreateRoom,\n DeleteRoom,\n GetRoomMembers,\n CreateTopic,\n DeleteTopic,\n CreateMessage, Envelope,\n} from \"pserv-ts-types\";\nimport {EventTarget} from \"./EventTarget\";\n\ntype ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];\n\nexport abstract class AbstractChatClient extends EventTarget {\n protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();\n protected sentCounter: number = 0;\n\n public abstract send<CommandType extends keyof CommandsMap>\n (commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;\n\n public on<EventName extends keyof EventsMap>\n (eventName: EventName | string, handler: (event: EventsMap[EventName]) => void): this {\n return super.on(eventName, handler);\n }\n\n public once<EventName extends keyof EventsMap>\n (eventName: EventName, handler: (event: EventsMap[EventName]) => void): this {\n return super.once(eventName, handler);\n }\n\n protected createEnvelope<CommandT>(type: string, data: CommandT): Envelope<CommandT> {\n return {\n type, data, ref: (++this.sentCounter).toString()\n };\n }\n\n protected createPromiseFromCommandEnvelope\n <CommandT extends keyof CommandsMap>(envelope: Envelope<CommandsMap[CommandT][0]>):\n Promise<CommandResult<CommandsMap[CommandT][1]>> {\n return new Promise((...args) =>\n this.awaitingResponse.set(envelope.ref as string, args));\n }\n\n protected handleIncomingEnvelope(envelope: Envelope): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n const isError = envelope.type === 'Error';\n this.awaitingResponse.get(envelope.ref)[0]({\n data: isError ? null : envelope.data,\n error: isError ? envelope.data : null,\n } as CommandResult<any>);\n this.awaitingResponse.delete(envelope.ref);\n }\n\n protected handleEnvelopeSendError(envelope: Envelope, error: any): void {\n if (!this.awaitingResponse.has(envelope.ref)) {\n return;\n }\n this.awaitingResponse.get(envelope.ref)[0](error);\n this.awaitingResponse.delete(envelope.ref);\n }\n}\n\nexport type CommandResult<ResultT> = {data?: ResultT, error?: Error};\n\n/**\n * Map of incoming events.\n */\nexport type EventsMap = {\n // General Events\n Bye: Bye,\n Ok: Ok,\n Error: ErrorType,\n Session: Session,\n Permissions: Permissions,\n // Space events\n SpaceJoined: SpaceJoined,\n SpaceLeft: SpaceLeft,\n SpaceMemberJoined: SpaceMemberJoined,\n SpaceMemberLeft: SpaceMemberLeft,\n SpaceMemberUpdate: SpaceMemberUpdate,\n SpaceDeleted: SpaceDeleted,\n SpaceMembers: SpaceMembers,\n SpaceRooms: SpaceRooms,\n NewRole: NewRole,\n RoleDeleted: RoomDeleted,\n // Room events\n RoomJoined: RoomJoined,\n RoomLeft: RoomLeft,\n RoomMemberJoined: RoomMemberJoined,\n RoomMemberLeft: RoomMemberLeft,\n RoomMembers: RoomMembers,\n NewRoom: NewRoom,\n RoomDeleted: RoomDeleted,\n // Topic events\n NewTopic: NewTopic,\n TopicDeleted: TopicDeleted,\n NewMessage: NewMessage,\n};\n\n/**\n * Map of commands and their corresponding events.\n */\nexport type CommandsMap = {\n // General commands\n GetSession: [GetSession, EventsMap['Session']],\n SetUserPermissions: [SetUserPermissions, EventsMap['Permissions']],\n GetUserPermissions: [GetUserPermissions, EventsMap['Permissions']],\n GetComputedPermissions: [GetComputedPermissions, EventsMap['Permissions']],\n // Space commands\n JoinSpace: [JoinSpace, EventsMap['SpaceJoined']],\n LeaveSpace: [LeaveSpace, EventsMap['SpaceLeft']],\n CreateSpace: [CreateSpace, EventsMap['SpaceJoined']],\n DeleteSpace: [DeleteSpace, EventsMap['SpaceDeleted']],\n GetSpaceMembers: [GetSpaceMembers, EventsMap['SpaceMembers']],\n GetSpaceRooms: [GetSpaceRooms, EventsMap['SpaceRooms']],\n CreateRole: [CreateRole, EventsMap['NewRole']],\n DeleteRole: [DeleteRole, EventsMap['RoleDeleted']],\n AssignRole: [AssignRole, EventsMap['SpaceMemberUpdate']],\n DeassignRole: [DeassignRole, EventsMap['SpaceMemberUpdate']],\n SetRolePermissions: [SetRolePermissions, EventsMap['Permissions']],\n GetRolePermissions: [GetRolePermissions, EventsMap['Permissions']],\n // Room commands\n JoinRoom: [JoinRoom, EventsMap['RoomJoined']],\n LeaveRoom: [LeaveRoom, EventsMap['RoomLeft']],\n CreateRoom: [CreateRoom, EventsMap['NewRoom']],\n DeleteRoom: [DeleteRoom, EventsMap['RoomDeleted']],\n GetRoomMembers: [GetRoomMembers, EventsMap['RoomMembers']],\n // Topic commands\n CreateTopic: [CreateTopic, EventsMap['NewTopic']],\n DeleteTopic: [DeleteTopic, EventsMap['TopicDeleted']],\n CreateMessage: [CreateMessage, EventsMap['NewMessage']],\n}","import {EventTarget, ObservableInterface} from \"./EventTarget\";\n\nexport class IndexedCollection<KeyT, ValueT> {\n protected _items: Map<KeyT, ValueT> = new Map();\n\n public constructor(items: [key: KeyT, value: ValueT][] = []) {\n this.set(...items);\n }\n\n public get items(): Map<KeyT, ValueT> {\n return this._items;\n }\n\n public get length(): number {\n return this._items.size;\n }\n\n public set(...items: [KeyT, ValueT][]): void {\n for (const item of items) {\n this._items.set(item[0], item[1]);\n }\n }\n\n public get(id: KeyT): ValueT | null {\n return this.items.get(id);\n }\n\n public has(id: KeyT): boolean {\n return this.items.has(id);\n }\n\n public delete(...ids: KeyT[]): void {\n for (const id of ids) {\n this.items.delete(id);\n }\n }\n\n public deleteAll(): void {\n this.items.clear();\n }\n\n public findBy(field: keyof ValueT, valueToFind: any, limit: number = null): IndexedCollection<KeyT, ValueT> {\n const result = new IndexedCollection<KeyT, ValueT>();\n let item;\n while (!(item = this.items.entries().next().value).done) {\n if (limit && result.length === limit) {\n break;\n }\n if (item[1][field] === valueToFind) {\n result.set(item);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: ValueT, index: KeyT) => MapT): MapT[] {\n return Array.from(this.items.entries()).map((entry) => callback(entry[1], entry[0]));\n }\n}\n\nexport class IndexedObjectCollection<T> {\n protected _items: IndexedCollection<string, T>;\n\n public constructor(\n public readonly id: keyof T | ((item: T) => any),\n items: T[] = [],\n ) {\n this._items = new IndexedCollection<string, T>();\n this.set(...items);\n }\n\n public get items(): T[] {\n return Array.from(this._items.items.values());\n }\n\n public get length(): number {\n return this._items.length;\n }\n\n public set(...items: T[]): void {\n this._items.set(...(items.map(item => [this.getId(item), item] as [string, T])));\n }\n\n public get(id: any): T | null {\n return this._items.get(id);\n }\n\n public getAt(index: number): T|null {\n return this.items[index];\n }\n\n public has(id: any): boolean {\n return this._items.has(id);\n }\n\n public delete(...ids: any[]): void {\n this._items.delete(...ids);\n }\n\n public deleteAll(): void {\n this._items.deleteAll();\n }\n\n public findBy(field: keyof T, valueToFind: any, limit: number = null): IndexedObjectCollection<T> {\n const result = new IndexedObjectCollection<T>(this.id);\n for (const value of this.items) {\n if (limit && result.length === limit) {\n break;\n }\n if (value[field] === valueToFind) {\n result.set(value);\n }\n }\n return result;\n }\n\n public map<MapT = any>(callback: (item: T, index: number, array: T[]) => MapT): MapT[] {\n return this.items.map(callback);\n }\n\n protected getId(item: T): any {\n return typeof this.id === 'function' ? this.id(item) : item[this.id];\n }\n}\n\ninterface ObservableCollectionEvent<KeyT> {\n setItems?: KeyT[],\n deletedItems?: KeyT[],\n}\n\nexport class ObservableIndexedCollection<KeyT, ValueT> extends IndexedCollection<KeyT, ValueT> implements ObservableInterface {\n protected eventTarget: EventTarget<ObservableCollectionEvent<KeyT>>;\n\n public 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\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, items);\n this.eventTarget = new EventTarget();\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}","import {WebSocketChatClient} from \"./WebSocketChatClient\";\nimport {IndexedCollection, ObservableIndexedObjectCollection} from \"./IndexedObjectCollection\";\nimport {\n Message,\n NewMessage,\n NewRole,\n NewRoom,\n NewTopic, Role,\n RoleDeleted,\n Room,\n RoomDeleted,\n RoomJoined,\n RoomLeft, RoomMember,\n RoomMemberJoined,\n RoomMemberLeft,\n RoomMembers, RoomSummary,\n Session,\n Space,\n SpaceDeleted,\n SpaceJoined,\n SpaceLeft, SpaceMember,\n SpaceMemberJoined,\n SpaceMemberLeft,\n SpaceMembers,\n SpaceMemberUpdate,\n SpaceRooms, Topic,\n TopicDeleted, User\n} from \"pserv-ts-types\";\n\ntype Deferred = {resolver: () => void, promise: Promise<void>};\n\nexport class ChatStateTracker {\n private readonly joinedSpaces = new ObservableIndexedObjectCollection<Space>('id');\n private readonly joinedRooms = new ObservableIndexedObjectCollection<Room>('id');\n private readonly spacesRoles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();\n private readonly roomsTopics = new IndexedCollection<string, ObservableIndexedObjectCollection<Topic>>();\n // Temporary not lazy loaded; server must implement GetTopicMessages command.\n private readonly topicsMessages = new IndexedCollection<string, ObservableIndexedObjectCollection<Message>>();\n\n // lazy loaded collections\n private readonly spacesRooms = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomSummary>>();\n private readonly spacesMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<SpaceMember>>();\n private readonly roomsMembers = new IndexedCollection<string, ObservableIndexedObjectCollection<RoomMember>>();\n private readonly deferredGetters = new IndexedCollection<string, Deferred>();\n\n private reconnecting: boolean = false;\n private me: User = null;\n\n public constructor(private readonly client: WebSocketChatClient) {\n this.bind();\n }\n\n public async getMe(): Promise<User> {\n await this.deferredGetterReadiness('session');\n return this.me;\n }\n\n public async getJoinedSpaces(): Promise<ObservableIndexedObjectCollection<Space>> {\n await this.deferredGetterReadiness('session');\n return this.joinedSpaces;\n }\n\n public async getJoinedRooms(): Promise<ObservableIndexedObjectCollection<Room>> {\n await this.deferredGetterReadiness('session');\n return this.joinedRooms;\n }\n\n public async getSpaceRoles(spaceId: string): Promise<ObservableIndexedObjectCollection<Role> | null> {\n await this.deferredGetterReadiness('session');\n return this.spacesRoles.get(spaceId);\n }\n\n public async getRoomTopics(roomId: string): Promise<ObservableIndexedObjectCollection<Topic> | null> {\n await this.deferredGetterReadiness('session');\n return this.roomsTopics.get(roomId);\n }\n\n public async getTopicMessages(topicId: string): Promise<ObservableIndexedObjectCollection<Message> | null> {\n return this.topicsMessages.get(topicId);\n }\n\n public async getSpaceRooms(spaceId: string): Promise<ObservableIndexedObjectCollection<RoomSummary> | null> {\n const deferredGetterName = `spaces-rooms-${spaceId}`;\n if (!this.spacesRooms.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceRooms', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesRooms.get(spaceId);\n }\n\n public async getSpaceMembers(spaceId: string): Promise<ObservableIndexedObjectCollection<SpaceMember> | null> {\n const deferredGetterName = `spaces-members-${spaceId}`;\n if (!this.spacesMembers.has(spaceId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetSpaceMembers', {id: spaceId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.spacesMembers.get(spaceId);\n }\n\n public async getRoomMembers(roomId: string): Promise<ObservableIndexedObjectCollection<RoomMember> | null> {\n const deferredGetterName = `rooms-members-${roomId}`;\n if (!this.roomsMembers.has(roomId) && !this.deferredGetters.has(deferredGetterName)) {\n this.createDeferredGetter(deferredGetterName);\n this.client.send('GetRoomMembers', {id: roomId});\n }\n await this.deferredGetterReadiness(deferredGetterName);\n return this.roomsMembers.get(roomId);\n }\n\n private async deferredGetterReadiness(name: string): Promise<void> {\n if (this.deferredGetters.has(name)) {\n await this.deferredGetters.get(name)?.promise;\n }\n }\n\n private bind(): void {\n this.client.on(this.client.Event.disconnect, ev => this.handleDisconnect(ev as any as boolean));\n this.client.on('NewMessage', ev => this.handleNewMessage(ev));\n this.client.on('NewRole', ev => this.handleNewRole(ev));\n this.client.on('NewRoom', ev => this.handleNewRoom(ev));\n this.client.on('NewTopic', ev => this.handleNewTopic(ev));\n this.client.on('RoleDeleted', ev => this.handleRoleDeleted(ev));\n this.client.on('RoomDeleted', ev => this.handleRoomDeleted(ev));\n this.client.on('RoomJoined', ev => this.handleRoomJoined(ev));\n this.client.on('RoomLeft', ev => this.handleRoomLeft(ev));\n this.client.on('RoomMemberJoined', ev => this.handleRoomMemberJoined(ev));\n this.client.on('RoomMemberLeft', ev => this.handleRoomMemberLeft(ev));\n this.client.on('RoomMembers', ev => this.handleRoomMembers(ev));\n this.client.on('Session', ev => this.handleSession(ev));\n this.client.on('SpaceDeleted', ev => this.handleSpaceDeleted(ev));\n this.client.on('SpaceJoined', ev => this.handleSpaceJoined(ev));\n this.client.on('SpaceLeft', ev => this.handleSpaceLeft(ev));\n this.client.on('SpaceMemberJoined', ev => this.handleSpaceMemberJoined(ev));\n this.client.on('SpaceMemberLeft', ev => this.handleSpaceMemberLeft(ev));\n this.client.on('SpaceMembers', ev => this.handleSpaceMembers(ev));\n this.client.on('SpaceRooms', ev => this.handleSpaceRooms(ev));\n this.client.on('SpaceMemberUpdate', ev => this.handleSpaceMemberUpdate(ev));\n this.client.on('TopicDeleted', ev => this.handleTopicDeleted(ev));\n }\n\n private createDeferredGetter(name: string): void {\n if (this.deferredGetters.has(name)) {\n return;\n }\n const deferred: Deferred = {promise: undefined, resolver: undefined};\n deferred.promise = new Promise(resolve => deferred.resolver = resolve);\n this.deferredGetters.set([name, deferred]);\n }\n\n private handleDisconnect(reconnect: boolean): void {\n if (reconnect) {\n this.reconnecting = true;\n return;\n }\n }\n\n private handleNewMessage(ev: NewMessage): void {\n this.topicsMessages.get(ev.topicId).set(ev.message);\n }\n\n private handleNewRole(ev: NewRole): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.set(ev.role);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleNewRoom(ev: NewRoom): void {\n this.spacesRooms.get(ev.spaceId)?.set(ev.summary);\n }\n\n private handleNewTopic(ev: NewTopic): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.set(ev.topic);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n\n private handleRoleDeleted(ev: RoleDeleted): void {\n const collection = this.spacesRoles.get(ev.spaceId);\n collection.delete(ev.id);\n this.joinedSpaces.get(ev.spaceId).roles = collection.items;\n }\n\n private handleRoomDeleted(ev: RoomDeleted): void {\n if (ev.spaceId) {\n this.spacesRooms.get(ev.spaceId).delete(ev.id);\n }\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomJoined(ev: RoomJoined): void {\n this.addJoinedRooms(ev.room);\n }\n\n private addJoinedRooms(...rooms: Room[]): void {\n this.roomsTopics.set(...rooms.map<[string, ObservableIndexedObjectCollection<Topic>]>(room => [\n room.id,\n new ObservableIndexedObjectCollection<Topic>('id', room.topics)\n ]));\n this.joinedRooms.set(...rooms);\n }\n\n private handleRoomLeft(ev: RoomLeft): void {\n this.joinedRooms.delete(ev.id);\n this.roomsMembers.delete(ev.id);\n this.roomsTopics.delete(ev.id);\n }\n\n private handleRoomMemberJoined(ev: RoomMemberJoined): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).set(ev.member);\n }\n }\n\n private handleRoomMemberLeft(ev: RoomMemberLeft): void {\n if (this.roomsMembers.has(ev.roomId)) {\n this.roomsMembers.get(ev.roomId).delete(ev.userId);\n }\n }\n\n private handleRoomMembers(ev: RoomMembers): void {\n if (!this.roomsMembers.has(ev.id)) {\n this.roomsMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(\n member => member?.user.id ?? member.spaceMember.user.id,\n ev.members,\n )\n ]);\n this.deferredGetters.get(`rooms-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSession(ev: Session): void {\n this.me = ev.user;\n\n if (this.me && !this.reconnecting) {\n return;\n }\n\n this.reconnecting = false;\n\n this.joinedRooms.deleteAll();\n this.roomsTopics.deleteAll();\n this.roomsMembers.deleteAll();\n this.joinedSpaces.deleteAll();\n this.spacesRoles.deleteAll();\n this.spacesRooms.deleteAll();\n this.spacesMembers.deleteAll();\n\n this.addJoinedRooms(...ev.state.rooms);\n this.addJoinedSpaces(...ev.state.spaces);\n\n this.deferredGetters.get('session')?.resolver();\n }\n\n private handleSpaceDeleted(ev: SpaceDeleted): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n \n private handleSpaceJoined(ev: SpaceJoined): void {\n this.addJoinedSpaces(ev.space);\n }\n\n private addJoinedSpaces(...spaces: Space[]): void {\n this.spacesRoles.set(...(spaces.map(space => [\n space.id,\n new ObservableIndexedObjectCollection<Role>('id', space.roles)\n ]) as [string, ObservableIndexedObjectCollection<Role>][]));\n this.joinedSpaces.set(...spaces);\n }\n\n private handleSpaceLeft(ev: SpaceLeft): void {\n this.spacesRoles.delete(ev.id);\n this.spacesMembers.delete(ev.id);\n this.spacesRooms.delete(ev.id);\n this.joinedSpaces.delete(ev.id);\n }\n\n private handleSpaceMemberJoined(ev: SpaceMemberJoined): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleSpaceMemberLeft(ev: SpaceMemberLeft): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).delete(ev.userId);\n }\n }\n\n private handleSpaceMembers(ev: SpaceMembers): void {\n if (!this.spacesMembers.has(ev.id)) {\n this.spacesMembers.set([\n ev.id,\n new ObservableIndexedObjectCollection(member => member?.user.id, ev.members)\n ]);\n this.deferredGetters.get(`spaces-members-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceRooms(ev: SpaceRooms): void {\n if (!this.spacesRooms.has(ev.id)) {\n this.spacesRooms.set([ev.id, new ObservableIndexedObjectCollection('id', ev.summaries)]);\n this.deferredGetters.get(`spaces-rooms-${ev.id}`)?.resolver();\n }\n }\n\n private handleSpaceMemberUpdate(ev: SpaceMemberUpdate): void {\n if (this.spacesMembers.has(ev.spaceId)) {\n this.spacesMembers.get(ev.spaceId).set(ev.member);\n }\n }\n\n private handleTopicDeleted(ev: TopicDeleted): void {\n const collection = this.roomsTopics.get(ev.roomId);\n collection.delete(ev.id);\n this.joinedRooms.get(ev.roomId).topics = collection.items;\n }\n}","import {ObservableInterface} from \"./EventTarget\";\nimport {AbstractChatClient, CommandResult, CommandsMap} from \"./AbstractChatClient\";\nimport {Envelope} from \"pserv-ts-types\";\nimport {ChatStateTracker} from \"./ChatStateTracker\";\n\nexport interface WebSocketClientOptions {\n url: string;\n token?: string;\n temporaryNick?: string;\n connectingTimeoutMs?: number;\n awaitQueueSendDelayMs?: number;\n stateTracking?: boolean;\n}\n\nenum WebSocketChatClientEvent {\n connect = 'connect',\n disconnect = 'disconnect',\n message = 'message',\n error = 'error',\n}\n\nexport class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {\n public readonly Event = WebSocketChatClientEvent;\n public readonly state?: ChatStateTracker;\n\n protected ws: WebSocket|null = null;\n protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];\n protected connectingTimeoutId: any;\n protected authenticated: boolean;\n protected authenticatedResolvers: [() => void, (error: Error) => void];\n\n public constructor(private readonly options: WebSocketClientOptions) {\n super();\n if (!this.options.token && !this.options.temporaryNick) {\n throw new Error('Token or temporary nick is required');\n }\n if (this.options.stateTracking ?? true) {\n this.state = new ChatStateTracker(this);\n }\n }\n\n public async connect(): Promise<void> {\n const authString = this.options.token ? `token=${this.options.token}` : `nick=${this.options.temporaryNick}`;\n this.ws = new WebSocket(`${this.options.url}?${authString}`);\n this.ws.onclose = ev => this.onClose(ev);\n this.ws.onmessage = ev => this.onMessage(ev);\n this.connectingTimeoutId = setTimeout(\n () => this.triggerConnectionTimeout(),\n this.options.connectingTimeoutMs ?? 10000\n );\n this.authenticated = false;\n return new Promise((...args) => this.authenticatedResolvers = args);\n }\n\n public disconnect(): void {\n this.sendQueue = [];\n this.ws?.close();\n this.ws = null;\n }\n\n public async send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]):\n Promise<CommandResult<CommandsMap[CommandType][1]>> {\n if (!this.ws || [this.ws.CLOSED, this.ws.CLOSING].includes(this.ws.readyState)) {\n throw new Error('Cannot send; close or closing connection state');\n }\n\n if (this.ws.readyState === this.ws.CONNECTING || !this.authenticated) {\n this.sendQueue.push([commandType, commandData] as any);\n return;\n }\n\n if (this.ws.readyState !== this.ws.OPEN) {\n throw new Error(`Invalid websocket state=${this.ws.readyState}`);\n }\n\n const envelope = this.createEnvelope<CommandsMap[CommandType][0]>(commandType, commandData);\n this.ws.send(JSON.stringify(envelope));\n return this.createPromiseFromCommandEnvelope<CommandType>(envelope);\n }\n\n private onMessage(event: MessageEvent): void {\n const envelope: Envelope = JSON.parse(event.data);\n // 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 this.handleIncomingEnvelope(envelope);\n this.emit(envelope.type, envelope);\n this.emit(this.Event.message, envelope);\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);\n this.emit(this.Event.message, envelope);\n }\n\n protected onError(reqId: number, body: string): void {\n if (this.sendStack[reqId].attempts >= (this.options.attemptsToSend ?? 10)) {\n this.sendStack.splice(reqId, 1);\n this.handleEnvelopeSendError(this.sendStack[reqId].data, new Error(\n `Cannot send ${body}; aborting after reaching the maximum connection errors`\n ));\n return;\n }\n this.sendStack[reqId].lastTimeoutId = setTimeout(\n () => this.makeApiCall(reqId),\n this.options.attemptDelayMs ?? 3000\n );\n }\n\n protected makeApiCall(reqId: number): void {\n this.sendStack[reqId].attempts++;\n const bodyJson = JSON.stringify(this.sendStack[reqId].data);\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n } else if (this.options.temporaryNick) {\n headers.Authorization = `Temp ${this.options.temporaryNick}`;\n }\n\n fetch(this.options.url, {\n headers,\n body: bodyJson,\n method: 'POST',\n })\n .then(response => this.onMessage(reqId, response))\n .catch(() => this.onError(reqId, bodyJson));\n }\n}","export interface RestClientOptions {\n url?: string;\n token: string;\n}\n\nexport interface RestClientResponse<T> {\n ok: boolean;\n status: number;\n data: T;\n}\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n\nexport abstract class AbstractRestClient {\n protected abstract defaultUrl: string;\n\n public constructor(\n private readonly options: RestClientOptions,\n ) {}\n\n protected async send<ResponseT = any>(\n method: HttpMethod,\n uri: string,\n data: any = undefined\n ): Promise<RestClientResponse<ResponseT>> {\n const headers: any = {\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n };\n\n if (this.options.token) {\n headers.Authorization = `Bearer ${this.options.token}`;\n }\n\n let url = this.getUrl(uri);\n let body = undefined;\n\n if (data) {\n if (['GET', 'DELETE'].includes(method)) {\n url += new URLSearchParams(data).toString()\n } else {\n body = JSON.stringify(data);\n }\n }\n\n const result = await fetch(url, {method, body, headers});\n\n return {\n ok: result.ok,\n status: result.status,\n data: await result.json(),\n };\n }\n\n protected getUrl(uri: string): string {\n return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);\n }\n\n private removeStartingSlash(text: string): string {\n return text.replace(/^\\/+/, '');\n }\n\n private removeEndingSlash(text: string): string {\n return text.replace(/\\/+$/, '');\n }\n}","import {AbstractRestClient} from \"./AbstractRestClient\";\n\nexport interface TokenInterface {\n token: string,\n expiration: string\n}\n\nexport interface MyAccountInterface {\n id: string;\n nick: string;\n avatar: string;\n}\n\nexport class AuthClient extends AbstractRestClient {\n protected defaultUrl: string = 'https://polfan.pl/webservice';\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}"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","EventTarget","Map","eventName","handler","this","addHandler","events","onceEvents","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","done","length","Array","from","entry","IndexedObjectCollection","values","getId","index","deleteAll","ObservableIndexedCollection","eventTarget","emit","setItems","deletedItems","keys","on","once","ObservableIndexedObjectCollection","i","WebSocketChatClientEvent","ChatStateTracker","client","bind","deferredGetterReadiness","me","joinedSpaces","joinedRooms","spaceId","spacesRoles","roomId","roomsTopics","topicId","topicsMessages","deferredGetterName","spacesRooms","deferredGetters","createDeferredGetter","send","spacesMembers","roomsMembers","name","promise","Event","disconnect","ev","handleDisconnect","handleNewMessage","handleNewRole","handleNewRoom","handleNewTopic","handleRoleDeleted","handleRoomDeleted","handleRoomJoined","handleRoomLeft","handleRoomMemberJoined","handleRoomMemberLeft","handleRoomMembers","handleSession","handleSpaceDeleted","handleSpaceJoined","handleSpaceLeft","handleSpaceMemberJoined","handleSpaceMemberLeft","handleSpaceMembers","handleSpaceRooms","handleSpaceMemberUpdate","handleTopicDeleted","deferred","undefined","resolver","resolve","reconnect","reconnecting","message","collection","role","roles","summary","topic","topics","addJoinedRooms","room","rooms","member","userId","user","spaceMember","members","state","addJoinedSpaces","spaces","space","summaries","WebApiChatClientEvent","WebSocketChatClient","options","token","temporaryNick","Error","stateTracking","authString","ws","WebSocket","url","onclose","onClose","onmessage","onMessage","connectingTimeoutId","setTimeout","triggerConnectionTimeout","connectingTimeoutMs","authenticated","authenticatedResolvers","sendQueue","close","commandType","commandData","CLOSED","CLOSING","includes","readyState","CONNECTING","OPEN","createEnvelope","JSON","stringify","createPromiseFromCommandEnvelope","parse","isAuthenticated","connect","sendFromQueue","handleIncomingEnvelope","clearTimeout","code","lastDelay","dataIndex","awaitQueueSendDelayMs","WebApiChatClient","sendStack","attempts","lastTimeoutId","makeApiCall","destroy","reqId","response","splice","json","body","attemptsToSend","handleEnvelopeSendError","attemptDelayMs","bodyJson","headers","Accept","Authorization","fetch","method","then","onError","AuthClient","ok","errors","login","password","clientName","client_name","uri","getUrl","URLSearchParams","status","removeEndingSlash","defaultUrl","removeStartingSlash","text","replace"],"sourceRoot":""}
@@ -1,7 +1,7 @@
1
1
  import { Bye, GetSession, JoinSpace, Ok, Session, SpaceJoined, Error as ErrorType, SpaceLeft, SpaceMemberJoined, SpaceMemberLeft, SpaceMemberUpdate, SpaceDeleted, SpaceMembers, SpaceRooms, NewRole, RoomDeleted, RoomJoined, RoomLeft, RoomMemberLeft, RoomMemberJoined, RoomMembers, NewRoom, NewTopic, TopicDeleted, NewMessage, GetUserPermissions, SetUserPermissions, GetComputedPermissions, LeaveSpace, CreateSpace, DeleteSpace, GetSpaceMembers, GetSpaceRooms, CreateRole, DeleteRole, AssignRole, DeassignRole, SetRolePermissions, GetRolePermissions, JoinRoom, LeaveRoom, CreateRoom, DeleteRoom, GetRoomMembers, CreateTopic, DeleteTopic, CreateMessage, Envelope } from "pserv-ts-types";
2
2
  import { EventTarget } from "./EventTarget";
3
3
  type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
4
- export declare abstract class AbstractClient extends EventTarget {
4
+ export declare abstract class AbstractChatClient extends EventTarget {
5
5
  protected awaitingResponse: Map<string, ArrayOfPromiseResolvers>;
6
6
  protected sentCounter: number;
7
7
  abstract send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
@@ -0,0 +1,19 @@
1
+ export interface RestClientOptions {
2
+ url?: string;
3
+ token: string;
4
+ }
5
+ export interface RestClientResponse<T> {
6
+ ok: boolean;
7
+ status: number;
8
+ data: T;
9
+ }
10
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
11
+ export declare abstract class AbstractRestClient {
12
+ private readonly options;
13
+ protected abstract defaultUrl: string;
14
+ constructor(options: RestClientOptions);
15
+ protected send<ResponseT = any>(method: HttpMethod, uri: string, data?: any): Promise<RestClientResponse<ResponseT>>;
16
+ protected getUrl(uri: string): string;
17
+ private removeStartingSlash;
18
+ private removeEndingSlash;
19
+ }
@@ -0,0 +1,16 @@
1
+ import { AbstractRestClient } from "./AbstractRestClient";
2
+ export interface TokenInterface {
3
+ token: string;
4
+ expiration: string;
5
+ }
6
+ export interface MyAccountInterface {
7
+ id: string;
8
+ nick: string;
9
+ avatar: string;
10
+ }
11
+ export declare class AuthClient extends AbstractRestClient {
12
+ protected defaultUrl: string;
13
+ static createToken(login: string, password: string, clientName?: string): Promise<TokenInterface>;
14
+ deleteToken(token: string): Promise<void>;
15
+ getMe(): Promise<MyAccountInterface>;
16
+ }
@@ -1,7 +1,7 @@
1
- import { WebSocketClient } from "./WebSocketClient";
1
+ import { WebSocketChatClient } from "./WebSocketChatClient";
2
2
  import { ObservableIndexedObjectCollection } from "./IndexedObjectCollection";
3
3
  import { Message, Role, Room, RoomMember, RoomSummary, Space, SpaceMember, Topic, User } from "pserv-ts-types";
4
- export declare class WebSocketStateTracker {
4
+ export declare class ChatStateTracker {
5
5
  private readonly client;
6
6
  private readonly joinedSpaces;
7
7
  private readonly joinedRooms;
@@ -14,7 +14,7 @@ export declare class WebSocketStateTracker {
14
14
  private readonly deferredGetters;
15
15
  private reconnecting;
16
16
  private me;
17
- constructor(client: WebSocketClient);
17
+ constructor(client: WebSocketChatClient);
18
18
  getMe(): Promise<User>;
19
19
  getJoinedSpaces(): Promise<ObservableIndexedObjectCollection<Space>>;
20
20
  getJoinedRooms(): Promise<ObservableIndexedObjectCollection<Room>>;
@@ -1,26 +1,26 @@
1
- import { AbstractClient, CommandResult, CommandsMap } from "./AbstractClient";
1
+ import { AbstractChatClient, CommandResult, CommandsMap } from "./AbstractChatClient";
2
2
  import { ObservableInterface } from "./EventTarget";
3
- export interface WebApiClientOptions {
3
+ export interface WebApiChatClientOptions {
4
4
  url: string;
5
5
  token?: string;
6
6
  temporaryNick?: string;
7
7
  attemptsToSend?: number;
8
8
  attemptDelayMs?: number;
9
9
  }
10
- declare enum WebApiClientEvent {
10
+ declare enum WebApiChatClientEvent {
11
11
  message = "message",
12
12
  error = "error",
13
13
  destroy = "destroy"
14
14
  }
15
- export declare class WebApiClient extends AbstractClient implements ObservableInterface {
15
+ export declare class WebApiChatClient extends AbstractChatClient implements ObservableInterface {
16
16
  private readonly options;
17
- readonly Event: typeof WebApiClientEvent;
17
+ readonly Event: typeof WebApiChatClientEvent;
18
18
  protected sendStack: {
19
19
  data: any;
20
20
  attempts: number;
21
21
  lastTimeoutId: any;
22
22
  }[];
23
- constructor(options: WebApiClientOptions);
23
+ constructor(options: WebApiChatClientOptions);
24
24
  send<CommandType extends keyof CommandsMap>(commandType: CommandType, commandData: CommandsMap[CommandType][0]): Promise<CommandResult<CommandsMap[CommandType][1]>>;
25
25
  destroy(): void;
26
26
  protected onMessage(reqId: number, response: Response): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  import { ObservableInterface } from "./EventTarget";
2
- import { AbstractClient, CommandResult, CommandsMap } from "./AbstractClient";
3
- import { WebSocketStateTracker } from "./WebSocketStateTracker";
2
+ import { AbstractChatClient, CommandResult, CommandsMap } from "./AbstractChatClient";
3
+ import { ChatStateTracker } from "./ChatStateTracker";
4
4
  export interface WebSocketClientOptions {
5
5
  url: string;
6
6
  token?: string;
@@ -9,16 +9,16 @@ export interface WebSocketClientOptions {
9
9
  awaitQueueSendDelayMs?: number;
10
10
  stateTracking?: boolean;
11
11
  }
12
- declare enum WebSocketClientEvent {
12
+ declare enum WebSocketChatClientEvent {
13
13
  connect = "connect",
14
14
  disconnect = "disconnect",
15
15
  message = "message",
16
16
  error = "error"
17
17
  }
18
- export declare class WebSocketClient extends AbstractClient implements ObservableInterface {
18
+ export declare class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {
19
19
  private readonly options;
20
- readonly Event: typeof WebSocketClientEvent;
21
- readonly state?: WebSocketStateTracker;
20
+ readonly Event: typeof WebSocketChatClientEvent;
21
+ readonly state?: ChatStateTracker;
22
22
  protected ws: WebSocket | null;
23
23
  protected sendQueue: [commandType: keyof CommandsMap, commandData: any][];
24
24
  protected connectingTimeoutId: any;
@@ -1,4 +1,5 @@
1
- import { WebSocketClient } from "./WebSocketClient";
2
- import { WebApiClient } from "./WebApiClient";
1
+ import { WebSocketChatClient } from "./WebSocketChatClient";
2
+ import { WebApiChatClient } from "./WebApiChatClient";
3
3
  import { IndexedCollection, IndexedObjectCollection, ObservableIndexedCollection, ObservableIndexedObjectCollection } from "./IndexedObjectCollection";
4
- export { IndexedCollection, ObservableIndexedCollection, IndexedObjectCollection, ObservableIndexedObjectCollection, WebSocketClient, WebApiClient, };
4
+ import { AuthClient } from "./AuthClient";
5
+ export { IndexedCollection, ObservableIndexedCollection, IndexedObjectCollection, ObservableIndexedObjectCollection, WebSocketChatClient, WebApiChatClient, AuthClient };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "polfan-server-js-client",
3
- "version": "0.1.0",
3
+ "version": "0.1.11",
4
4
  "description": "JavaScript client library for handling communication with Polfan chat server.",
5
5
  "author": "Jarosław Żak",
6
6
  "license": "MIT",
@@ -51,7 +51,7 @@ import {EventTarget} from "./EventTarget";
51
51
 
52
52
  type ArrayOfPromiseResolvers = [(value: any) => void, (reason?: any) => void];
53
53
 
54
- export abstract class AbstractClient extends EventTarget {
54
+ export abstract class AbstractChatClient extends EventTarget {
55
55
  protected awaitingResponse: Map<string, ArrayOfPromiseResolvers> = new Map<string, ArrayOfPromiseResolvers>();
56
56
  protected sentCounter: number = 0;
57
57
 
@@ -0,0 +1,66 @@
1
+ export interface RestClientOptions {
2
+ url?: string;
3
+ token: string;
4
+ }
5
+
6
+ export interface RestClientResponse<T> {
7
+ ok: boolean;
8
+ status: number;
9
+ data: T;
10
+ }
11
+
12
+ export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
13
+
14
+ export abstract class AbstractRestClient {
15
+ protected abstract defaultUrl: string;
16
+
17
+ public constructor(
18
+ private readonly options: RestClientOptions,
19
+ ) {}
20
+
21
+ protected async send<ResponseT = any>(
22
+ method: HttpMethod,
23
+ uri: string,
24
+ data: any = undefined
25
+ ): Promise<RestClientResponse<ResponseT>> {
26
+ const headers: any = {
27
+ 'Content-Type': 'application/json',
28
+ Accept: 'application/json'
29
+ };
30
+
31
+ if (this.options.token) {
32
+ headers.Authorization = `Bearer ${this.options.token}`;
33
+ }
34
+
35
+ let url = this.getUrl(uri);
36
+ let body = undefined;
37
+
38
+ if (data) {
39
+ if (['GET', 'DELETE'].includes(method)) {
40
+ url += new URLSearchParams(data).toString()
41
+ } else {
42
+ body = JSON.stringify(data);
43
+ }
44
+ }
45
+
46
+ const result = await fetch(url, {method, body, headers});
47
+
48
+ return {
49
+ ok: result.ok,
50
+ status: result.status,
51
+ data: await result.json(),
52
+ };
53
+ }
54
+
55
+ protected getUrl(uri: string): string {
56
+ return this.removeEndingSlash(this.options.url ?? this.defaultUrl) + '/' + this.removeStartingSlash(uri);
57
+ }
58
+
59
+ private removeStartingSlash(text: string): string {
60
+ return text.replace(/^\/+/, '');
61
+ }
62
+
63
+ private removeEndingSlash(text: string): string {
64
+ return text.replace(/\/+$/, '');
65
+ }
66
+ }
@@ -0,0 +1,46 @@
1
+ import {AbstractRestClient} from "./AbstractRestClient";
2
+
3
+ export interface TokenInterface {
4
+ token: string,
5
+ expiration: string
6
+ }
7
+
8
+ export interface MyAccountInterface {
9
+ id: string;
10
+ nick: string;
11
+ avatar: string;
12
+ }
13
+
14
+ export class AuthClient extends AbstractRestClient {
15
+ protected defaultUrl: string = 'https://polfan.pl/webservice';
16
+
17
+ public static async createToken(
18
+ login: string,
19
+ password: string,
20
+ clientName: string = 'pserv-js-client'
21
+ ): Promise<TokenInterface> {
22
+ const response = await new AuthClient({token: null}).send('POST', 'auth/tokens', {
23
+ login, password, client_name: clientName
24
+ });
25
+ if (response.ok) {
26
+ return response.data;
27
+ }
28
+ throw new Error(`Cannot create user token: ${response.data.errors[0]}`);
29
+ }
30
+
31
+ public async deleteToken(token: string): Promise<void> {
32
+ const response = await this.send('DELETE', `auth/tokens/${token}`);
33
+ if (!response.ok) {
34
+ throw new Error(`Cannot delete access token: ${response.data.errors[0]}`);
35
+ }
36
+ }
37
+
38
+ public async getMe(): Promise<MyAccountInterface> {
39
+ const response = await this.send('GET', 'auth/me');
40
+ if (response.ok) {
41
+ response.data.id = response.data.id.toString();
42
+ return response.data;
43
+ }
44
+ throw new Error(`Cannot get current user account: ${response.data.errors[0]}`);
45
+ }
46
+ }
@@ -1,4 +1,4 @@
1
- import {WebSocketClient} from "./WebSocketClient";
1
+ import {WebSocketChatClient} from "./WebSocketChatClient";
2
2
  import {IndexedCollection, ObservableIndexedObjectCollection} from "./IndexedObjectCollection";
3
3
  import {
4
4
  Message,
@@ -29,7 +29,7 @@ import {
29
29
 
30
30
  type Deferred = {resolver: () => void, promise: Promise<void>};
31
31
 
32
- export class WebSocketStateTracker {
32
+ export class ChatStateTracker {
33
33
  private readonly joinedSpaces = new ObservableIndexedObjectCollection<Space>('id');
34
34
  private readonly joinedRooms = new ObservableIndexedObjectCollection<Room>('id');
35
35
  private readonly spacesRoles = new IndexedCollection<string, ObservableIndexedObjectCollection<Role>>();
@@ -46,7 +46,7 @@ export class WebSocketStateTracker {
46
46
  private reconnecting: boolean = false;
47
47
  private me: User = null;
48
48
 
49
- public constructor(private readonly client: WebSocketClient) {
49
+ public constructor(private readonly client: WebSocketChatClient) {
50
50
  this.bind();
51
51
  }
52
52
 
@@ -1,8 +1,8 @@
1
- import {AbstractClient, CommandResult, CommandsMap} from "./AbstractClient";
1
+ import {AbstractChatClient, CommandResult, CommandsMap} from "./AbstractChatClient";
2
2
  import {ObservableInterface} from "./EventTarget";
3
3
  import {Envelope} from "pserv-ts-types";
4
4
 
5
- export interface WebApiClientOptions {
5
+ export interface WebApiChatClientOptions {
6
6
  url: string;
7
7
  token?: string;
8
8
  temporaryNick?: string;
@@ -10,18 +10,18 @@ export interface WebApiClientOptions {
10
10
  attemptDelayMs?: number;
11
11
  }
12
12
 
13
- enum WebApiClientEvent {
13
+ enum WebApiChatClientEvent {
14
14
  message = 'message',
15
15
  error = 'error',
16
16
  destroy = 'destroy',
17
17
  }
18
18
 
19
- export class WebApiClient extends AbstractClient implements ObservableInterface {
20
- public readonly Event = WebApiClientEvent;
19
+ export class WebApiChatClient extends AbstractChatClient implements ObservableInterface {
20
+ public readonly Event = WebApiChatClientEvent;
21
21
 
22
22
  protected sendStack: {data: any, attempts: number, lastTimeoutId: any}[];
23
23
 
24
- public constructor(private readonly options: WebApiClientOptions) {
24
+ public constructor(private readonly options: WebApiChatClientOptions) {
25
25
  super();
26
26
  if (!this.options.token && !this.options.temporaryNick) {
27
27
  throw new Error('Token or temporary nick is required');
@@ -1,7 +1,7 @@
1
1
  import {ObservableInterface} from "./EventTarget";
2
- import {AbstractClient, CommandResult, CommandsMap} from "./AbstractClient";
2
+ import {AbstractChatClient, CommandResult, CommandsMap} from "./AbstractChatClient";
3
3
  import {Envelope} from "pserv-ts-types";
4
- import {WebSocketStateTracker} from "./WebSocketStateTracker";
4
+ import {ChatStateTracker} from "./ChatStateTracker";
5
5
 
6
6
  export interface WebSocketClientOptions {
7
7
  url: string;
@@ -12,16 +12,16 @@ export interface WebSocketClientOptions {
12
12
  stateTracking?: boolean;
13
13
  }
14
14
 
15
- enum WebSocketClientEvent {
15
+ enum WebSocketChatClientEvent {
16
16
  connect = 'connect',
17
17
  disconnect = 'disconnect',
18
18
  message = 'message',
19
19
  error = 'error',
20
20
  }
21
21
 
22
- export class WebSocketClient extends AbstractClient implements ObservableInterface {
23
- public readonly Event = WebSocketClientEvent;
24
- public readonly state?: WebSocketStateTracker;
22
+ export class WebSocketChatClient extends AbstractChatClient implements ObservableInterface {
23
+ public readonly Event = WebSocketChatClientEvent;
24
+ public readonly state?: ChatStateTracker;
25
25
 
26
26
  protected ws: WebSocket|null = null;
27
27
  protected sendQueue: [commandType: keyof CommandsMap, commandData: any][] = [];
@@ -35,7 +35,7 @@ export class WebSocketClient extends AbstractClient implements ObservableInterfa
35
35
  throw new Error('Token or temporary nick is required');
36
36
  }
37
37
  if (this.options.stateTracking ?? true) {
38
- this.state = new WebSocketStateTracker(this);
38
+ this.state = new ChatStateTracker(this);
39
39
  }
40
40
  }
41
41
 
package/src/index.ts CHANGED
@@ -1,14 +1,16 @@
1
- import {WebSocketClient} from "./WebSocketClient";
2
- import {WebApiClient} from "./WebApiClient";
1
+ import {WebSocketChatClient} from "./WebSocketChatClient";
2
+ import {WebApiChatClient} from "./WebApiChatClient";
3
3
  import {
4
4
  IndexedCollection,
5
5
  IndexedObjectCollection,
6
6
  ObservableIndexedCollection,
7
7
  ObservableIndexedObjectCollection
8
8
  } from "./IndexedObjectCollection";
9
+ import { AuthClient } from "./AuthClient";
9
10
 
10
11
  export {
11
12
  IndexedCollection, ObservableIndexedCollection,
12
13
  IndexedObjectCollection, ObservableIndexedObjectCollection,
13
- WebSocketClient, WebApiClient,
14
+ WebSocketChatClient, WebApiChatClient,
15
+ AuthClient
14
16
  };