@clairejs/client 3.0.16 → 3.0.17

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.
Files changed (36) hide show
  1. package/.browserslistrc +3 -3
  2. package/README.md +409 -404
  3. package/dist/api/AbstractHttpClient.d.ts +10 -19
  4. package/dist/api/AbstractHttpClient.d.ts.map +1 -1
  5. package/dist/api/AbstractTokenManager.d.ts +5 -5
  6. package/dist/api/CrudApi.d.ts +15 -15
  7. package/dist/api/DefaultHttpClient.d.ts +8 -0
  8. package/dist/api/DefaultHttpClient.d.ts.map +1 -0
  9. package/dist/api/DefaultTokenManager.d.ts +11 -11
  10. package/dist/api/{AxiosApiClient.d.ts → RefreshHttpClient.d.ts} +20 -15
  11. package/dist/api/RefreshHttpClient.d.ts.map +1 -0
  12. package/dist/constants.d.ts +2 -2
  13. package/dist/index.d.ts +19 -18
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/routing/AbstractErrorHandler.d.ts +3 -3
  18. package/dist/routing/AbstractViewMiddleware.d.ts +4 -4
  19. package/dist/routing/ComponentInfo.d.ts +4 -4
  20. package/dist/routing/RouterConfig.d.ts +13 -13
  21. package/dist/routing/UrlInfo.d.ts +10 -10
  22. package/dist/socket/AbstractClientSocketManager.d.ts +6 -6
  23. package/dist/socket/ClientSocket.d.ts +21 -21
  24. package/dist/socket/DefaultClientSocketManager.d.ts +33 -33
  25. package/dist/socket/DefaultClientSocketManager.d.ts.map +1 -1
  26. package/dist/socket/IClientSocket.d.ts +9 -9
  27. package/dist/socket/IWebSocket.d.ts +7 -7
  28. package/dist/socket/SocketConfig.d.ts +7 -7
  29. package/dist/system/AbstractStorage.d.ts +5 -5
  30. package/dist/system/ClaireClient.d.ts +3 -3
  31. package/dist/translation/Translator.d.ts +17 -17
  32. package/dist/translation/types.d.ts +6 -6
  33. package/package.json +30 -30
  34. package/tsconfig-build.json +8 -8
  35. package/webpack.config.js +46 -46
  36. package/dist/api/AxiosApiClient.d.ts.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"@clairejs/core\"","webpack:///./src/system/AbstractStorage.ts","webpack:///./src/api/AbstractHttpClient.ts","webpack:///./src/socket/AbstractClientSocketManager.ts","webpack:///./src/api/AbstractTokenManager.ts","webpack:///./src/index.ts","webpack:///./src/system/ClaireClient.ts","webpack:///./src/api/AxiosApiClient.ts","webpack:///external \"axios\"","webpack:///./src/socket/DefaultClientSocketManager.ts","webpack:///external \"rxjs\"","webpack:///./src/socket/ClientSocket.ts","webpack:///./src/translation/Translator.ts","webpack:///./src/constants.ts","webpack:///./src/routing/AbstractErrorHandler.ts","webpack:///./src/routing/AbstractViewMiddleware.ts","webpack:///./src/api/DefaultTokenManager.ts","webpack:///./src/api/CrudApi.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","AbstractStorage","AbstractHttpClient","apiServerUrl","logger","tokenManager","refreshing","refreshQueue","url","this","apiCall","headers","keys","map","k","toLowerCase","includes","accessToken","getAccessToken","expiration","Date","now","refreshToken","finalHeaders","resolveHeaders","data","authorization","token","reduce","collector","assign","oldToken","debug","Promise","resolve","push","resolver","newToken","getRefreshedAccessToken","setAccessToken","err","refresh","AbstractClientSocketManager","AbstractTokenManager","ClaireClient","ClaireApp","AxiosApiClient","super","finalUrl","resolveUrl","resolveResult","body","post","put","delete","DefaultClientSocketManager","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","every","some","subscriptions","message","sendToChannel","SocketChannels","MESSAGE_CHANNEL","channel","channelInfo","find","requested","checkChannelRequests","forEach","unsubscribe","index","indexOf","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","length","boundChannels","stringify","send","messageReceivingObservable","messsageSendingSubscriberResolver","initFn","destructorFn","messsageSendingSubscriber","handler","messageHandler","disconnectHandler","reconnectHandler","keyResolver","Translator","storage","currentLang","subscribers","getItem","CURRENT_LANGUAGE","lang","setItem","SYSTEM_LANGUAGES","languages","translationMap","_this","locales","translation","resolveTranslation","translationsObject","translationValues","tKey","args","currentLocale","configurable","writable","values","Injectable","AbstractErrorHandler","AbstractViewMiddleware","DefaultTokenManager","storageKey","deleteItem","stringifyQueries","queries","removeInstances","target","source","result","slice","instance","findIndex","id","mergeInstances","model","CrudApi","getEndpointBaseUrl"],"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 = 5);\n","module.exports = require(\"@clairejs/core\");","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, 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(\n readonly apiServerUrl: string,\n readonly logger: AbstractLogger,\n readonly tokenManager: AbstractTokenManager\n ) {}\n\n protected abstract getRefreshedAccessToken(): Promise<AccessToken>;\n\n protected resolveUrl(url: string): string {\n return this.apiServerUrl + url;\n }\n\n protected async resolveResult(apiCall: (headers?: object) => Promise<any>, headers?: object): Promise<any> {\n //-- request does not explicitely provide authorization header, resolve automatically\n if (!headers || !Object.keys(headers).map((k) => k.toLowerCase().includes(\"authorization\"))) {\n const accessToken = await this.tokenManager.getAccessToken();\n //-- 30s buffer\n if (accessToken && accessToken.expiration < Date.now() + 30000) {\n await this.refreshToken(accessToken);\n }\n }\n const finalHeaders = await this.resolveHeaders(headers);\n return (await apiCall(finalHeaders)).data;\n }\n\n private async resolveHeaders(headers?: object): Promise<any> {\n const accessToken = await this.tokenManager.getAccessToken();\n return {\n headers: {\n authorization: accessToken?.token || \"\",\n ...Object.keys(headers || {}).reduce(\n (collector, key) => Object.assign(collector, { [key.toLowerCase()]: (headers as any)[key] }),\n {}\n ),\n },\n };\n }\n\n async refreshToken(oldToken?: AccessToken) {\n if (this.refreshing) {\n this.logger.debug(\"Awaiting refresh token, queued\");\n await new Promise<void>((resolve) => {\n this.refreshQueue.push({ resolver: resolve });\n });\n } else {\n oldToken = oldToken || (await this.tokenManager.getAccessToken());\n //-- call to api server to refresh token\n if (!oldToken || !oldToken.refreshToken) {\n //-- there is no refresh token to refresh\n return;\n }\n\n try {\n this.refreshing = true;\n const newToken = await this.getRefreshedAccessToken();\n await this.tokenManager.setAccessToken(newToken);\n this.logger.debug(\"Access token was refreshed\");\n } catch (err) {\n //-- cannot refresh access token, clear old token\n this.logger.debug(\"Cannot refresh access token, clear local token\");\n await this.tokenManager.setAccessToken();\n } finally {\n this.refreshing = false;\n for (const refresh of this.refreshQueue) {\n refresh.resolver();\n }\n //-- clear queue\n this.refreshQueue = [];\n }\n }\n }\n\n abstract get<T = any>(url: string, headers?: any): Promise<T>;\n abstract post<T = any, R = any>(url: string, body: R, headers?: any): Promise<T>;\n abstract put<T = any, R = any>(url: string, body: R, headers?: any): Promise<T>;\n abstract delete<T = any>(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 { AccessToken } from \"@clairejs/core\";\n\nexport abstract class AbstractTokenManager {\n abstract getAccessToken(): Promise<AccessToken | undefined>;\n abstract setAccessToken(token?: AccessToken): Promise<void>;\n}\n","export * from \"./system/ClaireClient\";\nexport * from \"./api/AxiosApiClient\";\nexport * from \"./api/AbstractHttpClient\";\nexport * from \"./socket/AbstractClientSocketManager\";\nexport * from \"./socket/IClientSocket\";\nexport * from \"./socket/DefaultClientSocketManager\";\nexport * from \"./system/AbstractStorage\";\nexport * from \"./translation/Translator\";\nexport * from \"./routing/AbstractErrorHandler\";\nexport * from \"./routing/AbstractViewMiddleware\";\nexport * from \"./routing/UrlInfo\";\nexport * from \"./routing/RouterConfig\";\nexport * from \"./routing/ComponentInfo\";\nexport * from \"./api/AbstractTokenManager\";\nexport * from \"./socket/IWebSocket\";\nexport * from \"./translation/types\";\nexport * from \"./api/DefaultTokenManager\";\nexport * from \"./api/CrudApi\";\n","import { ClaireApp } from \"@clairejs/core\";\n\nexport class ClaireClient extends ClaireApp {}\n","import { AbstractLogger, AccessToken } 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(\n readonly apiServerUrl: string,\n readonly logger: AbstractLogger,\n readonly tokenManager: AbstractTokenManager\n ) {\n super(apiServerUrl, logger, tokenManager);\n }\n\n protected getRefreshedAccessToken(): Promise<AccessToken> {\n throw \"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 (headers) => axios.get(finalUrl, headers), 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 (headers) => axios.post(this.resolveUrl(url), body, headers), 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 (headers) => axios.put(this.resolveUrl(url), body, headers), 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 (headers) => axios.delete(this.resolveUrl(url), headers), headers);\n }\n}\n","module.exports = require(\"axios\");","import {\n AbstractLogger,\n SocketAuthenticationUpstreamMessage,\n SocketChannelRequestDownstreamMessage,\n SocketChannelRequestUpstreamMessage,\n SocketChannels,\n SocketPlainMessage,\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 (\n socketInfo.connected &&\n socketInfo.channels.some((c) => !availableChannels.includes(c))\n ) {\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) {\n //-- retry once\n this.httpClient\n .refreshToken()\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 &&\n this.sendToChannel(SocketChannels.CHANNEL_JOIN_REQUEST, {\n channels: pendingChannels,\n } 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 { Injectable } from \"@clairejs/core\";\nimport { CURRENT_LANGUAGE, SYSTEM_LANGUAGES } from \"../constants\";\nimport { AbstractStorage } from \"../system/AbstractStorage\";\nimport { TranslationMap } from \"./types\";\n\nconst keyResolver = (key: string) => `__${key}__`;\ntype LangSubscriber = (lang: string) => void;\n\n@Injectable()\nexport class Translator {\n currentLang?: string = null!;\n subscribers: LangSubscriber[] = [];\n\n constructor(readonly storage: AbstractStorage) {}\n\n addLangSubscriber(subscriber: LangSubscriber) {\n this.subscribers.push(subscriber);\n }\n\n removeLangSubscriber(subscriber: LangSubscriber) {\n this.subscribers = this.subscribers.filter((s) => s !== subscriber);\n }\n\n async getCurrentLanguage() {\n if (this.currentLang === null) {\n this.currentLang = ((await this.storage.getItem(CURRENT_LANGUAGE)) as any as string) || undefined;\n }\n return this.currentLang;\n }\n\n async setCurrentLanguage(lang: string) {\n this.currentLang = lang;\n await this.storage.setItem(CURRENT_LANGUAGE, lang);\n for (const sub of this.subscribers) {\n sub(lang);\n }\n }\n\n async getLanguages() {\n return ((await this.storage.getItem(SYSTEM_LANGUAGES)) as any as string[]) || undefined;\n }\n\n async setLanguages(languages: string[]) {\n await this.storage.setItem(SYSTEM_LANGUAGES, languages);\n }\n\n getTranslationObject(translationMap: TranslationMap) {\n const _this = this;\n const locales = Object.keys(translationMap);\n const translation: any = {};\n\n const resolveTranslation = (translationsObject: any, translationValues: any[]): void => {\n //-- get all keys of languages\n const keys = translationValues.reduce((collector, t) => {\n Object.keys(t).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\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 const tKey = keyResolver(key);\n translationsObject[tKey] = translationValues.map((value) => value[key]);\n Object.defineProperty(translationsObject, key, {\n value: function (...args: any[]): string {\n const currentLocale = _this.currentLang || locales[0];\n if (!currentLocale) {\n return \"\";\n }\n\n let translation = this[tKey][locales.indexOf(currentLocale)];\n if (typeof translation === \"string\") {\n return translation;\n } else if (typeof translation === \"function\") {\n return translation(...args);\n } else {\n return tKey;\n }\n },\n configurable: false,\n writable: false,\n });\n }\n }\n };\n\n resolveTranslation(translation, Object.values(translationMap));\n return translation;\n }\n}\n","export const SYSTEM_LANGUAGES = \"SYSTEM_LANGUAGES\";\nexport const CURRENT_LANGUAGE = \"CURRENT_LANGUAGE\";\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 | undefined, to: UrlInfo): Promise<Partial<UrlInfo> | undefined>;\n}\n","import { Injectable, AccessToken } from \"@clairejs/core\";\nimport { AbstractStorage } from \"../system/AbstractStorage\";\nimport { AbstractTokenManager } from \"./AbstractTokenManager\";\n\n@Injectable()\nexport class DefaultTokenManager extends AbstractTokenManager {\n private accessToken?: AccessToken = null!;\n\n constructor(readonly storage: AbstractStorage, readonly storageKey: string = \"ACCESS_TOKEN\") {\n super();\n }\n\n async getAccessToken(): Promise<AccessToken | undefined> {\n if (this.accessToken === null) {\n this.accessToken = await this.storage.getItem(this.storageKey);\n }\n return this.accessToken;\n }\n\n async setAccessToken(token?: AccessToken): Promise<void> {\n if (token) {\n await this.storage.setItem(this.storageKey, token);\n } else {\n await this.storage.deleteItem(this.storageKey);\n }\n this.accessToken = token;\n }\n}\n","import {\n AbstractModel,\n Constructor,\n CreateManyRequestBody,\n CreateManyResponseBody,\n GetManyQueries,\n GetManyResponseBody,\n UpdateManyBody,\n UpdateManyQueries,\n UpdateManyResponse,\n} from \"@clairejs/core\";\nimport { AbstractHttpClient } from \"./AbstractHttpClient\";\n\nexport const stringifyQueries = (queries: Record<string, any>) => {\n const keys = Object.keys(queries);\n return keys.reduce((collector, key) => collector + `${key}=${JSON.stringify(queries[key])}&`, \"\");\n};\n\nexport const removeInstances = <T extends AbstractModel>(target: T[], source: T[]) => {\n const result = target.slice();\n for (const instance of source) {\n const index = result.findIndex((i) => !!i.id && !!instance.id && i.id === instance.id);\n if (index >= 0) {\n result.splice(index, 1);\n }\n }\n return result;\n};\n\nexport const mergeInstances = <T extends AbstractModel>(model: Constructor<T>, target: T[], source: Partial<T>[]) => {\n const result = target.slice();\n for (const instance of source) {\n const index = result.findIndex((i) => !!i.id && !!instance.id && i.id === instance.id);\n if (index < 0) {\n result.push(Object.assign(new model(), instance));\n } else {\n Object.assign(result[index], instance);\n }\n }\n return result;\n};\n\nexport class CrudApi<T extends AbstractModel> {\n constructor(readonly model: Constructor<T>, readonly httpClient: AbstractHttpClient) {}\n\n protected getEndpointBaseUrl() {\n return `/${this.model.name.toLowerCase()}`;\n }\n\n async getMany(queries?: GetManyQueries<T>): Promise<GetManyResponseBody<T>> {\n return await this.httpClient.get(`${this.getEndpointBaseUrl()}?${stringifyQueries(queries || {})}`);\n }\n\n async updateMany(body: UpdateManyBody<T>, queries?: UpdateManyQueries<T>): Promise<UpdateManyResponse<T>> {\n return await this.httpClient.put(`${this.getEndpointBaseUrl()}?${stringifyQueries(queries || {})}`, body);\n }\n\n async deleteMany(queries?: UpdateManyQueries<T>): Promise<UpdateManyResponse<T>> {\n return await this.httpClient.delete(`${this.getEndpointBaseUrl()}?${stringifyQueries(queries || {})}`);\n }\n\n async createMany(body: CreateManyRequestBody<T>): Promise<CreateManyResponseBody<T>> {\n return await this.httpClient.post(`${this.getEndpointBaseUrl()}`, body);\n }\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"@clairejs/core\"","webpack:///./src/api/AbstractHttpClient.ts","webpack:///./src/system/AbstractStorage.ts","webpack:///external \"axios\"","webpack:///./src/socket/AbstractClientSocketManager.ts","webpack:///./src/api/AbstractTokenManager.ts","webpack:///./src/index.ts","webpack:///./src/system/ClaireClient.ts","webpack:///./src/api/RefreshHttpClient.ts","webpack:///./src/api/DefaultHttpClient.ts","webpack:///./src/socket/DefaultClientSocketManager.ts","webpack:///external \"rxjs\"","webpack:///./src/socket/ClientSocket.ts","webpack:///./src/translation/Translator.ts","webpack:///./src/constants.ts","webpack:///./src/routing/AbstractErrorHandler.ts","webpack:///./src/routing/AbstractViewMiddleware.ts","webpack:///./src/api/DefaultTokenManager.ts","webpack:///./src/api/CrudApi.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","AbstractHttpClient","apiServerUrl","headers","url","this","AbstractStorage","AbstractClientSocketManager","AbstractTokenManager","ClaireClient","ClaireApp","RefreshHttpClient","logger","tokenManager","super","refreshing","refreshQueue","apiCall","keys","map","k","toLowerCase","includes","accessToken","getAccessToken","expiration","Date","now","refreshToken","finalHeaders","data","authorization","token","resolveHeaders","oldToken","debug","Promise","resolve","push","resolver","newToken","getRefreshedAccessToken","setAccessToken","err","refresh","finalUrl","resolveUrl","resolveResult","body","post","put","delete","DefaultHttpClient","DefaultClientSocketManager","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","every","some","subscriptions","message","sendToChannel","SocketChannels","MESSAGE_CHANNEL","channel","channelInfo","find","requested","checkChannelRequests","forEach","unsubscribe","index","indexOf","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","length","boundChannels","stringify","send","messageReceivingObservable","messsageSendingSubscriberResolver","initFn","destructorFn","messsageSendingSubscriber","handler","messageHandler","disconnectHandler","reconnectHandler","keyResolver","Translator","storage","currentLang","subscribers","getItem","CURRENT_LANGUAGE","lang","setItem","SYSTEM_LANGUAGES","languages","translationMap","_this","locales","translation","resolveTranslation","translationsObject","translationValues","reduce","collector","tKey","args","currentLocale","configurable","writable","values","Injectable","AbstractErrorHandler","AbstractViewMiddleware","DefaultTokenManager","storageKey","deleteItem","stringifyQueries","queries","removeInstances","target","source","result","slice","instance","findIndex","id","mergeInstances","model","assign","CrudApi","getEndpointBaseUrl"],"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\");","export abstract class AbstractHttpClient {\r\n constructor(readonly apiServerUrl: string) {}\r\n\r\n protected async resolveHeaders(headers?: object): Promise<object | undefined> {\r\n return headers;\r\n }\r\n\r\n protected async resolveUrl(url: string): Promise<string> {\r\n return this.apiServerUrl + url;\r\n }\r\n\r\n abstract get<T = any>(url: string, headers?: object): Promise<T>;\r\n abstract post<T = any, R = any>(url: string, body: R, headers?: object): Promise<T>;\r\n abstract put<T = any, R = any>(url: string, body: R, headers?: object): Promise<T>;\r\n abstract delete<T = any>(url: string, headers?: object): Promise<T>;\r\n}\r\n","export abstract class AbstractStorage {\r\n public abstract getItem<T>(key: string): Promise<T | undefined>;\r\n public abstract setItem<T>(key: string, value: T): Promise<void>;\r\n public abstract deleteItem(key: string): Promise<void>;\r\n}\r\n","module.exports = require(\"axios\");","import { IClientSocket } from \"./IClientSocket\";\r\n\r\nexport abstract class AbstractClientSocketManager {\r\n abstract create(channels: string[]): IClientSocket;\r\n\r\n abstract forceReconnect(): void;\r\n abstract forceDisconnect(): void;\r\n}\r\n","import { AccessToken } from \"@clairejs/core\";\r\n\r\nexport abstract class AbstractTokenManager {\r\n abstract getAccessToken(): Promise<AccessToken | undefined>;\r\n abstract setAccessToken(token?: AccessToken): Promise<void>;\r\n}\r\n","export * from \"./system/ClaireClient\";\r\nexport * from \"./api/RefreshHttpClient\";\r\nexport * from \"./api/DefaultHttpClient\";\r\nexport * from \"./api/AbstractHttpClient\";\r\nexport * from \"./socket/AbstractClientSocketManager\";\r\nexport * from \"./socket/IClientSocket\";\r\nexport * from \"./socket/DefaultClientSocketManager\";\r\nexport * from \"./system/AbstractStorage\";\r\nexport * from \"./translation/Translator\";\r\nexport * from \"./routing/AbstractErrorHandler\";\r\nexport * from \"./routing/AbstractViewMiddleware\";\r\nexport * from \"./routing/UrlInfo\";\r\nexport * from \"./routing/RouterConfig\";\r\nexport * from \"./routing/ComponentInfo\";\r\nexport * from \"./api/AbstractTokenManager\";\r\nexport * from \"./socket/IWebSocket\";\r\nexport * from \"./translation/types\";\r\nexport * from \"./api/DefaultTokenManager\";\r\nexport * from \"./api/CrudApi\";\r\n","import { ClaireApp } from \"@clairejs/core\";\r\n\r\nexport class ClaireClient extends ClaireApp {}\r\n","import { AbstractLogger, AccessToken } from \"@clairejs/core\";\r\nimport axios from \"axios\";\r\n\r\nimport { AbstractHttpClient } from \"./AbstractHttpClient\";\r\nimport { AbstractTokenManager } from \"./AbstractTokenManager\";\r\n\r\nexport class RefreshHttpClient extends AbstractHttpClient {\r\n private refreshing = false;\r\n private refreshQueue: {\r\n resolver: () => void;\r\n }[] = [];\r\n\r\n public constructor(\r\n readonly apiServerUrl: string,\r\n readonly logger: AbstractLogger,\r\n readonly tokenManager: AbstractTokenManager\r\n ) {\r\n super(apiServerUrl);\r\n }\r\n\r\n protected async getRefreshedAccessToken(): Promise<AccessToken | undefined> {\r\n return undefined;\r\n }\r\n\r\n protected async resolveResult(apiCall: (headers?: any) => Promise<any>, headers?: any): Promise<any> {\r\n //-- request does not explicitely provide authorization header, resolve automatically\r\n if (!headers || !Object.keys(headers).map((k) => k.toLowerCase().includes(\"authorization\"))) {\r\n const accessToken = await this.tokenManager.getAccessToken();\r\n //-- 30s buffer\r\n if (accessToken && accessToken.expiration < Date.now() + 30000) {\r\n await this.refreshToken(accessToken);\r\n }\r\n }\r\n const finalHeaders = await this.finalHeaders(headers);\r\n return (await apiCall(finalHeaders)).data;\r\n }\r\n\r\n private async finalHeaders(headers: object): Promise<any> {\r\n const accessToken = await this.tokenManager.getAccessToken();\r\n return { headers: { authorization: accessToken?.token || \"\", ...this.resolveHeaders(headers) } };\r\n }\r\n\r\n async refreshToken(oldToken?: AccessToken) {\r\n if (this.refreshing) {\r\n this.logger.debug(\"Awaiting refresh token, queued\");\r\n await new Promise<void>((resolve) => {\r\n this.refreshQueue.push({ resolver: resolve });\r\n });\r\n } else {\r\n oldToken = oldToken || (await this.tokenManager.getAccessToken());\r\n //-- call to api server to refresh token\r\n if (!oldToken || !oldToken.refreshToken) {\r\n //-- there is no refresh token to refresh\r\n return;\r\n }\r\n\r\n try {\r\n this.refreshing = true;\r\n const newToken = await this.getRefreshedAccessToken();\r\n await this.tokenManager.setAccessToken(newToken);\r\n this.logger.debug(\"Access token was refreshed\");\r\n } catch (err) {\r\n //-- cannot refresh access token, clear old token\r\n this.logger.debug(\"Cannot refresh access token, clear local token\");\r\n await this.tokenManager.setAccessToken();\r\n } finally {\r\n this.refreshing = false;\r\n for (const refresh of this.refreshQueue) {\r\n refresh.resolver();\r\n }\r\n //-- clear queue\r\n this.refreshQueue = [];\r\n }\r\n }\r\n }\r\n\r\n public async get<R>(url: string, headers?: any): Promise<R> {\r\n const finalUrl = await this.resolveUrl(url);\r\n this.logger.debug(\"[GET] \", finalUrl);\r\n return this.resolveResult(async (headers) => axios.get(finalUrl, headers), headers);\r\n }\r\n public async post<T, R>(url: string, body: T, headers?: any): Promise<R> {\r\n const finalUrl = await this.resolveUrl(url);\r\n this.logger.debug(\"[POST] \", finalUrl);\r\n return this.resolveResult(async (headers) => axios.post(finalUrl, body, headers), headers);\r\n }\r\n public async put<T, R>(url: string, body: T, headers?: any): Promise<R> {\r\n const finalUrl = await this.resolveUrl(url);\r\n this.logger.debug(\"[PUT] \", finalUrl);\r\n return this.resolveResult(async (headers) => axios.put(finalUrl, body, headers), headers);\r\n }\r\n\r\n public async delete<R>(url: string, headers?: any): Promise<R> {\r\n const finalUrl = await this.resolveUrl(url);\r\n this.logger.debug(\"[DEL] \", finalUrl);\r\n return this.resolveResult(async (headers) => axios.delete(finalUrl, headers), headers);\r\n }\r\n}\r\n","import { AbstractHttpClient } from \"./AbstractHttpClient\";\r\nimport axios from \"axios\";\r\n\r\nexport class DefaultHttpClient extends AbstractHttpClient {\r\n async get<T = any>(url: string, headers?: object): Promise<T> {\r\n const finalUrl = await this.resolveUrl(url);\r\n const finalHeaders = await this.resolveHeaders(headers);\r\n const result = await axios.get(finalUrl, { headers: finalHeaders });\r\n return result.data;\r\n }\r\n\r\n async post<T = any, R = any>(url: string, body: R, headers?: object): Promise<T> {\r\n const finalUrl = await this.resolveUrl(url);\r\n const finalHeaders = await this.resolveHeaders(headers);\r\n const result = await axios.post(finalUrl, body, { headers: finalHeaders });\r\n return result.data;\r\n }\r\n\r\n async put<T = any, R = any>(url: string, body: R, headers?: object): Promise<T> {\r\n const finalUrl = await this.resolveUrl(url);\r\n const finalHeaders = await this.resolveHeaders(headers);\r\n const result = await axios.put(finalUrl, body, { headers: finalHeaders });\r\n return result.data;\r\n }\r\n\r\n async delete<T = any>(url: string, headers?: object): Promise<T> {\r\n const finalUrl = await this.resolveUrl(url);\r\n const finalHeaders = await this.resolveHeaders(headers);\r\n const result = await axios.delete(finalUrl, { headers: finalHeaders });\r\n return result.data;\r\n }\r\n}\r\n","import {\r\n AbstractLogger,\r\n SocketAuthenticationUpstreamMessage,\r\n SocketChannelRequestDownstreamMessage,\r\n SocketChannelRequestUpstreamMessage,\r\n SocketChannels,\r\n SocketPlainMessage,\r\n} from \"@clairejs/core\";\r\nimport { Observable, Subscriber, Subscription } from \"rxjs\";\r\n\r\nimport { AbstractTokenManager } from \"../api/AbstractTokenManager\";\r\nimport { AbstractHttpClient } from \"../api/AbstractHttpClient\";\r\nimport { AbstractClientSocketManager } from \"./AbstractClientSocketManager\";\r\nimport { SocketConfig } from \"./SocketConfig\";\r\nimport { ClientSocket } from \"./ClientSocket\";\r\nimport { IClientSocket } from \"./IClientSocket\";\r\nimport { IWebSocket } from \"./IWebSocket\";\r\n\r\nexport class DefaultClientSocketManager extends AbstractClientSocketManager {\r\n private socket?: IWebSocket;\r\n\r\n private allSockets: {\r\n socket: ClientSocket;\r\n connected?: boolean;\r\n channels: string[];\r\n subscriptions: Subscription[];\r\n\r\n connectionSubscriber?: Subscriber<boolean>;\r\n channelsSubscriber?: Subscriber<string[]>;\r\n messageReceivingSubscriber?: Subscriber<SocketPlainMessage>;\r\n messageSendingSubscriber?: Subscriber<SocketPlainMessage>;\r\n\r\n messageSendingObservable?: Observable<SocketPlainMessage>;\r\n channelsObservable?: Observable<string[]>;\r\n }[] = [];\r\n\r\n private allChannels: { channel: string; requested: boolean; connected: boolean }[] = [];\r\n\r\n private socketConnected?: boolean;\r\n private pingIntervalId?: any;\r\n private retryTimeoutId?: any;\r\n private accumulatedPing = 0;\r\n private retryDelay = 0;\r\n private intendedDisconnection?: boolean;\r\n\r\n constructor(\r\n private readonly wsProvider: () => IWebSocket,\r\n private readonly tokenManager: AbstractTokenManager,\r\n private readonly httpClient: AbstractHttpClient,\r\n private readonly logger: AbstractLogger,\r\n private readonly config?: SocketConfig\r\n ) {\r\n super();\r\n }\r\n\r\n create(channels: string[]): IClientSocket {\r\n const connectionObservable = new Observable<boolean>((subscriber) => {\r\n const socketInfo = this.getSocketInfo(socket);\r\n\r\n if (!socketInfo) {\r\n throw \"Cannot resolve socket info in connectionObservable\";\r\n }\r\n\r\n socketInfo.connectionSubscriber = subscriber;\r\n });\r\n\r\n const messageReceiveingObservable = new Observable<any>((subscriber) => {\r\n const socketInfo = this.getSocketInfo(socket);\r\n if (!socketInfo) {\r\n throw \"Cannot resolve socket info in messageReceiveingObservable\";\r\n }\r\n socketInfo.messageReceivingSubscriber = subscriber;\r\n });\r\n\r\n const messageSendingObservable = new Observable<any>((subscriber) => {\r\n const socketInfo = this.getSocketInfo(socket);\r\n if (!socketInfo) {\r\n throw \"Cannot resolve socket info in messageSendingObservable\";\r\n }\r\n socketInfo.messageSendingSubscriber = subscriber;\r\n });\r\n\r\n const channelsObservable = new Observable<string[]>((subscriber) => {\r\n const socketInfo = this.getSocketInfo(socket);\r\n if (!socketInfo) {\r\n throw \"Cannot resolve socket info in channelsObservable\";\r\n }\r\n socketInfo.channelsSubscriber = subscriber;\r\n });\r\n\r\n const socket = new ClientSocket(\r\n messageReceiveingObservable,\r\n connectionObservable,\r\n (_socket) => {\r\n const socketInfo = this.getSocketInfo(socket);\r\n if (!socketInfo || !socketInfo.messageSendingSubscriber) {\r\n throw \"Cannot resolve socket info in messageSendingSubscriber resolver\";\r\n }\r\n return socketInfo.messageSendingSubscriber;\r\n },\r\n (_socket) => {\r\n //-- socket request connection\r\n const socketInfo = this.getSocketInfo(_socket);\r\n if (!socketInfo) {\r\n throw \"Cannot resolve socket info in connection request\";\r\n }\r\n\r\n if (socketInfo.connected) {\r\n return;\r\n }\r\n\r\n if (!socketInfo.channelsObservable) {\r\n throw \"Channels observer not available\";\r\n }\r\n\r\n if (!socketInfo.messageSendingObservable) {\r\n throw \"Message sending observable not available\";\r\n }\r\n\r\n const sub = socketInfo.channelsObservable.subscribe({\r\n next: (availableChannels) => {\r\n if (!socketInfo.connected && socketInfo.channels.every((c) => availableChannels.includes(c))) {\r\n //-- socket connected\r\n socketInfo.connected = true;\r\n if (!socketInfo.connectionSubscriber) {\r\n throw \"Connection subscriber not available\";\r\n }\r\n socketInfo.connectionSubscriber.next(socketInfo.connected);\r\n } else if (\r\n socketInfo.connected &&\r\n socketInfo.channels.some((c) => !availableChannels.includes(c))\r\n ) {\r\n //-- socket disconnected\r\n socketInfo.connected = false;\r\n if (!socketInfo.connectionSubscriber) {\r\n throw \"Disconnection subscriber not available\";\r\n }\r\n socketInfo.connectionSubscriber.next(socketInfo.connected);\r\n }\r\n },\r\n });\r\n socketInfo.subscriptions.push(sub);\r\n\r\n socketInfo.messageSendingObservable.subscribe({\r\n next: (message) => {\r\n if (!socketInfo.connected) {\r\n throw \"Socket not connected\";\r\n }\r\n this.sendToChannel(SocketChannels.MESSAGE_CHANNEL, message);\r\n },\r\n });\r\n\r\n //-- register channel\r\n for (const channel of socketInfo.channels) {\r\n let channelInfo = this.allChannels.find((channelInfo) => channelInfo.channel === channel);\r\n if (!channelInfo) {\r\n channelInfo = { channel, requested: false, connected: false };\r\n this.allChannels.push(channelInfo);\r\n }\r\n channelInfo.requested = true;\r\n }\r\n\r\n //-- check and request for missing channels\r\n this.checkChannelRequests();\r\n },\r\n (_socket) => {\r\n //-- socket request disconnection\r\n const socketInfo = this.getSocketInfo(socket);\r\n if (!socketInfo) {\r\n throw \"Cannot resolve socket info in disconnection request\";\r\n }\r\n\r\n //-- remove socket\r\n socketInfo.subscriptions.forEach((sub) => sub.unsubscribe());\r\n\r\n const index = this.allSockets.indexOf(socketInfo);\r\n if (index >= 0) {\r\n this.allSockets.splice(index, 1);\r\n }\r\n }\r\n );\r\n\r\n this.allSockets.push({ socket, channels, messageSendingObservable, channelsObservable, subscriptions: [] });\r\n\r\n return socket;\r\n }\r\n\r\n forceDisconnect() {\r\n this.intendedDisconnection = true;\r\n if (this.socket) {\r\n this.socket.close();\r\n this.socket = undefined;\r\n }\r\n\r\n if (this.retryTimeoutId) {\r\n clearTimeout(this.retryTimeoutId);\r\n }\r\n }\r\n\r\n forceReconnect(): void {\r\n this.intendedDisconnection = false;\r\n if (this.socketConnected) {\r\n this.socket?.close();\r\n } else {\r\n this.retryDelay = 0;\r\n if (this.socket === undefined) {\r\n if (this.retryTimeoutId) {\r\n clearTimeout(this.retryTimeoutId);\r\n this.retryTimeoutId = undefined;\r\n }\r\n this.connect();\r\n }\r\n }\r\n }\r\n\r\n private connect() {\r\n this.socket = this.wsProvider();\r\n\r\n this.socket.onopen(() => {\r\n if (this.pingIntervalId) {\r\n clearInterval(this.pingIntervalId);\r\n }\r\n\r\n this.tokenManager\r\n .getAccessToken()\r\n .then((accessToken) => {\r\n this.sendToChannel(SocketChannels.AUTHENTICATION_CHANNEL, {\r\n authorizationData: accessToken?.token,\r\n } as SocketAuthenticationUpstreamMessage);\r\n })\r\n .catch((err) => {\r\n this.logger.error(err);\r\n this.forceReconnect();\r\n });\r\n });\r\n\r\n this.socket.onmessage((data) => {\r\n if (!data) {\r\n return;\r\n }\r\n\r\n const { channel, message } = JSON.parse(data) as { channel: string; message: any };\r\n this.logger.debug(\"Receive\", channel, message);\r\n\r\n switch (channel) {\r\n case SocketChannels.PING_PONG_CHANNEL:\r\n {\r\n this.accumulatedPing = 0;\r\n }\r\n return;\r\n\r\n case SocketChannels.AUTHENTICATION_CHANNEL:\r\n {\r\n this.logger.debug(\"Socket connection established\", message);\r\n //-- socket authenticated\r\n this.socketConnected = true;\r\n\r\n //-- socket open, set interval\r\n if (this.pingIntervalId) {\r\n clearInterval(this.pingIntervalId);\r\n }\r\n\r\n this.accumulatedPing = 0;\r\n this.pingIntervalId = setInterval(() => {\r\n this.accumulatedPing += 1;\r\n if (this.accumulatedPing > (this.config?.keepAlive?.deadThreashold || 3)) {\r\n //-- socket connection lost, not intended\r\n this.intendedDisconnection = false;\r\n this.socket?.close();\r\n } else {\r\n this.sendToChannel(SocketChannels.PING_PONG_CHANNEL);\r\n }\r\n }, this.config?.keepAlive?.pingIntervalMs || 10000);\r\n\r\n this.intendedDisconnection = false;\r\n if (this.retryTimeoutId) {\r\n clearTimeout(this.retryTimeoutId);\r\n this.retryTimeoutId = undefined;\r\n }\r\n\r\n //-- check and send pending channel join requests\r\n this.checkChannelRequests();\r\n }\r\n return;\r\n\r\n case SocketChannels.CHANNEL_JOIN_REQUEST:\r\n {\r\n const receivedMessage = message as SocketChannelRequestDownstreamMessage;\r\n if (!receivedMessage.success) {\r\n this.logger.error(receivedMessage.error);\r\n return;\r\n }\r\n\r\n receivedMessage.channels.forEach((channel) => {\r\n const channelInfo = this.allChannels.find((info) => info.channel === channel);\r\n if (channelInfo) {\r\n channelInfo.connected = true;\r\n channelInfo.requested = false;\r\n }\r\n });\r\n\r\n this.notifyCurrentChannels();\r\n }\r\n return;\r\n\r\n case SocketChannels.CHANNEL_LEAVE_REQUEST:\r\n {\r\n const receivedMessage = message as SocketChannelRequestDownstreamMessage;\r\n if (!receivedMessage.success) {\r\n this.logger.error(receivedMessage.error);\r\n return;\r\n }\r\n\r\n receivedMessage.channels.forEach((channel) => {\r\n const channelInfo = this.allChannels.find((info) => info.channel === channel);\r\n if (channelInfo) {\r\n channelInfo.connected = false;\r\n }\r\n });\r\n\r\n this.notifyCurrentChannels();\r\n }\r\n return;\r\n\r\n case SocketChannels.MESSAGE_CHANNEL:\r\n {\r\n const receivedMessage = message as SocketPlainMessage;\r\n\r\n this.allSockets.forEach((socketInfo) => {\r\n if (!socketInfo.channels.includes(receivedMessage.channel)) {\r\n return;\r\n }\r\n socketInfo.messageReceivingSubscriber?.next(receivedMessage);\r\n });\r\n }\r\n return;\r\n\r\n case SocketChannels.DISCONNECTION_CHANNEL:\r\n {\r\n if (!message) {\r\n if (!!this.socket) {\r\n this.intendedDisconnection = false;\r\n this.socket.close();\r\n } else {\r\n this.forceReconnect();\r\n }\r\n } else {\r\n this.intendedDisconnection = true;\r\n this.socket?.close();\r\n }\r\n }\r\n return;\r\n default:\r\n return;\r\n }\r\n });\r\n\r\n this.socket.onclose(() => {\r\n if (this.pingIntervalId) {\r\n clearInterval(this.pingIntervalId);\r\n }\r\n\r\n this.socket = undefined;\r\n this.socketConnected = false;\r\n\r\n //-- clear all channels and notify for disconnection\r\n for (const channel of this.allChannels) {\r\n channel.connected = false;\r\n channel.requested = true;\r\n }\r\n this.notifyCurrentChannels();\r\n\r\n this.logger.debug(\"Socket connnection closed, intended \", this.intendedDisconnection);\r\n\r\n //-- skip if retryDelay has been set\r\n if (this.intendedDisconnection) {\r\n //-- do nothing more\r\n this.logger.debug(\"Socket connection terminated\");\r\n } else {\r\n if (!this.retryTimeoutId) {\r\n this.retryDelay = 0;\r\n this.retry();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private retry() {\r\n this.logger.debug(`Socket connection retrying in ${this.retryDelay}ms`);\r\n this.connect();\r\n this.retryDelay += this.config?.reconnectTimeDeltaMs || 3000;\r\n this.retryTimeoutId = setTimeout(() => {\r\n if (!this.socketConnected && !this.intendedDisconnection) {\r\n this.retry();\r\n }\r\n }, this.retryDelay);\r\n }\r\n\r\n private checkChannelRequests() {\r\n if (!this.socketConnected) {\r\n return;\r\n }\r\n\r\n const pendingChannels = this.allChannels.filter((c) => c.requested).map((c) => c.channel);\r\n pendingChannels.length &&\r\n this.sendToChannel(SocketChannels.CHANNEL_JOIN_REQUEST, {\r\n channels: pendingChannels,\r\n } as SocketChannelRequestUpstreamMessage);\r\n }\r\n\r\n private notifyCurrentChannels() {\r\n const boundChannels = this.allChannels.filter((c) => c.connected).map((c) => c.channel);\r\n this.allSockets.forEach((socketInfo) => socketInfo.channelsSubscriber?.next(boundChannels));\r\n }\r\n\r\n private getSocketInfo(socket: IClientSocket) {\r\n return this.allSockets.find((info) => info.socket === socket);\r\n }\r\n\r\n private sendToChannel(channel: string, message?: any) {\r\n this.logger.debug(\"Send\", channel, message);\r\n if (!this.socket) {\r\n throw \"Socket not available\";\r\n }\r\n let data = JSON.stringify({ channel, message });\r\n this.socket.send(data);\r\n }\r\n}\r\n","module.exports = require(\"rxjs\");","import { SocketPlainMessage } from \"@clairejs/core\";\r\nimport { Subscriber, Observable } from \"rxjs\";\r\n\r\nimport { IClientSocket } from \"./IClientSocket\";\r\n\r\nexport class ClientSocket implements IClientSocket {\r\n reconnectHandler?: () => void;\r\n disconnectHandler?: () => void;\r\n messageHandler?: (message: SocketPlainMessage) => void;\r\n messsageSendingSubscriber?: Subscriber<SocketPlainMessage>;\r\n\r\n public constructor(\r\n private readonly messageReceivingObservable: Observable<SocketPlainMessage>,\r\n private readonly connectionObservable: Observable<boolean>,\r\n private readonly messsageSendingSubscriberResolver: (socket: IClientSocket) => Subscriber<SocketPlainMessage>,\r\n private readonly initFn: (socket: IClientSocket) => void,\r\n private readonly destructorFn: (socket: IClientSocket) => void\r\n ) {}\r\n\r\n send(message: SocketPlainMessage): void {\r\n if (!this.messsageSendingSubscriber) {\r\n this.messsageSendingSubscriber = this.messsageSendingSubscriberResolver(this);\r\n }\r\n this.messsageSendingSubscriber.next(message);\r\n }\r\n\r\n onMessage(handler: (message: SocketPlainMessage) => void): void {\r\n this.messageHandler = handler;\r\n }\r\n\r\n onDisconnect(handler: () => void): void {\r\n this.disconnectHandler = handler;\r\n }\r\n\r\n onReconnect(handler: () => void): void {\r\n this.reconnectHandler = handler;\r\n }\r\n\r\n connect(): void {\r\n this.connectionObservable.subscribe({\r\n next: (connected) => {\r\n if (connected) {\r\n this.reconnectHandler && this.reconnectHandler();\r\n } else {\r\n this.disconnectHandler && this.disconnectHandler();\r\n }\r\n },\r\n });\r\n this.messageReceivingObservable.subscribe({ next: (message) => this.messageHandler && this.messageHandler(message) });\r\n this.initFn(this);\r\n }\r\n\r\n disconnect(): void {\r\n this.destructorFn(this);\r\n }\r\n}\r\n","import { Injectable } from \"@clairejs/core\";\r\nimport { CURRENT_LANGUAGE, SYSTEM_LANGUAGES } from \"../constants\";\r\nimport { AbstractStorage } from \"../system/AbstractStorage\";\r\nimport { TranslationMap } from \"./types\";\r\n\r\nconst keyResolver = (key: string) => `__${key}__`;\r\ntype LangSubscriber = (lang: string) => void;\r\n\r\n@Injectable()\r\nexport class Translator {\r\n currentLang?: string = null!;\r\n subscribers: LangSubscriber[] = [];\r\n\r\n constructor(readonly storage: AbstractStorage) {}\r\n\r\n addLangSubscriber(subscriber: LangSubscriber) {\r\n this.subscribers.push(subscriber);\r\n }\r\n\r\n removeLangSubscriber(subscriber: LangSubscriber) {\r\n this.subscribers = this.subscribers.filter((s) => s !== subscriber);\r\n }\r\n\r\n async getCurrentLanguage() {\r\n if (this.currentLang === null) {\r\n this.currentLang = ((await this.storage.getItem(CURRENT_LANGUAGE)) as any as string) || undefined;\r\n }\r\n return this.currentLang;\r\n }\r\n\r\n async setCurrentLanguage(lang: string) {\r\n this.currentLang = lang;\r\n await this.storage.setItem(CURRENT_LANGUAGE, lang);\r\n for (const sub of this.subscribers) {\r\n sub(lang);\r\n }\r\n }\r\n\r\n async getLanguages() {\r\n return ((await this.storage.getItem(SYSTEM_LANGUAGES)) as any as string[]) || undefined;\r\n }\r\n\r\n async setLanguages(languages: string[]) {\r\n await this.storage.setItem(SYSTEM_LANGUAGES, languages);\r\n }\r\n\r\n getTranslationObject(translationMap: TranslationMap) {\r\n const _this = this;\r\n const locales = Object.keys(translationMap);\r\n const translation: any = {};\r\n\r\n const resolveTranslation = (translationsObject: any, translationValues: any[]): void => {\r\n //-- get all keys of languages\r\n const keys = translationValues.reduce((collector, t) => {\r\n Object.keys(t).forEach((key) => {\r\n if (!collector.includes(key)) {\r\n collector.push(key);\r\n }\r\n });\r\n return collector;\r\n }, [] as string[]);\r\n\r\n //-- create getters / setters for those keys\r\n for (const key of keys) {\r\n const isObject = translationValues.every((value) => typeof value[key] === \"object\");\r\n if (isObject) {\r\n translationsObject[key] = {};\r\n resolveTranslation(\r\n translationsObject[key],\r\n translationValues.map((value) => value[key])\r\n );\r\n } else {\r\n const tKey = keyResolver(key);\r\n translationsObject[tKey] = translationValues.map((value) => value[key]);\r\n Object.defineProperty(translationsObject, key, {\r\n value: function (...args: any[]): string {\r\n const currentLocale = _this.currentLang || locales[0];\r\n if (!currentLocale) {\r\n return \"\";\r\n }\r\n\r\n let translation = this[tKey][locales.indexOf(currentLocale)];\r\n if (typeof translation === \"string\") {\r\n return translation;\r\n } else if (typeof translation === \"function\") {\r\n return translation(...args);\r\n } else {\r\n return tKey;\r\n }\r\n },\r\n configurable: false,\r\n writable: false,\r\n });\r\n }\r\n }\r\n };\r\n\r\n resolveTranslation(translation, Object.values(translationMap));\r\n return translation;\r\n }\r\n}\r\n","export const SYSTEM_LANGUAGES = \"SYSTEM_LANGUAGES\";\r\nexport const CURRENT_LANGUAGE = \"CURRENT_LANGUAGE\";\r\n","export abstract class AbstractErrorHandler {\r\n public abstract handle(err: any, component?: any): void;\r\n}\r\n","import { UrlInfo } from \"./UrlInfo\";\r\nexport abstract class AbstractViewMiddleware {\r\n public abstract intercept(from: UrlInfo | undefined, to: UrlInfo): Promise<Partial<UrlInfo> | undefined>;\r\n}\r\n","import { Injectable, AccessToken } from \"@clairejs/core\";\r\nimport { AbstractStorage } from \"../system/AbstractStorage\";\r\nimport { AbstractTokenManager } from \"./AbstractTokenManager\";\r\n\r\n@Injectable()\r\nexport class DefaultTokenManager extends AbstractTokenManager {\r\n private accessToken?: AccessToken = null!;\r\n\r\n constructor(readonly storage: AbstractStorage, readonly storageKey: string = \"ACCESS_TOKEN\") {\r\n super();\r\n }\r\n\r\n async getAccessToken(): Promise<AccessToken | undefined> {\r\n if (this.accessToken === null) {\r\n this.accessToken = await this.storage.getItem(this.storageKey);\r\n }\r\n return this.accessToken;\r\n }\r\n\r\n async setAccessToken(token?: AccessToken): Promise<void> {\r\n if (token) {\r\n await this.storage.setItem(this.storageKey, token);\r\n } else {\r\n await this.storage.deleteItem(this.storageKey);\r\n }\r\n this.accessToken = token;\r\n }\r\n}\r\n","import {\r\n AbstractModel,\r\n Constructor,\r\n CreateManyRequestBody,\r\n CreateManyResponseBody,\r\n GetManyQueries,\r\n GetManyResponseBody,\r\n UpdateManyBody,\r\n UpdateManyQueries,\r\n UpdateManyResponse,\r\n} from \"@clairejs/core\";\r\nimport { AbstractHttpClient } from \"./AbstractHttpClient\";\r\n\r\nexport const stringifyQueries = (queries: Record<string, any>) => {\r\n const keys = Object.keys(queries);\r\n return keys.reduce((collector, key) => collector + `${key}=${JSON.stringify(queries[key])}&`, \"\");\r\n};\r\n\r\nexport const removeInstances = <T extends AbstractModel>(target: T[], source: T[]) => {\r\n const result = target.slice();\r\n for (const instance of source) {\r\n const index = result.findIndex((i) => !!i.id && !!instance.id && i.id === instance.id);\r\n if (index >= 0) {\r\n result.splice(index, 1);\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport const mergeInstances = <T extends AbstractModel>(model: Constructor<T>, target: T[], source: Partial<T>[]) => {\r\n const result = target.slice();\r\n for (const instance of source) {\r\n const index = result.findIndex((i) => !!i.id && !!instance.id && i.id === instance.id);\r\n if (index < 0) {\r\n result.push(Object.assign(new model(), instance));\r\n } else {\r\n Object.assign(result[index], instance);\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport class CrudApi<T extends AbstractModel> {\r\n constructor(readonly model: Constructor<T>, readonly httpClient: AbstractHttpClient) {}\r\n\r\n protected getEndpointBaseUrl() {\r\n return `/${this.model.name.toLowerCase()}`;\r\n }\r\n\r\n async getMany(queries?: GetManyQueries<T>): Promise<GetManyResponseBody<T>> {\r\n return await this.httpClient.get(`${this.getEndpointBaseUrl()}?${stringifyQueries(queries || {})}`);\r\n }\r\n\r\n async updateMany(body: UpdateManyBody<T>, queries?: UpdateManyQueries<T>): Promise<UpdateManyResponse<T>> {\r\n return await this.httpClient.put(`${this.getEndpointBaseUrl()}?${stringifyQueries(queries || {})}`, body);\r\n }\r\n\r\n async deleteMany(queries?: UpdateManyQueries<T>): Promise<UpdateManyResponse<T>> {\r\n return await this.httpClient.delete(`${this.getEndpointBaseUrl()}?${stringifyQueries(queries || {})}`);\r\n }\r\n\r\n async createMany(body: CreateManyRequestBody<T>): Promise<CreateManyResponseBody<T>> {\r\n return await this.httpClient.post(`${this.getEndpointBaseUrl()}`, body);\r\n }\r\n}\r\n"],"sourceRoot":""}
