@cubejs-client/ws-transport 1.0.0 → 1.1.16
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/dist/cubejs-client-ws-transport.esm.js +2 -0
- package/dist/cubejs-client-ws-transport.esm.js.map +1 -1
- package/dist/cubejs-client-ws-transport.js +2 -0
- package/dist/cubejs-client-ws-transport.js.map +1 -1
- package/dist/cubejs-client-ws-transport.umd.js +2 -0
- package/dist/cubejs-client-ws-transport.umd.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cubejs-client-ws-transport.esm.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\nimport type { ITransport, ITransportResponse } from '@cubejs-client/core';\n\n/**\n * @title @cubejs-client/ws-transport\n * @permalink /@cubejs-client-ws-transport\n * @menuCategory Cube.js Frontend\n * @subcategory Reference\n * @menuOrder 4\n * @description WebSocket transport for Cube.js client\n */\n\nclass WebSocketTransportResult {\n protected readonly status: unknown;\n\n protected readonly result: unknown;\n\n public constructor({ status, message }: { status: unknown, message: unknown }) {\n this.status = status;\n this.result = message;\n }\n\n public async json() {\n return this.result;\n }\n\n public clone() {\n // no need to actually clone it\n return this;\n }\n\n public async text() {\n return typeof this.result === 'string' ? this.result : JSON.stringify(this.result);\n }\n}\n\ntype WebSocketTransportOptions = {\n authorization?: string,\n apiUrl: string,\n // @deprecated\n hearBeatInterval?: number,\n heartBeatInterval?: number,\n};\n\ntype Message = {\n messageId: number,\n requestId: any,\n method: string,\n params: Record<string, unknown>,\n};\n\ntype Subscription = {\n message: Message,\n callback: (result: WebSocketTransportResult) => void,\n};\n\nclass WebSocketTransport implements ITransport<WebSocketTransportResult> {\n protected readonly apiUrl: string;\n\n protected readonly heartBeatInterval: number = 60;\n\n protected token: string | undefined;\n\n protected ws: any = null;\n\n protected messageCounter: number = 1;\n\n protected messageIdToSubscription: Record<number, Subscription> = {};\n\n protected messageQueue: Message[] = [];\n\n public constructor({ authorization, apiUrl, heartBeatInterval, hearBeatInterval }: WebSocketTransportOptions) {\n this.token = authorization;\n this.apiUrl = apiUrl;\n\n if (heartBeatInterval) {\n this.heartBeatInterval = heartBeatInterval;\n } else if (hearBeatInterval) {\n console.warn('Option hearBeatInterval is deprecated. It was replaced by heartBeatInterval.');\n this.heartBeatInterval = hearBeatInterval;\n }\n }\n\n public set authorization(token) {\n this.token = token;\n\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public async close(): Promise<void> {\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public get authorization() {\n return this.token;\n }\n\n protected initSocket() {\n if (this.ws) {\n return this.ws.initPromise;\n }\n\n const ws: any = new WebSocket(this.apiUrl);\n\n ws.messageIdSent = {};\n\n ws.sendMessage = (message: any) => {\n if (!message.messageId || message.messageId && !ws.messageIdSent[message.messageId]) {\n ws.send(JSON.stringify(message));\n ws.messageIdSent[message.messageId] = true;\n }\n };\n\n ws.sendQueue = () => {\n this.messageQueue.forEach(message => ws.sendMessage(message));\n this.messageQueue = [];\n };\n\n ws.reconcile = () => {\n if (new Date().getTime() - ws.lastMessageTimestamp.getTime() > 4 * this.heartBeatInterval * 1000) {\n ws.close();\n } else {\n Object.keys(this.messageIdToSubscription).forEach(messageId => {\n // @ts-ignore\n ws.sendMessage(this.messageIdToSubscription[messageId].message);\n });\n }\n };\n\n ws.lastMessageTimestamp = new Date();\n\n ws.initPromise = new Promise<void>(resolve => {\n ws.onopen = () => {\n ws.sendMessage({ authorization: this.authorization });\n };\n\n ws.onmessage = (event: any) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data);\n if (message.handshake) {\n ws.reconcile();\n ws.reconcileTimer = setInterval(() => {\n ws.messageIdSent = {};\n ws.reconcile();\n }, this.heartBeatInterval * 1000);\n resolve();\n }\n\n if (this.messageIdToSubscription[message.messageId]) {\n this.messageIdToSubscription[message.messageId].callback(\n new WebSocketTransportResult(message)\n );\n }\n\n ws.sendQueue();\n };\n\n ws.onclose = () => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n if (this.ws === ws) {\n this.ws = null;\n if (Object.keys(this.messageIdToSubscription).length) {\n this.initSocket();\n }\n }\n };\n\n ws.onerror = ws.onclose;\n });\n\n this.ws = ws;\n\n return this.ws.initPromise;\n }\n\n protected sendMessage(message: any) {\n if (message.unsubscribe && this.messageQueue.find(m => m.messageId === message.unsubscribe)) {\n this.messageQueue = this.messageQueue.filter(m => m.messageId !== message.unsubscribe);\n } else {\n this.messageQueue.push(message);\n }\n\n setTimeout(async () => {\n await this.initSocket();\n this.ws.sendQueue();\n }, 100);\n }\n\n public request(\n method: string,\n { baseRequestId, ...params }: Record<string, unknown>\n ): ITransportResponse<WebSocketTransportResult> {\n const message: Message = {\n messageId: this.messageCounter++,\n requestId: baseRequestId,\n method,\n params\n };\n\n const pendingResults: WebSocketTransportResult[] = [];\n let nextMessage: ((value: any) => void) | null = null;\n\n const runNextMessage = () => {\n if (nextMessage) {\n nextMessage(pendingResults.pop());\n nextMessage = null;\n }\n };\n\n this.messageIdToSubscription[message.messageId] = {\n message,\n callback: (result) => {\n pendingResults.push(result);\n runNextMessage();\n }\n };\n\n const transport = this;\n\n return {\n async subscribe(callback) {\n transport.sendMessage(message);\n\n const result = await new Promise<WebSocketTransportResult>((resolve) => {\n nextMessage = resolve;\n if (pendingResults.length) {\n runNextMessage();\n }\n });\n\n return callback(result, () => this.subscribe(callback));\n },\n async unsubscribe() {\n transport.sendMessage({ unsubscribe: message.messageId });\n delete transport.messageIdToSubscription[message.messageId];\n }\n };\n }\n}\n\nexport default WebSocketTransport;\n"],"names":["WebSocketTransportResult","constructor","status","message","result","json","clone","text","JSON","stringify","WebSocketTransport","heartBeatInterval","ws","messageCounter","messageIdToSubscription","messageQueue","authorization","apiUrl","hearBeatInterval","token","console","warn","close","initSocket","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","sendQueue","forEach","reconcile","Date","getTime","lastMessageTimestamp","Object","keys","Promise","resolve","onopen","onmessage","event","parse","data","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","length","onerror","unsubscribe","find","m","filter","push","setTimeout","request","method","baseRequestId","params","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cubejs-client-ws-transport.esm.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\nimport type { ITransport, ITransportResponse } from '@cubejs-client/core';\n\n/**\n * @title @cubejs-client/ws-transport\n * @permalink /@cubejs-client-ws-transport\n * @menuCategory Cube.js Frontend\n * @subcategory Reference\n * @menuOrder 4\n * @description WebSocket transport for Cube.js client\n */\n\nclass WebSocketTransportResult {\n protected readonly status: unknown;\n\n protected readonly result: unknown;\n\n public constructor({ status, message }: { status: unknown, message: unknown }) {\n this.status = status;\n this.result = message;\n }\n\n public async json() {\n return this.result;\n }\n\n public clone() {\n // no need to actually clone it\n return this;\n }\n\n public async text() {\n return typeof this.result === 'string' ? this.result : JSON.stringify(this.result);\n }\n}\n\ntype WebSocketTransportOptions = {\n authorization?: string,\n apiUrl: string,\n // @deprecated\n hearBeatInterval?: number,\n heartBeatInterval?: number,\n};\n\ntype Message = {\n messageId: number,\n requestId: any,\n method: string,\n params: Record<string, unknown>,\n};\n\ntype Subscription = {\n message: Message,\n callback: (result: WebSocketTransportResult) => void,\n};\n\nclass WebSocketTransport implements ITransport<WebSocketTransportResult> {\n protected readonly apiUrl: string;\n\n protected readonly heartBeatInterval: number = 60;\n\n protected token: string | undefined;\n\n protected ws: any = null;\n\n protected messageCounter: number = 1;\n\n protected messageIdToSubscription: Record<number, Subscription> = {};\n\n protected messageQueue: Message[] = [];\n\n public constructor({ authorization, apiUrl, heartBeatInterval, hearBeatInterval }: WebSocketTransportOptions) {\n this.token = authorization;\n this.apiUrl = apiUrl;\n\n if (heartBeatInterval) {\n this.heartBeatInterval = heartBeatInterval;\n } else if (hearBeatInterval) {\n console.warn('Option hearBeatInterval is deprecated. It was replaced by heartBeatInterval.');\n this.heartBeatInterval = hearBeatInterval;\n }\n }\n\n public set authorization(token) {\n this.token = token;\n\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public async close(): Promise<void> {\n if (this.ws) {\n // Flush send queue before sending close frame\n this.ws.sendQueue();\n\n this.ws.close();\n }\n }\n\n public get authorization() {\n return this.token;\n }\n\n protected initSocket() {\n if (this.ws) {\n return this.ws.initPromise;\n }\n\n const ws: any = new WebSocket(this.apiUrl);\n\n ws.messageIdSent = {};\n\n ws.sendMessage = (message: any) => {\n if (!message.messageId || message.messageId && !ws.messageIdSent[message.messageId]) {\n ws.send(JSON.stringify(message));\n ws.messageIdSent[message.messageId] = true;\n }\n };\n\n ws.sendQueue = () => {\n this.messageQueue.forEach(message => ws.sendMessage(message));\n this.messageQueue = [];\n };\n\n ws.reconcile = () => {\n if (new Date().getTime() - ws.lastMessageTimestamp.getTime() > 4 * this.heartBeatInterval * 1000) {\n ws.close();\n } else {\n Object.keys(this.messageIdToSubscription).forEach(messageId => {\n // @ts-ignore\n ws.sendMessage(this.messageIdToSubscription[messageId].message);\n });\n }\n };\n\n ws.lastMessageTimestamp = new Date();\n\n ws.initPromise = new Promise<void>(resolve => {\n ws.onopen = () => {\n ws.sendMessage({ authorization: this.authorization });\n };\n\n ws.onmessage = (event: any) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data);\n if (message.handshake) {\n ws.reconcile();\n ws.reconcileTimer = setInterval(() => {\n ws.messageIdSent = {};\n ws.reconcile();\n }, this.heartBeatInterval * 1000);\n resolve();\n }\n\n if (this.messageIdToSubscription[message.messageId]) {\n this.messageIdToSubscription[message.messageId].callback(\n new WebSocketTransportResult(message)\n );\n }\n\n ws.sendQueue();\n };\n\n ws.onclose = () => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n if (this.ws === ws) {\n this.ws = null;\n if (Object.keys(this.messageIdToSubscription).length) {\n this.initSocket();\n }\n }\n };\n\n ws.onerror = ws.onclose;\n });\n\n this.ws = ws;\n\n return this.ws.initPromise;\n }\n\n protected sendMessage(message: any) {\n if (message.unsubscribe && this.messageQueue.find(m => m.messageId === message.unsubscribe)) {\n this.messageQueue = this.messageQueue.filter(m => m.messageId !== message.unsubscribe);\n } else {\n this.messageQueue.push(message);\n }\n\n setTimeout(async () => {\n await this.initSocket();\n this.ws.sendQueue();\n }, 100);\n }\n\n public request(\n method: string,\n { baseRequestId, ...params }: Record<string, unknown>\n ): ITransportResponse<WebSocketTransportResult> {\n const message: Message = {\n messageId: this.messageCounter++,\n requestId: baseRequestId,\n method,\n params\n };\n\n const pendingResults: WebSocketTransportResult[] = [];\n let nextMessage: ((value: any) => void) | null = null;\n\n const runNextMessage = () => {\n if (nextMessage) {\n nextMessage(pendingResults.pop());\n nextMessage = null;\n }\n };\n\n this.messageIdToSubscription[message.messageId] = {\n message,\n callback: (result) => {\n pendingResults.push(result);\n runNextMessage();\n }\n };\n\n const transport = this;\n\n return {\n async subscribe(callback) {\n transport.sendMessage(message);\n\n const result = await new Promise<WebSocketTransportResult>((resolve) => {\n nextMessage = resolve;\n if (pendingResults.length) {\n runNextMessage();\n }\n });\n\n return callback(result, () => this.subscribe(callback));\n },\n async unsubscribe() {\n transport.sendMessage({ unsubscribe: message.messageId });\n delete transport.messageIdToSubscription[message.messageId];\n }\n };\n }\n}\n\nexport default WebSocketTransport;\n"],"names":["WebSocketTransportResult","constructor","status","message","result","json","clone","text","JSON","stringify","WebSocketTransport","heartBeatInterval","ws","messageCounter","messageIdToSubscription","messageQueue","authorization","apiUrl","hearBeatInterval","token","console","warn","close","sendQueue","initSocket","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","forEach","reconcile","Date","getTime","lastMessageTimestamp","Object","keys","Promise","resolve","onopen","onmessage","event","parse","data","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","length","onerror","unsubscribe","find","m","filter","push","setTimeout","request","method","baseRequestId","params","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cubejs-client-ws-transport.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\nimport type { ITransport, ITransportResponse } from '@cubejs-client/core';\n\n/**\n * @title @cubejs-client/ws-transport\n * @permalink /@cubejs-client-ws-transport\n * @menuCategory Cube.js Frontend\n * @subcategory Reference\n * @menuOrder 4\n * @description WebSocket transport for Cube.js client\n */\n\nclass WebSocketTransportResult {\n protected readonly status: unknown;\n\n protected readonly result: unknown;\n\n public constructor({ status, message }: { status: unknown, message: unknown }) {\n this.status = status;\n this.result = message;\n }\n\n public async json() {\n return this.result;\n }\n\n public clone() {\n // no need to actually clone it\n return this;\n }\n\n public async text() {\n return typeof this.result === 'string' ? this.result : JSON.stringify(this.result);\n }\n}\n\ntype WebSocketTransportOptions = {\n authorization?: string,\n apiUrl: string,\n // @deprecated\n hearBeatInterval?: number,\n heartBeatInterval?: number,\n};\n\ntype Message = {\n messageId: number,\n requestId: any,\n method: string,\n params: Record<string, unknown>,\n};\n\ntype Subscription = {\n message: Message,\n callback: (result: WebSocketTransportResult) => void,\n};\n\nclass WebSocketTransport implements ITransport<WebSocketTransportResult> {\n protected readonly apiUrl: string;\n\n protected readonly heartBeatInterval: number = 60;\n\n protected token: string | undefined;\n\n protected ws: any = null;\n\n protected messageCounter: number = 1;\n\n protected messageIdToSubscription: Record<number, Subscription> = {};\n\n protected messageQueue: Message[] = [];\n\n public constructor({ authorization, apiUrl, heartBeatInterval, hearBeatInterval }: WebSocketTransportOptions) {\n this.token = authorization;\n this.apiUrl = apiUrl;\n\n if (heartBeatInterval) {\n this.heartBeatInterval = heartBeatInterval;\n } else if (hearBeatInterval) {\n console.warn('Option hearBeatInterval is deprecated. It was replaced by heartBeatInterval.');\n this.heartBeatInterval = hearBeatInterval;\n }\n }\n\n public set authorization(token) {\n this.token = token;\n\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public async close(): Promise<void> {\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public get authorization() {\n return this.token;\n }\n\n protected initSocket() {\n if (this.ws) {\n return this.ws.initPromise;\n }\n\n const ws: any = new WebSocket(this.apiUrl);\n\n ws.messageIdSent = {};\n\n ws.sendMessage = (message: any) => {\n if (!message.messageId || message.messageId && !ws.messageIdSent[message.messageId]) {\n ws.send(JSON.stringify(message));\n ws.messageIdSent[message.messageId] = true;\n }\n };\n\n ws.sendQueue = () => {\n this.messageQueue.forEach(message => ws.sendMessage(message));\n this.messageQueue = [];\n };\n\n ws.reconcile = () => {\n if (new Date().getTime() - ws.lastMessageTimestamp.getTime() > 4 * this.heartBeatInterval * 1000) {\n ws.close();\n } else {\n Object.keys(this.messageIdToSubscription).forEach(messageId => {\n // @ts-ignore\n ws.sendMessage(this.messageIdToSubscription[messageId].message);\n });\n }\n };\n\n ws.lastMessageTimestamp = new Date();\n\n ws.initPromise = new Promise<void>(resolve => {\n ws.onopen = () => {\n ws.sendMessage({ authorization: this.authorization });\n };\n\n ws.onmessage = (event: any) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data);\n if (message.handshake) {\n ws.reconcile();\n ws.reconcileTimer = setInterval(() => {\n ws.messageIdSent = {};\n ws.reconcile();\n }, this.heartBeatInterval * 1000);\n resolve();\n }\n\n if (this.messageIdToSubscription[message.messageId]) {\n this.messageIdToSubscription[message.messageId].callback(\n new WebSocketTransportResult(message)\n );\n }\n\n ws.sendQueue();\n };\n\n ws.onclose = () => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n if (this.ws === ws) {\n this.ws = null;\n if (Object.keys(this.messageIdToSubscription).length) {\n this.initSocket();\n }\n }\n };\n\n ws.onerror = ws.onclose;\n });\n\n this.ws = ws;\n\n return this.ws.initPromise;\n }\n\n protected sendMessage(message: any) {\n if (message.unsubscribe && this.messageQueue.find(m => m.messageId === message.unsubscribe)) {\n this.messageQueue = this.messageQueue.filter(m => m.messageId !== message.unsubscribe);\n } else {\n this.messageQueue.push(message);\n }\n\n setTimeout(async () => {\n await this.initSocket();\n this.ws.sendQueue();\n }, 100);\n }\n\n public request(\n method: string,\n { baseRequestId, ...params }: Record<string, unknown>\n ): ITransportResponse<WebSocketTransportResult> {\n const message: Message = {\n messageId: this.messageCounter++,\n requestId: baseRequestId,\n method,\n params\n };\n\n const pendingResults: WebSocketTransportResult[] = [];\n let nextMessage: ((value: any) => void) | null = null;\n\n const runNextMessage = () => {\n if (nextMessage) {\n nextMessage(pendingResults.pop());\n nextMessage = null;\n }\n };\n\n this.messageIdToSubscription[message.messageId] = {\n message,\n callback: (result) => {\n pendingResults.push(result);\n runNextMessage();\n }\n };\n\n const transport = this;\n\n return {\n async subscribe(callback) {\n transport.sendMessage(message);\n\n const result = await new Promise<WebSocketTransportResult>((resolve) => {\n nextMessage = resolve;\n if (pendingResults.length) {\n runNextMessage();\n }\n });\n\n return callback(result, () => this.subscribe(callback));\n },\n async unsubscribe() {\n transport.sendMessage({ unsubscribe: message.messageId });\n delete transport.messageIdToSubscription[message.messageId];\n }\n };\n }\n}\n\nexport default WebSocketTransport;\n"],"names":["WebSocketTransportResult","_ref","status","message","_classCallCheck","_defineProperty","result","_createClass","key","value","_json","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_callee2$","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_callee3","_callee3$","_context3","initSocket","_this","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","sendQueue","messageQueue","forEach","reconcile","Date","getTime","lastMessageTimestamp","Object","keys","messageIdToSubscription","Promise","resolve","onopen","onmessage","event","parse","data","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","length","onerror","_this2","unsubscribe","find","m","filter","push","setTimeout","_callee4","_callee4$","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_callee5$","_context5","sent","_callee6","_callee6$","_context6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cubejs-client-ws-transport.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\nimport type { ITransport, ITransportResponse } from '@cubejs-client/core';\n\n/**\n * @title @cubejs-client/ws-transport\n * @permalink /@cubejs-client-ws-transport\n * @menuCategory Cube.js Frontend\n * @subcategory Reference\n * @menuOrder 4\n * @description WebSocket transport for Cube.js client\n */\n\nclass WebSocketTransportResult {\n protected readonly status: unknown;\n\n protected readonly result: unknown;\n\n public constructor({ status, message }: { status: unknown, message: unknown }) {\n this.status = status;\n this.result = message;\n }\n\n public async json() {\n return this.result;\n }\n\n public clone() {\n // no need to actually clone it\n return this;\n }\n\n public async text() {\n return typeof this.result === 'string' ? this.result : JSON.stringify(this.result);\n }\n}\n\ntype WebSocketTransportOptions = {\n authorization?: string,\n apiUrl: string,\n // @deprecated\n hearBeatInterval?: number,\n heartBeatInterval?: number,\n};\n\ntype Message = {\n messageId: number,\n requestId: any,\n method: string,\n params: Record<string, unknown>,\n};\n\ntype Subscription = {\n message: Message,\n callback: (result: WebSocketTransportResult) => void,\n};\n\nclass WebSocketTransport implements ITransport<WebSocketTransportResult> {\n protected readonly apiUrl: string;\n\n protected readonly heartBeatInterval: number = 60;\n\n protected token: string | undefined;\n\n protected ws: any = null;\n\n protected messageCounter: number = 1;\n\n protected messageIdToSubscription: Record<number, Subscription> = {};\n\n protected messageQueue: Message[] = [];\n\n public constructor({ authorization, apiUrl, heartBeatInterval, hearBeatInterval }: WebSocketTransportOptions) {\n this.token = authorization;\n this.apiUrl = apiUrl;\n\n if (heartBeatInterval) {\n this.heartBeatInterval = heartBeatInterval;\n } else if (hearBeatInterval) {\n console.warn('Option hearBeatInterval is deprecated. It was replaced by heartBeatInterval.');\n this.heartBeatInterval = hearBeatInterval;\n }\n }\n\n public set authorization(token) {\n this.token = token;\n\n if (this.ws) {\n this.ws.close();\n }\n }\n\n public async close(): Promise<void> {\n if (this.ws) {\n // Flush send queue before sending close frame\n this.ws.sendQueue();\n\n this.ws.close();\n }\n }\n\n public get authorization() {\n return this.token;\n }\n\n protected initSocket() {\n if (this.ws) {\n return this.ws.initPromise;\n }\n\n const ws: any = new WebSocket(this.apiUrl);\n\n ws.messageIdSent = {};\n\n ws.sendMessage = (message: any) => {\n if (!message.messageId || message.messageId && !ws.messageIdSent[message.messageId]) {\n ws.send(JSON.stringify(message));\n ws.messageIdSent[message.messageId] = true;\n }\n };\n\n ws.sendQueue = () => {\n this.messageQueue.forEach(message => ws.sendMessage(message));\n this.messageQueue = [];\n };\n\n ws.reconcile = () => {\n if (new Date().getTime() - ws.lastMessageTimestamp.getTime() > 4 * this.heartBeatInterval * 1000) {\n ws.close();\n } else {\n Object.keys(this.messageIdToSubscription).forEach(messageId => {\n // @ts-ignore\n ws.sendMessage(this.messageIdToSubscription[messageId].message);\n });\n }\n };\n\n ws.lastMessageTimestamp = new Date();\n\n ws.initPromise = new Promise<void>(resolve => {\n ws.onopen = () => {\n ws.sendMessage({ authorization: this.authorization });\n };\n\n ws.onmessage = (event: any) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data);\n if (message.handshake) {\n ws.reconcile();\n ws.reconcileTimer = setInterval(() => {\n ws.messageIdSent = {};\n ws.reconcile();\n }, this.heartBeatInterval * 1000);\n resolve();\n }\n\n if (this.messageIdToSubscription[message.messageId]) {\n this.messageIdToSubscription[message.messageId].callback(\n new WebSocketTransportResult(message)\n );\n }\n\n ws.sendQueue();\n };\n\n ws.onclose = () => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n if (this.ws === ws) {\n this.ws = null;\n if (Object.keys(this.messageIdToSubscription).length) {\n this.initSocket();\n }\n }\n };\n\n ws.onerror = ws.onclose;\n });\n\n this.ws = ws;\n\n return this.ws.initPromise;\n }\n\n protected sendMessage(message: any) {\n if (message.unsubscribe && this.messageQueue.find(m => m.messageId === message.unsubscribe)) {\n this.messageQueue = this.messageQueue.filter(m => m.messageId !== message.unsubscribe);\n } else {\n this.messageQueue.push(message);\n }\n\n setTimeout(async () => {\n await this.initSocket();\n this.ws.sendQueue();\n }, 100);\n }\n\n public request(\n method: string,\n { baseRequestId, ...params }: Record<string, unknown>\n ): ITransportResponse<WebSocketTransportResult> {\n const message: Message = {\n messageId: this.messageCounter++,\n requestId: baseRequestId,\n method,\n params\n };\n\n const pendingResults: WebSocketTransportResult[] = [];\n let nextMessage: ((value: any) => void) | null = null;\n\n const runNextMessage = () => {\n if (nextMessage) {\n nextMessage(pendingResults.pop());\n nextMessage = null;\n }\n };\n\n this.messageIdToSubscription[message.messageId] = {\n message,\n callback: (result) => {\n pendingResults.push(result);\n runNextMessage();\n }\n };\n\n const transport = this;\n\n return {\n async subscribe(callback) {\n transport.sendMessage(message);\n\n const result = await new Promise<WebSocketTransportResult>((resolve) => {\n nextMessage = resolve;\n if (pendingResults.length) {\n runNextMessage();\n }\n });\n\n return callback(result, () => this.subscribe(callback));\n },\n async unsubscribe() {\n transport.sendMessage({ unsubscribe: message.messageId });\n delete transport.messageIdToSubscription[message.messageId];\n }\n };\n }\n}\n\nexport default WebSocketTransport;\n"],"names":["WebSocketTransportResult","_ref","status","message","_classCallCheck","_defineProperty","result","_createClass","key","value","_json","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_callee2$","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_callee3","_callee3$","_context3","sendQueue","initSocket","_this","initPromise","WebSocket","messageIdSent","sendMessage","messageId","send","messageQueue","forEach","reconcile","Date","getTime","lastMessageTimestamp","Object","keys","messageIdToSubscription","Promise","resolve","onopen","onmessage","event","parse","data","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","length","onerror","_this2","unsubscribe","find","m","filter","push","setTimeout","_callee4","_callee4$","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_callee5$","_context5","sent","_callee6","_callee6$","_context6"],"mappings":"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"}
|