diff --git a/package-lock.json b/package-lock.json index 5b215c98..344e53ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "binance", - "version": "3.6.0", + "version": "3.6.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "binance", - "version": "3.6.0", + "version": "3.6.1", "license": "MIT", "dependencies": { + "@types/ws": "^8.18.1", "axios": "^1.13.2", "isomorphic-ws": "^4.0.1", "nanoid": "^3.3.11", - "ws": "^7.4.0" + "ws": "8.21.1" }, "devDependencies": { "@types/jest": "^30.0.0", @@ -32,7 +33,6 @@ "ts-node": "^10.9.2", "typescript": "^5.7.3", "webpack": "^5.102.1", - "webpack-bundle-analyzer": "^5.1.1", "webpack-cli": "^5.1.4" }, "funding": { @@ -1475,13 +1475,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true, - "license": "MIT" - }, "node_modules/@sinclair/typebox": { "version": "0.34.48", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", @@ -1683,7 +1676,6 @@ "version": "22.10.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", - "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -1696,6 +1688,15 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", @@ -3199,13 +3200,6 @@ "node": ">= 8" } }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true, - "license": "MIT" - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -5756,16 +5750,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -5878,16 +5862,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -6505,21 +6479,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -6930,16 +6889,6 @@ "node": ">=8.0" } }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/ts-api-utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", @@ -7167,7 +7116,6 @@ "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, "license": "MIT" }, "node_modules/unrs-resolver": { @@ -7346,42 +7294,6 @@ } } }, - "node_modules/webpack-bundle-analyzer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.1.1.tgz", - "integrity": "sha512-UzoaIA0Aigo5lUvoUkIkSoHtUK5rBJh9e2vW3Eqct0jc/L8hcruBCz/jsXEvB1hDU1G3V94jo2EJqPcFKeSSeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 20.9.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/webpack-cli": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", @@ -7573,16 +7485,16 @@ } }, "node_modules/ws": { - "version": "7.5.11", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", - "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -8678,12 +8590,6 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, - "@polka/url": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", - "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", - "dev": true - }, "@sinclair/typebox": { "version": "0.34.48", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", @@ -8868,7 +8774,6 @@ "version": "22.10.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", - "dev": true, "requires": { "undici-types": "~6.20.0" } @@ -8879,6 +8784,14 @@ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, + "@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "requires": { + "@types/node": "*" + } + }, "@types/yargs": { "version": "17.0.35", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", @@ -9864,12 +9777,6 @@ "which": "^2.0.1" } }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, "debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -11603,12 +11510,6 @@ "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true }, - "mrmime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", - "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", - "dev": true - }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -11682,12 +11583,6 @@ "mimic-fn": "^2.1.0" } }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, "optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -12109,17 +12004,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "dev": true, - "requires": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -12381,12 +12265,6 @@ "is-number": "^7.0.0" } }, - "totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true - }, "ts-api-utils": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", @@ -12509,8 +12387,7 @@ "undici-types": { "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "unrs-resolver": { "version": "1.11.1", @@ -12634,33 +12511,6 @@ "webpack-sources": "^3.3.3" } }, - "webpack-bundle-analyzer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.1.1.tgz", - "integrity": "sha512-UzoaIA0Aigo5lUvoUkIkSoHtUK5rBJh9e2vW3Eqct0jc/L8hcruBCz/jsXEvB1hDU1G3V94jo2EJqPcFKeSSeQ==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, "webpack-cli": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", @@ -12781,9 +12631,9 @@ } }, "ws": { - "version": "7.5.11", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", - "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", "requires": {} }, "y18n": { diff --git a/package.json b/package.json index 677608cc..0e54f04a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "binance", - "version": "3.6.0", + "version": "3.6.1", "description": "Professional Node.js & JavaScript SDK for Binance REST APIs & WebSockets, with TypeScript & end-to-end tests.", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -40,10 +40,11 @@ "0xSmartCrypto <0xsmartcrypto@gmail.com> (https://twitter.com/0xSmartCrypto)" ], "dependencies": { + "@types/ws": "^8.18.1", "axios": "^1.13.2", "isomorphic-ws": "^4.0.1", "nanoid": "^3.3.11", - "ws": "^7.4.0" + "ws": "8.21.1" }, "devDependencies": { "@types/jest": "^30.0.0", @@ -63,7 +64,6 @@ "source-map-loader": "^2.0.2", "ts-loader": "^8.0.11", "webpack": "^5.102.1", - "webpack-bundle-analyzer": "^5.1.1", "webpack-cli": "^5.1.4" }, "keywords": [ diff --git a/src/types/websockets/ws-general.ts b/src/types/websockets/ws-general.ts index 46d283c1..7a4a7037 100644 --- a/src/types/websockets/ws-general.ts +++ b/src/types/websockets/ws-general.ts @@ -194,7 +194,10 @@ export interface WSClientConfigurableOptions { protocols?: string[]; // eslint-disable-next-line @typescript-eslint/no-explicit-any agent?: any; - } & Partial; + } & ( + | Omit, 'agent'> + | Omit, 'agent'> + ); wsUrl?: string; diff --git a/src/util/BaseWSClient.ts b/src/util/BaseWSClient.ts index dc113670..b0211bba 100644 --- a/src/util/BaseWSClient.ts +++ b/src/util/BaseWSClient.ts @@ -529,7 +529,7 @@ export abstract class BaseWebsocketClient< 'Refused to connect to ws with existing active connection', { ...WS_LOGGER_CATEGORY, wsKey }, ); - return { wsKey, ws: this.wsStore.getWs(wsKey) }; + return { wsKey, ws: this.wsStore.getWs(wsKey)! }; } // Don't check for reconnecting? Conflicts a bit with user data reconnect workflow... @@ -578,7 +578,11 @@ export abstract class BaseWebsocketClient< const { protocols = [], ...wsOptions } = this.options.wsOptions || {}; - const ws = new WebSocket(url, protocols, wsOptions); + const ws: WebSocket & { + onping?: (event: unknown) => void; + onpong?: (event: unknown) => void; + wsKey?: TWSKey; + } = new WebSocket(url, protocols, wsOptions); // this.wsUrlKeyMap[url] = wsRefKey; ws.onopen = (event: any) => this.onWsOpen(event, wsKey, url, ws); @@ -1142,7 +1146,7 @@ export abstract class BaseWebsocketClient< inProgressPromise.resolve({ wsKey, event, - ws: wsState.ws, + ws: wsState.ws!, }); } } catch (e) { diff --git a/src/util/websockets/user-data-stream-manager.ts b/src/util/websockets/user-data-stream-manager.ts index ff7bd2c7..efdf582c 100644 --- a/src/util/websockets/user-data-stream-manager.ts +++ b/src/util/websockets/user-data-stream-manager.ts @@ -1,4 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ +import WebSocket from 'isomorphic-ws'; + import { WebsocketClientOptions, WsMarket, @@ -153,7 +155,8 @@ export class UserDataStreamManager { `Existing ${wsKey} user data connection in progress for listen key. Avoiding duplicate`, { stateLastChangedAt, stateChangedTimeAgo, wsKey, derivedWsKey }, ); - return this.getWsStore().getWs(derivedWsKey); + const ws = this.getWsStore().getWs(derivedWsKey); + return ws ? { wsKey: derivedWsKey, ws } : undefined; } // Prepare the WS state for awareness whether this is a reconnect or fresh connect @@ -198,7 +201,7 @@ export class UserDataStreamManager { derivedWsKey, ); - return connectResult.ws; + return connectResult; } catch (e) { this.logger.error( 'Exception in subscribeGeneralUserDataStreamWithListenKey()', diff --git a/src/websocket-api-client.ts b/src/websocket-api-client.ts index ee146907..399af2cd 100644 --- a/src/websocket-api-client.ts +++ b/src/websocket-api-client.ts @@ -1426,13 +1426,11 @@ export class WebsocketAPIClient { wsKey, }); - await this.getWSClient().subscribeUsdFuturesUserDataStream( + return this.getWSClient().subscribeUsdFuturesUserDataStream( wsKey === WS_KEY_MAP.usdmWSAPI ? WS_KEY_MAP.usdm : WS_KEY_MAP.usdmTestnet, ); - - return; } if ( @@ -1444,13 +1442,11 @@ export class WebsocketAPIClient { wsKey, }); - await this.getWSClient().subscribeCoinFuturesUserDataStream( + return this.getWSClient().subscribeCoinFuturesUserDataStream( wsKey === WS_KEY_MAP.coinmWSAPI ? WS_KEY_MAP.coinm : WS_KEY_MAP.coinmTestnet, ); - - return; } if (keyType === 'Ed25519') { diff --git a/src/websocket-client-legacy.ts b/src/websocket-client-legacy.ts index b409e681..4f8ed83d 100644 --- a/src/websocket-client-legacy.ts +++ b/src/websocket-client-legacy.ts @@ -52,6 +52,12 @@ const wsBaseEndpoints: Record = { type WsEventInternalSrc = 'event' | 'function'; +type WebSocketWithMetadata = WebSocket & { + onping?: (event: unknown) => void; + onpong?: (event: unknown) => void; + wsKey?: WsKey | string; +}; + export declare interface WebsocketClientV1 { on(event: 'reply', listener: (event: WsResponse) => void): this; @@ -73,7 +79,16 @@ export declare interface WebsocketClientV1 { ): this; on( - event: 'open' | 'reconnected' | 'reconnecting' | 'close', + event: 'open' | 'reconnected', + listener: (event: { + wsKey: WsKey; + ws: WebSocket.Event; + event?: any; + }) => void, + ): this; + + on( + event: 'reconnecting' | 'close', listener: (event: { wsKey: WsKey; ws: WebSocket; event?: any }) => void, ): this; } @@ -163,7 +178,7 @@ export class WebsocketClientV1 extends EventEmitter { const { protocols = [], ...wsOptions } = this.options.wsOptions || {}; - const ws = new WebSocket(url, protocols, wsOptions); + const ws: WebSocketWithMetadata = new WebSocket(url, protocols, wsOptions); this.wsUrlKeyMap[url] = wsRefKey; if (typeof ws.on === 'function') { @@ -250,7 +265,7 @@ export class WebsocketClientV1 extends EventEmitter { } } - private onWsOpen(ws: WebSocket, wsKey: WsKey | string, wsUrl: string) { + private onWsOpen(ws: WebSocket.Event, wsKey: WsKey | string, wsUrl: string) { this.logger.trace(`onWsOpen(): ${wsUrl} : ${wsKey}`); if ( this.wsStore.isConnectionState(wsKey, WsConnectionStateEnum.RECONNECTING) @@ -326,7 +341,7 @@ export class WebsocketClientV1 extends EventEmitter { } private onWsMessage( - event: MessageEvent, + event: WebSocket.MessageEvent, wsKey: WsKey | string, source: WsEventInternalSrc, ) { @@ -526,7 +541,8 @@ export class WebsocketClientV1 extends EventEmitter { } public closeWs(ws: WebSocket, shouldReconnectAfterClose?: boolean) { - const wsKey = this.wsUrlKeyMap[ws.url] || ws?.wsKey; + const wsKey = + this.wsUrlKeyMap[ws.url] || (ws as WebSocketWithMetadata).wsKey; if (!wsKey) { throw new Error( 'Cannot close websocket as it has no known wsKey attached.', @@ -983,7 +999,7 @@ export class WebsocketClientV1 extends EventEmitter { } } - private teardownUserDataListenKey(listenKey: string, ws: WebSocket) { + private teardownUserDataListenKey(listenKey: string, ws?: WebSocket) { if (listenKey) { this.listenKeyStateCache.clearAllListenKeyState(listenKey); safeTerminateWs(ws, true); @@ -1820,7 +1836,7 @@ export class WebsocketClientV1 extends EventEmitter { public async subscribeMarginUserDataStream( forceNewConnection?: boolean, isReconnecting?: boolean, - ): Promise { + ): Promise { try { const { listenKey } = await this.restClientCache .getSpotRestClient( @@ -1880,7 +1896,7 @@ export class WebsocketClientV1 extends EventEmitter { symbol: string, forceNewConnection?: boolean, isReconnecting?: boolean, - ): Promise { + ): Promise { try { const lowerCaseSymbol = symbol.toLowerCase(); const { listenKey } = await this.restClientCache @@ -1951,7 +1967,7 @@ export class WebsocketClientV1 extends EventEmitter { isTestnet?: boolean, forceNewConnection?: boolean, isReconnecting?: boolean, - ): Promise { + ): Promise { try { const restClient = this.restClientCache.getUSDMRestClient( { ...this.getRestClientOptions(), testnet: isTestnet }, @@ -2018,7 +2034,7 @@ export class WebsocketClientV1 extends EventEmitter { isTestnet?: boolean, forceNewConnection?: boolean, isReconnecting?: boolean, - ): Promise { + ): Promise { try { const { listenKey } = await this.restClientCache .getCOINMRestClient( diff --git a/src/websocket-client.ts b/src/websocket-client.ts index a6f6cd26..1e9dc025 100644 --- a/src/websocket-client.ts +++ b/src/websocket-client.ts @@ -1245,7 +1245,7 @@ export class WebsocketClient extends BaseWebsocketClient< wsKey: WsKey = 'main', forceNewConnection?: boolean, miscState?: MiscUserDataConnectionState, - ): Promise { + ): Promise { this.logger.trace('subscribeSpotUserDataStream()', { wsKey, forceNewConnection, @@ -1698,7 +1698,7 @@ export class WebsocketClient extends BaseWebsocketClient< respawnAttempt: context?.respawnAttempt, }; - let ws: WSConnectedResult | undefined | void = undefined; + let ws: WSConnectedResult | undefined; try { switch (market) { diff --git a/webpack/webpack.config.js b/webpack/webpack.config.js index 72456764..04ca0ada 100644 --- a/webpack/webpack.config.js +++ b/webpack/webpack.config.js @@ -1,6 +1,4 @@ -const webpack = require('webpack'); const path = require('path'); -const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; function generateConfig(name) { var config = { @@ -58,18 +56,6 @@ function generateConfig(name) { }, }; - config.plugins = [ - // new webpack.DefinePlugin({ - // 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) - // }), - new BundleAnalyzerPlugin({ - defaultSizes: 'stat', - analyzerMode: 'static', - reportFilename: '../doc/bundleReport.html', - openAnalyzer: false, - }) - ]; - return config; }