@@ -1,4 +1,4 @@
1
- export declare abstract class AbstractErrorHandler {
2
- abstract handle(err: any, component?: any): void;
3
- }
1
+ export declare abstract class AbstractErrorHandler {
2
+ abstract handle(err: any, component?: any): void;
3
+ }
4
4
  //# sourceMappingURL=AbstractErrorHandler.d.ts.map
@@ -1,5 +1,5 @@
1
- import { UrlInfo } from "./UrlInfo";
2
- export declare abstract class AbstractViewMiddleware {
3
- abstract intercept(from: UrlInfo | undefined, to: UrlInfo): Promise<Partial<UrlInfo> | undefined>;
4
- }
1
+ import { UrlInfo } from "./UrlInfo";
2
+ export declare abstract class AbstractViewMiddleware {
3
+ abstract intercept(from: UrlInfo | undefined, to: UrlInfo): Promise<Partial<UrlInfo> | undefined>;
4
+ }
5
5
  //# sourceMappingURL=AbstractViewMiddleware.d.ts.map
@@ -1,5 +1,5 @@
1
- export interface ComponentInfo {
2
- view: any;
3
- props?: any;
4
- }
1
+ export interface ComponentInfo {
2
+ view: any;
3
+ props?: any;
4
+ }
5
5
  //# sourceMappingURL=ComponentInfo.d.ts.map
