active-connect-ng2 0.2.39 → 0.2.41
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/ng-package.json +7 -0
- package/package.json +13 -32
- package/src/lib/active-connect-ng2.module.ts +34 -0
- package/src/lib/websocket/client.ts +438 -0
- package/src/lib/websocket/decorators/function.ts +44 -0
- package/src/lib/websocket/decorators/websocket/handle.ts +12 -0
- package/src/lib/websocket/decorators/websocket/on-reconnect.ts +6 -0
- package/src/lib/websocket/decorators/websocket/on-success.ts +11 -0
- package/src/lib/websocket/decorators/websocket/outbound.ts +212 -0
- package/src/lib/websocket/decorators/websocket/route.ts +32 -0
- package/src/lib/websocket/decorators/websocket/shared.ts +11 -0
- package/{lib/websocket/decorators/websocket/websocket-route-service.d.ts → src/lib/websocket/decorators/websocket/websocket-route-service.ts} +3 -2
- package/src/lib/websocket/json/json-parser.ts +26 -0
- package/src/lib/websocket/lifecycle/loading-status.ts +32 -0
- package/src/lib/websocket/objects/outbound-object.ts +430 -0
- package/{public-api.d.ts → src/public-api.ts} +4 -0
- package/tsconfig.lib.json +14 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/esm2020/active-connect-ng2.mjs +0 -5
- package/esm2020/lib/active-connect-ng2.module.mjs +0 -42
- package/esm2020/lib/websocket/client.mjs +0 -345
- package/esm2020/lib/websocket/decorators/function.mjs +0 -40
- package/esm2020/lib/websocket/decorators/websocket/handle.mjs +0 -9
- package/esm2020/lib/websocket/decorators/websocket/on-reconnect.mjs +0 -6
- package/esm2020/lib/websocket/decorators/websocket/on-success.mjs +0 -8
- package/esm2020/lib/websocket/decorators/websocket/outbound.mjs +0 -213
- package/esm2020/lib/websocket/decorators/websocket/route.mjs +0 -31
- package/esm2020/lib/websocket/decorators/websocket/shared.mjs +0 -10
- package/esm2020/lib/websocket/decorators/websocket/websocket-route-service.mjs +0 -2
- package/esm2020/lib/websocket/index.mjs +0 -11
- package/esm2020/lib/websocket/json/json-parser.mjs +0 -23
- package/esm2020/lib/websocket/lifecycle/loading-status.mjs +0 -31
- package/esm2020/lib/websocket/objects/outbound-object.mjs +0 -398
- package/esm2020/public-api.mjs +0 -7
- package/fesm2015/active-connect-ng2.mjs +0 -1176
- package/fesm2015/active-connect-ng2.mjs.map +0 -1
- package/fesm2020/active-connect-ng2.mjs +0 -1158
- package/fesm2020/active-connect-ng2.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/active-connect-ng2.module.d.ts +0 -7
- package/lib/websocket/client.d.ts +0 -59
- package/lib/websocket/decorators/function.d.ts +0 -30
- package/lib/websocket/decorators/websocket/handle.d.ts +0 -1
- package/lib/websocket/decorators/websocket/on-reconnect.d.ts +0 -1
- package/lib/websocket/decorators/websocket/on-success.d.ts +0 -1
- package/lib/websocket/decorators/websocket/outbound.d.ts +0 -1
- package/lib/websocket/decorators/websocket/route.d.ts +0 -1
- package/lib/websocket/decorators/websocket/shared.d.ts +0 -4
- package/lib/websocket/json/json-parser.d.ts +0 -5
- package/lib/websocket/lifecycle/loading-status.d.ts +0 -9
- package/lib/websocket/objects/outbound-object.d.ts +0 -48
- /package/{lib/websocket/index.d.ts → src/lib/websocket/index.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"active-connect-ng2.mjs","sources":["../../../projects/active-connect-ng2/src/lib/active-connect-ng2.module.ts","../../../projects/active-connect-ng2/src/lib/websocket/json/json-parser.ts","../../../projects/active-connect-ng2/src/lib/websocket/client.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/function.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/handle.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-success.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-reconnect.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/outbound.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/route.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/shared.ts","../../../projects/active-connect-ng2/src/lib/websocket/lifecycle/loading-status.ts","../../../projects/active-connect-ng2/src/lib/websocket/objects/outbound-object.ts","../../../projects/active-connect-ng2/src/public-api.ts","../../../projects/active-connect-ng2/src/active-connect-ng2.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { NgxIndexedDBModule, DBConfig } from 'ngx-indexed-db';\r\n\r\nconst dbConfig: DBConfig = {\r\n name: 'activeconnect_cache',\r\n version: 2,\r\n objectStoresMeta: [\r\n {\r\n store: 'outbound',\r\n storeConfig: { keyPath: 'method', autoIncrement: false },\r\n storeSchema: [\r\n { name: 'method', keypath: 'method', options: { unique: true } },\r\n { name: 'data', keypath: 'data', options: { unique: false } },\r\n {\r\n name: 'specificHash',\r\n keypath: 'specificHash',\r\n options: { unique: false },\r\n },\r\n {\r\n name: 'length',\r\n keypath: 'length',\r\n options: { unique: false },\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [NgxIndexedDBModule.forRoot(dbConfig)],\r\n exports: [NgxIndexedDBModule],\r\n})\r\nexport class ActiveConnectNg2Module {}\r\n","export class JsonParser {\r\n static stringify(obj: any) {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n static parsingFunction(key: any, value: any) {\r\n var a;\r\n if (typeof value === \"string\") {\r\n a =\r\n /^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}T[0-9]{2}\\:[0-9]{2}\\:[0-9]{2}\\.[0-9]{3}Z$/.exec(\r\n value\r\n );\r\n if (a) {\r\n return new Date(a as any);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n static parse(str: string) {\r\n if (str && str != \"undefined\") {\r\n return JSON.parse(str, JsonParser.parsingFunction);\r\n }\r\n return str;\r\n }\r\n}\r\n","import { NgxIndexedDBService } from 'ngx-indexed-db';\r\nimport { DecorableFunction } from './decorators/function';\r\nimport { JsonParser } from './json/json-parser';\r\n\r\nexport class WebsocketClient {\r\n ws!: WebSocket;\r\n pool!: { WssConnected: boolean } | null;\r\n\r\n constructor(\r\n private url?: string,\r\n private supportsCache?: boolean,\r\n public dbService?: NgxIndexedDBService\r\n ) {\r\n if (supportsCache) this.initCache();\r\n if (!url) {\r\n let protocol;\r\n let port;\r\n switch (document.location.protocol) {\r\n case 'https:': {\r\n protocol = 'wss:';\r\n port = ':443';\r\n break;\r\n }\r\n default: {\r\n protocol = 'ws:';\r\n port = ':80';\r\n break;\r\n }\r\n }\r\n this.url = protocol + '//' + document.location.hostname + port + '/wss';\r\n }\r\n this.connect(this.url as string);\r\n }\r\n\r\n subject: any;\r\n\r\n private connect(url: string) {\r\n if (!this.subject) {\r\n this.create(url);\r\n }\r\n return this.subject;\r\n }\r\n\r\n public initTabSuspendedListener() {\r\n if (document) {\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.visibilityState === 'hidden') {\r\n console.log(\r\n 'ActiveConnect: Closing WebSocket due to tab suspension...'\r\n );\r\n this.disconnect(true);\r\n } else if (document.visibilityState === 'visible') {\r\n console.log('ActiveConnect: Reconnecting WebSocket...');\r\n this.connect(this.url as string);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private requestStack: any[] = [];\r\n private requestHistoryLogs: { timestamp: Date; method: string }[] = [];\r\n private logEntry(method: string) {\r\n this.requestHistoryLogs.push({ timestamp: new Date(Date.now()), method });\r\n }\r\n public get logs(): { timestamp: Date; method: string }[] {\r\n return this.requestHistoryLogs;\r\n }\r\n\r\n private _token = '';\r\n public get Token(): string {\r\n if (!this._token) {\r\n if (window.localStorage)\r\n this._token = window.localStorage.getItem('token') || '';\r\n }\r\n return this._token;\r\n }\r\n public set Token(val: string) {\r\n this._token = val;\r\n if (window.localStorage) window.localStorage.setItem('token', val);\r\n }\r\n\r\n private set Connected(value: boolean) {\r\n if (value) {\r\n this.sendBrowserInfoToServer();\r\n\r\n this.auth(this.Token).then(() => {\r\n Promise.all(\r\n WebsocketClient.onReconnectCallback.map((c) =>\r\n c.Func ? c.Func() : null\r\n )\r\n ).then(() => {\r\n setTimeout(() => {\r\n this.resetRequestedState();\r\n this.requestStack.forEach((e) => {\r\n this.sendToSocket(e.method, e.data);\r\n this.requestStack = this.requestStack.filter((e1) => e1 != e);\r\n });\r\n }, 2000);\r\n });\r\n });\r\n }\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = value;\r\n }\r\n private static resetRequestedStateCallbacks: Function[] = [];\r\n private connectionEstablishedOnce: boolean = false;\r\n private resetRequestedState() {\r\n if (this.connectionEstablishedOnce) {\r\n // reset requested state for outbounds\r\n WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {\r\n reset();\r\n });\r\n } else {\r\n this.connectionEstablishedOnce = true;\r\n }\r\n }\r\n public static addResetRequestingStateCallback(callback: Function) {\r\n WebsocketClient.resetRequestedStateCallbacks.push(callback);\r\n }\r\n\r\n private create(url: string) {\r\n // create new connection\r\n this.logEntry('TCP/HTTP:CONNECT-SERVER');\r\n this.ws = new WebSocket(url + (this.supportsCache ? '?cache=true' : ''));\r\n this.ws.onerror = (err) => {\r\n this.ws.close();\r\n this.logEntry('TCP/HTTP:ERROR:' + err);\r\n console.log('ActiveConnect: ' + err);\r\n };\r\n this.ws.onopen = () => {\r\n this.logEntry('TCP/HTTP:CONNECTED');\r\n this.Connected = true;\r\n };\r\n this.ws.onmessage = (e) => {\r\n this.messageReceived(JsonParser.parse(e.data.toString()));\r\n };\r\n this.ws.onclose = () => {\r\n this.logEntry('TCP/HTTP:CLOSED');\r\n if (!this.closed) {\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = false;\r\n setTimeout(() => {\r\n this.connect(url);\r\n }, 1000);\r\n }\r\n };\r\n }\r\n\r\n private messageId: number = 0;\r\n protected sendToSocket(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ) {\r\n const messageId = ++this.messageId;\r\n if (this.ws.readyState != this.ws.OPEN) {\r\n if (!dontEnsureTransmission)\r\n this.requestStack.push({ method, data, messageId });\r\n else return false;\r\n } else {\r\n this.ws.send(JsonParser.stringify({ method, value: data, messageId }));\r\n }\r\n return messageId;\r\n }\r\n\r\n async auth(token: string): Promise<any> {\r\n return this.sendToSocket('auth.token', token);\r\n }\r\n\r\n public send(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ): Promise<any> {\r\n this.logEntry('SEND:' + method);\r\n const messageId = this.sendToSocket(\r\n method,\r\n data,\r\n dontEnsureTransmission || false\r\n );\r\n if (messageId) {\r\n return this.expectMethod(`m.${method}`, messageId);\r\n } else {\r\n return new Promise((resolve) => {\r\n resolve(false);\r\n });\r\n }\r\n }\r\n\r\n private rejectCallbacks: Map<number, Function> = new Map();\r\n private expectedMethods: Map<string | number, Array<Function>> = new Map();\r\n private expectMethod(method: string, messageId?: number | null) {\r\n return new Promise((resolve, reject) => {\r\n if (messageId) {\r\n this.expectedMethods.set(messageId, [resolve]);\r\n this.rejectCallbacks.set(messageId, reject);\r\n } else {\r\n if (this.expectedMethods.has(method)) {\r\n let arr = this.expectedMethods.get(method);\r\n (arr as Array<Function>).push(resolve);\r\n } else {\r\n this.expectedMethods.set(method, [resolve]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private messageReceived({\r\n method,\r\n value,\r\n messageId,\r\n specificHash,\r\n inserted,\r\n updated,\r\n deleted,\r\n length,\r\n }: {\r\n method: string;\r\n value: any;\r\n messageId: number | null;\r\n specificHash: number | null;\r\n inserted: any[] | null;\r\n updated: any[] | null;\r\n deleted: any[] | null;\r\n length: number | null;\r\n }) {\r\n this.logEntry('RECEIVED:' + method);\r\n if (method == '___cache') {\r\n this.handleOutboundCacheRequest(value);\r\n }\r\n if (messageId) {\r\n if (method == 'm.error') {\r\n const reject = this.rejectCallbacks.get(messageId);\r\n if (reject) {\r\n reject(value);\r\n }\r\n messageId = -1;\r\n }\r\n }\r\n\r\n if (messageId != null) {\r\n const callback = this.expectedMethods.get(messageId);\r\n if (callback) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n this.invokeSuccessHandlers(method);\r\n } else {\r\n const callback = this.expectedMethods.get(method);\r\n if (callback && callback.length > 0) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n } else {\r\n const out = WebsocketClient.outbounds.get(method);\r\n if (out) {\r\n out(value, specificHash, inserted, updated, deleted, length, this);\r\n }\r\n const handle = WebsocketClient.handles.get(method);\r\n if (handle) {\r\n (handle.Func as Function)(value);\r\n }\r\n }\r\n }\r\n } else {\r\n throw Error(\r\n 'No MessageId was provided, the connection is not supported.'\r\n );\r\n }\r\n }\r\n\r\n private handleOutboundCacheRequest(method: string) {\r\n if (this.dbService) {\r\n try {\r\n this.dbService.getByKey('outbound', method).subscribe((item: any) => {\r\n if (item) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: item.specificHash || null,\r\n });\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n }\r\n });\r\n } catch (e) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error('ActiveConnect: ' + e);\r\n }\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error(\r\n 'Active-Connect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n\r\n private static outbounds: Map<\r\n string,\r\n (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n > = new Map();\r\n static expectOutbound(\r\n method: string,\r\n callback: (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n ) {\r\n WebsocketClient.outbounds.set(method, callback);\r\n }\r\n\r\n private static handles: Map<string, DecorableFunction> = new Map();\r\n static registerHandle(method: string, callback: DecorableFunction) {\r\n WebsocketClient.handles.set(method, callback);\r\n }\r\n\r\n public get isConnected(): boolean {\r\n if (this.ws) return this.ws.readyState == WebSocket.OPEN;\r\n return true;\r\n }\r\n\r\n private sendBrowserInfoToServer() {\r\n // send browser / os information\r\n const browser = this.getBrowser();\r\n const os = this.getOS();\r\n this.send('___browser', {\r\n browser: `${browser.name} ${browser.version} ${os}`,\r\n });\r\n }\r\n\r\n public getBrowser(): { name: string; version: string } {\r\n // https://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/\r\n var ua = navigator.userAgent,\r\n tem,\r\n M =\r\n ua.match(\r\n /(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i\r\n ) || [];\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE ', version: tem[1] || '' };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR\\/(\\d+)/);\r\n if (tem != null) {\r\n return { name: 'Opera', version: tem[1] };\r\n }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\r\n M.splice(1, 1, tem[1]);\r\n }\r\n return {\r\n name: M[0],\r\n version: M[1],\r\n };\r\n }\r\n\r\n public getOS(): string {\r\n var userAgent = window.navigator.userAgent,\r\n platform = window.navigator.platform,\r\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPad', 'iPod'],\r\n os = null;\r\n\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac OS';\r\n } else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iOS';\r\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n } else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n } else if (!os && /Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n\r\n return os || '';\r\n }\r\n\r\n private static onSuccessHandlers: {\r\n callback: DecorableFunction;\r\n regexp: RegExp;\r\n }[] = [];\r\n public static onSuccess(callback: DecorableFunction, regexp: RegExp) {\r\n this.onSuccessHandlers.push({ callback, regexp });\r\n }\r\n\r\n private static onReconnectCallback: DecorableFunction[] = [];\r\n static onReconnect(callback: DecorableFunction) {\r\n WebsocketClient.onReconnectCallback.push(callback);\r\n }\r\n\r\n private invokeSuccessHandlers(method: string) {\r\n WebsocketClient.onSuccessHandlers\r\n .filter((e) => e.regexp.test(method))\r\n .forEach((e) => {\r\n var res = (e.callback.Func as Function)();\r\n if (res && res.then) {\r\n res.then();\r\n }\r\n });\r\n }\r\n\r\n public closed = false;\r\n public disconnect(restart?: boolean) {\r\n if (!restart) this.closed = true;\r\n this.ws.close();\r\n }\r\n\r\n private initCache() {}\r\n}\r\n","/**\r\n * Represents the reference to an object method used for websocket routes and outbounds.\r\n */\r\nexport class DecorableFunction {\r\n /**\r\n * Creates an instance of DecorableFunction.\r\n * @param objConfig - The configuration object for the object method.\r\n * @param objConfig.target - The target object.\r\n * @param objConfig.propertyKey - The property key of the target object.\r\n */\r\n constructor(protected objConfig: { target: any; propertyKey: string }) {\r\n // singelton service - fetch from angular\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n if (!prototype.___constructorOverridden) {\r\n prototype.___constructorOverridden = true;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the decorated function.\r\n * @returns - The decorated function.\r\n */\r\n public get Func(): ((...data: any[]) => Promise<any> | any) | null {\r\n if (\r\n this.objConfig?.target &&\r\n this.objConfig.target[this.objConfig.propertyKey]\r\n ) {\r\n return this.objConfig.target[this.objConfig.propertyKey].bind(\r\n this.getBindObject()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bind object.\r\n * @private\r\n * @returns - The bind object.\r\n */\r\n private getBindObject(): any {\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n return prototype.___data._obj;\r\n }\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function Handle(method: string) {\r\n return function _Handle(target: any, propertyKey: string): any {\r\n // method annotation\r\n WebsocketClient.registerHandle(\r\n method,\r\n new DecorableFunction({ target, propertyKey })\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnSuccess(regexp: RegExp) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n WebsocketClient.onSuccess(\r\n new DecorableFunction({ target, propertyKey }),\r\n regexp\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnReconnect(target: any, propertyKey: string) {\r\n WebsocketClient.onReconnect(new DecorableFunction({ target, propertyKey }));\r\n}\r\n","import { WebsocketClient } from '../../client';\r\n\r\nexport function Outbound(\r\n method: string,\r\n requestingRequired?: boolean,\r\n cached?: boolean,\r\n sortBy?: (a: any, b: any) => number\r\n) {\r\n return function _Outbound(target: any, propertyKey: string): any {\r\n target.loading = new Map<string, boolean>();\r\n // property annotation\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) {\r\n if (!target.___received) target.___received = {};\r\n if (!target.___data) target.___data = {};\r\n if (!target.___received) target.___received = {};\r\n if (!target.___requested) target.___requested = {};\r\n if (!cached) {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error(\r\n 'ActiveConnect: could not delete indexdb cache entry'\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = result.data;\r\n target.loading.set(propertyKey, false);\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n target.___received[propertyKey] = false;\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n } else if (data == 'data_delete') {\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n target.___received[propertyKey] = false;\r\n target.___requested[propertyKey] = false;\r\n } else if (data == 'data_diff') {\r\n var data = target.___data[propertyKey] || [];\r\n inserted?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n updated?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n data = data.filter((d: any) => d.id != e.id);\r\n });\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n }\r\n );\r\n if (requestingRequired) {\r\n WebsocketClient.addResetRequestingStateCallback(function callback() {\r\n if (target.___requested) {\r\n target.___requested[propertyKey] = false;\r\n }\r\n });\r\n }\r\n\r\n const obj = {\r\n configurable: true,\r\n get() {\r\n if (!target.___requested) target.___requested = {};\r\n if (requestingRequired && !target.___requested[propertyKey]) {\r\n target.___requested[propertyKey] = true;\r\n (this as any).send('request.' + method, null).then();\r\n }\r\n if (!target.___data) target.___data = {};\r\n if (!target.___data[propertyKey]) {\r\n target.loading.set(propertyKey, true);\r\n } else if (target.loading[propertyKey]) {\r\n target.loading.set(propertyKey, false);\r\n }\r\n return target.___data[propertyKey];\r\n },\r\n set(val: any) {\r\n if (!target.___data) target.___data = {};\r\n target.loading.set(propertyKey, false);\r\n if (sortBy && val) val = val.sort(sortBy);\r\n return (target.___data[propertyKey] = val);\r\n },\r\n };\r\n target[propertyKey] = obj;\r\n return obj;\r\n };\r\n}\r\n","export function Route(\r\n method: string,\r\n loadingKey?: string,\r\n dontEnsureTransmission?: boolean\r\n) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n // method annotation\r\n const original = target[propertyKey];\r\n target[propertyKey] = async function execRoute(...data: any): Promise<any> {\r\n if (loadingKey) {\r\n if (!this.loadingElements[loadingKey]) {\r\n this.loadingElements[loadingKey] = 0;\r\n }\r\n this.loadingElements[loadingKey]++;\r\n }\r\n const promise = original.bind(this)(...data);\r\n let res = null;\r\n if (this.client) {\r\n res = await this.client\r\n .send(method, data[0], dontEnsureTransmission)\r\n ?.catch((err: any) => {\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n throw err;\r\n });\r\n }\r\n await promise;\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n return res;\r\n };\r\n return target;\r\n };\r\n}\r\n","/**\r\n * @deprecated\r\n */\r\nexport function Shared<T>(defaultValue?: T) {\r\n if (defaultValue) {\r\n throw Error(\r\n \"Active-Connect/@Shared: defaultValue is no longer supported, please assign the value to the variable itself.\"\r\n );\r\n }\r\n return function _Shared(target: any, propertyKey: string) {};\r\n}\r\n","import { WebsocketClient } from '../client';\r\n\r\nexport class LoadingStatus extends WebsocketClient {\r\n private __proto__: any;\r\n static loading: Map<string, boolean>;\r\n get isLoading(): boolean {\r\n // return general loading\r\n let anyTrue = false;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n anyTrue ||= e;\r\n });\r\n if (!anyTrue) this.__proto__.loading.clear();\r\n return this.__proto__.loading.size > 0;\r\n }\r\n getLoadingMap(): Map<string, boolean> {\r\n return this.__proto__.loading;\r\n }\r\n\r\n get getCurrent(): number {\r\n let count = 0;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n if (e) count++;\r\n });\r\n if (count == 0) {\r\n this.__proto__.loading.clear();\r\n }\r\n return count;\r\n }\r\n get getTotal(): number {\r\n return this.__proto__.loading.size;\r\n }\r\n}\r\n","import { Observable, Observer } from 'rxjs';\r\nimport { WebsocketClient } from '../client';\r\n\r\nexport interface IdObject {\r\n id: number | null | undefined;\r\n}\r\n\r\nexport class OutboundObject<T extends IdObject> {\r\n private previouslyCachedCount: number | undefined;\r\n constructor(\r\n private client: WebsocketClient,\r\n private method: string,\r\n private lazyLoaded?: boolean,\r\n public readonly cached?: boolean,\r\n private initialLoadingCount?: number,\r\n private sortBy?: (a: T, b: T) => number\r\n ) {\r\n this.target.loading = new Map<string, boolean>();\r\n\r\n if (this.client.dbService) {\r\n try {\r\n this.client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n if (result) {\r\n this.previouslyCachedCount = result.data?.length || null;\r\n }\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to read cached data');\r\n console.error(e);\r\n }\r\n }\r\n\r\n const _this = this;\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n insertedOrGroupData: any[] | null,\r\n updatedOrGroupId: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _client: WebsocketClient\r\n ) {\r\n if (!cached) {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n _this.setData(result.data);\r\n if (result.length) _this._length = result.length;\r\n _this.loading = false;\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n _this.loading = false;\r\n _this.requested = false;\r\n } else if (data == 'data_delete') {\r\n _this.data = undefined;\r\n _this.dataMap = new Map();\r\n _this.requested = false;\r\n _this.loadedGroupData = null;\r\n _this.loadedGroupId = null;\r\n _this._length = undefined;\r\n _this.loading = false;\r\n } else if (data == 'data_group') {\r\n if (\r\n _this.requestedGroupId ==\r\n (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedGroupData = insertedOrGroupData;\r\n _this.loadedGroupId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedGroupChanged?.next(insertedOrGroupData as T[]);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_id') {\r\n if (\r\n _this.requestedId == (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedIdData =\r\n (insertedOrGroupData?.length || 0) > 0\r\n ? (insertedOrGroupData as any[])[0]\r\n : null;\r\n _this.loadedId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedIdChanged?.next(_this.loadedIdData as T);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_diff') {\r\n insertedOrGroupData?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n updatedOrGroupId?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n _this.dataMap.delete(e.id);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(null as any);\r\n }\r\n });\r\n _this.data = Array.from(_this.dataMap.values());\r\n if (_this.data && _this.sortBy)\r\n _this.data = _this.data.sort(_this.sortBy);\r\n _this.loading = false;\r\n\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (_this.data && _this.data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data: _this.data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n _this.setData(data);\r\n if (_this.loadedId) {\r\n const loadedValue = _this.dataMap.get(_this.loadedId);\r\n if (loadedValue) {\r\n _this.loadedIdData = loadedValue;\r\n _this.loadedIdChanged?.next(_this.loadedIdData);\r\n }\r\n }\r\n _this.loading = false;\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (data && data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n if (length) _this._length = length;\r\n }\r\n );\r\n\r\n WebsocketClient.addResetRequestingStateCallback(() => {\r\n this.afterServerReconnected();\r\n });\r\n }\r\n\r\n get target(): any {\r\n return (this.client as any).__proto__;\r\n }\r\n\r\n private dataMap: Map<number | null | undefined, T> = new Map();\r\n private data: T[] | undefined = undefined;\r\n\r\n public get(id: number): Observable<T> {\r\n if (this.requestedId == id && this.loadedObservable && this.loadedIdData) {\r\n if (this.loadedIdData)\r\n setTimeout(() => {\r\n if (this.loadedIdData) this.loadedIdChanged?.next(this.loadedIdData);\r\n }, 50);\r\n return this.loadedObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedId != id || !this.loadedObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedObservable = new Observable<T>((observer: Observer<T>) => {\r\n this.loadedIdChanged = observer;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.data) {\r\n const res = this.dataMap.get(id);\r\n if (res) {\r\n this.loadedIdChanged?.next(res);\r\n resolve();\r\n return;\r\n }\r\n }\r\n if (this.loadedId == id) {\r\n this.loadedIdChanged?.next(this.loadedIdData as T);\r\n } else {\r\n await this.requestById(id);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedObservable as Observable<T>;\r\n }\r\n\r\n public getForGroup(groupId: number): Observable<T[]> {\r\n if (\r\n this.requestedGroupId == groupId &&\r\n this.loadedGroupObservable &&\r\n this.loadedGroupData\r\n ) {\r\n setTimeout(() => {\r\n if (this.loadedGroupData)\r\n this.loadedGroupChanged?.next(this.loadedGroupData);\r\n }, 50);\r\n return this.loadedGroupObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedGroupId != groupId || !this.loadedGroupObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedGroupObservable = new Observable<T[]>(\r\n (observer: Observer<T[]>) => {\r\n this.loadedGroupChanged = observer;\r\n resolve();\r\n }\r\n );\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.loadedGroupId == groupId && this.loadedGroupData) {\r\n this.loadedGroupChanged?.next(this.loadedGroupData as T[]);\r\n } else {\r\n await this.requestForGroup(groupId);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedGroupObservable as Observable<T[]>;\r\n }\r\n\r\n public get all(): T[] | undefined {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n return this.data;\r\n }\r\n\r\n private requested: boolean = false;\r\n public async load(count?: number): Promise<void> {\r\n if (this.lazyLoaded) {\r\n const hasBeenRequestedBefore = this.requested;\r\n this._loading = true;\r\n if (!this.requested) {\r\n this.loading = true;\r\n }\r\n this.requested = true;\r\n await this.client.send('request.' + this.method, {\r\n count: hasBeenRequestedBefore\r\n ? this.data\r\n ? count || this.initialLoadingCount\r\n ? (count || (this.initialLoadingCount as number)) +\r\n this.loadedLength\r\n : undefined\r\n : undefined\r\n : this.previouslyCachedCount || (this.initialLoadingCount as number),\r\n loaded: this.loadedLength,\r\n });\r\n } else {\r\n throw Error(\r\n 'Active-Connect: Cannot run loading request as this outbound is not lazy-loaded.'\r\n );\r\n }\r\n }\r\n\r\n private _loading = false;\r\n private set loading(value: boolean) {\r\n this._loading = value;\r\n this.target.loading.set(this.method, value);\r\n }\r\n public get loading(): boolean {\r\n return this._loading;\r\n }\r\n public get loadedLength(): number {\r\n return this.data?.length || 0;\r\n }\r\n private _length: number | undefined = undefined;\r\n public get length(): number | undefined {\r\n return this._length;\r\n }\r\n\r\n private requestedId: number | null = null;\r\n private loadedObservable: Observable<T> | null = null;\r\n private loadedId: number | null = null;\r\n private loadedIdData: T | null = null;\r\n private loadedIdChanged: Observer<T> | null = null;\r\n private requestById(id: number): Promise<any> {\r\n this.loading = true;\r\n this.requestedId = id;\r\n return this.client.send('request.' + this.method, { id }) as Promise<any>;\r\n }\r\n\r\n private requestedGroupId: number | null = null;\r\n private loadedGroupObservable: Observable<T[]> | null = null;\r\n private loadedGroupId: number | null = null;\r\n private loadedGroupData: T[] | null = null;\r\n private loadedGroupChanged: Observer<T[]> | null = null;\r\n private requestForGroup(groupId: number): Promise<T[]> {\r\n this.loading = true;\r\n this.requestedGroupId = groupId;\r\n return this.client.send('request.' + this.method, { groupId });\r\n }\r\n\r\n private setData(data: T[] | { added: T[] | undefined; length: number }) {\r\n this.data = data as T[];\r\n if (this.data && this.sortBy) this.data = this.data.sort(this.sortBy);\r\n this._length = data.length;\r\n this.dataMap = new Map();\r\n this.data.forEach((d) => {\r\n this.dataMap.set(d.id, d);\r\n });\r\n }\r\n\r\n get isEmpty() {\r\n return this.data == undefined;\r\n }\r\n\r\n /**\r\n * The contained data can be modified within the callback method\r\n */\r\n public update(callback: (data: T[]) => void) {\r\n if (this.data) {\r\n const updateLengthVariable = this.data.length == this._length;\r\n const length = this.length;\r\n callback(this.data);\r\n this.setData(this.data);\r\n if (!updateLengthVariable) {\r\n this._length = length;\r\n }\r\n }\r\n }\r\n\r\n private afterServerReconnected() {\r\n if (this.requested && this.lazyLoaded) {\r\n this.requested = false;\r\n this.load(1).then();\r\n }\r\n if (this.loadedId) {\r\n this.loadedIdData = null;\r\n this.get(this.loadedId);\r\n }\r\n if (this.loadedGroupId) {\r\n this.loadedGroupData = null;\r\n this.getForGroup(this.loadedGroupId);\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of active-connect-ng2\r\n */\r\n\r\nexport * from './lib/active-connect-ng2.module';\r\nexport * from './lib/websocket';\r\nexport { NgxIndexedDBService } from 'ngx-indexed-db';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import * as i0 from "@angular/core";
|
|
2
|
-
import * as i1 from "ngx-indexed-db";
|
|
3
|
-
export declare class ActiveConnectNg2Module {
|
|
4
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ActiveConnectNg2Module, never>;
|
|
5
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ActiveConnectNg2Module, never, [typeof i1.NgxIndexedDBModule], [typeof i1.NgxIndexedDBModule]>;
|
|
6
|
-
static ɵinj: i0.ɵɵInjectorDeclaration<ActiveConnectNg2Module>;
|
|
7
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { NgxIndexedDBService } from 'ngx-indexed-db';
|
|
2
|
-
import { DecorableFunction } from './decorators/function';
|
|
3
|
-
export declare class WebsocketClient {
|
|
4
|
-
private url?;
|
|
5
|
-
private supportsCache?;
|
|
6
|
-
dbService?: NgxIndexedDBService | undefined;
|
|
7
|
-
ws: WebSocket;
|
|
8
|
-
pool: {
|
|
9
|
-
WssConnected: boolean;
|
|
10
|
-
} | null;
|
|
11
|
-
constructor(url?: string | undefined, supportsCache?: boolean | undefined, dbService?: NgxIndexedDBService | undefined);
|
|
12
|
-
subject: any;
|
|
13
|
-
private connect;
|
|
14
|
-
initTabSuspendedListener(): void;
|
|
15
|
-
private requestStack;
|
|
16
|
-
private requestHistoryLogs;
|
|
17
|
-
private logEntry;
|
|
18
|
-
get logs(): {
|
|
19
|
-
timestamp: Date;
|
|
20
|
-
method: string;
|
|
21
|
-
}[];
|
|
22
|
-
private _token;
|
|
23
|
-
get Token(): string;
|
|
24
|
-
set Token(val: string);
|
|
25
|
-
private set Connected(value);
|
|
26
|
-
private static resetRequestedStateCallbacks;
|
|
27
|
-
private connectionEstablishedOnce;
|
|
28
|
-
private resetRequestedState;
|
|
29
|
-
static addResetRequestingStateCallback(callback: Function): void;
|
|
30
|
-
private create;
|
|
31
|
-
private messageId;
|
|
32
|
-
protected sendToSocket(method: string, data: any, dontEnsureTransmission?: boolean): number | false;
|
|
33
|
-
auth(token: string): Promise<any>;
|
|
34
|
-
send(method: string, data: any, dontEnsureTransmission?: boolean): Promise<any>;
|
|
35
|
-
private rejectCallbacks;
|
|
36
|
-
private expectedMethods;
|
|
37
|
-
private expectMethod;
|
|
38
|
-
private messageReceived;
|
|
39
|
-
private handleOutboundCacheRequest;
|
|
40
|
-
private static outbounds;
|
|
41
|
-
static expectOutbound(method: string, callback: (data: any, specificHash: number | null, inserted: any[] | null, updated: any[] | null, deleted: any[] | null, length: number | null, _this: WebsocketClient) => void): void;
|
|
42
|
-
private static handles;
|
|
43
|
-
static registerHandle(method: string, callback: DecorableFunction): void;
|
|
44
|
-
get isConnected(): boolean;
|
|
45
|
-
private sendBrowserInfoToServer;
|
|
46
|
-
getBrowser(): {
|
|
47
|
-
name: string;
|
|
48
|
-
version: string;
|
|
49
|
-
};
|
|
50
|
-
getOS(): string;
|
|
51
|
-
private static onSuccessHandlers;
|
|
52
|
-
static onSuccess(callback: DecorableFunction, regexp: RegExp): void;
|
|
53
|
-
private static onReconnectCallback;
|
|
54
|
-
static onReconnect(callback: DecorableFunction): void;
|
|
55
|
-
private invokeSuccessHandlers;
|
|
56
|
-
closed: boolean;
|
|
57
|
-
disconnect(restart?: boolean): void;
|
|
58
|
-
private initCache;
|
|
59
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Represents the reference to an object method used for websocket routes and outbounds.
|
|
3
|
-
*/
|
|
4
|
-
export declare class DecorableFunction {
|
|
5
|
-
protected objConfig: {
|
|
6
|
-
target: any;
|
|
7
|
-
propertyKey: string;
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Creates an instance of DecorableFunction.
|
|
11
|
-
* @param objConfig - The configuration object for the object method.
|
|
12
|
-
* @param objConfig.target - The target object.
|
|
13
|
-
* @param objConfig.propertyKey - The property key of the target object.
|
|
14
|
-
*/
|
|
15
|
-
constructor(objConfig: {
|
|
16
|
-
target: any;
|
|
17
|
-
propertyKey: string;
|
|
18
|
-
});
|
|
19
|
-
/**
|
|
20
|
-
* Returns the decorated function.
|
|
21
|
-
* @returns - The decorated function.
|
|
22
|
-
*/
|
|
23
|
-
get Func(): ((...data: any[]) => Promise<any> | any) | null;
|
|
24
|
-
/**
|
|
25
|
-
* Returns the bind object.
|
|
26
|
-
* @private
|
|
27
|
-
* @returns - The bind object.
|
|
28
|
-
*/
|
|
29
|
-
private getBindObject;
|
|
30
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Handle(method: string): (target: any, propertyKey: string) => any;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function OnReconnect(target: any, propertyKey: string): void;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function OnSuccess(regexp: RegExp): (target: any, propertyKey: string) => any;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Outbound(method: string, requestingRequired?: boolean, cached?: boolean, sortBy?: (a: any, b: any) => number): (target: any, propertyKey: string) => any;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function Route(method: string, loadingKey?: string, dontEnsureTransmission?: boolean): (target: any, propertyKey: string) => any;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { WebsocketClient } from '../client';
|
|
2
|
-
export declare class LoadingStatus extends WebsocketClient {
|
|
3
|
-
private __proto__;
|
|
4
|
-
static loading: Map<string, boolean>;
|
|
5
|
-
get isLoading(): boolean;
|
|
6
|
-
getLoadingMap(): Map<string, boolean>;
|
|
7
|
-
get getCurrent(): number;
|
|
8
|
-
get getTotal(): number;
|
|
9
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import { WebsocketClient } from '../client';
|
|
3
|
-
export interface IdObject {
|
|
4
|
-
id: number | null | undefined;
|
|
5
|
-
}
|
|
6
|
-
export declare class OutboundObject<T extends IdObject> {
|
|
7
|
-
private client;
|
|
8
|
-
private method;
|
|
9
|
-
private lazyLoaded?;
|
|
10
|
-
readonly cached?: boolean | undefined;
|
|
11
|
-
private initialLoadingCount?;
|
|
12
|
-
private sortBy?;
|
|
13
|
-
private previouslyCachedCount;
|
|
14
|
-
constructor(client: WebsocketClient, method: string, lazyLoaded?: boolean | undefined, cached?: boolean | undefined, initialLoadingCount?: number | undefined, sortBy?: ((a: T, b: T) => number) | undefined);
|
|
15
|
-
get target(): any;
|
|
16
|
-
private dataMap;
|
|
17
|
-
private data;
|
|
18
|
-
get(id: number): Observable<T>;
|
|
19
|
-
getForGroup(groupId: number): Observable<T[]>;
|
|
20
|
-
get all(): T[] | undefined;
|
|
21
|
-
private requested;
|
|
22
|
-
load(count?: number): Promise<void>;
|
|
23
|
-
private _loading;
|
|
24
|
-
private set loading(value);
|
|
25
|
-
get loading(): boolean;
|
|
26
|
-
get loadedLength(): number;
|
|
27
|
-
private _length;
|
|
28
|
-
get length(): number | undefined;
|
|
29
|
-
private requestedId;
|
|
30
|
-
private loadedObservable;
|
|
31
|
-
private loadedId;
|
|
32
|
-
private loadedIdData;
|
|
33
|
-
private loadedIdChanged;
|
|
34
|
-
private requestById;
|
|
35
|
-
private requestedGroupId;
|
|
36
|
-
private loadedGroupObservable;
|
|
37
|
-
private loadedGroupId;
|
|
38
|
-
private loadedGroupData;
|
|
39
|
-
private loadedGroupChanged;
|
|
40
|
-
private requestForGroup;
|
|
41
|
-
private setData;
|
|
42
|
-
get isEmpty(): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* The contained data can be modified within the callback method
|
|
45
|
-
*/
|
|
46
|
-
update(callback: (data: T[]) => void): void;
|
|
47
|
-
private afterServerReconnected;
|
|
48
|
-
}
|
|
File without changes
|