@cubejs-client/ws-transport 1.4.1 → 1.4.3

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","_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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"}
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","_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","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","_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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"}
@@ -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","_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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"}
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","_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","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","_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 +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.4.1",
3
+ "version": "1.4.3",
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.4.1",
23
+ "@cubejs-client/core": "1.4.3",
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.4.1",
36
+ "@cubejs-backend/linter": "1.4.3",
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": "7177a8e23d806d4bd4b71cee9ac1a133c677073c"
46
+ "gitHead": "b748c5e612e463e5eaaf240ea9d21d4a421ee926"
47
47
  }