@cubejs-client/ws-transport 1.5.14 → 1.5.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.
@@ -12,7 +12,9 @@ require('core-js/modules/es.date.to-json.js');
12
12
  require('core-js/modules/es.date.to-string.js');
13
13
  require('core-js/modules/es.object.keys.js');
14
14
  require('core-js/modules/es.object.to-string.js');
15
+ require('core-js/modules/es.object.values.js');
15
16
  require('core-js/modules/es.promise.js');
17
+ require('core-js/modules/es.regexp.to-string.js');
16
18
  require('core-js/modules/web.dom-collections.for-each.js');
17
19
  require('core-js/modules/web.timers.js');
18
20
  var _regeneratorRuntime = require('@babel/runtime/regenerator');
@@ -182,7 +184,7 @@ var WebSocketTransport = /*#__PURE__*/function () {
182
184
  };
183
185
  ws.onmessage = function (event) {
184
186
  ws.lastMessageTimestamp = new Date();
185
- var message = JSON.parse(event.data);
187
+ var message = JSON.parse(event.data.toString());
186
188
  if (message.handshake) {
187
189
  ws.reconcile();
188
190
  ws.reconcileTimer = setInterval(function () {
@@ -196,7 +198,7 @@ var WebSocketTransport = /*#__PURE__*/function () {
196
198
  }
197
199
  ws.sendQueue();
198
200
  };
199
- ws.onclose = function () {
201
+ ws.onclose = function (event) {
200
202
  if (ws && ws.readyState !== WebSocket__default['default'].CLOSED && ws.readyState !== WebSocket__default['default'].CLOSING) {
201
203
  ws.close();
202
204
  }
@@ -206,6 +208,23 @@ var WebSocketTransport = /*#__PURE__*/function () {
206
208
  }
207
209
  if (_this.ws === ws) {
208
210
  _this.ws = null;
211
+
212
+ // Close code 1009: Message Too Big. Server rejects messages exceeding maxPayload
213
+ // without decoding. Retrying would cause an infinite loop, so we notify subscribers
214
+ // and clear subscriptions instead.
215
+ if ((event === null || event === void 0 ? void 0 : event.code) === 1009) {
216
+ var error = new WebSocketTransportResult({
217
+ status: 413,
218
+ message: {
219
+ error: (event === null || event === void 0 ? void 0 : event.reason) || 'WebSocket message too big'
220
+ }
221
+ });
222
+ Object.values(_this.messageIdToSubscription).forEach(function (sub) {
223
+ sub.callback(error);
224
+ });
225
+ _this.messageIdToSubscription = {};
226
+ return;
227
+ }
209
228
  if (Object.keys(_this.messageIdToSubscription).length) {
210
229
  _this.initSocket();
211
230
  }
@@ -1 +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","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_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","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_context5","sent","_callee6","_context6"],"mappings":"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"}
1
+ {"version":3,"file":"cubejs-client-ws-transport.cjs.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\n\nimport type { CloseEvent, MessageEvent } from '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: MessageEvent) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data.toString());\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 = (event: CloseEvent) => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n\n if (this.ws === ws) {\n this.ws = null;\n\n // Close code 1009: Message Too Big. Server rejects messages exceeding maxPayload\n // without decoding. Retrying would cause an infinite loop, so we notify subscribers\n // and clear subscriptions instead.\n if (event?.code === 1009) {\n const error = new WebSocketTransportResult({\n status: 413,\n message: { error: event?.reason || 'WebSocket message too big' }\n });\n\n Object.values(this.messageIdToSubscription).forEach(sub => {\n sub.callback(error);\n });\n\n this.messageIdToSubscription = {};\n\n return;\n }\n\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","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_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","toString","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","code","error","reason","values","sub","length","onerror","_this2","unsubscribe","find","m","filter","push","setTimeout","_callee4","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_context5","sent","_callee6","_context6"],"mappings":"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"}
@@ -91,7 +91,7 @@ class WebSocketTransport {
91
91
  };
92
92
  ws.onmessage = event => {
93
93
  ws.lastMessageTimestamp = new Date();
94
- const message = JSON.parse(event.data);
94
+ const message = JSON.parse(event.data.toString());
95
95
  if (message.handshake) {
96
96
  ws.reconcile();
97
97
  ws.reconcileTimer = setInterval(() => {
@@ -105,7 +105,7 @@ class WebSocketTransport {
105
105
  }
106
106
  ws.sendQueue();
107
107
  };
108
- ws.onclose = () => {
108
+ ws.onclose = event => {
109
109
  if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {
110
110
  ws.close();
111
111
  }
@@ -115,6 +115,23 @@ class WebSocketTransport {
115
115
  }
116
116
  if (this.ws === ws) {
117
117
  this.ws = null;
118
+
119
+ // Close code 1009: Message Too Big. Server rejects messages exceeding maxPayload
120
+ // without decoding. Retrying would cause an infinite loop, so we notify subscribers
121
+ // and clear subscriptions instead.
122
+ if (event?.code === 1009) {
123
+ const error = new WebSocketTransportResult({
124
+ status: 413,
125
+ message: {
126
+ error: event?.reason || 'WebSocket message too big'
127
+ }
128
+ });
129
+ Object.values(this.messageIdToSubscription).forEach(sub => {
130
+ sub.callback(error);
131
+ });
132
+ this.messageIdToSubscription = {};
133
+ return;
134
+ }
118
135
  if (Object.keys(this.messageIdToSubscription).length) {
119
136
  this.initSocket();
120
137
  }
@@ -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\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
+ {"version":3,"file":"cubejs-client-ws-transport.esm.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\n\nimport type { CloseEvent, MessageEvent } from '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: MessageEvent) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data.toString());\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 = (event: CloseEvent) => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n\n if (this.ws === ws) {\n this.ws = null;\n\n // Close code 1009: Message Too Big. Server rejects messages exceeding maxPayload\n // without decoding. Retrying would cause an infinite loop, so we notify subscribers\n // and clear subscriptions instead.\n if (event?.code === 1009) {\n const error = new WebSocketTransportResult({\n status: 413,\n message: { error: event?.reason || 'WebSocket message too big' }\n });\n\n Object.values(this.messageIdToSubscription).forEach(sub => {\n sub.callback(error);\n });\n\n this.messageIdToSubscription = {};\n\n return;\n }\n\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","toString","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","code","error","reason","values","sub","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,8 +1,8 @@
1
1
  (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@babel/runtime/helpers/objectWithoutProperties'), require('@babel/runtime/helpers/asyncToGenerator'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass'), require('@babel/runtime/helpers/defineProperty'), require('core-js/modules/es.array.filter.js'), require('core-js/modules/es.array.find.js'), require('core-js/modules/es.array.for-each.js'), require('core-js/modules/es.date.to-json.js'), require('core-js/modules/es.date.to-string.js'), require('core-js/modules/es.object.keys.js'), require('core-js/modules/es.object.to-string.js'), require('core-js/modules/es.promise.js'), require('core-js/modules/web.dom-collections.for-each.js'), require('core-js/modules/web.timers.js'), require('@babel/runtime/regenerator'), require('isomorphic-ws')) :
3
- typeof define === 'function' && define.amd ? define(['@babel/runtime/helpers/objectWithoutProperties', '@babel/runtime/helpers/asyncToGenerator', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass', '@babel/runtime/helpers/defineProperty', 'core-js/modules/es.array.filter.js', 'core-js/modules/es.array.find.js', 'core-js/modules/es.array.for-each.js', 'core-js/modules/es.date.to-json.js', 'core-js/modules/es.date.to-string.js', 'core-js/modules/es.object.keys.js', 'core-js/modules/es.object.to-string.js', 'core-js/modules/es.promise.js', 'core-js/modules/web.dom-collections.for-each.js', 'core-js/modules/web.timers.js', '@babel/runtime/regenerator', 'isomorphic-ws'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.CubejsWebSocketTransport = factory(global._objectWithoutProperties, global._asyncToGenerator, global._classCallCheck, global._createClass, global._defineProperty, null, null, null, null, null, null, null, null, null, null, global._regeneratorRuntime, global.WebSocket));
5
- }(this, (function (_objectWithoutProperties, _asyncToGenerator, _classCallCheck, _createClass, _defineProperty, es_array_filter_js, es_array_find_js, es_array_forEach_js, es_date_toJson_js, es_date_toString_js, es_object_keys_js, es_object_toString_js, es_promise_js, web_domCollections_forEach_js, web_timers_js, _regeneratorRuntime, WebSocket) { 'use strict';
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('@babel/runtime/helpers/objectWithoutProperties'), require('@babel/runtime/helpers/asyncToGenerator'), require('@babel/runtime/helpers/classCallCheck'), require('@babel/runtime/helpers/createClass'), require('@babel/runtime/helpers/defineProperty'), require('core-js/modules/es.array.filter.js'), require('core-js/modules/es.array.find.js'), require('core-js/modules/es.array.for-each.js'), require('core-js/modules/es.date.to-json.js'), require('core-js/modules/es.date.to-string.js'), require('core-js/modules/es.object.keys.js'), require('core-js/modules/es.object.to-string.js'), require('core-js/modules/es.object.values.js'), require('core-js/modules/es.promise.js'), require('core-js/modules/es.regexp.to-string.js'), require('core-js/modules/web.dom-collections.for-each.js'), require('core-js/modules/web.timers.js'), require('@babel/runtime/regenerator'), require('isomorphic-ws')) :
3
+ typeof define === 'function' && define.amd ? define(['@babel/runtime/helpers/objectWithoutProperties', '@babel/runtime/helpers/asyncToGenerator', '@babel/runtime/helpers/classCallCheck', '@babel/runtime/helpers/createClass', '@babel/runtime/helpers/defineProperty', 'core-js/modules/es.array.filter.js', 'core-js/modules/es.array.find.js', 'core-js/modules/es.array.for-each.js', 'core-js/modules/es.date.to-json.js', 'core-js/modules/es.date.to-string.js', 'core-js/modules/es.object.keys.js', 'core-js/modules/es.object.to-string.js', 'core-js/modules/es.object.values.js', 'core-js/modules/es.promise.js', 'core-js/modules/es.regexp.to-string.js', 'core-js/modules/web.dom-collections.for-each.js', 'core-js/modules/web.timers.js', '@babel/runtime/regenerator', 'isomorphic-ws'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.CubejsWebSocketTransport = factory(global._objectWithoutProperties, global._asyncToGenerator, global._classCallCheck, global._createClass, global._defineProperty, null, null, null, null, null, null, null, null, null, null, null, null, global._regeneratorRuntime, global.WebSocket));
5
+ }(this, (function (_objectWithoutProperties, _asyncToGenerator, _classCallCheck, _createClass, _defineProperty, es_array_filter_js, es_array_find_js, es_array_forEach_js, es_date_toJson_js, es_date_toString_js, es_object_keys_js, es_object_toString_js, es_object_values_js, es_promise_js, es_regexp_toString_js, web_domCollections_forEach_js, web_timers_js, _regeneratorRuntime, WebSocket) { 'use strict';
6
6
 
7
7
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
8
 
@@ -168,7 +168,7 @@
168
168
  };
169
169
  ws.onmessage = function (event) {
170
170
  ws.lastMessageTimestamp = new Date();
171
- var message = JSON.parse(event.data);
171
+ var message = JSON.parse(event.data.toString());
172
172
  if (message.handshake) {
173
173
  ws.reconcile();
174
174
  ws.reconcileTimer = setInterval(function () {
@@ -182,7 +182,7 @@
182
182
  }
183
183
  ws.sendQueue();
184
184
  };
185
- ws.onclose = function () {
185
+ ws.onclose = function (event) {
186
186
  if (ws && ws.readyState !== WebSocket__default['default'].CLOSED && ws.readyState !== WebSocket__default['default'].CLOSING) {
187
187
  ws.close();
188
188
  }
@@ -192,6 +192,23 @@
192
192
  }
193
193
  if (_this.ws === ws) {
194
194
  _this.ws = null;
195
+
196
+ // Close code 1009: Message Too Big. Server rejects messages exceeding maxPayload
197
+ // without decoding. Retrying would cause an infinite loop, so we notify subscribers
198
+ // and clear subscriptions instead.
199
+ if ((event === null || event === void 0 ? void 0 : event.code) === 1009) {
200
+ var error = new WebSocketTransportResult({
201
+ status: 413,
202
+ message: {
203
+ error: (event === null || event === void 0 ? void 0 : event.reason) || 'WebSocket message too big'
204
+ }
205
+ });
206
+ Object.values(_this.messageIdToSubscription).forEach(function (sub) {
207
+ sub.callback(error);
208
+ });
209
+ _this.messageIdToSubscription = {};
210
+ return;
211
+ }
195
212
  if (Object.keys(_this.messageIdToSubscription).length) {
196
213
  _this.initSocket();
197
214
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cubejs-client-ws-transport.umd.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","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_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","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_context5","sent","_callee6","_context6"],"mappings":"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"}
1
+ {"version":3,"file":"cubejs-client-ws-transport.umd.js","sources":["../src/index.ts"],"sourcesContent":["import WebSocket from 'isomorphic-ws';\n\nimport type { CloseEvent, MessageEvent } from '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: MessageEvent) => {\n ws.lastMessageTimestamp = new Date();\n\n const message: any = JSON.parse(event.data.toString());\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 = (event: CloseEvent) => {\n if (ws && ws.readyState !== WebSocket.CLOSED && ws.readyState !== WebSocket.CLOSING) {\n ws.close();\n }\n\n if (ws.reconcileTimer) {\n clearInterval(ws.reconcileTimer);\n ws.reconcileTimer = null;\n }\n\n if (this.ws === ws) {\n this.ws = null;\n\n // Close code 1009: Message Too Big. Server rejects messages exceeding maxPayload\n // without decoding. Retrying would cause an infinite loop, so we notify subscribers\n // and clear subscriptions instead.\n if (event?.code === 1009) {\n const error = new WebSocketTransportResult({\n status: 413,\n message: { error: event?.reason || 'WebSocket message too big' }\n });\n\n Object.values(this.messageIdToSubscription).forEach(sub => {\n sub.callback(error);\n });\n\n this.messageIdToSubscription = {};\n\n return;\n }\n\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","_context","prev","next","abrupt","stop","json","apply","arguments","clone","_text","_callee2","_context2","JSON","stringify","text","WebSocketTransport","_ref2","authorization","apiUrl","heartBeatInterval","hearBeatInterval","token","console","warn","get","set","ws","close","_close","_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","toString","handshake","reconcileTimer","setInterval","callback","onclose","readyState","CLOSED","CLOSING","clearInterval","code","error","reason","values","sub","length","onerror","_this2","unsubscribe","find","m","filter","push","setTimeout","_callee4","_context4","request","method","_ref4","baseRequestId","params","_objectWithoutProperties","_excluded","messageCounter","requestId","pendingResults","nextMessage","runNextMessage","pop","transport","subscribe","_this3","_callee5","_context5","sent","_callee6","_context6"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,cAAM,wBAAwB;IAC5B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;gBAEhB,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAKhE,IAAI;IAIV,KAAK;IAKC,IAAI;CAGlB;AAED,KAAK,yBAAyB,GAAG;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,cAAM,kBAAmB,YAAW,UAAU,CAAC,wBAAwB,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAM;IAElD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEzB,SAAS,CAAC,cAAc,EAAE,MAAM,CAAK;IAErC,SAAS,CAAC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAErE,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAM;gBAEpB,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,yBAAyB;IAY5G,IAAW,aAAa,CAAC,KAAK,oBAAA,EAM7B;IAEY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC,IAAW,aAAa,uBAEvB;IAED,SAAS,CAAC,UAAU;IAqFpB,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG;IAa3B,OAAO,CACZ,MAAM,EAAE,MAAM,EACd,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpD,kBAAkB,CAAC,wBAAwB,CAAC;CA+ChD;AAED,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,cAAM,wBAAwB;IAC5B,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;gBAEhB,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE;IAKhE,IAAI;IAIV,KAAK;IAKC,IAAI;CAGlB;AAED,KAAK,yBAAyB,GAAG;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,cAAM,kBAAmB,YAAW,UAAU,CAAC,wBAAwB,CAAC;IACtE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAM;IAElD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAQ;IAEzB,SAAS,CAAC,cAAc,EAAE,MAAM,CAAK;IAErC,SAAS,CAAC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAErE,SAAS,CAAC,YAAY,EAAE,OAAO,EAAE,CAAM;gBAEpB,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,yBAAyB;IAY5G,IAAW,aAAa,CAAC,KAAK,oBAAA,EAM7B;IAEY,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IASnC,IAAW,aAAa,uBAEvB;IAED,SAAS,CAAC,UAAU;IA0GpB,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG;IAa3B,OAAO,CACZ,MAAM,EAAE,MAAM,EACd,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpD,kBAAkB,CAAC,wBAAwB,CAAC;CA+ChD;AAED,eAAe,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cubejs-client/ws-transport",
3
- "version": "1.5.14",
3
+ "version": "1.5.16",
4
4
  "engines": {},
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@babel/runtime": "^7.1.2",
23
- "@cubejs-client/core": "1.5.14",
23
+ "@cubejs-client/core": "1.5.16",
24
24
  "core-js": "^3.6.5",
25
25
  "isomorphic-ws": "^4.0.1",
26
26
  "ws": "^7.3.1"
@@ -33,7 +33,7 @@
33
33
  "@babel/core": "^7.3.3",
34
34
  "@babel/preset-env": "^7.3.1",
35
35
  "@babel/preset-typescript": "^7.12.1",
36
- "@cubejs-backend/linter": "1.5.14",
36
+ "@cubejs-backend/linter": "1.5.16",
37
37
  "@types/ws": "^7.2.9",
38
38
  "typescript": "~5.2.2"
39
39
  },
@@ -43,5 +43,5 @@
43
43
  "eslintConfig": {
44
44
  "extends": "../cubejs-linter"
45
45
  },
46
- "gitHead": "521c47e5fe52f68f8e7dbe7bdb158a840903669d"
46
+ "gitHead": "b29af56bbf2d7293550f91e7ed749f263041f2ea"
47
47
  }