@@ -1,14 +1,14 @@
1
- import { AbstractConstructor } from "@clairejs/core";
2
- import { ComponentInfo } from "./ComponentInfo";
3
- import { AbstractViewMiddleware } from "./AbstractViewMiddleware";
4
- export interface RouterConfig {
5
- path: string;
6
- component?: ComponentInfo;
7
- components?: {
8
- [name: string]: ComponentInfo;
9
- };
10
- middleware?: AbstractConstructor<AbstractViewMiddleware>[];
11
- children?: RouterConfig[];
12
- redirect?: string;
13
- }
1
+ import { AbstractConstructor } from "@clairejs/core";
2
+ import { ComponentInfo } from "./ComponentInfo";
3
+ import { AbstractViewMiddleware } from "./AbstractViewMiddleware";
4
+ export interface RouterConfig {
5
+ path: string;
6
+ component?: ComponentInfo;
7
+ components?: {
8
+ [name: string]: ComponentInfo;
9
+ };
10
+ middleware?: AbstractConstructor<AbstractViewMiddleware>[];
11
+ children?: RouterConfig[];
12
+ redirect?: string;
13
+ }
14
14
  //# sourceMappingURL=RouterConfig.d.ts.map
@@ -1,11 +1,11 @@
1
- export interface UrlInfo {
2
- path: string;
3
- hash: string;
4
- params: {
5
- [key: string]: string;
6
- };
7
- query: {
8
- [key: string]: string;
9
- };
10
- }
1
+ export interface UrlInfo {
2
+ path: string;
3
+ hash: string;
4
+ params: {
5
+ [key: string]: string;
6
+ };
7
+ query: {
8
+ [key: string]: string;
9
+ };
10
+ }
11
11
  //# sourceMappingURL=UrlInfo.d.ts.map
