binance 2.15.14 → 3.0.0-beta.1

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.
Files changed (100) hide show
  1. package/README.md +5 -2
  2. package/lib/coinm-client.js.map +1 -1
  3. package/lib/index.d.ts +10 -4
  4. package/lib/index.js +10 -4
  5. package/lib/index.js.map +1 -1
  6. package/lib/main-client.d.ts +13 -2
  7. package/lib/main-client.js +15 -1
  8. package/lib/main-client.js.map +1 -1
  9. package/lib/portfolio-client.js.map +1 -1
  10. package/lib/types/futures.d.ts +1 -0
  11. package/lib/types/futures.js +3 -3
  12. package/lib/types/futures.js.map +1 -1
  13. package/lib/types/spot.js +4 -4
  14. package/lib/types/spot.js.map +1 -1
  15. package/lib/types/websockets/ws-api-requests.d.ts +7 -0
  16. package/lib/types/websockets/ws-api-requests.js +3 -0
  17. package/lib/types/websockets/ws-api-requests.js.map +1 -0
  18. package/lib/types/websockets/ws-api-responses.d.ts +8 -0
  19. package/lib/types/websockets/ws-api-responses.js +3 -0
  20. package/lib/types/websockets/ws-api-responses.js.map +1 -0
  21. package/lib/types/websockets/ws-api.d.ts +201 -0
  22. package/lib/types/websockets/ws-api.js +29 -0
  23. package/lib/types/websockets/ws-api.js.map +1 -0
  24. package/lib/types/{websockets.d.ts → websockets/ws-events-formatted.d.ts} +4 -410
  25. package/lib/types/websockets/ws-events-formatted.js +3 -0
  26. package/lib/types/websockets/ws-events-formatted.js.map +1 -0
  27. package/lib/types/websockets/ws-events-raw.d.ts +401 -0
  28. package/lib/types/{websockets.js → websockets/ws-events-raw.js} +1 -1
  29. package/lib/types/websockets/ws-events-raw.js.map +1 -0
  30. package/lib/types/websockets/ws-general.d.ts +98 -0
  31. package/lib/types/websockets/ws-general.js +11 -0
  32. package/lib/types/websockets/ws-general.js.map +1 -0
  33. package/lib/usdm-client.js.map +1 -1
  34. package/lib/util/BaseRestClient.d.ts +1 -1
  35. package/lib/util/BaseRestClient.js +1 -1
  36. package/lib/util/BaseRestClient.js.map +1 -1
  37. package/lib/util/BaseWSClient.d.ts +225 -0
  38. package/lib/util/BaseWSClient.js +729 -0
  39. package/lib/util/BaseWSClient.js.map +1 -0
  40. package/lib/util/beautifier-maps.d.ts +151 -0
  41. package/lib/util/beautifier-maps.js +198 -37
  42. package/lib/util/beautifier-maps.js.map +1 -1
  43. package/lib/util/beautifier.d.ts +7 -3
  44. package/lib/util/beautifier.js +40 -11
  45. package/lib/util/beautifier.js.map +1 -1
  46. package/lib/util/browser-support.d.ts +2 -1
  47. package/lib/util/browser-support.js +46 -28
  48. package/lib/util/browser-support.js.map +1 -1
  49. package/lib/util/logger.d.ts +8 -0
  50. package/lib/util/logger.js +17 -0
  51. package/lib/util/logger.js.map +1 -0
  52. package/lib/util/node-support.d.ts +2 -1
  53. package/lib/util/node-support.js +35 -15
  54. package/lib/util/node-support.js.map +1 -1
  55. package/lib/util/requestUtils.d.ts +19 -19
  56. package/lib/util/requestUtils.js +119 -38
  57. package/lib/util/requestUtils.js.map +1 -1
  58. package/lib/util/typeGuards.d.ts +9 -1
  59. package/lib/util/typeGuards.js +59 -34
  60. package/lib/util/typeGuards.js.map +1 -1
  61. package/lib/util/usdm/exchangeInfo.js +2 -3
  62. package/lib/util/usdm/exchangeInfo.js.map +1 -1
  63. package/lib/util/webCryptoAPI.d.ts +14 -0
  64. package/lib/util/webCryptoAPI.js +120 -0
  65. package/lib/util/webCryptoAPI.js.map +1 -0
  66. package/lib/util/websockets/WsStore.d.ts +74 -0
  67. package/lib/util/websockets/WsStore.js +279 -0
  68. package/lib/util/websockets/WsStore.js.map +1 -0
  69. package/lib/util/websockets/WsStore.types.d.ts +53 -0
  70. package/lib/util/websockets/WsStore.types.js +14 -0
  71. package/lib/util/websockets/WsStore.types.js.map +1 -0
  72. package/lib/util/websockets/listen-key-state-cache.d.ts +21 -0
  73. package/lib/util/websockets/listen-key-state-cache.js +80 -0
  74. package/lib/util/websockets/listen-key-state-cache.js.map +1 -0
  75. package/lib/util/websockets/rest-client-cache.d.ts +13 -0
  76. package/lib/util/websockets/rest-client-cache.js +56 -0
  77. package/lib/util/websockets/rest-client-cache.js.map +1 -0
  78. package/lib/util/websockets/user-data-stream-manager.d.ts +54 -0
  79. package/lib/util/websockets/user-data-stream-manager.js +256 -0
  80. package/lib/util/websockets/user-data-stream-manager.js.map +1 -0
  81. package/lib/util/websockets/websocket-util.d.ts +124 -0
  82. package/lib/util/websockets/websocket-util.js +481 -0
  83. package/lib/util/websockets/websocket-util.js.map +1 -0
  84. package/lib/websocket-client-legacy.d.ts +288 -0
  85. package/lib/websocket-client-legacy.js +1113 -0
  86. package/lib/websocket-client-legacy.js.map +1 -0
  87. package/lib/websocket-client.d.ts +228 -168
  88. package/lib/websocket-client.js +927 -834
  89. package/lib/websocket-client.js.map +1 -1
  90. package/package.json +5 -5
  91. package/lib/logger.d.ts +0 -9
  92. package/lib/logger.js +0 -23
  93. package/lib/logger.js.map +0 -1
  94. package/lib/types/websockets.js.map +0 -1
  95. package/lib/util/WsStore.d.ts +0 -57
  96. package/lib/util/WsStore.js +0 -101
  97. package/lib/util/WsStore.js.map +0 -1
  98. package/lib/util/ws-utils.d.ts +0 -7
  99. package/lib/util/ws-utils.js +0 -16
  100. package/lib/util/ws-utils.js.map +0 -1
