@cubejs-client/ws-transport 1.3.15 → 1.3.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.
@@ -321,4 +321,4 @@ var WebSocketTransport = /*#__PURE__*/function () {
321
321
  }();
322
322
 
323
323
  module.exports = WebSocketTransport;
324
- //# sourceMappingURL=cubejs-client-ws-transport.js.map
324
+ //# sourceMappingURL=cubejs-client-ws-transport.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cubejs-client-ws-transport.cjs.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\nimport type { ITransport, ITransportResponse } from '@cubejs-client/core';\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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"}