@@ -1,7 +1,7 @@
1
- import { IClientSocket } from "./IClientSocket";
2
- export declare abstract class AbstractClientSocketManager {
3
- abstract create(channels: string[]): IClientSocket;
4
- abstract forceReconnect(): void;
5
- abstract forceDisconnect(): void;
6
- }
1
+ import { IClientSocket } from "./IClientSocket";
2
+ export declare abstract class AbstractClientSocketManager {
3
+ abstract create(channels: string[]): IClientSocket;
4
+ abstract forceReconnect(): void;
5
+ abstract forceDisconnect(): void;
6
+ }
7
7
  //# sourceMappingURL=AbstractClientSocketManager.d.ts.map
@@ -1,22 +1,22 @@
1
- import { SocketPlainMessage } from "@clairejs/core";
2
- import { Subscriber, Observable } from "rxjs";
3
- import { IClientSocket } from "./IClientSocket";
4
- export declare class ClientSocket implements IClientSocket {
5
- private readonly messageReceivingObservable;
6
- private readonly connectionObservable;
7
- private readonly messsageSendingSubscriberResolver;
8
- private readonly initFn;
9
- private readonly destructorFn;
10
- reconnectHandler?: () => void;
11
- disconnectHandler?: () => void;
12
- messageHandler?: (message: SocketPlainMessage) => void;
13
- messsageSendingSubscriber?: Subscriber<SocketPlainMessage>;
14
- constructor(messageReceivingObservable: Observable<SocketPlainMessage>, connectionObservable: Observable<boolean>, messsageSendingSubscriberResolver: (socket: IClientSocket) => Subscriber<SocketPlainMessage>, initFn: (socket: IClientSocket) => void, destructorFn: (socket: IClientSocket) => void);
15
- send(message: SocketPlainMessage): void;
16
- onMessage(handler: (message: SocketPlainMessage) => void): void;
17
- onDisconnect(handler: () => void): void;
18
- onReconnect(handler: () => void): void;
19
- connect(): void;
20
- disconnect(): void;
21
- }
1
+ import { SocketPlainMessage } from "@clairejs/core";
2
+ import { Subscriber, Observable } from "rxjs";
3
+ import { IClientSocket } from "./IClientSocket";
4
+ export declare class ClientSocket implements IClientSocket {
5
+ private readonly messageReceivingObservable;
6
+ private readonly connectionObservable;
7
+ private readonly messsageSendingSubscriberResolver;
8
+ private readonly initFn;
9
+ private readonly destructorFn;
10
+ reconnectHandler?: () => void;
11
+ disconnectHandler?: () => void;
12
+ messageHandler?: (message: SocketPlainMessage) => void;
13
+ messsageSendingSubscriber?: Subscriber<SocketPlainMessage>;
14
+ constructor(messageReceivingObservable: Observable<SocketPlainMessage>, connectionObservable: Observable<boolean>, messsageSendingSubscriberResolver: (socket: IClientSocket) => Subscriber<SocketPlainMessage>, initFn: (socket: IClientSocket) => void, destructorFn: (socket: IClientSocket) => void);
15
+ send(message: SocketPlainMessage): void;
16
+ onMessage(handler: (message: SocketPlainMessage) => void): void;
17
+ onDisconnect(handler: () => void): void;
18
+ onReconnect(handler: () => void): void;
19
+ connect(): void;
20
+ disconnect(): void;
21
+ }
22
22
  //# sourceMappingURL=ClientSocket.d.ts.map
