@clairejs/client 2.2.4 → 2.2.5
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/README.md +4 -0
- package/dist/api/AbstractHttpClient.d.ts +2 -2
- package/dist/api/AbstractHttpClient.d.ts.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/routing/RouterConfig.d.ts +1 -0
- package/dist/routing/RouterConfig.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/routing/AbstractCrudRouter.d.ts +0 -17
- package/dist/routing/AbstractCrudRouter.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -13,8 +13,8 @@ export declare abstract class AbstractHttpClient {
|
|
|
13
13
|
protected resolveResult(apiCall: () => Promise<any>): Promise<any>;
|
|
14
14
|
refreshToken(originalErr: any): Promise<void>;
|
|
15
15
|
abstract get<T>(url: string, headers?: any): Promise<T>;
|
|
16
|
-
abstract post<T, R>(url: string, body: R, headers?: any): Promise<T>;
|
|
17
|
-
abstract put<T, R>(url: string, body: R, headers?: any): Promise<T>;
|
|
16
|
+
abstract post<T extends any, R extends any>(url: string, body: R, headers?: any): Promise<T>;
|
|
17
|
+
abstract put<T extends any, R extends any>(url: string, body: R, headers?: any): Promise<T>;
|
|
18
18
|
abstract delete<T>(url: string, headers?: any): Promise<T>;
|
|
19
19
|
}
|
|
20
20
|
//# sourceMappingURL=AbstractHttpClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractHttpClient.d.ts","sourceRoot":"","sources":["../../src/api/AbstractHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAU,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,8BAAsB,kBAAkB;IAMxB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc;IAAE,QAAQ,CAAC,YAAY,EAAE,oBAAoB;IALvH,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAEX;gBAEY,YAAY,EAAE,MAAM,EAAW,MAAM,EAAE,cAAc,EAAW,YAAY,EAAE,oBAAoB;IAEvH,SAAS,CAAC,QAAQ,CAAC,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC;IAElE,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;cAIzB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;cAK7C,aAAa,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAalE,YAAY,CAAC,WAAW,EAAE,GAAG;IA6BnC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"AbstractHttpClient.d.ts","sourceRoot":"","sources":["../../src/api/AbstractHttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAU,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,8BAAsB,kBAAkB;IAMxB,QAAQ,CAAC,YAAY,EAAE,MAAM;IAAE,QAAQ,CAAC,MAAM,EAAE,cAAc;IAAE,QAAQ,CAAC,YAAY,EAAE,oBAAoB;IALvH,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAEX;gBAEY,YAAY,EAAE,MAAM,EAAW,MAAM,EAAE,cAAc,EAAW,YAAY,EAAE,oBAAoB;IAEvH,SAAS,CAAC,QAAQ,CAAC,uBAAuB,IAAI,OAAO,CAAC,WAAW,CAAC;IAElE,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;cAIzB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;cAK7C,aAAa,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAalE,YAAY,CAAC,WAAW,EAAE,GAAG;IA6BnC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAC5F,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAC3F,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;CAC7D"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ import { DefaultClientSocketManager } from "./socket/DefaultClientSocketManager"
|
|
|
8
8
|
import { AbstractStorage } from "./system/AbstractStorage";
|
|
9
9
|
import { ClientGlobalStore } from "./system/GlobalClientStore";
|
|
10
10
|
import { Translator } from "./translation/Translator";
|
|
11
|
-
import { AbstractCrudRouter } from "./routing/AbstractCrudRouter";
|
|
12
11
|
import { AbstractErrorHandler } from "./routing/AbstractErrorHandler";
|
|
13
12
|
import { AbstractRouter } from "./routing/AbstractRouter";
|
|
14
13
|
import { AbstractViewMiddleware } from "./routing/AbstractViewMiddleware";
|
|
@@ -18,5 +17,5 @@ import { RouterConfig } from "./routing/RouterConfig";
|
|
|
18
17
|
import { ComponentInfo } from "./routing/ComponentInfo";
|
|
19
18
|
import { AbstractTokenManager } from "./api/AbstractTokenManager";
|
|
20
19
|
import { IWebSocket } from "./socket/IWebSocket";
|
|
21
|
-
export { ClaireClient, AbstractStorage, AbstractHttpClient, AxiosApiClient, ClientGlobalStore, AbstractTokenManager, Translator, Translation, IWebSocket, IClientSocket, DefaultClientSocketManager, AbstractClientSocketManager,
|
|
20
|
+
export { ClaireClient, AbstractStorage, AbstractHttpClient, AxiosApiClient, ClientGlobalStore, AbstractTokenManager, Translator, Translation, IWebSocket, IClientSocket, DefaultClientSocketManager, AbstractClientSocketManager, AbstractErrorHandler, AbstractRouter, AbstractViewMiddleware, ComponentInfo, RouterConfig, UrlInfo, ViewRoute, };
|
|
22
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAEH,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EAEpB,UAAU,EACV,WAAW,EAEX,UAAU,EACV,aAAa,EACb,0BAA0B,EAC1B,2BAA2B,EAE3B,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,SAAS,GACZ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(e,t){e.exports=require("@clairejs/core")},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Translation=void 0;const s=n(0);class LocaleTranslator{constructor(){this.translationRegex=/{(\w+)}/g,this.localeResolver=()=>s.getGlobalStore().systemLanguage,this.keyResolver=e=>`__${e}__`}populateTranslationObject(e){const t=this,n=s.getGlobalStore().translationMap,r=Object.keys(n||{}),resolveTranslation=(e,n)=>{const s=n.reduce(((e,t)=>(Object.keys(t).forEach((t=>{e.includes(t)||e.push(t)})),e)),[]);for(const i of s){n.every((e=>"object"==typeof e[i]))?(e[i]={},resolveTranslation(e[i],n.map((e=>e[i])))):(e[this.keyResolver(i)]=n.map((e=>e[i])),Object.defineProperty(e,i,{value:function(e){const n=t.localeResolver();if(!n)return"";let s=this[t.keyResolver(i)][r.indexOf(n)];if(e){let n;do{n=t.translationRegex.exec(s),n&&(s=`${s.substring(0,n.index)}${e[n[1]]||""}${s.substring(n.index+n[0].length)}`)}while(n)}return s},configurable:!1,writable:!1}))}};resolveTranslation(e,Object.values(n||{}))}}t.Translation=class Translation{constructor(e){s.getGlobalStore().translationMap=e,this.buildTranslation()}buildTranslation(){return r(this,void 0,void 0,(function*(){(new LocaleTranslator).populateTranslationObject(this)}))}}},function(e,t,n){"use strict";var r=this&&this.__decorate||function(e,t,n,r){var s,i=arguments.length,o=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,r);else for(var c=e.length-1;c>=0;c--)(s=e[c])&&(o=(i<3?s(o):i>3?s(t,n,o):s(t,n))||o);return i>3&&o&&Object.defineProperty(t,n,o),o},s=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},i=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Translator=void 0;const o=n(0),c=n(9),a=n(3);let l=class Translator{constructor(e){this.storage=e}init(){return i(this,void 0,void 0,(function*(){const e=yield this.getLanguages();if(e.length){let t=yield this.storage.getItem(c.SYSTEM_LANGUAGE);t&&e.includes(t)||(t=e[0],yield this.storage.setItem(c.SYSTEM_LANGUAGE,t)),o.getGlobalStore().systemLanguage=t}}))}exit(){}getCurrentLanguage(){return i(this,void 0,void 0,(function*(){return o.getGlobalStore().systemLanguage}))}setCurrentLanguage(e){return i(this,void 0,void 0,(function*(){o.getGlobalStore().systemLanguage=e,yield this.storage.setItem(c.SYSTEM_LANGUAGE,e)}))}getLanguages(){return i(this,void 0,void 0,(function*(){return Object.keys(o.getGlobalStore().translationMap||{})}))}};l=r([o.Initable(),s("design:paramtypes",[a.AbstractStorage])],l),t.Translator=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractStorage=void 0;t.AbstractStorage=class AbstractStorage{}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpClient=void 0;const s=n(0);t.AbstractHttpClient=class AbstractHttpClient{constructor(e,t,n){this.apiServerUrl=e,this.logger=t,this.tokenManager=n,this.refreshing=!1,this.refreshQueue=[]}resolveUrl(e){return this.apiServerUrl+e}resolveHeaders(e){return r(this,void 0,void 0,(function*(){const t=yield this.tokenManager.getAccessToken();return{headers:Object.assign({Authorization:(null==t?void 0:t.token)||""},e)}}))}resolveResult(e){var t,n;return r(this,void 0,void 0,(function*(){try{return(yield e()).data}catch(r){if((null===(n=null===(t=r.response)||void 0===t?void 0:t.data)||void 0===n?void 0:n.name)!==s.Errors.SESSION_EXPIRED)throw r;return yield this.refreshToken(r),(yield e()).data}}))}refreshToken(e){return r(this,void 0,void 0,(function*(){if(this.refreshing)yield new Promise((e=>{this.refreshQueue.push({resolver:e})}));else{const t=yield this.tokenManager.getAccessToken();if(!t||!t.refreshToken)throw e;this.refreshing=!0;try{const e=yield this.getRefreshedAccessToken();yield this.tokenManager.setAccessToken(e),this.logger.debug("Access token was refreshed"),this.refreshing=!1;for(const e of this.refreshQueue)e.resolver()}catch(t){throw this.logger.debug(t),e}}}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractClientSocketManager=void 0;t.AbstractClientSocketManager=class AbstractClientSocketManager{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractRouter=void 0;t.AbstractRouter=class AbstractRouter{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractViewMiddleware=t.AbstractRouter=t.AbstractErrorHandler=t.AbstractCrudRouter=t.AbstractClientSocketManager=t.DefaultClientSocketManager=t.Translation=t.Translator=t.AbstractTokenManager=t.AxiosApiClient=t.AbstractHttpClient=t.AbstractStorage=t.ClaireClient=void 0;const r=n(8);Object.defineProperty(t,"ClaireClient",{enumerable:!0,get:function(){return r.ClaireClient}});const s=n(10);Object.defineProperty(t,"AxiosApiClient",{enumerable:!0,get:function(){return s.AxiosApiClient}});const i=n(4);Object.defineProperty(t,"AbstractHttpClient",{enumerable:!0,get:function(){return i.AbstractHttpClient}});const o=n(1);Object.defineProperty(t,"Translation",{enumerable:!0,get:function(){return o.Translation}});const c=n(5);Object.defineProperty(t,"AbstractClientSocketManager",{enumerable:!0,get:function(){return c.AbstractClientSocketManager}});const a=n(12);Object.defineProperty(t,"DefaultClientSocketManager",{enumerable:!0,get:function(){return a.DefaultClientSocketManager}});const l=n(3);Object.defineProperty(t,"AbstractStorage",{enumerable:!0,get:function(){return l.AbstractStorage}});const u=n(2);Object.defineProperty(t,"Translator",{enumerable:!0,get:function(){return u.Translator}});const d=n(15);Object.defineProperty(t,"AbstractCrudRouter",{enumerable:!0,get:function(){return d.AbstractCrudRouter}});const h=n(16);Object.defineProperty(t,"AbstractErrorHandler",{enumerable:!0,get:function(){return h.AbstractErrorHandler}});const f=n(6);Object.defineProperty(t,"AbstractRouter",{enumerable:!0,get:function(){return f.AbstractRouter}});const b=n(17);Object.defineProperty(t,"AbstractViewMiddleware",{enumerable:!0,get:function(){return b.AbstractViewMiddleware}});const g=n(18);Object.defineProperty(t,"AbstractTokenManager",{enumerable:!0,get:function(){return g.AbstractTokenManager}})},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ClaireClient=void 0;const s=n(0),i=n(1),o=n(2);class ClaireClient extends s.ClaireApp{constructor(){super(),s.getServiceProvider().register(o.Translator)}init(){const e=Object.create(null,{init:{get:()=>super.init}});return r(this,void 0,void 0,(function*(){yield e.init.call(this);const t=s.getServiceProvider().getInjector();t.resolve(i.Translation),t.resolve(o.Translator),yield t.initInstances()}))}}t.ClaireClient=ClaireClient},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SYSTEM_LANGUAGE=void 0,t.SYSTEM_LANGUAGE="__SYSTEM_LANGUAGE__"},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AxiosApiClient=void 0;const i=n(0),o=s(n(11)),c=n(4);class AxiosApiClient extends c.AbstractHttpClient{constructor(e,t,n){super(e,t,n),this.apiServerUrl=e,this.logger=t,this.tokenManager=n}getRefreshedAccessToken(){throw new i.ClaireError(i.Errors.NOT_SUPPORTED,"Refresh token not supported in default implementation")}get(e,t){return r(this,void 0,void 0,(function*(){const n=this.resolveUrl(e);return this.logger.debug("[GET] ",n),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.get(n,yield this.resolveHeaders(t))}))))}))}post(e,t,n){return r(this,void 0,void 0,(function*(){const s=this.resolveUrl(e);return this.logger.debug("[POST] ",s),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.post(this.resolveUrl(e),t,yield this.resolveHeaders(n))}))))}))}put(e,t,n){return r(this,void 0,void 0,(function*(){const s=this.resolveUrl(e);return this.logger.debug("[PUT] ",s),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.put(this.resolveUrl(e),t,yield this.resolveHeaders(n))}))))}))}delete(e,t){return r(this,void 0,void 0,(function*(){const n=this.resolveUrl(e);return this.logger.debug("[DEL] ",n),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.delete(this.resolveUrl(e),yield this.resolveHeaders(t))}))))}))}}t.AxiosApiClient=AxiosApiClient},function(e,t){e.exports=require("axios")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultClientSocketManager=void 0;const r=n(0),s=n(13),i=n(5),o=n(14);class DefaultClientSocketManager extends i.AbstractClientSocketManager{constructor(e,t,n,r,s){super(),this.wsProvider=e,this.tokenManager=t,this.httpClient=n,this.logger=r,this.config=s,this.allSockets=[],this.allChannels=[],this.accumulatedPing=0,this.retryDelay=0}create(e){const t=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in connectionObservable";t.connectionSubscriber=e})),n=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in messageReceiveingObservable";t.messageReceivingSubscriber=e})),i=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in messageSendingObservable";t.messageSendingSubscriber=e})),c=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in channelsObservable";t.channelsSubscriber=e})),a=new o.ClientSocket(n,t,(e=>{const t=this.getSocketInfo(a);if(!t||!t.messageSendingSubscriber)throw"Cannot resolve socket info in messageSendingSubscriber resolver";return t.messageSendingSubscriber}),(e=>{const t=this.getSocketInfo(e);if(!t)throw"Cannot resolve socket info in connection request";if(t.connected)return;if(!t.channelsObservable)throw"Channels observer not available";if(!t.messageSendingObservable)throw"Message sending observable not available";const n=t.channelsObservable.subscribe({next:e=>{if(!t.connected&&t.channels.every((t=>e.includes(t)))){if(t.connected=!0,!t.connectionSubscriber)throw"Connection subscriber not available";t.connectionSubscriber.next(t.connected)}else if(t.connected&&t.channels.some((t=>!e.includes(t)))){if(t.connected=!1,!t.connectionSubscriber)throw"Disconnection subscriber not available";t.connectionSubscriber.next(t.connected)}}});t.subscriptions.push(n),t.messageSendingObservable.subscribe({next:e=>{if(!t.connected)throw"Socket not connected";this.sendToChannel(r.SocketChannels.MESSAGE_CHANNEL,e)}});for(const e of t.channels){let t=this.allChannels.find((t=>t.channel===e));t||(t={channel:e,requested:!1,connected:!1},this.allChannels.push(t)),t.requested=!0}this.checkChannelRequests()}),(e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in disconnection request";t.subscriptions.forEach((e=>e.unsubscribe()));const n=this.allSockets.indexOf(t);n>=0&&this.allSockets.splice(n,1)}));return this.allSockets.push({socket:a,channels:e,messageSendingObservable:i,channelsObservable:c,subscriptions:[]}),a}forceDisconnect(){this.intendedDisconnection=!0,this.socket&&(this.socket.close(),this.socket=void 0),this.retryTimeoutId&&clearTimeout(this.retryTimeoutId)}forceReconnect(){var e;this.intendedDisconnection=!1,this.socketConnected?null===(e=this.socket)||void 0===e||e.close():(this.retryDelay=0,void 0===this.socket&&(this.retryTimeoutId&&(clearTimeout(this.retryTimeoutId),this.retryTimeoutId=void 0),this.connect()))}connect(){this.socket=this.wsProvider(),this.socket.onopen((()=>{this.pingIntervalId&&clearInterval(this.pingIntervalId),this.tokenManager.getAccessToken().then((e=>{this.sendToChannel(r.SocketChannels.AUTHENTICATION_CHANNEL,{authorizationData:null==e?void 0:e.token})})).catch((e=>{this.logger.error(e),this.forceReconnect()}))})),this.socket.onmessage((e=>{var t,n,s;if(!e)return;const{channel:i,message:o}=JSON.parse(e);switch(this.logger.debug("Receive",i,o),i){case r.SocketChannels.PING_PONG_CHANNEL:return void(this.accumulatedPing=0);case r.SocketChannels.AUTHENTICATION_CHANNEL:return this.logger.debug("Socket connection established",o),this.socketConnected=!0,this.pingIntervalId&&clearInterval(this.pingIntervalId),this.accumulatedPing=0,this.pingIntervalId=setInterval((()=>{var e,t,n;this.accumulatedPing+=1,this.accumulatedPing>((null===(t=null===(e=this.config)||void 0===e?void 0:e.keepAlive)||void 0===t?void 0:t.deadThreashold)||3)?(this.intendedDisconnection=!1,null===(n=this.socket)||void 0===n||n.close()):this.sendToChannel(r.SocketChannels.PING_PONG_CHANNEL)}),(null===(n=null===(t=this.config)||void 0===t?void 0:t.keepAlive)||void 0===n?void 0:n.pingIntervalMs)||1e4),this.intendedDisconnection=!1,this.retryTimeoutId&&(clearTimeout(this.retryTimeoutId),this.retryTimeoutId=void 0),void this.checkChannelRequests();case r.SocketChannels.CHANNEL_JOIN_REQUEST:{const e=o;if(!e.success)return void this.logger.error(e.error);e.channels.forEach((e=>{const t=this.allChannels.find((t=>t.channel===e));t&&(t.connected=!0,t.requested=!1)})),this.notifyCurrentChannels()}return;case r.SocketChannels.CHANNEL_LEAVE_REQUEST:{const e=o;if(!e.success)return void this.logger.error(e.error);e.channels.forEach((e=>{const t=this.allChannels.find((t=>t.channel===e));t&&(t.connected=!1)})),this.notifyCurrentChannels()}return;case r.SocketChannels.MESSAGE_CHANNEL:{const e=o;this.allSockets.forEach((t=>{var n;t.channels.includes(e.channel)&&(null===(n=t.messageReceivingSubscriber)||void 0===n||n.next(e))}))}return;case r.SocketChannels.DISCONNECTION_CHANNEL:return void(o.name===r.Errors.SESSION_EXPIRED?this.httpClient.refreshToken(o).then((()=>{this.socket?(this.intendedDisconnection=!1,this.socket.close()):this.forceReconnect()})).catch((e=>{var t;this.logger.debug(e),this.intendedDisconnection=!0,null===(t=this.socket)||void 0===t||t.close()})):(this.intendedDisconnection=!0,null===(s=this.socket)||void 0===s||s.close()));default:return}})),this.socket.onclose((()=>{this.pingIntervalId&&clearInterval(this.pingIntervalId),this.socket=void 0,this.socketConnected=!1;for(const e of this.allChannels)e.connected=!1,e.requested=!0;this.notifyCurrentChannels(),this.logger.debug("Socket connnection closed, intended ",this.intendedDisconnection),this.intendedDisconnection?this.logger.debug("Socket connection terminated"):this.retryTimeoutId||(this.retryDelay=0,this.retry())}))}retry(){var e;this.logger.debug(`Socket connection retrying in ${this.retryDelay}ms`),this.connect(),this.retryDelay+=(null===(e=this.config)||void 0===e?void 0:e.reconnectTimeDeltaMs)||3e3,this.retryTimeoutId=setTimeout((()=>{this.socketConnected||this.intendedDisconnection||this.retry()}),this.retryDelay)}checkChannelRequests(){if(!this.socketConnected)return;const e=this.allChannels.filter((e=>e.requested)).map((e=>e.channel));e.length&&this.sendToChannel(r.SocketChannels.CHANNEL_JOIN_REQUEST,{channels:e})}notifyCurrentChannels(){const e=this.allChannels.filter((e=>e.connected)).map((e=>e.channel));this.allSockets.forEach((t=>{var n;return null===(n=t.channelsSubscriber)||void 0===n?void 0:n.next(e)}))}getSocketInfo(e){return this.allSockets.find((t=>t.socket===e))}sendToChannel(e,t){if(this.logger.debug("Send",e,t),!this.socket)throw"Socket not available";let n=JSON.stringify({channel:e,message:t});this.socket.send(n)}}t.DefaultClientSocketManager=DefaultClientSocketManager},function(e,t){e.exports=require("rxjs")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ClientSocket=void 0;t.ClientSocket=class ClientSocket{constructor(e,t,n,r,s){this.messageReceivingObservable=e,this.connectionObservable=t,this.messsageSendingSubscriberResolver=n,this.initFn=r,this.destructorFn=s}send(e){this.messsageSendingSubscriber||(this.messsageSendingSubscriber=this.messsageSendingSubscriberResolver(this)),this.messsageSendingSubscriber.next(e)}onMessage(e){this.messageHandler=e}onDisconnect(e){this.disconnectHandler=e}onReconnect(e){this.reconnectHandler=e}connect(){this.connectionObservable.subscribe({next:e=>{e?this.reconnectHandler&&this.reconnectHandler():this.disconnectHandler&&this.disconnectHandler()}}),this.messageReceivingObservable.subscribe({next:e=>this.messageHandler&&this.messageHandler(e)}),this.initFn(this)}disconnect(){this.destructorFn(this)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractCrudRouter=void 0;const r=n(6);class AbstractCrudRouter extends r.AbstractRouter{getRoutes(){return{"":this.getListComponent(),"view/:id":this.getItemComponent(),"edit/:id":this.getEditComponent(),"del/:id":this.getDeleteComponent(),new:this.getNewComponent()}}}t.AbstractCrudRouter=AbstractCrudRouter},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractErrorHandler=void 0;t.AbstractErrorHandler=class AbstractErrorHandler{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractViewMiddleware=void 0;t.AbstractViewMiddleware=class AbstractViewMiddleware{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractTokenManager=void 0;t.AbstractTokenManager=class AbstractTokenManager{}}]));
|
|
1
|
+
!function(e,t){for(var n in t)e[n]=t[n]}(exports,function(e){var t={};function __webpack_require__(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,__webpack_require__),r.l=!0,r.exports}return __webpack_require__.m=e,__webpack_require__.c=t,__webpack_require__.d=function(e,t,n){__webpack_require__.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.t=function(e,t){if(1&t&&(e=__webpack_require__(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(__webpack_require__.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)__webpack_require__.d(n,r,function(t){return e[t]}.bind(null,r));return n},__webpack_require__.n=function(e){var t=e&&e.__esModule?function getDefault(){return e.default}:function getModuleExports(){return e};return __webpack_require__.d(t,"a",t),t},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=6)}([function(e,t){e.exports=require("@clairejs/core")},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Translation=void 0;const s=n(0);class LocaleTranslator{constructor(){this.translationRegex=/{(\w+)}/g,this.localeResolver=()=>s.getGlobalStore().systemLanguage,this.keyResolver=e=>`__${e}__`}populateTranslationObject(e){const t=this,n=s.getGlobalStore().translationMap,r=Object.keys(n||{}),resolveTranslation=(e,n)=>{const s=n.reduce(((e,t)=>(Object.keys(t).forEach((t=>{e.includes(t)||e.push(t)})),e)),[]);for(const i of s){n.every((e=>"object"==typeof e[i]))?(e[i]={},resolveTranslation(e[i],n.map((e=>e[i])))):(e[this.keyResolver(i)]=n.map((e=>e[i])),Object.defineProperty(e,i,{value:function(e){const n=t.localeResolver();if(!n)return"";let s=this[t.keyResolver(i)][r.indexOf(n)];if(e){let n;do{n=t.translationRegex.exec(s),n&&(s=`${s.substring(0,n.index)}${e[n[1]]||""}${s.substring(n.index+n[0].length)}`)}while(n)}return s},configurable:!1,writable:!1}))}};resolveTranslation(e,Object.values(n||{}))}}t.Translation=class Translation{constructor(e){s.getGlobalStore().translationMap=e,this.buildTranslation()}buildTranslation(){return r(this,void 0,void 0,(function*(){(new LocaleTranslator).populateTranslationObject(this)}))}}},function(e,t,n){"use strict";var r=this&&this.__decorate||function(e,t,n,r){var s,i=arguments.length,o=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(e,t,n,r);else for(var c=e.length-1;c>=0;c--)(s=e[c])&&(o=(i<3?s(o):i>3?s(t,n,o):s(t,n))||o);return i>3&&o&&Object.defineProperty(t,n,o),o},s=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},i=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.Translator=void 0;const o=n(0),c=n(8),a=n(3);let l=class Translator{constructor(e){this.storage=e}init(){return i(this,void 0,void 0,(function*(){const e=yield this.getLanguages();if(e.length){let t=yield this.storage.getItem(c.SYSTEM_LANGUAGE);t&&e.includes(t)||(t=e[0],yield this.storage.setItem(c.SYSTEM_LANGUAGE,t)),o.getGlobalStore().systemLanguage=t}}))}exit(){}getCurrentLanguage(){return i(this,void 0,void 0,(function*(){return o.getGlobalStore().systemLanguage}))}setCurrentLanguage(e){return i(this,void 0,void 0,(function*(){o.getGlobalStore().systemLanguage=e,yield this.storage.setItem(c.SYSTEM_LANGUAGE,e)}))}getLanguages(){return i(this,void 0,void 0,(function*(){return Object.keys(o.getGlobalStore().translationMap||{})}))}};l=r([o.Initable(),s("design:paramtypes",[a.AbstractStorage])],l),t.Translator=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractStorage=void 0;t.AbstractStorage=class AbstractStorage{}},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractHttpClient=void 0;const s=n(0);t.AbstractHttpClient=class AbstractHttpClient{constructor(e,t,n){this.apiServerUrl=e,this.logger=t,this.tokenManager=n,this.refreshing=!1,this.refreshQueue=[]}resolveUrl(e){return this.apiServerUrl+e}resolveHeaders(e){return r(this,void 0,void 0,(function*(){const t=yield this.tokenManager.getAccessToken();return{headers:Object.assign({Authorization:(null==t?void 0:t.token)||""},e)}}))}resolveResult(e){var t,n;return r(this,void 0,void 0,(function*(){try{return(yield e()).data}catch(r){if((null===(n=null===(t=r.response)||void 0===t?void 0:t.data)||void 0===n?void 0:n.name)!==s.Errors.SESSION_EXPIRED)throw r;return yield this.refreshToken(r),(yield e()).data}}))}refreshToken(e){return r(this,void 0,void 0,(function*(){if(this.refreshing)yield new Promise((e=>{this.refreshQueue.push({resolver:e})}));else{const t=yield this.tokenManager.getAccessToken();if(!t||!t.refreshToken)throw e;this.refreshing=!0;try{const e=yield this.getRefreshedAccessToken();yield this.tokenManager.setAccessToken(e),this.logger.debug("Access token was refreshed"),this.refreshing=!1;for(const e of this.refreshQueue)e.resolver()}catch(t){throw this.logger.debug(t),e}}}))}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractClientSocketManager=void 0;t.AbstractClientSocketManager=class AbstractClientSocketManager{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractViewMiddleware=t.AbstractRouter=t.AbstractErrorHandler=t.AbstractClientSocketManager=t.DefaultClientSocketManager=t.Translation=t.Translator=t.AbstractTokenManager=t.AxiosApiClient=t.AbstractHttpClient=t.AbstractStorage=t.ClaireClient=void 0;const r=n(7);Object.defineProperty(t,"ClaireClient",{enumerable:!0,get:function(){return r.ClaireClient}});const s=n(9);Object.defineProperty(t,"AxiosApiClient",{enumerable:!0,get:function(){return s.AxiosApiClient}});const i=n(4);Object.defineProperty(t,"AbstractHttpClient",{enumerable:!0,get:function(){return i.AbstractHttpClient}});const o=n(1);Object.defineProperty(t,"Translation",{enumerable:!0,get:function(){return o.Translation}});const c=n(5);Object.defineProperty(t,"AbstractClientSocketManager",{enumerable:!0,get:function(){return c.AbstractClientSocketManager}});const a=n(11);Object.defineProperty(t,"DefaultClientSocketManager",{enumerable:!0,get:function(){return a.DefaultClientSocketManager}});const l=n(3);Object.defineProperty(t,"AbstractStorage",{enumerable:!0,get:function(){return l.AbstractStorage}});const u=n(2);Object.defineProperty(t,"Translator",{enumerable:!0,get:function(){return u.Translator}});const d=n(14);Object.defineProperty(t,"AbstractErrorHandler",{enumerable:!0,get:function(){return d.AbstractErrorHandler}});const h=n(15);Object.defineProperty(t,"AbstractRouter",{enumerable:!0,get:function(){return h.AbstractRouter}});const f=n(16);Object.defineProperty(t,"AbstractViewMiddleware",{enumerable:!0,get:function(){return f.AbstractViewMiddleware}});const b=n(17);Object.defineProperty(t,"AbstractTokenManager",{enumerable:!0,get:function(){return b.AbstractTokenManager}})},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:!0}),t.ClaireClient=void 0;const s=n(0),i=n(1),o=n(2);class ClaireClient extends s.ClaireApp{constructor(){super(),s.getServiceProvider().register(o.Translator)}init(){const e=Object.create(null,{init:{get:()=>super.init}});return r(this,void 0,void 0,(function*(){yield e.init.call(this);const t=s.getServiceProvider().getInjector();t.resolve(i.Translation),t.resolve(o.Translator),yield t.initInstances()}))}}t.ClaireClient=ClaireClient},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SYSTEM_LANGUAGE=void 0,t.SYSTEM_LANGUAGE="__SYSTEM_LANGUAGE__"},function(e,t,n){"use strict";var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(s,i){function fulfilled(e){try{step(r.next(e))}catch(e){i(e)}}function rejected(e){try{step(r.throw(e))}catch(e){i(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())}))},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AxiosApiClient=void 0;const i=n(0),o=s(n(10)),c=n(4);class AxiosApiClient extends c.AbstractHttpClient{constructor(e,t,n){super(e,t,n),this.apiServerUrl=e,this.logger=t,this.tokenManager=n}getRefreshedAccessToken(){throw new i.ClaireError(i.Errors.NOT_SUPPORTED,"Refresh token not supported in default implementation")}get(e,t){return r(this,void 0,void 0,(function*(){const n=this.resolveUrl(e);return this.logger.debug("[GET] ",n),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.get(n,yield this.resolveHeaders(t))}))))}))}post(e,t,n){return r(this,void 0,void 0,(function*(){const s=this.resolveUrl(e);return this.logger.debug("[POST] ",s),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.post(this.resolveUrl(e),t,yield this.resolveHeaders(n))}))))}))}put(e,t,n){return r(this,void 0,void 0,(function*(){const s=this.resolveUrl(e);return this.logger.debug("[PUT] ",s),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.put(this.resolveUrl(e),t,yield this.resolveHeaders(n))}))))}))}delete(e,t){return r(this,void 0,void 0,(function*(){const n=this.resolveUrl(e);return this.logger.debug("[DEL] ",n),this.resolveResult((()=>r(this,void 0,void 0,(function*(){return o.default.delete(this.resolveUrl(e),yield this.resolveHeaders(t))}))))}))}}t.AxiosApiClient=AxiosApiClient},function(e,t){e.exports=require("axios")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DefaultClientSocketManager=void 0;const r=n(0),s=n(12),i=n(5),o=n(13);class DefaultClientSocketManager extends i.AbstractClientSocketManager{constructor(e,t,n,r,s){super(),this.wsProvider=e,this.tokenManager=t,this.httpClient=n,this.logger=r,this.config=s,this.allSockets=[],this.allChannels=[],this.accumulatedPing=0,this.retryDelay=0}create(e){const t=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in connectionObservable";t.connectionSubscriber=e})),n=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in messageReceiveingObservable";t.messageReceivingSubscriber=e})),i=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in messageSendingObservable";t.messageSendingSubscriber=e})),c=new s.Observable((e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in channelsObservable";t.channelsSubscriber=e})),a=new o.ClientSocket(n,t,(e=>{const t=this.getSocketInfo(a);if(!t||!t.messageSendingSubscriber)throw"Cannot resolve socket info in messageSendingSubscriber resolver";return t.messageSendingSubscriber}),(e=>{const t=this.getSocketInfo(e);if(!t)throw"Cannot resolve socket info in connection request";if(t.connected)return;if(!t.channelsObservable)throw"Channels observer not available";if(!t.messageSendingObservable)throw"Message sending observable not available";const n=t.channelsObservable.subscribe({next:e=>{if(!t.connected&&t.channels.every((t=>e.includes(t)))){if(t.connected=!0,!t.connectionSubscriber)throw"Connection subscriber not available";t.connectionSubscriber.next(t.connected)}else if(t.connected&&t.channels.some((t=>!e.includes(t)))){if(t.connected=!1,!t.connectionSubscriber)throw"Disconnection subscriber not available";t.connectionSubscriber.next(t.connected)}}});t.subscriptions.push(n),t.messageSendingObservable.subscribe({next:e=>{if(!t.connected)throw"Socket not connected";this.sendToChannel(r.SocketChannels.MESSAGE_CHANNEL,e)}});for(const e of t.channels){let t=this.allChannels.find((t=>t.channel===e));t||(t={channel:e,requested:!1,connected:!1},this.allChannels.push(t)),t.requested=!0}this.checkChannelRequests()}),(e=>{const t=this.getSocketInfo(a);if(!t)throw"Cannot resolve socket info in disconnection request";t.subscriptions.forEach((e=>e.unsubscribe()));const n=this.allSockets.indexOf(t);n>=0&&this.allSockets.splice(n,1)}));return this.allSockets.push({socket:a,channels:e,messageSendingObservable:i,channelsObservable:c,subscriptions:[]}),a}forceDisconnect(){this.intendedDisconnection=!0,this.socket&&(this.socket.close(),this.socket=void 0),this.retryTimeoutId&&clearTimeout(this.retryTimeoutId)}forceReconnect(){var e;this.intendedDisconnection=!1,this.socketConnected?null===(e=this.socket)||void 0===e||e.close():(this.retryDelay=0,void 0===this.socket&&(this.retryTimeoutId&&(clearTimeout(this.retryTimeoutId),this.retryTimeoutId=void 0),this.connect()))}connect(){this.socket=this.wsProvider(),this.socket.onopen((()=>{this.pingIntervalId&&clearInterval(this.pingIntervalId),this.tokenManager.getAccessToken().then((e=>{this.sendToChannel(r.SocketChannels.AUTHENTICATION_CHANNEL,{authorizationData:null==e?void 0:e.token})})).catch((e=>{this.logger.error(e),this.forceReconnect()}))})),this.socket.onmessage((e=>{var t,n,s;if(!e)return;const{channel:i,message:o}=JSON.parse(e);switch(this.logger.debug("Receive",i,o),i){case r.SocketChannels.PING_PONG_CHANNEL:return void(this.accumulatedPing=0);case r.SocketChannels.AUTHENTICATION_CHANNEL:return this.logger.debug("Socket connection established",o),this.socketConnected=!0,this.pingIntervalId&&clearInterval(this.pingIntervalId),this.accumulatedPing=0,this.pingIntervalId=setInterval((()=>{var e,t,n;this.accumulatedPing+=1,this.accumulatedPing>((null===(t=null===(e=this.config)||void 0===e?void 0:e.keepAlive)||void 0===t?void 0:t.deadThreashold)||3)?(this.intendedDisconnection=!1,null===(n=this.socket)||void 0===n||n.close()):this.sendToChannel(r.SocketChannels.PING_PONG_CHANNEL)}),(null===(n=null===(t=this.config)||void 0===t?void 0:t.keepAlive)||void 0===n?void 0:n.pingIntervalMs)||1e4),this.intendedDisconnection=!1,this.retryTimeoutId&&(clearTimeout(this.retryTimeoutId),this.retryTimeoutId=void 0),void this.checkChannelRequests();case r.SocketChannels.CHANNEL_JOIN_REQUEST:{const e=o;if(!e.success)return void this.logger.error(e.error);e.channels.forEach((e=>{const t=this.allChannels.find((t=>t.channel===e));t&&(t.connected=!0,t.requested=!1)})),this.notifyCurrentChannels()}return;case r.SocketChannels.CHANNEL_LEAVE_REQUEST:{const e=o;if(!e.success)return void this.logger.error(e.error);e.channels.forEach((e=>{const t=this.allChannels.find((t=>t.channel===e));t&&(t.connected=!1)})),this.notifyCurrentChannels()}return;case r.SocketChannels.MESSAGE_CHANNEL:{const e=o;this.allSockets.forEach((t=>{var n;t.channels.includes(e.channel)&&(null===(n=t.messageReceivingSubscriber)||void 0===n||n.next(e))}))}return;case r.SocketChannels.DISCONNECTION_CHANNEL:return void(o.name===r.Errors.SESSION_EXPIRED?this.httpClient.refreshToken(o).then((()=>{this.socket?(this.intendedDisconnection=!1,this.socket.close()):this.forceReconnect()})).catch((e=>{var t;this.logger.debug(e),this.intendedDisconnection=!0,null===(t=this.socket)||void 0===t||t.close()})):(this.intendedDisconnection=!0,null===(s=this.socket)||void 0===s||s.close()));default:return}})),this.socket.onclose((()=>{this.pingIntervalId&&clearInterval(this.pingIntervalId),this.socket=void 0,this.socketConnected=!1;for(const e of this.allChannels)e.connected=!1,e.requested=!0;this.notifyCurrentChannels(),this.logger.debug("Socket connnection closed, intended ",this.intendedDisconnection),this.intendedDisconnection?this.logger.debug("Socket connection terminated"):this.retryTimeoutId||(this.retryDelay=0,this.retry())}))}retry(){var e;this.logger.debug(`Socket connection retrying in ${this.retryDelay}ms`),this.connect(),this.retryDelay+=(null===(e=this.config)||void 0===e?void 0:e.reconnectTimeDeltaMs)||3e3,this.retryTimeoutId=setTimeout((()=>{this.socketConnected||this.intendedDisconnection||this.retry()}),this.retryDelay)}checkChannelRequests(){if(!this.socketConnected)return;const e=this.allChannels.filter((e=>e.requested)).map((e=>e.channel));e.length&&this.sendToChannel(r.SocketChannels.CHANNEL_JOIN_REQUEST,{channels:e})}notifyCurrentChannels(){const e=this.allChannels.filter((e=>e.connected)).map((e=>e.channel));this.allSockets.forEach((t=>{var n;return null===(n=t.channelsSubscriber)||void 0===n?void 0:n.next(e)}))}getSocketInfo(e){return this.allSockets.find((t=>t.socket===e))}sendToChannel(e,t){if(this.logger.debug("Send",e,t),!this.socket)throw"Socket not available";let n=JSON.stringify({channel:e,message:t});this.socket.send(n)}}t.DefaultClientSocketManager=DefaultClientSocketManager},function(e,t){e.exports=require("rxjs")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ClientSocket=void 0;t.ClientSocket=class ClientSocket{constructor(e,t,n,r,s){this.messageReceivingObservable=e,this.connectionObservable=t,this.messsageSendingSubscriberResolver=n,this.initFn=r,this.destructorFn=s}send(e){this.messsageSendingSubscriber||(this.messsageSendingSubscriber=this.messsageSendingSubscriberResolver(this)),this.messsageSendingSubscriber.next(e)}onMessage(e){this.messageHandler=e}onDisconnect(e){this.disconnectHandler=e}onReconnect(e){this.reconnectHandler=e}connect(){this.connectionObservable.subscribe({next:e=>{e?this.reconnectHandler&&this.reconnectHandler():this.disconnectHandler&&this.disconnectHandler()}}),this.messageReceivingObservable.subscribe({next:e=>this.messageHandler&&this.messageHandler(e)}),this.initFn(this)}disconnect(){this.destructorFn(this)}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractErrorHandler=void 0;t.AbstractErrorHandler=class AbstractErrorHandler{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractRouter=void 0;t.AbstractRouter=class AbstractRouter{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractViewMiddleware=void 0;t.AbstractViewMiddleware=class AbstractViewMiddleware{}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractTokenManager=void 0;t.AbstractTokenManager=class AbstractTokenManager{}}]));
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"@clairejs/core\"","webpack:///./src/translation/Translation.ts","webpack:///./src/translation/Translator.ts","webpack:///./src/system/AbstractStorage.ts","webpack:///./src/api/AbstractHttpClient.ts","webpack:///./src/socket/AbstractClientSocketManager.ts","webpack:///./src/routing/AbstractRouter.ts","webpack:///./src/index.ts","webpack:///./src/system/ClaireClient.ts","webpack:///./src/constants.ts","webpack:///./src/api/AxiosApiClient.ts","webpack:///external \"axios\"","webpack:///./src/socket/DefaultClientSocketManager.ts","webpack:///external \"rxjs\"","webpack:///./src/socket/ClientSocket.ts","webpack:///./src/routing/AbstractCrudRouter.ts","webpack:///./src/routing/AbstractErrorHandler.ts","webpack:///./src/routing/AbstractViewMiddleware.ts","webpack:///./src/api/AbstractTokenManager.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","require","LocaleTranslator","translationRegex","localeResolver","getGlobalStore","systemLanguage","keyResolver","translation","_this","this","translationMap","locales","keys","resolveTranslation","translationsObject","translationValues","reduce","collector","forEach","includes","push","every","map","data","currentLocale","indexOf","result","exec","substring","index","length","configurable","writable","values","Translation","buildTranslation","populateTranslationObject","Translator","storage","langCodes","getLanguages","lang","getItem","SYSTEM_LANGUAGE","setItem","Initable","AbstractStorage","AbstractHttpClient","apiServerUrl","logger","tokenManager","refreshing","refreshQueue","url","headers","accessToken","getAccessToken","Authorization","token","apiCall","err","response","Errors","SESSION_EXPIRED","refreshToken","originalErr","Promise","resolve","resolver","oldToken","newToken","getRefreshedAccessToken","setAccessToken","debug","refresh","_e","AbstractClientSocketManager","AbstractRouter","ClaireClient","AxiosApiClient","DefaultClientSocketManager","AbstractCrudRouter","AbstractErrorHandler","AbstractViewMiddleware","AbstractTokenManager","ClaireApp","super","getServiceProvider","register","init","injector","getInjector","initInstances","ClaireError","NOT_SUPPORTED","finalUrl","resolveUrl","resolveResult","resolveHeaders","body","post","put","delete","wsProvider","httpClient","config","allSockets","allChannels","accumulatedPing","retryDelay","channels","connectionObservable","Observable","subscriber","socketInfo","getSocketInfo","socket","connectionSubscriber","messageReceiveingObservable","messageReceivingSubscriber","messageSendingObservable","messageSendingSubscriber","channelsObservable","channelsSubscriber","ClientSocket","_socket","connected","sub","subscribe","next","availableChannels","some","subscriptions","message","sendToChannel","SocketChannels","MESSAGE_CHANNEL","channel","channelInfo","find","requested","checkChannelRequests","unsubscribe","splice","intendedDisconnection","close","undefined","retryTimeoutId","clearTimeout","socketConnected","connect","onopen","pingIntervalId","clearInterval","then","AUTHENTICATION_CHANNEL","authorizationData","catch","error","forceReconnect","onmessage","JSON","parse","PING_PONG_CHANNEL","setInterval","keepAlive","deadThreashold","pingIntervalMs","CHANNEL_JOIN_REQUEST","receivedMessage","success","info","notifyCurrentChannels","CHANNEL_LEAVE_REQUEST","DISCONNECTION_CHANNEL","onclose","retry","reconnectTimeDeltaMs","setTimeout","pendingChannels","filter","boundChannels","stringify","send","messageReceivingObservable","messsageSendingSubscriberResolver","initFn","destructorFn","messsageSendingSubscriber","handler","messageHandler","disconnectHandler","reconnectHandler","getListComponent","getItemComponent","getEditComponent","getDeleteComponent","getNewComponent"],"mappings":"6DACE,IAAIA,EAAmB,GAGvB,SAASC,oBAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,qBAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,oBAAoBQ,EAAIF,EAGxBN,oBAAoBS,EAAIV,EAGxBC,oBAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,oBAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,oBAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,oBAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,oBAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,oBAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,oBAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,oBAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,SAASM,aAAe,OAAO3B,EAAgB,SAC/C,SAAS4B,mBAAqB,OAAO5B,GAEtC,OADAH,oBAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,oBAAoBa,EAAI,SAASmB,EAAQC,GAAY,OAAOnB,OAAOoB,UAAUC,eAAe5B,KAAKyB,EAAQC,IAGzGjC,oBAAoBoC,EAAI,GAIjBpC,oBAAoBA,oBAAoBqC,EAAI,G,gBClFrDlC,EAAOD,QAAUoC,QAAQ,mB,8dCAzB,aAIA,MAAMC,iBAAN,cACqB,KAAAC,iBAAmB,WACnB,KAAAC,eAAiB,IAAM,EAAAC,iBAAoCC,eAC3D,KAAAC,YAAejB,GAAgB,KAAKA,MAE9C,0BAA0BkB,GAC7B,MAAMC,EAAQC,KACRC,EAAiB,EAAAN,iBAAoCM,eACrDC,EAAUnC,OAAOoC,KAAKF,GAAkB,IAExCG,mBAAqB,CAACC,EAAyBC,KAEjD,MAAMH,EAAOG,EAAkBC,QAAO,CAACC,EAAWV,KAC9C/B,OAAOoC,KAAKL,GAAaW,SAAS7B,IACzB4B,EAAUE,SAAS9B,IACpB4B,EAAUG,KAAK/B,MAGhB4B,IACR,IAGH,IAAK,MAAM5B,KAAOuB,EAAM,CACHG,EAAkBM,OAAOtC,GAAgC,iBAAfA,EAAMM,MAE7DyB,EAAmBzB,GAAO,GAC1BwB,mBACIC,EAAmBzB,GACnB0B,EAAkBO,KAAKvC,GAAUA,EAAMM,QAG3CyB,EAAmBL,KAAKH,YAAYjB,IAAQ0B,EAAkBO,KAAKvC,GAAUA,EAAMM,KACnFb,OAAOC,eAAeqC,EAAoBzB,EAAK,CAC3CN,MAAO,SAAUwC,GACb,MAAMC,EAAgBhB,EAAML,iBAC5B,IAAKqB,EACD,MAAO,GAGX,IAAIjB,EAAcE,KAAKD,EAAMF,YAAYjB,IAAMsB,EAAQc,QAAQD,IAC/D,GAAID,EAAM,CACN,IAAIG,EACJ,GACIA,EAASlB,EAAMN,iBAAiByB,KAAKpB,GACjCmB,IACAnB,EAAc,GAAGA,EAAYqB,UAAU,EAAGF,EAAOG,SAASN,EAAKG,EAAO,KAAO,KAAKnB,EAAYqB,UAC1FF,EAAOG,MAAQH,EAAO,GAAGI,iBAG5BJ,GAEb,OAAOnB,GAEXwB,cAAc,EACdC,UAAU,OAM1BnB,mBAAmBN,EAAa/B,OAAOyD,OAAOvB,GAAkB,MAIxE,oBAAawB,YACT,YAAYxB,GACM,EAAAN,iBACRM,eAAiBA,EACvBD,KAAK0B,mBAGK,mB,0CACe,IAAIlC,kBACZmC,0BAA0B3B,Y,g8BC7EnD,aACA,OACA,OAIA,IAAa4B,EAAb,MAAaA,WACT,YAAqBC,GAAA,KAAAA,UAEf,O,yCACF,MAAMC,QAAkB9B,KAAK+B,eAG7B,GAAID,EAAUT,OAAQ,CAClB,IAAIW,QAAahC,KAAK6B,QAAQI,QAAgB,EAAAC,iBACzCF,GAASF,EAAUpB,SAASsB,KAC7BA,EAAOF,EAAU,SACX9B,KAAK6B,QAAQM,QAAQ,EAAAD,gBAAiBF,IAEhD,EAAArC,iBAAoCC,eAAiBoC,MAI7D,QAEM,qB,yCACF,OAAO,EAAArC,iBAAoCC,kBAGzC,mBAAmBoC,G,yCACrB,EAAArC,iBAAoCC,eAAiBoC,QAE/ChC,KAAK6B,QAAQM,QAAQ,EAAAD,gBAAiBF,MAG1C,e,yCACF,OAAOjE,OAAOoC,KAAK,EAAAR,iBAAoCM,gBAAkB,SA9BpE2B,EAAU,GADtB,EAAAQ,W,uBAEiC,EAAAC,mBADrBT,GAAA,EAAAA,c,uGCNb,wBAAsBS,mB,qeCAtB,aAGA,2BAAsBC,mBAMlB,YAAqBC,EAA+BC,EAAiCC,GAAhE,KAAAF,eAA+B,KAAAC,SAAiC,KAAAC,eAL7E,KAAAC,YAAa,EACb,KAAAC,aAEF,GAMI,WAAWC,GACjB,OAAO5C,KAAKuC,aAAeK,EAGf,eAAeC,G,yCAC3B,MAAMC,QAAoB9C,KAAKyC,aAAaM,iBAC5C,MAAO,CAAEF,QAAS,OAAF,QAAIG,eAAeF,aAAW,EAAXA,EAAaG,QAAS,IAAOJ,OAGpD,cAAcK,G,iDAC1B,IACI,aAAcA,KAAWpC,KAC3B,MAAOqC,GAEL,IAAsB,QAAlB,EAAY,QAAZ,EAAAA,EAAIC,gBAAQ,eAAEtC,YAAI,eAAElD,QAAS,EAAAyF,OAAOC,gBACpC,MAAMH,EAGV,aADMnD,KAAKuD,aAAaJ,UACVD,KAAWpC,SAI3B,aAAa0C,G,yCACf,GAAIxD,KAAK0C,iBACC,IAAIe,SAAeC,IACrB1D,KAAK2C,aAAahC,KAAK,CAAEgD,SAAUD,WAEpC,CAEH,MAAME,QAAiB5D,KAAKyC,aAAaM,iBACzC,IAAKa,IAAaA,EAASL,aAEvB,MAAMC,EAEVxD,KAAK0C,YAAa,EAClB,IACI,MAAMmB,QAAiB7D,KAAK8D,gCACtB9D,KAAKyC,aAAasB,eAAeF,GACvC7D,KAAKwC,OAAOwB,MAAM,8BAClBhE,KAAK0C,YAAa,EAElB,IAAK,MAAMuB,KAAWjE,KAAK2C,aACvBsB,EAAQN,WAEd,MAAOO,GAEL,MADAlE,KAAKwC,OAAOwB,MAAME,GACZV,U,mHCzDtB,oCAAsBW,+B,sGCAtB,uBAAsBC,kB,+VCFtB,aAuBI,4EAvBK,EAAAC,gBACT,cAyBI,8EAzBK,EAAAC,kBACT,aAuBI,kFAvBK,EAAAhC,sBACT,aA4BI,2EA5BK,EAAAb,eACT,aAgCI,2FAhCK,EAAA0C,+BAET,cA6BI,0FA7BK,EAAAI,8BACT,aAiBI,+EAjBK,EAAAlC,mBAET,aAqBI,0EArBK,EAAAT,cACT,cA4BI,kFA5BK,EAAA4C,sBACT,cA4BI,oFA5BK,EAAAC,wBACT,aA4BI,8EA5BK,EAAAL,kBACT,cA4BI,sFA5BK,EAAAM,0BAKT,cAUI,oFAVK,EAAAC,yB,+dClBT,aAEA,OACA,OAEA,MAAaN,qBAAqB,EAAAO,UAC9B,cACIC,QACA,EAAAC,qBAAqBC,SAAS,EAAAnD,YAG5B,O,uGACI,EAAMoD,KAAI,WAEhB,MAAMC,EAAW,EAAAH,qBAAqBI,cACtCD,EAASvB,QAAQ,EAAAjC,aACjBwD,EAASvB,QAAQ,EAAA9B,kBACXqD,EAASE,oBAZvB,6B,uGCJa,EAAAjD,gBAAkB,uB,ijBCD/B,aACA,WAEA,OAGA,MAAaoC,uBAAuB,EAAAhC,mBAChC,YAA4BC,EAA+BC,EAAiCC,GACxFoC,MAAMtC,EAAcC,EAAQC,GADJ,KAAAF,eAA+B,KAAAC,SAAiC,KAAAC,eAIlF,0BACN,MAAM,IAAI,EAAA2C,YAAY,EAAA/B,OAAOgC,cAAe,yDAGnC,IAAOzC,EAAaC,G,yCAC7B,MAAMyC,EAAWtF,KAAKuF,WAAW3C,GAEjC,OADA5C,KAAKwC,OAAOwB,MAAM,SAAUsB,GACrBtF,KAAKwF,eAAc,IAAY,EAAD,gCAAC,iBAAMtH,IAAIoH,QAAgBtF,KAAKyF,eAAe5C,YAE3E,KAAWD,EAAa8C,EAAS7C,G,yCAC1C,MAAMyC,EAAWtF,KAAKuF,WAAW3C,GAEjC,OADA5C,KAAKwC,OAAOwB,MAAM,UAAWsB,GACtBtF,KAAKwF,eAAc,IAAY,EAAD,gCAAC,iBAAMG,KAAK3F,KAAKuF,WAAW3C,GAAM8C,QAAY1F,KAAKyF,eAAe5C,YAE9F,IAAUD,EAAa8C,EAAS7C,G,yCACzC,MAAMyC,EAAWtF,KAAKuF,WAAW3C,GAEjC,OADA5C,KAAKwC,OAAOwB,MAAM,SAAUsB,GACrBtF,KAAKwF,eAAc,IAAY,EAAD,gCAAC,iBAAMI,IAAI5F,KAAKuF,WAAW3C,GAAM8C,QAAY1F,KAAKyF,eAAe5C,YAG7F,OAAUD,EAAaC,G,yCAChC,MAAMyC,EAAWtF,KAAKuF,WAAW3C,GAEjC,OADA5C,KAAKwC,OAAOwB,MAAM,SAAUsB,GACrBtF,KAAKwF,eAAc,IAAY,EAAD,gCAAC,iBAAMK,OAAO7F,KAAKuF,WAAW3C,SAAY5C,KAAKyF,eAAe5C,aA5B3G,iC,cCNAzF,EAAOD,QAAUoC,QAAQ,U,kHCAzB,aASA,QAIA,OAEA,QAIA,MAAagF,mCAAmC,EAAAJ,4BA2B5C,YACqB2B,EACArD,EACAsD,EACAvD,EACAwD,GAEjBnB,QANiB,KAAAiB,aACA,KAAArD,eACA,KAAAsD,aACA,KAAAvD,SACA,KAAAwD,SA7Bb,KAAAC,WAaF,GAEE,KAAAC,YAA6E,GAK7E,KAAAC,gBAAkB,EAClB,KAAAC,WAAa,EAarB,OAAOC,GACH,MAAMC,EAAuB,IAAI,EAAAC,YAAqBC,IAClD,MAAMC,EAAazG,KAAK0G,cAAcC,GAEtC,IAAKF,EACD,KAAM,qDAGVA,EAAWG,qBAAuBJ,KAGhCK,EAA8B,IAAI,EAAAN,YAAiBC,IACrD,MAAMC,EAAazG,KAAK0G,cAAcC,GACtC,IAAKF,EACD,KAAM,4DAEVA,EAAWK,2BAA6BN,KAGtCO,EAA2B,IAAI,EAAAR,YAAiBC,IAClD,MAAMC,EAAazG,KAAK0G,cAAcC,GACtC,IAAKF,EACD,KAAM,yDAEVA,EAAWO,yBAA2BR,KAGpCS,EAAqB,IAAI,EAAAV,YAAsBC,IACjD,MAAMC,EAAazG,KAAK0G,cAAcC,GACtC,IAAKF,EACD,KAAM,mDAEVA,EAAWS,mBAAqBV,KAG9BG,EAAS,IAAI,EAAAQ,aACfN,EACAP,GACCc,IACG,MAAMX,EAAazG,KAAK0G,cAAcC,GACtC,IAAKF,IAAeA,EAAWO,yBAC3B,KAAM,kEAEV,OAAOP,EAAWO,4BAErBI,IAEG,MAAMX,EAAazG,KAAK0G,cAAcU,GACtC,IAAKX,EACD,KAAM,mDAGV,GAAIA,EAAWY,UACX,OAGJ,IAAKZ,EAAWQ,mBACZ,KAAM,kCAGV,IAAKR,EAAWM,yBACZ,KAAM,2CAGV,MAAMO,EAAMb,EAAWQ,mBAAmBM,UAAU,CAChDC,KAAOC,IACH,IAAKhB,EAAWY,WAAaZ,EAAWJ,SAASzF,OAAOlD,GAAM+J,EAAkB/G,SAAShD,KAAK,CAG1F,GADA+I,EAAWY,WAAY,GAClBZ,EAAWG,qBACZ,KAAM,sCAEVH,EAAWG,qBAAqBY,KAAKf,EAAWY,gBAC7C,GAAIZ,EAAWY,WAAaZ,EAAWJ,SAASqB,MAAMhK,IAAO+J,EAAkB/G,SAAShD,KAAK,CAGhG,GADA+I,EAAWY,WAAY,GAClBZ,EAAWG,qBACZ,KAAM,yCAEVH,EAAWG,qBAAqBY,KAAKf,EAAWY,eAI5DZ,EAAWkB,cAAchH,KAAK2G,GAE9Bb,EAAWM,yBAAyBQ,UAAU,CAC1CC,KAAOI,IACH,IAAKnB,EAAWY,UACZ,KAAM,uBAEVrH,KAAK6H,cAAc,EAAAC,eAAeC,gBAAiBH,MAK3D,IAAK,MAAMI,KAAWvB,EAAWJ,SAAU,CACvC,IAAI4B,EAAcjI,KAAKkG,YAAYgC,MAAMD,GAAgBA,EAAYD,UAAYA,IAC5EC,IACDA,EAAc,CAAED,UAASG,WAAW,EAAOd,WAAW,GACtDrH,KAAKkG,YAAYvF,KAAKsH,IAE1BA,EAAYE,WAAY,EAI5BnI,KAAKoI,0BAERhB,IAEG,MAAMX,EAAazG,KAAK0G,cAAcC,GACtC,IAAKF,EACD,KAAM,sDAIVA,EAAWkB,cAAclH,SAAS6G,GAAQA,EAAIe,gBAE9C,MAAMjH,EAAQpB,KAAKiG,WAAWjF,QAAQyF,GAClCrF,GAAS,GACTpB,KAAKiG,WAAWqC,OAAOlH,EAAO,MAO1C,OAFApB,KAAKiG,WAAWtF,KAAK,CAAEgG,SAAQN,WAAUU,2BAA0BE,qBAAoBU,cAAe,KAE/FhB,EAGX,kBACI3G,KAAKuI,uBAAwB,EACzBvI,KAAK2G,SACL3G,KAAK2G,OAAO6B,QACZxI,KAAK2G,YAAS8B,GAGdzI,KAAK0I,gBACLC,aAAa3I,KAAK0I,gBAI1B,iB,MACI1I,KAAKuI,uBAAwB,EACzBvI,KAAK4I,gBACM,QAAX,EAAA5I,KAAK2G,cAAM,SAAE6B,SAEbxI,KAAKoG,WAAa,OACEqC,IAAhBzI,KAAK2G,SACD3G,KAAK0I,iBACLC,aAAa3I,KAAK0I,gBAClB1I,KAAK0I,oBAAiBD,GAE1BzI,KAAK6I,YAKT,UACJ7I,KAAK2G,OAAS3G,KAAK8F,aAEnB9F,KAAK2G,OAAOmC,QAAO,KACX9I,KAAK+I,gBACLC,cAAchJ,KAAK+I,gBAGvB/I,KAAKyC,aACAM,iBACAkG,MAAMnG,IACH9C,KAAK6H,cAAc,EAAAC,eAAeoB,uBAAwB,CACtDC,kBAAmBrG,aAAW,EAAXA,EAAaG,WAGvCmG,OAAOjG,IACJnD,KAAKwC,OAAO6G,MAAMlG,GAClBnD,KAAKsJ,uBAIjBtJ,KAAK2G,OAAO4C,WAAWzI,I,UACnB,IAAKA,EACD,OAGJ,MAAM,QAAEkH,EAAO,QAAEJ,GAAY4B,KAAKC,MAAM3I,GAGxC,OAFAd,KAAKwC,OAAOwB,MAAM,UAAWgE,EAASJ,GAE9BI,GACJ,KAAK,EAAAF,eAAe4B,kBAIhB,YAFI1J,KAAKmG,gBAAkB,GAI/B,KAAK,EAAA2B,eAAeoB,uBAgChB,OA9BIlJ,KAAKwC,OAAOwB,MAAM,gCAAiC4D,GAEnD5H,KAAK4I,iBAAkB,EAGnB5I,KAAK+I,gBACLC,cAAchJ,KAAK+I,gBAGvB/I,KAAKmG,gBAAkB,EACvBnG,KAAK+I,eAAiBY,aAAY,K,UAC9B3J,KAAKmG,iBAAmB,EACpBnG,KAAKmG,kBAAyC,QAAtB,EAAW,QAAX,EAAAnG,KAAKgG,cAAM,eAAE4D,iBAAS,eAAEC,iBAAkB,IAElE7J,KAAKuI,uBAAwB,EAClB,QAAX,EAAAvI,KAAK2G,cAAM,SAAE6B,SAEbxI,KAAK6H,cAAc,EAAAC,eAAe4B,sBAEjB,QAAtB,EAAW,QAAX,EAAA1J,KAAKgG,cAAM,eAAE4D,iBAAS,eAAEE,iBAAkB,KAE7C9J,KAAKuI,uBAAwB,EACzBvI,KAAK0I,iBACLC,aAAa3I,KAAK0I,gBAClB1I,KAAK0I,oBAAiBD,QAI1BzI,KAAKoI,uBAIb,KAAK,EAAAN,eAAeiC,qBAChB,CACI,MAAMC,EAAkBpC,EACxB,IAAKoC,EAAgBC,QAEjB,YADAjK,KAAKwC,OAAO6G,MAAMW,EAAgBX,OAItCW,EAAgB3D,SAAS5F,SAASuH,IAC9B,MAAMC,EAAcjI,KAAKkG,YAAYgC,MAAMgC,GAASA,EAAKlC,UAAYA,IACjEC,IACAA,EAAYZ,WAAY,EACxBY,EAAYE,WAAY,MAIhCnI,KAAKmK,wBAET,OAEJ,KAAK,EAAArC,eAAesC,sBAChB,CACI,MAAMJ,EAAkBpC,EACxB,IAAKoC,EAAgBC,QAEjB,YADAjK,KAAKwC,OAAO6G,MAAMW,EAAgBX,OAItCW,EAAgB3D,SAAS5F,SAASuH,IAC9B,MAAMC,EAAcjI,KAAKkG,YAAYgC,MAAMgC,GAASA,EAAKlC,UAAYA,IACjEC,IACAA,EAAYZ,WAAY,MAIhCrH,KAAKmK,wBAET,OAEJ,KAAK,EAAArC,eAAeC,gBAChB,CACI,MAAMiC,EAAkBpC,EAExB5H,KAAKiG,WAAWxF,SAASgG,I,MAChBA,EAAWJ,SAAS3F,SAASsJ,EAAgBhC,WAGb,QAArC,EAAAvB,EAAWK,kCAA0B,SAAEU,KAAKwC,OAGpD,OAEJ,KAAK,EAAAlC,eAAeuC,sBAwBhB,YAtBQzC,EAAQhK,OAAS,EAAAyF,OAAOC,gBAExBtD,KAAK+F,WACAxC,aAAaqE,GACbqB,MAAK,KACIjJ,KAAK2G,QACP3G,KAAKuI,uBAAwB,EAC7BvI,KAAK2G,OAAO6B,SAEZxI,KAAKsJ,oBAGZF,OAAOjG,I,MACJnD,KAAKwC,OAAOwB,MAAMb,GAClBnD,KAAKuI,uBAAwB,EAClB,QAAX,EAAAvI,KAAK2G,cAAM,SAAE6B,YAGrBxI,KAAKuI,uBAAwB,EAClB,QAAX,EAAAvI,KAAK2G,cAAM,SAAE6B,UAIzB,QACI,WAIZxI,KAAK2G,OAAO2D,SAAQ,KACZtK,KAAK+I,gBACLC,cAAchJ,KAAK+I,gBAGvB/I,KAAK2G,YAAS8B,EACdzI,KAAK4I,iBAAkB,EAGvB,IAAK,MAAMZ,KAAWhI,KAAKkG,YACvB8B,EAAQX,WAAY,EACpBW,EAAQG,WAAY,EAExBnI,KAAKmK,wBAELnK,KAAKwC,OAAOwB,MAAM,uCAAwChE,KAAKuI,uBAG3DvI,KAAKuI,sBAELvI,KAAKwC,OAAOwB,MAAM,gCAEbhE,KAAK0I,iBACN1I,KAAKoG,WAAa,EAClBpG,KAAKuK,YAMb,Q,MACJvK,KAAKwC,OAAOwB,MAAM,iCAAiChE,KAAKoG,gBACxDpG,KAAK6I,UACL7I,KAAKoG,aAAyB,QAAX,EAAApG,KAAKgG,cAAM,eAAEwE,uBAAwB,IACxDxK,KAAK0I,eAAiB+B,YAAW,KACxBzK,KAAK4I,iBAAoB5I,KAAKuI,uBAC/BvI,KAAKuK,UAEVvK,KAAKoG,YAGJ,uBACJ,IAAKpG,KAAK4I,gBACN,OAGJ,MAAM8B,EAAkB1K,KAAKkG,YAAYyE,QAAQjN,GAAMA,EAAEyK,YAAWtH,KAAKnD,GAAMA,EAAEsK,UACjF0C,EAAgBrJ,QAAUrB,KAAK6H,cAAc,EAAAC,eAAeiC,qBAAsB,CAAE1D,SAAUqE,IAG1F,wBACJ,MAAME,EAAgB5K,KAAKkG,YAAYyE,QAAQjN,GAAMA,EAAE2J,YAAWxG,KAAKnD,GAAMA,EAAEsK,UAC/EhI,KAAKiG,WAAWxF,SAASgG,IAAc,aAA8B,QAA9B,EAACA,EAAWS,0BAAkB,eAAEM,KAAKoD,MAGxE,cAAcjE,GAClB,OAAO3G,KAAKiG,WAAWiC,MAAMgC,GAASA,EAAKvD,SAAWA,IAGlD,cAAcqB,EAAiBJ,GAEnC,GADA5H,KAAKwC,OAAOwB,MAAM,OAAQgE,EAASJ,IAC9B5H,KAAK2G,OACN,KAAM,uBAEV,IAAI7F,EAAO0I,KAAKqB,UAAU,CAAE7C,UAASJ,YACrC5H,KAAK2G,OAAOmE,KAAKhK,IA3ZzB,yD,cCnBA1D,EAAOD,QAAUoC,QAAQ,S,oGCKzB,qBAAa4H,aAMT,YACqB4D,EACAzE,EACA0E,EACAC,EACAC,GAJA,KAAAH,6BACA,KAAAzE,uBACA,KAAA0E,oCACA,KAAAC,SACA,KAAAC,eAGrB,KAAKtD,GACI5H,KAAKmL,4BACNnL,KAAKmL,0BAA4BnL,KAAKgL,kCAAkChL,OAE5EA,KAAKmL,0BAA0B3D,KAAKI,GAGxC,UAAUwD,GACNpL,KAAKqL,eAAiBD,EAG1B,aAAaA,GACTpL,KAAKsL,kBAAoBF,EAG7B,YAAYA,GACRpL,KAAKuL,iBAAmBH,EAG5B,UACIpL,KAAKsG,qBAAqBiB,UAAU,CAChCC,KAAOH,IACCA,EACArH,KAAKuL,kBAAoBvL,KAAKuL,mBAE9BvL,KAAKsL,mBAAqBtL,KAAKsL,uBAI3CtL,KAAK+K,2BAA2BxD,UAAU,CAAEC,KAAOI,GAAY5H,KAAKqL,gBAAkBrL,KAAKqL,eAAezD,KAC1G5H,KAAKiL,OAAOjL,MAGhB,aACIA,KAAKkL,aAAalL,S,0GCrD1B,aAGA,MAAsBwE,2BAA2B,EAAAJ,eAC7C,YACI,MAAO,CACH,GAAMpE,KAAKwL,mBACX,WAAcxL,KAAKyL,mBACnB,WAAczL,KAAK0L,mBACnB,UAAa1L,KAAK2L,qBAClB,IAAS3L,KAAK4L,oBAP1B,yC,4GCHA,6BAAsBnH,wB,8GCCtB,+BAAsBC,0B,4GCCtB,6BAAsBC","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 7);\n","module.exports = require(\"@clairejs/core\");","import { getGlobalStore } from \"@clairejs/core\";\nimport { ClientGlobalStore } from \"../system/GlobalClientStore\";\nimport { TranslationMap } from \"./TranslationMap\";\n\nclass LocaleTranslator {\n private readonly translationRegex = /{(\\w+)}/g;\n private readonly localeResolver = () => getGlobalStore<ClientGlobalStore>().systemLanguage;\n private readonly keyResolver = (key: string) => `__${key}__`;\n\n public populateTranslationObject(translation: Translation) {\n const _this = this;\n const translationMap = getGlobalStore<ClientGlobalStore>().translationMap;\n const locales = Object.keys(translationMap || {});\n\n const resolveTranslation = (translationsObject: any, translationValues: any[]): void => {\n //-- get all keys of languages\n const keys = translationValues.reduce((collector, translation) => {\n Object.keys(translation).forEach((key) => {\n if (!collector.includes(key)) {\n collector.push(key);\n }\n });\n return collector;\n }, [] as string[]);\n\n //-- create getters / setters for those keys if data type of value is string\n for (const key of keys) {\n const isObject = translationValues.every((value) => typeof value[key] === \"object\");\n if (isObject) {\n translationsObject[key] = {};\n resolveTranslation(\n translationsObject[key],\n translationValues.map((value) => value[key])\n );\n } else {\n translationsObject[this.keyResolver(key)] = translationValues.map((value) => value[key]);\n Object.defineProperty(translationsObject, key, {\n value: function (data: any): string {\n const currentLocale = _this.localeResolver();\n if (!currentLocale) {\n return \"\";\n }\n\n let translation = this[_this.keyResolver(key)][locales.indexOf(currentLocale)] as string;\n if (data) {\n let result;\n do {\n result = _this.translationRegex.exec(translation);\n if (result) {\n translation = `${translation.substring(0, result.index)}${data[result[1]] || \"\"}${translation.substring(\n result.index + result[0].length\n )}`;\n }\n } while (result);\n }\n return translation;\n },\n configurable: false,\n writable: false,\n });\n }\n }\n };\n\n resolveTranslation(translation, Object.values(translationMap || {}));\n }\n}\n\nexport class Translation {\n constructor(translationMap: TranslationMap) {\n const store = getGlobalStore<ClientGlobalStore>();\n store.translationMap = translationMap;\n this.buildTranslation();\n }\n\n private async buildTranslation() {\n const localeTranslator = new LocaleTranslator();\n localeTranslator.populateTranslationObject(this);\n }\n}\n","import { getGlobalStore, IInit, Initable } from \"@clairejs/core\";\nimport { SYSTEM_LANGUAGE } from \"../constants\";\nimport { AbstractStorage } from \"../system/AbstractStorage\";\nimport { ClientGlobalStore } from \"../system/GlobalClientStore\";\n\n@Initable()\nexport class Translator implements IInit {\n constructor(readonly storage: AbstractStorage) {}\n\n async init(): Promise<void> {\n const langCodes = await this.getLanguages();\n\n //-- init default language\n if (langCodes.length) {\n let lang = await this.storage.getItem<string>(SYSTEM_LANGUAGE);\n if (!lang || !langCodes.includes(lang)) {\n lang = langCodes[0];\n await this.storage.setItem(SYSTEM_LANGUAGE, lang);\n }\n getGlobalStore<ClientGlobalStore>().systemLanguage = lang;\n }\n }\n\n exit(): void {}\n\n async getCurrentLanguage(): Promise<string | undefined> {\n return getGlobalStore<ClientGlobalStore>().systemLanguage;\n }\n\n async setCurrentLanguage(lang: string): Promise<void> {\n getGlobalStore<ClientGlobalStore>().systemLanguage = lang;\n //-- set local storage\n await this.storage.setItem(SYSTEM_LANGUAGE, lang);\n }\n\n async getLanguages(): Promise<string[]> {\n return Object.keys(getGlobalStore<ClientGlobalStore>().translationMap || {});\n }\n}\n","export abstract class AbstractStorage {\n public abstract getItem<T>(key: string): Promise<T | undefined>;\n public abstract setItem<T>(key: string, value: T): Promise<void>;\n public abstract deleteItem(key: string): Promise<void>;\n}\n","import { AbstractLogger, Errors, AccessToken } from \"@clairejs/core\";\nimport { AbstractTokenManager } from \"./AbstractTokenManager\";\n\nexport abstract class AbstractHttpClient {\n private refreshing = false;\n private refreshQueue: {\n resolver: () => void;\n }[] = [];\n\n constructor(readonly apiServerUrl: string, readonly logger: AbstractLogger, readonly tokenManager: AbstractTokenManager) {}\n\n protected abstract getRefreshedAccessToken(): Promise<AccessToken>;\n\n protected resolveUrl(url: string): string {\n return this.apiServerUrl + url;\n }\n\n protected async resolveHeaders(headers: object): Promise<any> {\n const accessToken = await this.tokenManager.getAccessToken();\n return { headers: { Authorization: accessToken?.token || \"\", ...headers } };\n }\n\n protected async resolveResult(apiCall: () => Promise<any>): Promise<any> {\n try {\n return (await apiCall()).data;\n } catch (err) {\n //-- first attempt failed, check if that was because session was expired\n if (err.response?.data?.name !== Errors.SESSION_EXPIRED) {\n throw err;\n }\n await this.refreshToken(err);\n return (await apiCall()).data;\n }\n }\n\n async refreshToken(originalErr: any) {\n if (this.refreshing) {\n await new Promise<void>((resolve) => {\n this.refreshQueue.push({ resolver: resolve });\n });\n } else {\n //-- call to api server to refresh token\n const oldToken = await this.tokenManager.getAccessToken();\n if (!oldToken || !oldToken.refreshToken) {\n //-- there is no refresh token to refresh\n throw originalErr;\n }\n this.refreshing = true;\n try {\n const newToken = await this.getRefreshedAccessToken();\n await this.tokenManager.setAccessToken(newToken);\n this.logger.debug(\"Access token was refreshed\");\n this.refreshing = false;\n\n for (const refresh of this.refreshQueue) {\n refresh.resolver();\n }\n } catch (_e) {\n this.logger.debug(_e);\n throw originalErr;\n }\n }\n }\n\n abstract get<T>(url: string, headers?: any): Promise<T>;\n abstract post<T, R>(url: string, body: R, headers?: any): Promise<T>;\n abstract put<T, R>(url: string, body: R, headers?: any): Promise<T>;\n abstract delete<T>(url: string, headers?: any): Promise<T>;\n}\n","import { IClientSocket } from \"./IClientSocket\";\n\nexport abstract class AbstractClientSocketManager {\n abstract create(channels: string[]): IClientSocket;\n\n abstract forceReconnect(): void;\n abstract forceDisconnect(): void;\n}\n","import { ViewRoute } from \"./ViewRoute\";\n\nexport abstract class AbstractRouter {\n public abstract getRoutes(): ViewRoute;\n}\n","import { ClaireClient } from \"./system/ClaireClient\";\nimport { AxiosApiClient } from \"./api/AxiosApiClient\";\nimport { AbstractHttpClient } from \"./api/AbstractHttpClient\";\nimport { Translation } from \"./translation/Translation\";\nimport { AbstractClientSocketManager } from \"./socket/AbstractClientSocketManager\";\nimport { IClientSocket } from \"./socket/IClientSocket\";\nimport { DefaultClientSocketManager } from \"./socket/DefaultClientSocketManager\";\nimport { AbstractStorage } from \"./system/AbstractStorage\";\nimport { ClientGlobalStore } from \"./system/GlobalClientStore\";\nimport { Translator } from \"./translation/Translator\";\nimport { AbstractCrudRouter } from \"./routing/AbstractCrudRouter\";\nimport { AbstractErrorHandler } from \"./routing/AbstractErrorHandler\";\nimport { AbstractRouter } from \"./routing/AbstractRouter\";\nimport { AbstractViewMiddleware } from \"./routing/AbstractViewMiddleware\";\nimport { ViewRoute } from \"./routing/ViewRoute\";\nimport { UrlInfo } from \"./routing/UrlInfo\";\nimport { RouterConfig } from \"./routing/RouterConfig\";\nimport { ComponentInfo } from \"./routing/ComponentInfo\";\nimport { AbstractTokenManager } from \"./api/AbstractTokenManager\";\nimport { IWebSocket } from \"./socket/IWebSocket\";\n\nexport {\n //-- system\n ClaireClient,\n AbstractStorage,\n AbstractHttpClient,\n AxiosApiClient,\n ClientGlobalStore,\n AbstractTokenManager,\n //-- translation\n Translator,\n Translation,\n //-- socket\n IWebSocket,\n IClientSocket,\n DefaultClientSocketManager,\n AbstractClientSocketManager,\n //-- routing\n AbstractCrudRouter,\n AbstractErrorHandler,\n AbstractRouter,\n AbstractViewMiddleware,\n ComponentInfo,\n RouterConfig,\n UrlInfo,\n ViewRoute,\n};\n","import { ClaireApp, getServiceProvider } from \"@clairejs/core\";\n\nimport { Translation } from \"../translation/Translation\";\nimport { Translator } from \"../translation/Translator\";\n\nexport class ClaireClient extends ClaireApp {\n constructor() {\n super();\n getServiceProvider().register(Translator);\n }\n\n async init(): Promise<void> {\n await super.init();\n //-- resolve translation for it to register translation map\n const injector = getServiceProvider().getInjector();\n injector.resolve(Translation);\n injector.resolve(Translator);\n await injector.initInstances();\n }\n}\n","//@internal\nexport const SYSTEM_LANGUAGE = \"__SYSTEM_LANGUAGE__\";\n","import { AbstractLogger, AccessToken, ClaireError, Errors } from \"@clairejs/core\";\nimport axios from \"axios\";\n\nimport { AbstractHttpClient } from \"./AbstractHttpClient\";\nimport { AbstractTokenManager } from \"./AbstractTokenManager\";\n\nexport class AxiosApiClient extends AbstractHttpClient {\n public constructor(readonly apiServerUrl: string, readonly logger: AbstractLogger, readonly tokenManager: AbstractTokenManager) {\n super(apiServerUrl, logger, tokenManager);\n }\n\n protected getRefreshedAccessToken(): Promise<AccessToken> {\n throw new ClaireError(Errors.NOT_SUPPORTED, \"Refresh token not supported in default implementation\");\n }\n\n public async get<R>(url: string, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[GET] \", finalUrl);\n return this.resolveResult(async () => axios.get(finalUrl, await this.resolveHeaders(headers)));\n }\n public async post<T, R>(url: string, body: T, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[POST] \", finalUrl);\n return this.resolveResult(async () => axios.post(this.resolveUrl(url), body, await this.resolveHeaders(headers)));\n }\n public async put<T, R>(url: string, body: T, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[PUT] \", finalUrl);\n return this.resolveResult(async () => axios.put(this.resolveUrl(url), body, await this.resolveHeaders(headers)));\n }\n\n public async delete<R>(url: string, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[DEL] \", finalUrl);\n return this.resolveResult(async () => axios.delete(this.resolveUrl(url), await this.resolveHeaders(headers)));\n }\n}\n","module.exports = require(\"axios\");","import {\n AbstractLogger,\n SocketAuthenticationUpstreamMessage,\n SocketChannelRequestDownstreamMessage,\n SocketChannelRequestUpstreamMessage,\n SocketChannels,\n SocketPlainMessage,\n Errors,\n} from \"@clairejs/core\";\nimport { Observable, Subscriber, Subscription } from \"rxjs\";\n\nimport { AbstractTokenManager } from \"../api/AbstractTokenManager\";\nimport { AbstractHttpClient } from \"../api/AbstractHttpClient\";\nimport { AbstractClientSocketManager } from \"./AbstractClientSocketManager\";\nimport { SocketConfig } from \"./SocketConfig\";\nimport { ClientSocket } from \"./ClientSocket\";\nimport { IClientSocket } from \"./IClientSocket\";\nimport { IWebSocket } from \"./IWebSocket\";\n\nexport class DefaultClientSocketManager extends AbstractClientSocketManager {\n private socket?: IWebSocket;\n\n private allSockets: {\n socket: ClientSocket;\n connected?: boolean;\n channels: string[];\n subscriptions: Subscription[];\n\n connectionSubscriber?: Subscriber<boolean>;\n channelsSubscriber?: Subscriber<string[]>;\n messageReceivingSubscriber?: Subscriber<SocketPlainMessage>;\n messageSendingSubscriber?: Subscriber<SocketPlainMessage>;\n\n messageSendingObservable?: Observable<SocketPlainMessage>;\n channelsObservable?: Observable<string[]>;\n }[] = [];\n\n private allChannels: { channel: string; requested: boolean; connected: boolean }[] = [];\n\n private socketConnected?: boolean;\n private pingIntervalId?: any;\n private retryTimeoutId?: any;\n private accumulatedPing = 0;\n private retryDelay = 0;\n private intendedDisconnection?: boolean;\n\n constructor(\n private readonly wsProvider: () => IWebSocket,\n private readonly tokenManager: AbstractTokenManager,\n private readonly httpClient: AbstractHttpClient,\n private readonly logger: AbstractLogger,\n private readonly config?: SocketConfig\n ) {\n super();\n }\n\n create(channels: string[]): IClientSocket {\n const connectionObservable = new Observable<boolean>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n\n if (!socketInfo) {\n throw \"Cannot resolve socket info in connectionObservable\";\n }\n\n socketInfo.connectionSubscriber = subscriber;\n });\n\n const messageReceiveingObservable = new Observable<any>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in messageReceiveingObservable\";\n }\n socketInfo.messageReceivingSubscriber = subscriber;\n });\n\n const messageSendingObservable = new Observable<any>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in messageSendingObservable\";\n }\n socketInfo.messageSendingSubscriber = subscriber;\n });\n\n const channelsObservable = new Observable<string[]>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in channelsObservable\";\n }\n socketInfo.channelsSubscriber = subscriber;\n });\n\n const socket = new ClientSocket(\n messageReceiveingObservable,\n connectionObservable,\n (_socket) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo || !socketInfo.messageSendingSubscriber) {\n throw \"Cannot resolve socket info in messageSendingSubscriber resolver\";\n }\n return socketInfo.messageSendingSubscriber;\n },\n (_socket) => {\n //-- socket request connection\n const socketInfo = this.getSocketInfo(_socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in connection request\";\n }\n\n if (socketInfo.connected) {\n return;\n }\n\n if (!socketInfo.channelsObservable) {\n throw \"Channels observer not available\";\n }\n\n if (!socketInfo.messageSendingObservable) {\n throw \"Message sending observable not available\";\n }\n\n const sub = socketInfo.channelsObservable.subscribe({\n next: (availableChannels) => {\n if (!socketInfo.connected && socketInfo.channels.every((c) => availableChannels.includes(c))) {\n //-- socket connected\n socketInfo.connected = true;\n if (!socketInfo.connectionSubscriber) {\n throw \"Connection subscriber not available\";\n }\n socketInfo.connectionSubscriber.next(socketInfo.connected);\n } else if (socketInfo.connected && socketInfo.channels.some((c) => !availableChannels.includes(c))) {\n //-- socket disconnected\n socketInfo.connected = false;\n if (!socketInfo.connectionSubscriber) {\n throw \"Disconnection subscriber not available\";\n }\n socketInfo.connectionSubscriber.next(socketInfo.connected);\n }\n },\n });\n socketInfo.subscriptions.push(sub);\n\n socketInfo.messageSendingObservable.subscribe({\n next: (message) => {\n if (!socketInfo.connected) {\n throw \"Socket not connected\";\n }\n this.sendToChannel(SocketChannels.MESSAGE_CHANNEL, message);\n },\n });\n\n //-- register channel\n for (const channel of socketInfo.channels) {\n let channelInfo = this.allChannels.find((channelInfo) => channelInfo.channel === channel);\n if (!channelInfo) {\n channelInfo = { channel, requested: false, connected: false };\n this.allChannels.push(channelInfo);\n }\n channelInfo.requested = true;\n }\n\n //-- check and request for missing channels\n this.checkChannelRequests();\n },\n (_socket) => {\n //-- socket request disconnection\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in disconnection request\";\n }\n\n //-- remove socket\n socketInfo.subscriptions.forEach((sub) => sub.unsubscribe());\n\n const index = this.allSockets.indexOf(socketInfo);\n if (index >= 0) {\n this.allSockets.splice(index, 1);\n }\n }\n );\n\n this.allSockets.push({ socket, channels, messageSendingObservable, channelsObservable, subscriptions: [] });\n\n return socket;\n }\n\n forceDisconnect() {\n this.intendedDisconnection = true;\n if (this.socket) {\n this.socket.close();\n this.socket = undefined;\n }\n\n if (this.retryTimeoutId) {\n clearTimeout(this.retryTimeoutId);\n }\n }\n\n forceReconnect(): void {\n this.intendedDisconnection = false;\n if (this.socketConnected) {\n this.socket?.close();\n } else {\n this.retryDelay = 0;\n if (this.socket === undefined) {\n if (this.retryTimeoutId) {\n clearTimeout(this.retryTimeoutId);\n this.retryTimeoutId = undefined;\n }\n this.connect();\n }\n }\n }\n\n private connect() {\n this.socket = this.wsProvider();\n\n this.socket.onopen(() => {\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n }\n\n this.tokenManager\n .getAccessToken()\n .then((accessToken) => {\n this.sendToChannel(SocketChannels.AUTHENTICATION_CHANNEL, {\n authorizationData: accessToken?.token,\n } as SocketAuthenticationUpstreamMessage);\n })\n .catch((err) => {\n this.logger.error(err);\n this.forceReconnect();\n });\n });\n\n this.socket.onmessage((data) => {\n if (!data) {\n return;\n }\n\n const { channel, message } = JSON.parse(data) as { channel: string; message: any };\n this.logger.debug(\"Receive\", channel, message);\n\n switch (channel) {\n case SocketChannels.PING_PONG_CHANNEL:\n {\n this.accumulatedPing = 0;\n }\n return;\n\n case SocketChannels.AUTHENTICATION_CHANNEL:\n {\n this.logger.debug(\"Socket connection established\", message);\n //-- socket authenticated\n this.socketConnected = true;\n\n //-- socket open, set interval\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n }\n\n this.accumulatedPing = 0;\n this.pingIntervalId = setInterval(() => {\n this.accumulatedPing += 1;\n if (this.accumulatedPing > (this.config?.keepAlive?.deadThreashold || 3)) {\n //-- socket connection lost, not intended\n this.intendedDisconnection = false;\n this.socket?.close();\n } else {\n this.sendToChannel(SocketChannels.PING_PONG_CHANNEL);\n }\n }, this.config?.keepAlive?.pingIntervalMs || 10000);\n\n this.intendedDisconnection = false;\n if (this.retryTimeoutId) {\n clearTimeout(this.retryTimeoutId);\n this.retryTimeoutId = undefined;\n }\n\n //-- check and send pending channel join requests\n this.checkChannelRequests();\n }\n return;\n\n case SocketChannels.CHANNEL_JOIN_REQUEST:\n {\n const receivedMessage = message as SocketChannelRequestDownstreamMessage;\n if (!receivedMessage.success) {\n this.logger.error(receivedMessage.error);\n return;\n }\n\n receivedMessage.channels.forEach((channel) => {\n const channelInfo = this.allChannels.find((info) => info.channel === channel);\n if (channelInfo) {\n channelInfo.connected = true;\n channelInfo.requested = false;\n }\n });\n\n this.notifyCurrentChannels();\n }\n return;\n\n case SocketChannels.CHANNEL_LEAVE_REQUEST:\n {\n const receivedMessage = message as SocketChannelRequestDownstreamMessage;\n if (!receivedMessage.success) {\n this.logger.error(receivedMessage.error);\n return;\n }\n\n receivedMessage.channels.forEach((channel) => {\n const channelInfo = this.allChannels.find((info) => info.channel === channel);\n if (channelInfo) {\n channelInfo.connected = false;\n }\n });\n\n this.notifyCurrentChannels();\n }\n return;\n\n case SocketChannels.MESSAGE_CHANNEL:\n {\n const receivedMessage = message as SocketPlainMessage;\n\n this.allSockets.forEach((socketInfo) => {\n if (!socketInfo.channels.includes(receivedMessage.channel)) {\n return;\n }\n socketInfo.messageReceivingSubscriber?.next(receivedMessage);\n });\n }\n return;\n\n case SocketChannels.DISCONNECTION_CHANNEL:\n {\n if (message.name === Errors.SESSION_EXPIRED) {\n //-- retry once\n this.httpClient\n .refreshToken(message)\n .then(() => {\n if (!!this.socket) {\n this.intendedDisconnection = false;\n this.socket.close();\n } else {\n this.forceReconnect();\n }\n })\n .catch((err) => {\n this.logger.debug(err);\n this.intendedDisconnection = true;\n this.socket?.close();\n });\n } else {\n this.intendedDisconnection = true;\n this.socket?.close();\n }\n }\n return;\n default:\n return;\n }\n });\n\n this.socket.onclose(() => {\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n }\n\n this.socket = undefined;\n this.socketConnected = false;\n\n //-- clear all channels and notify for disconnection\n for (const channel of this.allChannels) {\n channel.connected = false;\n channel.requested = true;\n }\n this.notifyCurrentChannels();\n\n this.logger.debug(\"Socket connnection closed, intended \", this.intendedDisconnection);\n\n //-- skip if retryDelay has been set\n if (this.intendedDisconnection) {\n //-- do nothing more\n this.logger.debug(\"Socket connection terminated\");\n } else {\n if (!this.retryTimeoutId) {\n this.retryDelay = 0;\n this.retry();\n }\n }\n });\n }\n\n private retry() {\n this.logger.debug(`Socket connection retrying in ${this.retryDelay}ms`);\n this.connect();\n this.retryDelay += this.config?.reconnectTimeDeltaMs || 3000;\n this.retryTimeoutId = setTimeout(() => {\n if (!this.socketConnected && !this.intendedDisconnection) {\n this.retry();\n }\n }, this.retryDelay);\n }\n\n private checkChannelRequests() {\n if (!this.socketConnected) {\n return;\n }\n\n const pendingChannels = this.allChannels.filter((c) => c.requested).map((c) => c.channel);\n pendingChannels.length && this.sendToChannel(SocketChannels.CHANNEL_JOIN_REQUEST, { channels: pendingChannels } as SocketChannelRequestUpstreamMessage);\n }\n\n private notifyCurrentChannels() {\n const boundChannels = this.allChannels.filter((c) => c.connected).map((c) => c.channel);\n this.allSockets.forEach((socketInfo) => socketInfo.channelsSubscriber?.next(boundChannels));\n }\n\n private getSocketInfo(socket: IClientSocket) {\n return this.allSockets.find((info) => info.socket === socket);\n }\n\n private sendToChannel(channel: string, message?: any) {\n this.logger.debug(\"Send\", channel, message);\n if (!this.socket) {\n throw \"Socket not available\";\n }\n let data = JSON.stringify({ channel, message });\n this.socket.send(data);\n }\n}\n","module.exports = require(\"rxjs\");","import { SocketPlainMessage } from \"@clairejs/core\";\nimport { Subscriber, Observable } from \"rxjs\";\n\nimport { IClientSocket } from \"./IClientSocket\";\n\nexport class ClientSocket implements IClientSocket {\n reconnectHandler?: () => void;\n disconnectHandler?: () => void;\n messageHandler?: (message: SocketPlainMessage) => void;\n messsageSendingSubscriber?: Subscriber<SocketPlainMessage>;\n\n public constructor(\n private readonly messageReceivingObservable: Observable<SocketPlainMessage>,\n private readonly connectionObservable: Observable<boolean>,\n private readonly messsageSendingSubscriberResolver: (socket: IClientSocket) => Subscriber<SocketPlainMessage>,\n private readonly initFn: (socket: IClientSocket) => void,\n private readonly destructorFn: (socket: IClientSocket) => void\n ) {}\n\n send(message: SocketPlainMessage): void {\n if (!this.messsageSendingSubscriber) {\n this.messsageSendingSubscriber = this.messsageSendingSubscriberResolver(this);\n }\n this.messsageSendingSubscriber.next(message);\n }\n\n onMessage(handler: (message: SocketPlainMessage) => void): void {\n this.messageHandler = handler;\n }\n\n onDisconnect(handler: () => void): void {\n this.disconnectHandler = handler;\n }\n\n onReconnect(handler: () => void): void {\n this.reconnectHandler = handler;\n }\n\n connect(): void {\n this.connectionObservable.subscribe({\n next: (connected) => {\n if (connected) {\n this.reconnectHandler && this.reconnectHandler();\n } else {\n this.disconnectHandler && this.disconnectHandler();\n }\n },\n });\n this.messageReceivingObservable.subscribe({ next: (message) => this.messageHandler && this.messageHandler(message) });\n this.initFn(this);\n }\n\n disconnect(): void {\n this.destructorFn(this);\n }\n}\n","import { AbstractRouter } from \"./AbstractRouter\";\nimport { ComponentInfo } from \"./ComponentInfo\";\n\nexport abstract class AbstractCrudRouter extends AbstractRouter {\n getRoutes() {\n return {\n [\"\"]: this.getListComponent(),\n [`view/:id`]: this.getItemComponent(),\n [`edit/:id`]: this.getEditComponent(),\n [`del/:id`]: this.getDeleteComponent(),\n [`new`]: this.getNewComponent(),\n };\n }\n\n public abstract getListComponent(): ComponentInfo;\n public abstract getItemComponent(): ComponentInfo;\n public abstract getEditComponent(): ComponentInfo;\n public abstract getNewComponent(): ComponentInfo;\n public abstract getDeleteComponent(): ComponentInfo;\n}\n","export abstract class AbstractErrorHandler {\n public abstract handle(err: any, component?: any): void;\n}\n","import { UrlInfo } from \"./UrlInfo\";\nexport abstract class AbstractViewMiddleware {\n public abstract intercept(from: UrlInfo, to: UrlInfo): Promise<string | Partial<UrlInfo> | undefined>;\n}\n","import { AccessToken } from \"@clairejs/core\";\n\nexport abstract class AbstractTokenManager {\n abstract getAccessToken(): Promise<AccessToken | undefined>;\n abstract setAccessToken(token?: AccessToken): Promise<void>;\n}\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"@clairejs/core\"","webpack:///./src/translation/Translation.ts","webpack:///./src/translation/Translator.ts","webpack:///./src/system/AbstractStorage.ts","webpack:///./src/api/AbstractHttpClient.ts","webpack:///./src/socket/AbstractClientSocketManager.ts","webpack:///./src/index.ts","webpack:///./src/system/ClaireClient.ts","webpack:///./src/constants.ts","webpack:///./src/api/AxiosApiClient.ts","webpack:///external \"axios\"","webpack:///./src/socket/DefaultClientSocketManager.ts","webpack:///external \"rxjs\"","webpack:///./src/socket/ClientSocket.ts","webpack:///./src/routing/AbstractErrorHandler.ts","webpack:///./src/routing/AbstractRouter.ts","webpack:///./src/routing/AbstractViewMiddleware.ts","webpack:///./src/api/AbstractTokenManager.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","getDefault","getModuleExports","object","property","prototype","hasOwnProperty","p","s","require","LocaleTranslator","translationRegex","localeResolver","getGlobalStore","systemLanguage","keyResolver","translation","_this","this","translationMap","locales","keys","resolveTranslation","translationsObject","translationValues","reduce","collector","forEach","includes","push","every","map","data","currentLocale","indexOf","result","exec","substring","index","length","configurable","writable","values","Translation","buildTranslation","populateTranslationObject","Translator","storage","langCodes","getLanguages","lang","getItem","SYSTEM_LANGUAGE","setItem","Initable","AbstractStorage","AbstractHttpClient","apiServerUrl","logger","tokenManager","refreshing","refreshQueue","url","headers","accessToken","getAccessToken","Authorization","token","apiCall","err","response","Errors","SESSION_EXPIRED","refreshToken","originalErr","Promise","resolve","resolver","oldToken","newToken","getRefreshedAccessToken","setAccessToken","debug","refresh","_e","AbstractClientSocketManager","ClaireClient","AxiosApiClient","DefaultClientSocketManager","AbstractErrorHandler","AbstractRouter","AbstractViewMiddleware","AbstractTokenManager","ClaireApp","super","getServiceProvider","register","init","injector","getInjector","initInstances","ClaireError","NOT_SUPPORTED","finalUrl","resolveUrl","resolveResult","resolveHeaders","body","post","put","delete","wsProvider","httpClient","config","allSockets","allChannels","accumulatedPing","retryDelay","channels","connectionObservable","Observable","subscriber","socketInfo","getSocketInfo","socket","connectionSubscriber","messageReceiveingObservable","messageReceivingSubscriber","messageSendingObservable","messageSendingSubscriber","channelsObservable","channelsSubscriber","ClientSocket","_socket","connected","sub","subscribe","next","availableChannels","some","subscriptions","message","sendToChannel","SocketChannels","MESSAGE_CHANNEL","channel","channelInfo","find","requested","checkChannelRequests","unsubscribe","splice","intendedDisconnection","close","undefined","retryTimeoutId","clearTimeout","socketConnected","connect","onopen","pingIntervalId","clearInterval","then","AUTHENTICATION_CHANNEL","authorizationData","catch","error","forceReconnect","onmessage","JSON","parse","PING_PONG_CHANNEL","setInterval","keepAlive","deadThreashold","pingIntervalMs","CHANNEL_JOIN_REQUEST","receivedMessage","success","info","notifyCurrentChannels","CHANNEL_LEAVE_REQUEST","DISCONNECTION_CHANNEL","onclose","retry","reconnectTimeDeltaMs","setTimeout","pendingChannels","filter","boundChannels","stringify","send","messageReceivingObservable","messsageSendingSubscriberResolver","initFn","destructorFn","messsageSendingSubscriber","handler","messageHandler","disconnectHandler","reconnectHandler"],"mappings":"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","file":"index.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n","module.exports = require(\"@clairejs/core\");","import { getGlobalStore } from \"@clairejs/core\";\nimport { ClientGlobalStore } from \"../system/GlobalClientStore\";\nimport { TranslationMap } from \"./TranslationMap\";\n\nclass LocaleTranslator {\n private readonly translationRegex = /{(\\w+)}/g;\n private readonly localeResolver = () => getGlobalStore<ClientGlobalStore>().systemLanguage;\n private readonly keyResolver = (key: string) => `__${key}__`;\n\n public populateTranslationObject(translation: Translation) {\n const _this = this;\n const translationMap = getGlobalStore<ClientGlobalStore>().translationMap;\n const locales = Object.keys(translationMap || {});\n\n const resolveTranslation = (translationsObject: any, translationValues: any[]): void => {\n //-- get all keys of languages\n const keys = translationValues.reduce((collector, translation) => {\n Object.keys(translation).forEach((key) => {\n if (!collector.includes(key)) {\n collector.push(key);\n }\n });\n return collector;\n }, [] as string[]);\n\n //-- create getters / setters for those keys if data type of value is string\n for (const key of keys) {\n const isObject = translationValues.every((value) => typeof value[key] === \"object\");\n if (isObject) {\n translationsObject[key] = {};\n resolveTranslation(\n translationsObject[key],\n translationValues.map((value) => value[key])\n );\n } else {\n translationsObject[this.keyResolver(key)] = translationValues.map((value) => value[key]);\n Object.defineProperty(translationsObject, key, {\n value: function (data: any): string {\n const currentLocale = _this.localeResolver();\n if (!currentLocale) {\n return \"\";\n }\n\n let translation = this[_this.keyResolver(key)][locales.indexOf(currentLocale)] as string;\n if (data) {\n let result;\n do {\n result = _this.translationRegex.exec(translation);\n if (result) {\n translation = `${translation.substring(0, result.index)}${data[result[1]] || \"\"}${translation.substring(\n result.index + result[0].length\n )}`;\n }\n } while (result);\n }\n return translation;\n },\n configurable: false,\n writable: false,\n });\n }\n }\n };\n\n resolveTranslation(translation, Object.values(translationMap || {}));\n }\n}\n\nexport class Translation {\n constructor(translationMap: TranslationMap) {\n const store = getGlobalStore<ClientGlobalStore>();\n store.translationMap = translationMap;\n this.buildTranslation();\n }\n\n private async buildTranslation() {\n const localeTranslator = new LocaleTranslator();\n localeTranslator.populateTranslationObject(this);\n }\n}\n","import { getGlobalStore, IInit, Initable } from \"@clairejs/core\";\nimport { SYSTEM_LANGUAGE } from \"../constants\";\nimport { AbstractStorage } from \"../system/AbstractStorage\";\nimport { ClientGlobalStore } from \"../system/GlobalClientStore\";\n\n@Initable()\nexport class Translator implements IInit {\n constructor(readonly storage: AbstractStorage) {}\n\n async init(): Promise<void> {\n const langCodes = await this.getLanguages();\n\n //-- init default language\n if (langCodes.length) {\n let lang = await this.storage.getItem<string>(SYSTEM_LANGUAGE);\n if (!lang || !langCodes.includes(lang)) {\n lang = langCodes[0];\n await this.storage.setItem(SYSTEM_LANGUAGE, lang);\n }\n getGlobalStore<ClientGlobalStore>().systemLanguage = lang;\n }\n }\n\n exit(): void {}\n\n async getCurrentLanguage(): Promise<string | undefined> {\n return getGlobalStore<ClientGlobalStore>().systemLanguage;\n }\n\n async setCurrentLanguage(lang: string): Promise<void> {\n getGlobalStore<ClientGlobalStore>().systemLanguage = lang;\n //-- set local storage\n await this.storage.setItem(SYSTEM_LANGUAGE, lang);\n }\n\n async getLanguages(): Promise<string[]> {\n return Object.keys(getGlobalStore<ClientGlobalStore>().translationMap || {});\n }\n}\n","export abstract class AbstractStorage {\n public abstract getItem<T>(key: string): Promise<T | undefined>;\n public abstract setItem<T>(key: string, value: T): Promise<void>;\n public abstract deleteItem(key: string): Promise<void>;\n}\n","import { AbstractLogger, Errors, AccessToken } from \"@clairejs/core\";\nimport { AbstractTokenManager } from \"./AbstractTokenManager\";\n\nexport abstract class AbstractHttpClient {\n private refreshing = false;\n private refreshQueue: {\n resolver: () => void;\n }[] = [];\n\n constructor(readonly apiServerUrl: string, readonly logger: AbstractLogger, readonly tokenManager: AbstractTokenManager) {}\n\n protected abstract getRefreshedAccessToken(): Promise<AccessToken>;\n\n protected resolveUrl(url: string): string {\n return this.apiServerUrl + url;\n }\n\n protected async resolveHeaders(headers: object): Promise<any> {\n const accessToken = await this.tokenManager.getAccessToken();\n return { headers: { Authorization: accessToken?.token || \"\", ...headers } };\n }\n\n protected async resolveResult(apiCall: () => Promise<any>): Promise<any> {\n try {\n return (await apiCall()).data;\n } catch (err) {\n //-- first attempt failed, check if that was because session was expired\n if (err.response?.data?.name !== Errors.SESSION_EXPIRED) {\n throw err;\n }\n await this.refreshToken(err);\n return (await apiCall()).data;\n }\n }\n\n async refreshToken(originalErr: any) {\n if (this.refreshing) {\n await new Promise<void>((resolve) => {\n this.refreshQueue.push({ resolver: resolve });\n });\n } else {\n //-- call to api server to refresh token\n const oldToken = await this.tokenManager.getAccessToken();\n if (!oldToken || !oldToken.refreshToken) {\n //-- there is no refresh token to refresh\n throw originalErr;\n }\n this.refreshing = true;\n try {\n const newToken = await this.getRefreshedAccessToken();\n await this.tokenManager.setAccessToken(newToken);\n this.logger.debug(\"Access token was refreshed\");\n this.refreshing = false;\n\n for (const refresh of this.refreshQueue) {\n refresh.resolver();\n }\n } catch (_e) {\n this.logger.debug(_e);\n throw originalErr;\n }\n }\n }\n\n abstract get<T>(url: string, headers?: any): Promise<T>;\n abstract post<T extends any, R extends any>(url: string, body: R, headers?: any): Promise<T>;\n abstract put<T extends any, R extends any>(url: string, body: R, headers?: any): Promise<T>;\n abstract delete<T>(url: string, headers?: any): Promise<T>;\n}\n","import { IClientSocket } from \"./IClientSocket\";\n\nexport abstract class AbstractClientSocketManager {\n abstract create(channels: string[]): IClientSocket;\n\n abstract forceReconnect(): void;\n abstract forceDisconnect(): void;\n}\n","import { ClaireClient } from \"./system/ClaireClient\";\nimport { AxiosApiClient } from \"./api/AxiosApiClient\";\nimport { AbstractHttpClient } from \"./api/AbstractHttpClient\";\nimport { Translation } from \"./translation/Translation\";\nimport { AbstractClientSocketManager } from \"./socket/AbstractClientSocketManager\";\nimport { IClientSocket } from \"./socket/IClientSocket\";\nimport { DefaultClientSocketManager } from \"./socket/DefaultClientSocketManager\";\nimport { AbstractStorage } from \"./system/AbstractStorage\";\nimport { ClientGlobalStore } from \"./system/GlobalClientStore\";\nimport { Translator } from \"./translation/Translator\";\nimport { AbstractErrorHandler } from \"./routing/AbstractErrorHandler\";\nimport { AbstractRouter } from \"./routing/AbstractRouter\";\nimport { AbstractViewMiddleware } from \"./routing/AbstractViewMiddleware\";\nimport { ViewRoute } from \"./routing/ViewRoute\";\nimport { UrlInfo } from \"./routing/UrlInfo\";\nimport { RouterConfig } from \"./routing/RouterConfig\";\nimport { ComponentInfo } from \"./routing/ComponentInfo\";\nimport { AbstractTokenManager } from \"./api/AbstractTokenManager\";\nimport { IWebSocket } from \"./socket/IWebSocket\";\n\nexport {\n //-- system\n ClaireClient,\n AbstractStorage,\n AbstractHttpClient,\n AxiosApiClient,\n ClientGlobalStore,\n AbstractTokenManager,\n //-- translation\n Translator,\n Translation,\n //-- socket\n IWebSocket,\n IClientSocket,\n DefaultClientSocketManager,\n AbstractClientSocketManager,\n //-- routing\n AbstractErrorHandler,\n AbstractRouter,\n AbstractViewMiddleware,\n ComponentInfo,\n RouterConfig,\n UrlInfo,\n ViewRoute,\n};\n","import { ClaireApp, getServiceProvider } from \"@clairejs/core\";\n\nimport { Translation } from \"../translation/Translation\";\nimport { Translator } from \"../translation/Translator\";\n\nexport class ClaireClient extends ClaireApp {\n constructor() {\n super();\n getServiceProvider().register(Translator);\n }\n\n async init(): Promise<void> {\n await super.init();\n //-- resolve translation for it to register translation map\n const injector = getServiceProvider().getInjector();\n injector.resolve(Translation);\n injector.resolve(Translator);\n await injector.initInstances();\n }\n}\n","//@internal\nexport const SYSTEM_LANGUAGE = \"__SYSTEM_LANGUAGE__\";\n","import { AbstractLogger, AccessToken, ClaireError, Errors } from \"@clairejs/core\";\nimport axios from \"axios\";\n\nimport { AbstractHttpClient } from \"./AbstractHttpClient\";\nimport { AbstractTokenManager } from \"./AbstractTokenManager\";\n\nexport class AxiosApiClient extends AbstractHttpClient {\n public constructor(readonly apiServerUrl: string, readonly logger: AbstractLogger, readonly tokenManager: AbstractTokenManager) {\n super(apiServerUrl, logger, tokenManager);\n }\n\n protected getRefreshedAccessToken(): Promise<AccessToken> {\n throw new ClaireError(Errors.NOT_SUPPORTED, \"Refresh token not supported in default implementation\");\n }\n\n public async get<R>(url: string, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[GET] \", finalUrl);\n return this.resolveResult(async () => axios.get(finalUrl, await this.resolveHeaders(headers)));\n }\n public async post<T, R>(url: string, body: T, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[POST] \", finalUrl);\n return this.resolveResult(async () => axios.post(this.resolveUrl(url), body, await this.resolveHeaders(headers)));\n }\n public async put<T, R>(url: string, body: T, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[PUT] \", finalUrl);\n return this.resolveResult(async () => axios.put(this.resolveUrl(url), body, await this.resolveHeaders(headers)));\n }\n\n public async delete<R>(url: string, headers?: any): Promise<R> {\n const finalUrl = this.resolveUrl(url);\n this.logger.debug(\"[DEL] \", finalUrl);\n return this.resolveResult(async () => axios.delete(this.resolveUrl(url), await this.resolveHeaders(headers)));\n }\n}\n","module.exports = require(\"axios\");","import {\n AbstractLogger,\n SocketAuthenticationUpstreamMessage,\n SocketChannelRequestDownstreamMessage,\n SocketChannelRequestUpstreamMessage,\n SocketChannels,\n SocketPlainMessage,\n Errors,\n} from \"@clairejs/core\";\nimport { Observable, Subscriber, Subscription } from \"rxjs\";\n\nimport { AbstractTokenManager } from \"../api/AbstractTokenManager\";\nimport { AbstractHttpClient } from \"../api/AbstractHttpClient\";\nimport { AbstractClientSocketManager } from \"./AbstractClientSocketManager\";\nimport { SocketConfig } from \"./SocketConfig\";\nimport { ClientSocket } from \"./ClientSocket\";\nimport { IClientSocket } from \"./IClientSocket\";\nimport { IWebSocket } from \"./IWebSocket\";\n\nexport class DefaultClientSocketManager extends AbstractClientSocketManager {\n private socket?: IWebSocket;\n\n private allSockets: {\n socket: ClientSocket;\n connected?: boolean;\n channels: string[];\n subscriptions: Subscription[];\n\n connectionSubscriber?: Subscriber<boolean>;\n channelsSubscriber?: Subscriber<string[]>;\n messageReceivingSubscriber?: Subscriber<SocketPlainMessage>;\n messageSendingSubscriber?: Subscriber<SocketPlainMessage>;\n\n messageSendingObservable?: Observable<SocketPlainMessage>;\n channelsObservable?: Observable<string[]>;\n }[] = [];\n\n private allChannels: { channel: string; requested: boolean; connected: boolean }[] = [];\n\n private socketConnected?: boolean;\n private pingIntervalId?: any;\n private retryTimeoutId?: any;\n private accumulatedPing = 0;\n private retryDelay = 0;\n private intendedDisconnection?: boolean;\n\n constructor(\n private readonly wsProvider: () => IWebSocket,\n private readonly tokenManager: AbstractTokenManager,\n private readonly httpClient: AbstractHttpClient,\n private readonly logger: AbstractLogger,\n private readonly config?: SocketConfig\n ) {\n super();\n }\n\n create(channels: string[]): IClientSocket {\n const connectionObservable = new Observable<boolean>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n\n if (!socketInfo) {\n throw \"Cannot resolve socket info in connectionObservable\";\n }\n\n socketInfo.connectionSubscriber = subscriber;\n });\n\n const messageReceiveingObservable = new Observable<any>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in messageReceiveingObservable\";\n }\n socketInfo.messageReceivingSubscriber = subscriber;\n });\n\n const messageSendingObservable = new Observable<any>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in messageSendingObservable\";\n }\n socketInfo.messageSendingSubscriber = subscriber;\n });\n\n const channelsObservable = new Observable<string[]>((subscriber) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in channelsObservable\";\n }\n socketInfo.channelsSubscriber = subscriber;\n });\n\n const socket = new ClientSocket(\n messageReceiveingObservable,\n connectionObservable,\n (_socket) => {\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo || !socketInfo.messageSendingSubscriber) {\n throw \"Cannot resolve socket info in messageSendingSubscriber resolver\";\n }\n return socketInfo.messageSendingSubscriber;\n },\n (_socket) => {\n //-- socket request connection\n const socketInfo = this.getSocketInfo(_socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in connection request\";\n }\n\n if (socketInfo.connected) {\n return;\n }\n\n if (!socketInfo.channelsObservable) {\n throw \"Channels observer not available\";\n }\n\n if (!socketInfo.messageSendingObservable) {\n throw \"Message sending observable not available\";\n }\n\n const sub = socketInfo.channelsObservable.subscribe({\n next: (availableChannels) => {\n if (!socketInfo.connected && socketInfo.channels.every((c) => availableChannels.includes(c))) {\n //-- socket connected\n socketInfo.connected = true;\n if (!socketInfo.connectionSubscriber) {\n throw \"Connection subscriber not available\";\n }\n socketInfo.connectionSubscriber.next(socketInfo.connected);\n } else if (socketInfo.connected && socketInfo.channels.some((c) => !availableChannels.includes(c))) {\n //-- socket disconnected\n socketInfo.connected = false;\n if (!socketInfo.connectionSubscriber) {\n throw \"Disconnection subscriber not available\";\n }\n socketInfo.connectionSubscriber.next(socketInfo.connected);\n }\n },\n });\n socketInfo.subscriptions.push(sub);\n\n socketInfo.messageSendingObservable.subscribe({\n next: (message) => {\n if (!socketInfo.connected) {\n throw \"Socket not connected\";\n }\n this.sendToChannel(SocketChannels.MESSAGE_CHANNEL, message);\n },\n });\n\n //-- register channel\n for (const channel of socketInfo.channels) {\n let channelInfo = this.allChannels.find((channelInfo) => channelInfo.channel === channel);\n if (!channelInfo) {\n channelInfo = { channel, requested: false, connected: false };\n this.allChannels.push(channelInfo);\n }\n channelInfo.requested = true;\n }\n\n //-- check and request for missing channels\n this.checkChannelRequests();\n },\n (_socket) => {\n //-- socket request disconnection\n const socketInfo = this.getSocketInfo(socket);\n if (!socketInfo) {\n throw \"Cannot resolve socket info in disconnection request\";\n }\n\n //-- remove socket\n socketInfo.subscriptions.forEach((sub) => sub.unsubscribe());\n\n const index = this.allSockets.indexOf(socketInfo);\n if (index >= 0) {\n this.allSockets.splice(index, 1);\n }\n }\n );\n\n this.allSockets.push({ socket, channels, messageSendingObservable, channelsObservable, subscriptions: [] });\n\n return socket;\n }\n\n forceDisconnect() {\n this.intendedDisconnection = true;\n if (this.socket) {\n this.socket.close();\n this.socket = undefined;\n }\n\n if (this.retryTimeoutId) {\n clearTimeout(this.retryTimeoutId);\n }\n }\n\n forceReconnect(): void {\n this.intendedDisconnection = false;\n if (this.socketConnected) {\n this.socket?.close();\n } else {\n this.retryDelay = 0;\n if (this.socket === undefined) {\n if (this.retryTimeoutId) {\n clearTimeout(this.retryTimeoutId);\n this.retryTimeoutId = undefined;\n }\n this.connect();\n }\n }\n }\n\n private connect() {\n this.socket = this.wsProvider();\n\n this.socket.onopen(() => {\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n }\n\n this.tokenManager\n .getAccessToken()\n .then((accessToken) => {\n this.sendToChannel(SocketChannels.AUTHENTICATION_CHANNEL, {\n authorizationData: accessToken?.token,\n } as SocketAuthenticationUpstreamMessage);\n })\n .catch((err) => {\n this.logger.error(err);\n this.forceReconnect();\n });\n });\n\n this.socket.onmessage((data) => {\n if (!data) {\n return;\n }\n\n const { channel, message } = JSON.parse(data) as { channel: string; message: any };\n this.logger.debug(\"Receive\", channel, message);\n\n switch (channel) {\n case SocketChannels.PING_PONG_CHANNEL:\n {\n this.accumulatedPing = 0;\n }\n return;\n\n case SocketChannels.AUTHENTICATION_CHANNEL:\n {\n this.logger.debug(\"Socket connection established\", message);\n //-- socket authenticated\n this.socketConnected = true;\n\n //-- socket open, set interval\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n }\n\n this.accumulatedPing = 0;\n this.pingIntervalId = setInterval(() => {\n this.accumulatedPing += 1;\n if (this.accumulatedPing > (this.config?.keepAlive?.deadThreashold || 3)) {\n //-- socket connection lost, not intended\n this.intendedDisconnection = false;\n this.socket?.close();\n } else {\n this.sendToChannel(SocketChannels.PING_PONG_CHANNEL);\n }\n }, this.config?.keepAlive?.pingIntervalMs || 10000);\n\n this.intendedDisconnection = false;\n if (this.retryTimeoutId) {\n clearTimeout(this.retryTimeoutId);\n this.retryTimeoutId = undefined;\n }\n\n //-- check and send pending channel join requests\n this.checkChannelRequests();\n }\n return;\n\n case SocketChannels.CHANNEL_JOIN_REQUEST:\n {\n const receivedMessage = message as SocketChannelRequestDownstreamMessage;\n if (!receivedMessage.success) {\n this.logger.error(receivedMessage.error);\n return;\n }\n\n receivedMessage.channels.forEach((channel) => {\n const channelInfo = this.allChannels.find((info) => info.channel === channel);\n if (channelInfo) {\n channelInfo.connected = true;\n channelInfo.requested = false;\n }\n });\n\n this.notifyCurrentChannels();\n }\n return;\n\n case SocketChannels.CHANNEL_LEAVE_REQUEST:\n {\n const receivedMessage = message as SocketChannelRequestDownstreamMessage;\n if (!receivedMessage.success) {\n this.logger.error(receivedMessage.error);\n return;\n }\n\n receivedMessage.channels.forEach((channel) => {\n const channelInfo = this.allChannels.find((info) => info.channel === channel);\n if (channelInfo) {\n channelInfo.connected = false;\n }\n });\n\n this.notifyCurrentChannels();\n }\n return;\n\n case SocketChannels.MESSAGE_CHANNEL:\n {\n const receivedMessage = message as SocketPlainMessage;\n\n this.allSockets.forEach((socketInfo) => {\n if (!socketInfo.channels.includes(receivedMessage.channel)) {\n return;\n }\n socketInfo.messageReceivingSubscriber?.next(receivedMessage);\n });\n }\n return;\n\n case SocketChannels.DISCONNECTION_CHANNEL:\n {\n if (message.name === Errors.SESSION_EXPIRED) {\n //-- retry once\n this.httpClient\n .refreshToken(message)\n .then(() => {\n if (!!this.socket) {\n this.intendedDisconnection = false;\n this.socket.close();\n } else {\n this.forceReconnect();\n }\n })\n .catch((err) => {\n this.logger.debug(err);\n this.intendedDisconnection = true;\n this.socket?.close();\n });\n } else {\n this.intendedDisconnection = true;\n this.socket?.close();\n }\n }\n return;\n default:\n return;\n }\n });\n\n this.socket.onclose(() => {\n if (this.pingIntervalId) {\n clearInterval(this.pingIntervalId);\n }\n\n this.socket = undefined;\n this.socketConnected = false;\n\n //-- clear all channels and notify for disconnection\n for (const channel of this.allChannels) {\n channel.connected = false;\n channel.requested = true;\n }\n this.notifyCurrentChannels();\n\n this.logger.debug(\"Socket connnection closed, intended \", this.intendedDisconnection);\n\n //-- skip if retryDelay has been set\n if (this.intendedDisconnection) {\n //-- do nothing more\n this.logger.debug(\"Socket connection terminated\");\n } else {\n if (!this.retryTimeoutId) {\n this.retryDelay = 0;\n this.retry();\n }\n }\n });\n }\n\n private retry() {\n this.logger.debug(`Socket connection retrying in ${this.retryDelay}ms`);\n this.connect();\n this.retryDelay += this.config?.reconnectTimeDeltaMs || 3000;\n this.retryTimeoutId = setTimeout(() => {\n if (!this.socketConnected && !this.intendedDisconnection) {\n this.retry();\n }\n }, this.retryDelay);\n }\n\n private checkChannelRequests() {\n if (!this.socketConnected) {\n return;\n }\n\n const pendingChannels = this.allChannels.filter((c) => c.requested).map((c) => c.channel);\n pendingChannels.length && this.sendToChannel(SocketChannels.CHANNEL_JOIN_REQUEST, { channels: pendingChannels } as SocketChannelRequestUpstreamMessage);\n }\n\n private notifyCurrentChannels() {\n const boundChannels = this.allChannels.filter((c) => c.connected).map((c) => c.channel);\n this.allSockets.forEach((socketInfo) => socketInfo.channelsSubscriber?.next(boundChannels));\n }\n\n private getSocketInfo(socket: IClientSocket) {\n return this.allSockets.find((info) => info.socket === socket);\n }\n\n private sendToChannel(channel: string, message?: any) {\n this.logger.debug(\"Send\", channel, message);\n if (!this.socket) {\n throw \"Socket not available\";\n }\n let data = JSON.stringify({ channel, message });\n this.socket.send(data);\n }\n}\n","module.exports = require(\"rxjs\");","import { SocketPlainMessage } from \"@clairejs/core\";\nimport { Subscriber, Observable } from \"rxjs\";\n\nimport { IClientSocket } from \"./IClientSocket\";\n\nexport class ClientSocket implements IClientSocket {\n reconnectHandler?: () => void;\n disconnectHandler?: () => void;\n messageHandler?: (message: SocketPlainMessage) => void;\n messsageSendingSubscriber?: Subscriber<SocketPlainMessage>;\n\n public constructor(\n private readonly messageReceivingObservable: Observable<SocketPlainMessage>,\n private readonly connectionObservable: Observable<boolean>,\n private readonly messsageSendingSubscriberResolver: (socket: IClientSocket) => Subscriber<SocketPlainMessage>,\n private readonly initFn: (socket: IClientSocket) => void,\n private readonly destructorFn: (socket: IClientSocket) => void\n ) {}\n\n send(message: SocketPlainMessage): void {\n if (!this.messsageSendingSubscriber) {\n this.messsageSendingSubscriber = this.messsageSendingSubscriberResolver(this);\n }\n this.messsageSendingSubscriber.next(message);\n }\n\n onMessage(handler: (message: SocketPlainMessage) => void): void {\n this.messageHandler = handler;\n }\n\n onDisconnect(handler: () => void): void {\n this.disconnectHandler = handler;\n }\n\n onReconnect(handler: () => void): void {\n this.reconnectHandler = handler;\n }\n\n connect(): void {\n this.connectionObservable.subscribe({\n next: (connected) => {\n if (connected) {\n this.reconnectHandler && this.reconnectHandler();\n } else {\n this.disconnectHandler && this.disconnectHandler();\n }\n },\n });\n this.messageReceivingObservable.subscribe({ next: (message) => this.messageHandler && this.messageHandler(message) });\n this.initFn(this);\n }\n\n disconnect(): void {\n this.destructorFn(this);\n }\n}\n","export abstract class AbstractErrorHandler {\n public abstract handle(err: any, component?: any): void;\n}\n","import { ViewRoute } from \"./ViewRoute\";\n\nexport abstract class AbstractRouter {\n public abstract getRoutes(): ViewRoute;\n}\n","import { UrlInfo } from \"./UrlInfo\";\nexport abstract class AbstractViewMiddleware {\n public abstract intercept(from: UrlInfo, to: UrlInfo): Promise<string | Partial<UrlInfo> | undefined>;\n}\n","import { AccessToken } from \"@clairejs/core\";\n\nexport abstract class AbstractTokenManager {\n abstract getAccessToken(): Promise<AccessToken | undefined>;\n abstract setAccessToken(token?: AccessToken): Promise<void>;\n}\n"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouterConfig.d.ts","sourceRoot":"","sources":["../../src/routing/RouterConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAC;IAC/C,UAAU,CAAC,EAAE,mBAAmB,CAAC,sBAAsB,CAAC,EAAE,CAAC;IAC3D,QAAQ,CAAC,EAAE,CAAC,cAAc,GAAG,YAAY,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"RouterConfig.d.ts","sourceRoot":"","sources":["../../src/routing/RouterConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAA;KAAE,CAAC;IAC/C,UAAU,CAAC,EAAE,mBAAmB,CAAC,sBAAsB,CAAC,EAAE,CAAC;IAC3D,QAAQ,CAAC,EAAE,CAAC,cAAc,GAAG,YAAY,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clairejs/client",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.5",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"rxjs": "^6.6.7"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@clairejs/core": "^2.2.
|
|
16
|
+
"@clairejs/core": "^2.2.10"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@clairejs/core": "file:../core",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { AbstractRouter } from "./AbstractRouter";
|
|
2
|
-
import { ComponentInfo } from "./ComponentInfo";
|
|
3
|
-
export declare abstract class AbstractCrudRouter extends AbstractRouter {
|
|
4
|
-
getRoutes(): {
|
|
5
|
-
"": ComponentInfo;
|
|
6
|
-
"view/:id": ComponentInfo;
|
|
7
|
-
"edit/:id": ComponentInfo;
|
|
8
|
-
"del/:id": ComponentInfo;
|
|
9
|
-
new: ComponentInfo;
|
|
10
|
-
};
|
|
11
|
-
abstract getListComponent(): ComponentInfo;
|
|
12
|
-
abstract getItemComponent(): ComponentInfo;
|
|
13
|
-
abstract getEditComponent(): ComponentInfo;
|
|
14
|
-
abstract getNewComponent(): ComponentInfo;
|
|
15
|
-
abstract getDeleteComponent(): ComponentInfo;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=AbstractCrudRouter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractCrudRouter.d.ts","sourceRoot":"","sources":["../../src/routing/AbstractCrudRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,8BAAsB,kBAAmB,SAAQ,cAAc;IAC3D,SAAS;;;;;;;aAUO,gBAAgB,IAAI,aAAa;aACjC,gBAAgB,IAAI,aAAa;aACjC,gBAAgB,IAAI,aAAa;aACjC,eAAe,IAAI,aAAa;aAChC,kBAAkB,IAAI,aAAa;CACtD"}
|