@@ -0,0 +1,481 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WS_ERROR_ENUM = exports.WS_AUTH_ON_CONNECT_KEYS = exports.WS_KEY_URL_MAP = exports.WS_KEY_MAP = exports.WS_LOGGER_CATEGORY = void 0;
4
+ exports.getWsURLSuffix = getWsURLSuffix;
5
+ exports.isPrivateWsTopic = isPrivateWsTopic;
6
+ exports.getWsKeyForTopic = getWsKeyForTopic;
7
+ exports.getWsUrl = getWsUrl;
8
+ exports.getMaxTopicsPerSubscribeEvent = getMaxTopicsPerSubscribeEvent;
9
+ exports.safeTerminateWs = safeTerminateWs;
10
+ exports.getPromiseRefForWSAPIRequest = getPromiseRefForWSAPIRequest;
11
+ exports.getNormalisedTopicRequests = getNormalisedTopicRequests;
12
+ exports.getTopicsPerWSKey = getTopicsPerWSKey;
13
+ exports.parseEventTypeFromMessage = parseEventTypeFromMessage;
14
+ exports.resolveUserDataMarketForWsKey = resolveUserDataMarketForWsKey;
15
+ exports.resolveWsKeyForLegacyMarket = resolveWsKeyForLegacyMarket;
16
+ exports.parseRawWsMessage = parseRawWsMessage;
17
+ exports.getContextFromWsKey = getContextFromWsKey;
18
+ exports.getLegacyWsStoreKeyWithContext = getLegacyWsStoreKeyWithContext;
19
+ exports.getLegacyWsKeyContext = getLegacyWsKeyContext;
20
+ exports.getRealWsKeyFromDerivedWsKey = getRealWsKeyFromDerivedWsKey;
21
+ exports.appendEventMarket = appendEventMarket;
22
+ const typeGuards_1 = require("../typeGuards");
23
+ exports.WS_LOGGER_CATEGORY = { category: 'binance-ws' };
24
+ exports.WS_KEY_MAP = {
25
+ // https://developers.binance.com/docs/binance-spot-api-docs/web-socket-streams
26
+ main: 'main', // spot, margin, isolated margin, user data
27
+ main2: 'main2', // spot, margin, isolated margin, user data | alternative
28
+ main3: 'main3', // spot, margin, isolated margin | alternative | MARKET DATA ONLY | NO USER DATA
29
+ // https://developers.binance.com/docs/binance-spot-api-docs/testnet/web-socket-streams#general-wss-information
30
+ mainTestnetPublic: 'mainTestnetPublic',
31
+ mainTestnetUserData: 'mainTestnetUserData',
32
+ // https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/general-api-information
33
+ mainWSAPI: 'mainWSAPI', // trading over WS in spot, margin, isolated margin. User data supported too.
34
+ mainWSAPI2: 'mainWSAPI2', // trading over WS in spot, margin, isolated margin. User data supported too.
35
+ mainWSAPITestnet: 'mainWSAPITestnet', // trading over WS in spot, margin, isolated margin | TESTNET
36
+ // https://developers.binance.com/docs/margin_trading/risk-data-stream
37
+ marginRiskUserData: 'marginRiskUserData',
38
+ // https://developers.binance.com/docs/derivatives/usds-margined-futures/websocket-market-streams
39
+ // market data, user data
40
+ usdm: 'usdm',
41
+ // https://developers.binance.com/docs/derivatives/usds-margined-futures/general-info
42
+ usdmTestnet: 'usdmTestnet',
43
+ // https://developers.binance.com/docs/derivatives/usds-margined-futures/websocket-api-general-info
44
+ // ONLY WS API | NO USER DATA
45
+ usdmWSAPI: 'usdmWSAPI',
46
+ usdmWSAPITestnet: 'usdmWSAPITestnet',
47
+ // https://developers.binance.com/docs/derivatives/coin-margined-futures/websocket-market-streams
48
+ // market data, user data
49
+ coinm: 'coinm',
50
+ coinm2: 'coinm2',
51
+ // https://developers.binance.com/docs/derivatives/coin-margined-futures/general-info
52
+ coinmTestnet: 'coinmTestnet',
53
+ eoptions: 'eoptions',
54
+ // optionsTestnet: 'optionsTestnet',
55
+ // https://developers.binance.com/docs/derivatives/portfolio-margin/user-data-streams
56
+ portfolioMarginUserData: 'portfolioMarginUserData',
57
+ // https://developers.binance.com/docs/derivatives/portfolio-margin-pro/portfolio-margin-pro-user-data-stream
58
+ portfolioMarginProUserData: 'portfolioMarginProUserData',
59
+ };
60
+ exports.WS_KEY_URL_MAP = {
61
+ // https://developers.binance.com/docs/binance-spot-api-docs/web-socket-streams
62
+ main: 'wss://stream.binance.com:9443', // spot, margin, isolated margin, user data
63
+ main2: 'wss://stream.binance.com:443', // spot, margin, isolated margin, user data | alternative
64
+ main3: 'wss://data-stream.binance.vision', // spot, margin, isolated margin | alternative | MARKET DATA ONLY | NO USER DATA
65
+ // https://developers.binance.com/docs/binance-spot-api-docs/testnet/web-socket-streams#general-wss-information
66
+ mainTestnetPublic: 'wss://testnet.binance.vision',
67
+ mainTestnetUserData: 'wss://stream.testnet.binance.vision:9443',
68
+ // https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/general-api-information
69
+ // TODO:
70
+ mainWSAPI: 'wss://ws-api.binance.com:443',
71
+ mainWSAPI2: 'wss://ws-api.binance.com:9443',
72
+ mainWSAPITestnet: 'wss://testnet.binance.vision',
73
+ // https://developers.binance.com/docs/margin_trading/risk-data-stream
74
+ // Margin websocket only support Cross Margin Accounts
75
+ marginRiskUserData: 'wss://margin-stream.binance.com',
76
+ // https://developers.binance.com/docs/derivatives/usds-margined-futures/websocket-market-streams
77
+ // market data, user data
78
+ usdm: 'wss://fstream.binance.com',
79
+ // https://developers.binance.com/docs/derivatives/usds-margined-futures/general-info
80
+ usdmTestnet: 'wss://stream.binancefuture.com',
81
+ // https://developers.binance.com/docs/derivatives/usds-margined-futures/websocket-api-general-info
82
+ // ONLY WS API
83
+ // TODO:
84
+ usdmWSAPI: 'wss://ws-fapi.binance.com',
85
+ usdmWSAPITestnet: 'wss://testnet.binancefuture.com',
86
+ // https://developers.binance.com/docs/derivatives/coin-margined-futures/websocket-market-streams
87
+ // market data, user data
88
+ coinm: 'wss://dstream.binance.com',
89
+ coinm2: 'wss://dstream-auth.binance.com', // Warning, coinm2 requires a listenkey
90
+ // https://developers.binance.com/docs/derivatives/coin-margined-futures/general-info
91
+ coinmTestnet: 'wss://dstream.binancefuture.com',
92
+ // https://developers.binance.com/docs/derivatives/option/websocket-market-streams
93
+ // https://developers.binance.com/docs/derivatives/option/user-data-streams
94
+ eoptions: 'wss://nbstream.binance.com/eoptions',
95
+ // optionsTestnet: 'wss://testnetws.binanceops.com',
96
+ // https://developers.binance.com/docs/derivatives/portfolio-margin/user-data-streams
97
+ portfolioMarginUserData: 'wss://fstream.binance.com',
98
+ // https://developers.binance.com/docs/derivatives/portfolio-margin-pro/portfolio-margin-pro-user-data-stream
99
+ portfolioMarginProUserData: 'wss://fstream.binance.com',
100
+ };
101
+ function getWsURLSuffix(wsKey, connectionType) {
102
+ switch (wsKey) {
103
+ case 'main':
104
+ case 'main2':
105
+ case 'main3':
106
+ case 'marginRiskUserData':
107
+ case 'mainTestnetPublic':
108
+ case 'mainTestnetUserData':
109
+ case 'mainWSAPITestnet': {
110
+ switch (connectionType) {
111
+ case 'market':
112
+ return '/stream';
113
+ case 'userData':
114
+ return '/ws';
115
+ case 'wsAPI':
116
+ return '/ws-api/v3';
117
+ default: {
118
+ throw (0, typeGuards_1.neverGuard)(connectionType, `Unhandled connectionType "${wsKey}/${connectionType}"`);
119
+ }
120
+ }
121
+ }
122
+ case 'mainWSAPI':
123
+ case 'mainWSAPI2': {
124
+ return '/ws-api/v3';
125
+ }
126
+ case 'usdm':
127
+ case 'usdmTestnet': {
128
+ switch (connectionType) {
129
+ case 'market':
130
+ return '/stream';
131
+ case 'userData':
132
+ return '/ws';
133
+ case 'wsAPI':
134
+ return '/ws-fapi/v1';
135
+ default: {
136
+ throw (0, typeGuards_1.neverGuard)(connectionType, `Unhandled connectionType "${wsKey}/${connectionType}"`);
137
+ }
138
+ }
139
+ }
140
+ case 'usdmWSAPI':
141
+ case 'usdmWSAPITestnet': {
142
+ return '/ws-fapi/v1';
143
+ }
144
+ case 'coinm':
145
+ case 'coinmTestnet':
146
+ case 'eoptions':
147
+ switch (connectionType) {
148
+ case 'market':
149
+ return '/stream';
150
+ case 'userData':
151
+ return '/ws';
152
+ case 'wsAPI':
153
+ return '/ws-capi/v1';
154
+ default: {
155
+ throw (0, typeGuards_1.neverGuard)(connectionType, `Unhandled connectionType "${wsKey}/${connectionType}"`);
156
+ }
157
+ }
158
+ case 'coinm2':
159
+ return '/stream&listenKey=';
160
+ case 'portfolioMarginUserData':
161
+ return '/pm/ws'; // pm/ws/listenKeyHere
162
+ case 'portfolioMarginProUserData':
163
+ return '/pm-classic/ws';
164
+ default: {
165
+ throw (0, typeGuards_1.neverGuard)(wsKey, `Unhandled WsKey "${wsKey}"`);
166
+ }
167
+ }
168
+ }
169
+ exports.WS_AUTH_ON_CONNECT_KEYS = [
170
+ exports.WS_KEY_MAP.mainWSAPI,
171
+ exports.WS_KEY_MAP.mainWSAPI2,
172
+ exports.WS_KEY_MAP.mainWSAPITestnet,
173
+ exports.WS_KEY_MAP.usdmWSAPI,
174
+ exports.WS_KEY_MAP.usdmWSAPITestnet,
175
+ // WS_KEY_MAP.v5Private,
176
+ // WS_KEY_MAP.v5PrivateTrade,
177
+ ];
178
+ // export const PUBLIC_WS_KEYS = [
179
+ // WS_KEY_MAP.main,
180
+ // WS_KEY_MAP.main,
181
+ // WS_KEY_MAP.main,
182
+ // ] as WsKey[];
183
+ /** Used to automatically determine if a sub request should be to the public or private ws (when there's two) */
184
+ const PRIVATE_TOPICS = [];
185
+ function isPrivateWsTopic(topic) {
186
+ return PRIVATE_TOPICS.includes(topic);
187
+ }
188
+ function getWsKeyForTopic(wsKey) {
189
+ // const isPrivateTopic = isPrivate === true || PRIVATE_TOPICS.includes(topic);
190
+ switch (wsKey) {
191
+ // case 'v5': {
192
+ // if (isPrivateTopic) {
193
+ // return WS_KEY_MAP.main;
194
+ // }
195
+ // return WS_KEY_MAP.main;
196
+ // }
197
+ default: {
198
+ return exports.WS_KEY_MAP.main;
199
+ // throw neverGuard(wsKey, 'getWsKeyForTopic(): Unhandled market');
200
+ }
201
+ }
202
+ }
203
+ function getWsUrl(wsKey, wsClientOptions, logger) {
204
+ const wsUrl = wsClientOptions.wsUrl;
205
+ if (wsUrl) {
206
+ return wsUrl;
207
+ }
208
+ // https://bybit-exchange.github.io/docs/v5/demo
209
+ // const isDemoTrading = wsClientOptions.demoTrading;
210
+ // if (isDemoTrading) {
211
+ // return 'wss://stream-demo.bybit.com/v5/private';
212
+ // }
213
+ // TODO:
214
+ // const isTestnet = wsClientOptions.testnet;
215
+ // const networkKey = isTestnet ? 'testnet' : 'livenet';
216
+ const resolvedUrl = exports.WS_KEY_URL_MAP[wsKey];
217
+ return resolvedUrl;
218
+ // switch (wsKey) {
219
+ // case WS_KEY_MAP.v5Private: {
220
+ // return WS_BASE_URL_MAP.v5.private[networkKey];
221
+ // }
222
+ // case WS_KEY_MAP.v5PrivateTrade: {
223
+ // return WS_BASE_URL_MAP[wsKey].private[networkKey];
224
+ // }
225
+ // case WS_KEY_MAP.v5SpotPublic: {
226
+ // return WS_BASE_URL_MAP.v5SpotPublic.public[networkKey];
227
+ // }
228
+ // case WS_KEY_MAP.v5LinearPublic: {
229
+ // return WS_BASE_URL_MAP.v5LinearPublic.public[networkKey];
230
+ // }
231
+ // case WS_KEY_MAP.v5InversePublic: {
232
+ // return WS_BASE_URL_MAP.v5InversePublic.public[networkKey];
233
+ // }
234
+ // case WS_KEY_MAP.v5OptionPublic: {
235
+ // return WS_BASE_URL_MAP.v5OptionPublic.public[networkKey];
236
+ // }
237
+ // default: {
238
+ // logger.error('getWsUrl(): Unhandled wsKey: ', {
239
+ // category: 'bybit-ws',
240
+ // wsKey,
241
+ // });
242
+ // throw neverGuard(wsKey, 'getWsUrl(): Unhandled wsKey');
243
+ // }
244
+ // }
245
+ }
246
+ function getMaxTopicsPerSubscribeEvent(wsKey) {
247
+ switch (wsKey) {
248
+ // case 'v5': {
249
+ // if (wsKey === WS_KEY_MAP.v5SpotPublic) {
250
+ // return 10;
251
+ // }
252
+ // return null;
253
+ // }
254
+ default: {
255
+ return null;
256
+ // throw neverGuard(market, 'getWsKeyForTopic(): Unhandled market');
257
+ }
258
+ }
259
+ }
260
+ exports.WS_ERROR_ENUM = {
261
+ NOT_AUTHENTICATED_SPOT_V3: '-1004',
262
+ API_ERROR_GENERIC: '10001',
263
+ API_SIGN_AUTH_FAILED: '10003',
264
+ USDC_OPTION_AUTH_FAILED: '3303006',
265
+ };
266
+ /**
267
+ * #305: ws.terminate() is undefined in browsers.
268
+ * This only works in node.js, not in browsers.
269
+ * Does nothing if `ws` is undefined. Does nothing in browsers.
270
+ */
271
+ function safeTerminateWs(ws, fallbackToClose) {
272
+ if (!ws) {
273
+ return false;
274
+ }
275
+ if (typeof ws['terminate'] === 'function') {
276
+ ws.terminate();
277
+ return true;
278
+ }
279
+ else if (fallbackToClose) {
280
+ ws.close();
281
+ }
282
+ return false;
283
+ }
284
+ /**
285
+ * WS API promises are stored using a primary key. This key is constructed using
286
+ * properties found in every request & reply.
287
+ *
288
+ * The counterpart to this is in resolveEmittableEvents
289
+ */
290
+ function getPromiseRefForWSAPIRequest(wsKey, requestEvent) {
291
+ const promiseRef = [wsKey, requestEvent.id].join('_');
292
+ return promiseRef;
293
+ }
294
+ /**
295
+ * Users can conveniently pass topics as strings or objects (object has topic name + optional params).
296
+ *
297
+ * This method normalises topics into objects (object has topic name + optional params).
298
+ */
299
+ function getNormalisedTopicRequests(wsTopicRequests) {
300
+ const normalisedTopicRequests = [];
301
+ for (const wsTopicRequest of wsTopicRequests) {
302
+ // passed as string, convert to object
303
+ if (typeof wsTopicRequest === 'string') {
304
+ const topicRequest = {
305
+ topic: wsTopicRequest,
306
+ payload: undefined,
307
+ };
308
+ normalisedTopicRequests.push(topicRequest);
309
+ continue;
310
+ }
311
+ // already a normalised object, thanks to user
312
+ normalisedTopicRequests.push(wsTopicRequest);
313
+ }
314
+ return normalisedTopicRequests;
315
+ }
316
+ /**
317
+ * Groups topics in request into per-wsKey groups
318
+ * @param normalisedTopicRequests
319
+ * @param wsKey
320
+ * @param isPrivateTopic
321
+ * @returns
322
+ */
323
+ function getTopicsPerWSKey(normalisedTopicRequests, wsKey) {
324
+ const perWsKeyTopics = {};
325
+ // Sort into per wsKey arrays, in case topics are mixed together for different wsKeys
326
+ for (const topicRequest of normalisedTopicRequests) {
327
+ // const derivedWsKey =
328
+ // wsKey || getWsKeyForTopic(market, topicRequest.topic, isPrivateTopic);
329
+ const derivedWsKey = wsKey;
330
+ if (!perWsKeyTopics[derivedWsKey] ||
331
+ !Array.isArray(perWsKeyTopics[derivedWsKey])) {
332
+ perWsKeyTopics[derivedWsKey] = [];
333
+ }
334
+ perWsKeyTopics[derivedWsKey].push(topicRequest);
335
+ }
336
+ return perWsKeyTopics;
337
+ }
338
+ function parseEventTypeFromMessage(wsKey, parsedMsg) {
339
+ if (parsedMsg === null || parsedMsg === void 0 ? void 0 : parsedMsg.e) {
340
+ return parsedMsg.e;
341
+ }
342
+ if ((parsedMsg === null || parsedMsg === void 0 ? void 0 : parsedMsg.stream) && typeof (parsedMsg === null || parsedMsg === void 0 ? void 0 : parsedMsg.stream) === 'string') {
343
+ const streamName = parsedMsg.stream;
344
+ // console.log(`parseEventTypeFromMessage(${wsKey}) `, streamName, parsedMsg);
345
+ const eventType = streamName.split('@');
346
+ // All symbol streams can be returned as is, just need to extract the left-most text before any @ or _
347
+ if (streamName.startsWith('!')) {
348
+ const subEventType = eventType[0].split('_');
349
+ return subEventType[0].replace('!', '');
350
+ }
351
+ // Per symbol streams can have the symbol trimmed off (string before first "@")
352
+ // E.g. btcusdt@kline_5m@+08:00 -> kline_5m@+08:00
353
+ if (eventType.length) {
354
+ // remove first, keep the rest rejoined
355
+ eventType.shift();
356
+ // Edge case, for european options, the suffix is a variable date so will never match the map
357
+ if (wsKey === 'eoptions') {
358
+ return eventType[0];
359
+ }
360
+ return eventType.join('@');
361
+ }
362
+ console.error('parseEventTypeFromMessage(): Cannot extract event type from message: ', parsedMsg);
363
+ }
364
+ if (parsedMsg === null || parsedMsg === void 0 ? void 0 : parsedMsg.data) {
365
+ return parseEventTypeFromMessage(wsKey, parsedMsg.data);
366
+ }
367
+ if (Array.isArray(parsedMsg) && parsedMsg.length) {
368
+ return parseEventTypeFromMessage(wsKey, parsedMsg[0]);
369
+ }
370
+ return;
371
+ }
372
+ function resolveUserDataMarketForWsKey(wsKey) {
373
+ switch (wsKey) {
374
+ case 'main':
375
+ case 'main2':
376
+ case 'main3':
377
+ case 'mainWSAPI':
378
+ case 'mainWSAPI2':
379
+ case 'marginRiskUserData':
380
+ return 'spot';
381
+ case 'mainTestnetPublic':
382
+ case 'mainTestnetUserData':
383
+ case 'mainWSAPITestnet':
384
+ return 'spotTestnet';
385
+ case 'usdm':
386
+ case 'usdmWSAPI':
387
+ return 'usdm';
388
+ case 'usdmTestnet':
389
+ case 'usdmWSAPITestnet':
390
+ return 'usdmTestnet';
391
+ case 'coinm':
392
+ case 'coinm2':
393
+ return 'coinm';
394
+ case 'coinmTestnet':
395
+ return 'coinmTestnet';
396
+ case 'eoptions':
397
+ return 'options';
398
+ case 'portfolioMarginUserData':
399
+ case 'portfolioMarginProUserData':
400
+ return 'portfoliom';
401
+ default: {
402
+ throw (0, typeGuards_1.neverGuard)(wsKey, `resolveMarketForWsKey(): Unhandled WsKey "${wsKey}"`);
403
+ }
404
+ }
405
+ }
406
+ /**
407
+ * Used by the legacy subscribe* utility methods to determine which wsKey to route the subscription to.
408
+ */
409
+ function resolveWsKeyForLegacyMarket(market) {
410
+ switch (market) {
411
+ case 'spot': {
412
+ return 'main';
413
+ }
414
+ case 'coinm': {
415
+ return 'coinm';
416
+ }
417
+ case 'usdm': {
418
+ return 'usdm';
419
+ }
420
+ }
421
+ }
422
+ /**
423
+ * Try to resolve event.data. Example circumstance: {"stream":"!forceOrder@arr","data":{"e":"forceOrder","E":1634653599186,"o":{"s":"IOTXUSDT","S":"SELL","o":"LIMIT","f":"IOC","q":"3661","p":"0.06606","ap":"0.06669","X":"FILLED","l":"962","z":"3661","T":1634653599180}}}
424
+ */
425
+ function parseRawWsMessage(event) {
426
+ if (typeof event === 'string') {
427
+ const parsedEvent = JSON.parse(event);
428
+ if (parsedEvent.data) {
429
+ if (typeof parsedEvent.data === 'string') {
430
+ return parseRawWsMessage(parsedEvent.data);
431
+ }
432
+ return parsedEvent.data;
433
+ }
434
+ }
435
+ if (event === null || event === void 0 ? void 0 : event.data) {
436
+ return JSON.parse(event.data);
437
+ }
438
+ return event;
439
+ }
440
+ function getContextFromWsKey(legacyWsKey) {
441
+ const [market, streamName, symbol, listenKey, wsKey, ...otherParams] = legacyWsKey.split('_');
442
+ return {
443
+ symbol: symbol === 'undefined' ? undefined : symbol,
444
+ legacyWsKey,
445
+ wsKey,
446
+ market: market,
447
+ isTestnet: market.includes('estnet'),
448
+ isUserData: legacyWsKey.includes('userData'),
449
+ streamName,
450
+ listenKey: listenKey === 'undefined' ? undefined : listenKey,
451
+ otherParams,
452
+ };
453
+ }
454
+ /**
455
+ * The legacy WS client creates a deterministic WS Key based on consistent input parameters
456
+ */
457
+ function getLegacyWsStoreKeyWithContext(market, streamName, symbol = undefined, listenKey = undefined, ...otherParams) {
458
+ return [market, streamName, symbol, listenKey, ...otherParams].join('_');
459
+ }
460
+ function getLegacyWsKeyContext(wsKey) {
461
+ if (wsKey.indexOf('userData') !== -1) {
462
+ return getContextFromWsKey(wsKey);
463
+ }
464
+ return undefined;
465
+ }
466
+ function getRealWsKeyFromDerivedWsKey(wsKey) {
467
+ if (!wsKey.includes('userData')) {
468
+ return wsKey;
469
+ }
470
+ const legacyWsKeyContext = getLegacyWsKeyContext(wsKey);
471
+ if (!legacyWsKeyContext || !legacyWsKeyContext.wsKey) {
472
+ throw new Error(`getRealWsKeyFromDerivedWsKey(): no context found in supplied wsKey: "${wsKey}" | "${legacyWsKeyContext}"`);
473
+ }
474
+ return legacyWsKeyContext.wsKey;
475
+ }
476
+ function appendEventMarket(wsMsg, wsKey) {
477
+ const { market } = getContextFromWsKey(wsKey);
478
+ wsMsg.wsMarket = market;
479
+ wsMsg.wsKey = wsKey;
480
+ }
481
+ //# sourceMappingURL=websocket-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-util.js","sourceRoot":"","sources":["../../../src/util/websockets/websocket-util.ts"],"names":[],"mappings":"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"}