@@ -1,34 +1,34 @@
1
- import { AbstractLogger } from "@clairejs/core";
2
- import { AbstractTokenManager } from "../api/AbstractTokenManager";
3
- import { AbstractHttpClient } from "../api/AbstractHttpClient";
4
- import { AbstractClientSocketManager } from "./AbstractClientSocketManager";
5
- import { SocketConfig } from "./SocketConfig";
6
- import { IClientSocket } from "./IClientSocket";
7
- import { IWebSocket } from "./IWebSocket";
8
- export declare class DefaultClientSocketManager extends AbstractClientSocketManager {
9
- private readonly wsProvider;
10
- private readonly tokenManager;
11
- private readonly httpClient;
12
- private readonly logger;
13
- private readonly config?;
14
- private socket?;
15
- private allSockets;
16
- private allChannels;
17
- private socketConnected?;
18
- private pingIntervalId?;
19
- private retryTimeoutId?;
20
- private accumulatedPing;
21
- private retryDelay;
22
- private intendedDisconnection?;
23
- constructor(wsProvider: () => IWebSocket, tokenManager: AbstractTokenManager, httpClient: AbstractHttpClient, logger: AbstractLogger, config?: SocketConfig | undefined);
24
- create(channels: string[]): IClientSocket;
25
- forceDisconnect(): void;
26
- forceReconnect(): void;
27
- private connect;
28
- private retry;
29
- private checkChannelRequests;
30
- private notifyCurrentChannels;
31
- private getSocketInfo;
32
- private sendToChannel;
33
- }
1
+ import { AbstractLogger } from "@clairejs/core";
2
+ import { AbstractTokenManager } from "../api/AbstractTokenManager";
3
+ import { AbstractHttpClient } from "../api/AbstractHttpClient";
4
+ import { AbstractClientSocketManager } from "./AbstractClientSocketManager";
5
+ import { SocketConfig } from "./SocketConfig";
6
+ import { IClientSocket } from "./IClientSocket";
7
+ import { IWebSocket } from "./IWebSocket";
8
+ export declare class DefaultClientSocketManager extends AbstractClientSocketManager {
9
+ private readonly wsProvider;
10
+ private readonly tokenManager;
11
+ private readonly httpClient;
12
+ private readonly logger;
13
+ private readonly config?;
14
+ private socket?;
15
+ private allSockets;
16
+ private allChannels;
17
+ private socketConnected?;
18
+ private pingIntervalId?;
19
+ private retryTimeoutId?;
20
+ private accumulatedPing;
21
+ private retryDelay;
22
+ private intendedDisconnection?;
23
+ constructor(wsProvider: () => IWebSocket, tokenManager: AbstractTokenManager, httpClient: AbstractHttpClient, logger: AbstractLogger, config?: SocketConfig | undefined);
24
+ create(channels: string[]): IClientSocket;
25
+ forceDisconnect(): void;
26
+ forceReconnect(): void;
27
+ private connect;
28
+ private retry;
29
+ private checkChannelRequests;
30
+ private notifyCurrentChannels;
31
+ private getSocketInfo;
32
+ private sendToChannel;
33
+ }
34
34
  //# sourceMappingURL=DefaultClientSocketManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultClientSocketManager.d.ts","sourceRoot":"","sources":["../../src/socket/DefaultClientSocketManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EAMjB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,0BAA2B,SAAQ,2BAA2B;IA4BnE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IA/B5B,OAAO,CAAC,MAAM,CAAC,CAAa;IAE5B,OAAO,CAAC,UAAU,CAaT;IAET,OAAO,CAAC,WAAW,CAAqE;IAExF,OAAO,CAAC,eAAe,CAAC,CAAU;IAClC,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,qBAAqB,CAAC,CAAU;gBAGnB,UAAU,EAAE,MAAM,UAAU,EAC5B,YAAY,EAAE,oBAAoB,EAClC,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,0BAAc;IAK1C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa;IAoIzC,eAAe;IAYf,cAAc,IAAI,IAAI;IAgBtB,OAAO,CAAC,OAAO;IAsLf,OAAO,CAAC,KAAK;IAWb,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAQxB"}
1
+ {"version":3,"file":"DefaultClientSocketManager.d.ts","sourceRoot":"","sources":["../../src/socket/DefaultClientSocketManager.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EAMjB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,0BAA2B,SAAQ,2BAA2B;IA4BnE,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IA/B5B,OAAO,CAAC,MAAM,CAAC,CAAa;IAE5B,OAAO,CAAC,UAAU,CAaT;IAET,OAAO,CAAC,WAAW,CAAqE;IAExF,OAAO,CAAC,eAAe,CAAC,CAAU;IAClC,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,cAAc,CAAC,CAAM;IAC7B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,qBAAqB,CAAC,CAAU;gBAGnB,UAAU,EAAE,MAAM,UAAU,EAC5B,YAAY,EAAE,oBAAoB,EAClC,UAAU,EAAE,kBAAkB,EAC9B,MAAM,EAAE,cAAc,EACtB,MAAM,CAAC,0BAAc;IAK1C,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa;IAoIzC,eAAe;IAYf,cAAc,IAAI,IAAI;IAgBtB,OAAO,CAAC,OAAO;IA4Kf,OAAO,CAAC,KAAK;IAWb,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;CAQxB"}
@@ -1,10 +1,10 @@
1
- import { SocketPlainMessage } from "@clairejs/core";
2
- export interface IClientSocket {
3
- send(message: SocketPlainMessage): void;
4
- onMessage(handler: (message: SocketPlainMessage) => void): void;
5
- onDisconnect(handler: () => void): void;
6
- onReconnect(handler: () => void): void;
7
- connect(): void;
8
- disconnect(): void;
9
- }
1
+ import { SocketPlainMessage } from "@clairejs/core";
2
+ export interface IClientSocket {
3
+ send(message: SocketPlainMessage): void;
4
+ onMessage(handler: (message: SocketPlainMessage) => void): void;
5
+ onDisconnect(handler: () => void): void;
6
+ onReconnect(handler: () => void): void;
7
+ connect(): void;
8
+ disconnect(): void;
9
+ }
10
10
  //# sourceMappingURL=IClientSocket.d.ts.map
@@ -1,8 +1,8 @@
1
- export interface IWebSocket {
2
- onopen(listener: () => void): void;
3
- onmessage(listener: (data: any) => void): void;
4
- onclose(listener: () => void): void;
5
- close(): void;
6
- send(data: any): void;
7
- }
1
+ export interface IWebSocket {
2
+ onopen(listener: () => void): void;
3
+ onmessage(listener: (data: any) => void): void;
4
+ onclose(listener: () => void): void;
5
+ close(): void;
6
+ send(data: any): void;
7
+ }
8
8
  //# sourceMappingURL=IWebSocket.d.ts.map
@@ -1,8 +1,8 @@
1
- export interface SocketConfig {
2
- keepAlive?: {
3
- pingIntervalMs: number;
4
- deadThreashold: number;
5
- };
6
- reconnectTimeDeltaMs?: number;
7
- }
1
+ export interface SocketConfig {
2
+ keepAlive?: {
3
+ pingIntervalMs: number;
4
+ deadThreashold: number;
5
+ };
6
+ reconnectTimeDeltaMs?: number;
7
+ }
8
8
  //# sourceMappingURL=SocketConfig.d.ts.map
@@ -1,6 +1,6 @@
1
- export declare abstract class AbstractStorage {
2
- abstract getItem<T>(key: string): Promise<T | undefined>;
3
- abstract setItem<T>(key: string, value: T): Promise<void>;
4
- abstract deleteItem(key: string): Promise<void>;
5
- }
1
+ export declare abstract class AbstractStorage {
2
+ abstract getItem<T>(key: string): Promise<T | undefined>;
3
+ abstract setItem<T>(key: string, value: T): Promise<void>;
4
+ abstract deleteItem(key: string): Promise<void>;
5
+ }
6
6
  //# sourceMappingURL=AbstractStorage.d.ts.map
@@ -1,4 +1,4 @@
1
- import { ClaireApp } from "@clairejs/core";
2
- export declare class ClaireClient extends ClaireApp {
3
- }
1
+ import { ClaireApp } from "@clairejs/core";
2
+ export declare class ClaireClient extends ClaireApp {
3
+ }
4
4
  //# sourceMappingURL=ClaireClient.d.ts.map
@@ -1,18 +1,18 @@
1
- import { AbstractStorage } from "../system/AbstractStorage";
2
- import { TranslationMap } from "./types";
3
- declare type LangSubscriber = (lang: string) => void;
4
- export declare class Translator {
5
- readonly storage: AbstractStorage;
6
- currentLang?: string;
7
- subscribers: LangSubscriber[];
8
- constructor(storage: AbstractStorage);
9
- addLangSubscriber(subscriber: LangSubscriber): void;
10
- removeLangSubscriber(subscriber: LangSubscriber): void;
11
- getCurrentLanguage(): Promise<string | undefined>;
12
- setCurrentLanguage(lang: string): Promise<void>;
13
- getLanguages(): Promise<string[]>;
14
- setLanguages(languages: string[]): Promise<void>;
15
- getTranslationObject(translationMap: TranslationMap): any;
16
- }
17
- export {};
1
+ import { AbstractStorage } from "../system/AbstractStorage";
2
+ import { TranslationMap } from "./types";
3
+ declare type LangSubscriber = (lang: string) => void;
4
+ export declare class Translator {
5
+ readonly storage: AbstractStorage;
6
+ currentLang?: string;
7
+ subscribers: LangSubscriber[];
8
+ constructor(storage: AbstractStorage);
9
+ addLangSubscriber(subscriber: LangSubscriber): void;
10
+ removeLangSubscriber(subscriber: LangSubscriber): void;
11
+ getCurrentLanguage(): Promise<string | undefined>;
12
+ setCurrentLanguage(lang: string): Promise<void>;
13
+ getLanguages(): Promise<string[]>;
14
+ setLanguages(languages: string[]): Promise<void>;
15
+ getTranslationObject(translationMap: TranslationMap): any;
16
+ }
17
+ export {};
18
18
  //# sourceMappingURL=Translator.d.ts.map