binance 3.0.0-beta.1 → 3.0.0-beta.11
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.
- package/README.md +305 -75
- package/index.js +1 -1
- package/lib/coinm-client.d.ts +40 -22
- package/lib/coinm-client.js +4 -16
- package/lib/coinm-client.js.map +1 -1
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/main-client.d.ts +94 -30
- package/lib/main-client.js +68 -36
- package/lib/main-client.js.map +1 -1
- package/lib/portfolio-client.js.map +1 -1
- package/lib/types/coin.d.ts +1 -0
- package/lib/types/futures.d.ts +15 -5
- package/lib/types/futures.js.map +1 -1
- package/lib/types/portfolio-margin.d.ts +0 -9
- package/lib/types/shared.d.ts +14 -13
- package/lib/types/spot.d.ts +174 -11
- package/lib/types/spot.js.map +1 -1
- package/lib/types/websockets/ws-api-requests.d.ts +480 -2
- package/lib/types/websockets/ws-api-responses.d.ts +565 -1
- package/lib/types/websockets/ws-api.d.ts +157 -60
- package/lib/types/websockets/ws-api.js +47 -3
- package/lib/types/websockets/ws-api.js.map +1 -1
- package/lib/types/websockets/ws-events-formatted.d.ts +18 -14
- package/lib/types/websockets/ws-events-raw.d.ts +4 -2
- package/lib/types/websockets/ws-general.d.ts +8 -18
- package/lib/usdm-client.d.ts +45 -27
- package/lib/usdm-client.js +7 -19
- package/lib/usdm-client.js.map +1 -1
- package/lib/util/BaseRestClient.js +20 -6
- package/lib/util/BaseRestClient.js.map +1 -1
- package/lib/util/BaseWSClient.d.ts +14 -3
- package/lib/util/BaseWSClient.js +87 -30
- package/lib/util/BaseWSClient.js.map +1 -1
- package/lib/util/beautifier-maps.d.ts +32 -0
- package/lib/util/beautifier-maps.js +41 -0
- package/lib/util/beautifier-maps.js.map +1 -1
- package/lib/util/beautifier.d.ts +1 -0
- package/lib/util/beautifier.js +44 -9
- package/lib/util/beautifier.js.map +1 -1
- package/lib/util/browser-support.d.ts +1 -1
- package/lib/util/browser-support.js +1 -41
- package/lib/util/browser-support.js.map +1 -1
- package/lib/util/node-support.js +7 -5
- package/lib/util/node-support.js.map +1 -1
- package/lib/util/requestUtils.d.ts +23 -5
- package/lib/util/requestUtils.js +130 -29
- package/lib/util/requestUtils.js.map +1 -1
- package/lib/util/rounding.d.ts +8 -0
- package/lib/util/rounding.js +41 -0
- package/lib/util/rounding.js.map +1 -0
- package/lib/util/typeGuards.d.ts +31 -3
- package/lib/util/typeGuards.js +105 -8
- package/lib/util/typeGuards.js.map +1 -1
- package/lib/util/webCryptoAPI.js +20 -45
- package/lib/util/webCryptoAPI.js.map +1 -1
- package/lib/util/websockets/WsStore.js +7 -2
- package/lib/util/websockets/WsStore.js.map +1 -1
- package/lib/util/websockets/enum.d.ts +11 -0
- package/lib/util/websockets/enum.js +24 -0
- package/lib/util/websockets/enum.js.map +1 -0
- package/lib/util/websockets/rest-client-cache.d.ts +3 -3
- package/lib/util/websockets/rest-client-cache.js +9 -9
- package/lib/util/websockets/rest-client-cache.js.map +1 -1
- package/lib/util/websockets/user-data-stream-manager.js +7 -8
- package/lib/util/websockets/user-data-stream-manager.js.map +1 -1
- package/lib/util/websockets/websocket-util.d.ts +36 -8
- package/lib/util/websockets/websocket-util.js +176 -74
- package/lib/util/websockets/websocket-util.js.map +1 -1
- package/lib/websocket-api-client.d.ts +401 -0
- package/lib/websocket-api-client.js +647 -0
- package/lib/websocket-api-client.js.map +1 -0
- package/lib/websocket-client-legacy.d.ts +5 -3
- package/lib/websocket-client-legacy.js +14 -13
- package/lib/websocket-client-legacy.js.map +1 -1
- package/lib/websocket-client.d.ts +26 -11
- package/lib/websocket-client.js +269 -174
- package/lib/websocket-client.js.map +1 -1
- package/package.json +3 -3
package/lib/util/requestUtils.js
CHANGED
|
@@ -11,12 +11,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.getOrderIdPrefix = getOrderIdPrefix;
|
|
13
13
|
exports.generateNewOrderId = generateNewOrderId;
|
|
14
|
-
exports.requiresWSAPINewClientOID = requiresWSAPINewClientOID;
|
|
15
14
|
exports.getBaseURLKeyForWsKey = getBaseURLKeyForWsKey;
|
|
15
|
+
exports.requiresWSAPINewClientOID = requiresWSAPINewClientOID;
|
|
16
16
|
exports.validateWSAPINewClientOID = validateWSAPINewClientOID;
|
|
17
17
|
exports.serialiseParams = serialiseParams;
|
|
18
18
|
exports.getRequestSignature = getRequestSignature;
|
|
19
19
|
exports.getServerTimeEndpoint = getServerTimeEndpoint;
|
|
20
|
+
exports.getTestnetBaseUrlKey = getTestnetBaseUrlKey;
|
|
20
21
|
exports.getRestBaseUrl = getRestBaseUrl;
|
|
21
22
|
exports.isPublicEndpoint = isPublicEndpoint;
|
|
22
23
|
exports.isWsPong = isWsPong;
|
|
@@ -25,6 +26,7 @@ exports.appendEventIfMissing = appendEventIfMissing;
|
|
|
25
26
|
exports.asArray = asArray;
|
|
26
27
|
const nanoid_1 = require("nanoid");
|
|
27
28
|
const node_support_1 = require("./node-support");
|
|
29
|
+
const typeGuards_1 = require("./typeGuards");
|
|
28
30
|
const websocket_util_1 = require("./websockets/websocket-util");
|
|
29
31
|
// function throwUnhandledSwitch(x: never, msg: string): never {
|
|
30
32
|
// throw new Error(msg);
|
|
@@ -56,27 +58,6 @@ function generateNewOrderId(network) {
|
|
|
56
58
|
const prefixedId = 'x-' + getOrderIdPrefix(network) + id;
|
|
57
59
|
return prefixedId;
|
|
58
60
|
}
|
|
59
|
-
function requiresWSAPINewClientOID(request, wsKey) {
|
|
60
|
-
switch (wsKey) {
|
|
61
|
-
case websocket_util_1.WS_KEY_MAP.mainWSAPI:
|
|
62
|
-
case websocket_util_1.WS_KEY_MAP.mainWSAPI2:
|
|
63
|
-
case websocket_util_1.WS_KEY_MAP.mainWSAPITestnet:
|
|
64
|
-
case websocket_util_1.WS_KEY_MAP.usdmWSAPI:
|
|
65
|
-
case websocket_util_1.WS_KEY_MAP.usdmWSAPITestnet: {
|
|
66
|
-
switch (request.method) {
|
|
67
|
-
case 'order.place': {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
default: {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
default: {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
61
|
function getBaseURLKeyForWsKey(wsKey) {
|
|
81
62
|
switch (wsKey) {
|
|
82
63
|
case websocket_util_1.WS_KEY_MAP.mainWSAPI:
|
|
@@ -100,13 +81,37 @@ function getWSAPINewOrderIdProperties(operation, wsKey) {
|
|
|
100
81
|
case websocket_util_1.WS_KEY_MAP.mainWSAPI2:
|
|
101
82
|
case websocket_util_1.WS_KEY_MAP.mainWSAPITestnet:
|
|
102
83
|
case websocket_util_1.WS_KEY_MAP.usdmWSAPI:
|
|
103
|
-
case websocket_util_1.WS_KEY_MAP.usdmWSAPITestnet:
|
|
104
|
-
|
|
84
|
+
case websocket_util_1.WS_KEY_MAP.usdmWSAPITestnet:
|
|
85
|
+
case websocket_util_1.WS_KEY_MAP.coinmWSAPI:
|
|
86
|
+
case websocket_util_1.WS_KEY_MAP.coinmWSAPITestnet: {
|
|
87
|
+
if (['order.place', 'order.amend.keepPriority', 'sor.order.place'].includes(operation)) {
|
|
105
88
|
return ['newClientOrderId'];
|
|
106
89
|
}
|
|
107
90
|
if (operation === 'orderList.place') {
|
|
108
91
|
return ['listClientOrderId', 'limitClientOrderId', 'stopClientOrderId'];
|
|
109
92
|
}
|
|
93
|
+
if (operation === 'orderList.place.oco') {
|
|
94
|
+
return [
|
|
95
|
+
'listClientOrderId',
|
|
96
|
+
'aboveClientOrderId',
|
|
97
|
+
'belowClientOrderId',
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
if (operation === 'orderList.place.oto') {
|
|
101
|
+
return [
|
|
102
|
+
'listClientOrderId',
|
|
103
|
+
'workingClientOrderId',
|
|
104
|
+
'pendingClientOrderId',
|
|
105
|
+
];
|
|
106
|
+
}
|
|
107
|
+
if (operation === 'orderList.place.otoco') {
|
|
108
|
+
return [
|
|
109
|
+
'listClientOrderId',
|
|
110
|
+
'workingClientOrderId',
|
|
111
|
+
'pendingAboveClientOrderId',
|
|
112
|
+
'pendingBelowClientOrderId',
|
|
113
|
+
];
|
|
114
|
+
}
|
|
110
115
|
return [];
|
|
111
116
|
}
|
|
112
117
|
default: {
|
|
@@ -114,6 +119,45 @@ function getWSAPINewOrderIdProperties(operation, wsKey) {
|
|
|
114
119
|
}
|
|
115
120
|
}
|
|
116
121
|
}
|
|
122
|
+
function requiresWSAPINewClientOID(request, wsKey) {
|
|
123
|
+
switch (wsKey) {
|
|
124
|
+
case websocket_util_1.WS_KEY_MAP.mainWSAPI:
|
|
125
|
+
case websocket_util_1.WS_KEY_MAP.mainWSAPI2:
|
|
126
|
+
case websocket_util_1.WS_KEY_MAP.mainWSAPITestnet:
|
|
127
|
+
case websocket_util_1.WS_KEY_MAP.usdmWSAPI:
|
|
128
|
+
case websocket_util_1.WS_KEY_MAP.usdmWSAPITestnet:
|
|
129
|
+
case websocket_util_1.WS_KEY_MAP.coinmWSAPI:
|
|
130
|
+
case websocket_util_1.WS_KEY_MAP.coinmWSAPITestnet: {
|
|
131
|
+
return [
|
|
132
|
+
'order.place',
|
|
133
|
+
'order.amend.keepPriority',
|
|
134
|
+
'sor.order.place',
|
|
135
|
+
'orderList.place',
|
|
136
|
+
'orderList.place.oco',
|
|
137
|
+
'orderList.place.oto',
|
|
138
|
+
'orderList.place.otoco',
|
|
139
|
+
].includes(request.method);
|
|
140
|
+
}
|
|
141
|
+
case websocket_util_1.WS_KEY_MAP.main:
|
|
142
|
+
case websocket_util_1.WS_KEY_MAP.main2:
|
|
143
|
+
case websocket_util_1.WS_KEY_MAP.main3:
|
|
144
|
+
case websocket_util_1.WS_KEY_MAP.mainTestnetPublic:
|
|
145
|
+
case websocket_util_1.WS_KEY_MAP.mainTestnetUserData:
|
|
146
|
+
case websocket_util_1.WS_KEY_MAP.marginRiskUserData:
|
|
147
|
+
case websocket_util_1.WS_KEY_MAP.usdm:
|
|
148
|
+
case websocket_util_1.WS_KEY_MAP.usdmTestnet:
|
|
149
|
+
case websocket_util_1.WS_KEY_MAP.coinm:
|
|
150
|
+
case websocket_util_1.WS_KEY_MAP.coinm2:
|
|
151
|
+
case websocket_util_1.WS_KEY_MAP.coinmTestnet:
|
|
152
|
+
case websocket_util_1.WS_KEY_MAP.eoptions:
|
|
153
|
+
case websocket_util_1.WS_KEY_MAP.portfolioMarginUserData:
|
|
154
|
+
case websocket_util_1.WS_KEY_MAP.portfolioMarginProUserData:
|
|
155
|
+
return false;
|
|
156
|
+
default: {
|
|
157
|
+
throw (0, typeGuards_1.neverGuard)(wsKey, `Unhandled WsKey "${wsKey}"`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
117
161
|
function validateWSAPINewClientOID(request, wsKey) {
|
|
118
162
|
if (!requiresWSAPINewClientOID(request, wsKey) || !request.params) {
|
|
119
163
|
return;
|
|
@@ -149,16 +193,24 @@ function serialiseParams(params = {}, strict_validation = false, encodeValues =
|
|
|
149
193
|
})
|
|
150
194
|
.join('&');
|
|
151
195
|
}
|
|
152
|
-
function getRequestSignature(data, key, secret,
|
|
196
|
+
function getRequestSignature(data, options, key, secret, timestamp) {
|
|
153
197
|
return __awaiter(this, void 0, void 0, function* () {
|
|
154
198
|
var _a, _b;
|
|
199
|
+
const { recvWindow, strictParamValidation, filterUndefinedParams } = options;
|
|
155
200
|
// Optional, set to 5000 by default. Increase if timestamp/recvWindow errors are seen.
|
|
156
201
|
const requestRecvWindow = (_b = (_a = data === null || data === void 0 ? void 0 : data.recvWindow) !== null && _a !== void 0 ? _a : recvWindow) !== null && _b !== void 0 ? _b : 5000;
|
|
157
202
|
if (key && secret) {
|
|
158
203
|
const requestParams = Object.assign(Object.assign({}, data), { timestamp, recvWindow: requestRecvWindow });
|
|
204
|
+
const signMethod = 'hex';
|
|
205
|
+
const signAlgorithm = 'SHA-256';
|
|
159
206
|
const serialisedParams = serialiseParams(requestParams, strictParamValidation, true, filterUndefinedParams);
|
|
160
|
-
|
|
161
|
-
|
|
207
|
+
let signature;
|
|
208
|
+
if (typeof options.customSignMessageFn === 'function') {
|
|
209
|
+
signature = yield options.customSignMessageFn(serialisedParams, secret);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
signature = yield (0, node_support_1.signMessage)(serialisedParams, secret, signMethod, signAlgorithm);
|
|
213
|
+
}
|
|
162
214
|
requestParams.signature = signature;
|
|
163
215
|
return {
|
|
164
216
|
requestBody: Object.assign({}, data),
|
|
@@ -178,6 +230,7 @@ const BINANCE_BASE_URLS = {
|
|
|
178
230
|
spot2: 'https://api1.binance.com',
|
|
179
231
|
spot3: 'https://api2.binance.com',
|
|
180
232
|
spot4: 'https://api3.binance.com',
|
|
233
|
+
spottest: 'https://testnet.binance.vision',
|
|
181
234
|
// USDM Futures
|
|
182
235
|
usdm: 'https://fapi.binance.com',
|
|
183
236
|
usdmtest: 'https://testnet.binancefuture.com',
|
|
@@ -197,6 +250,7 @@ function getServerTimeEndpoint(urlKey) {
|
|
|
197
250
|
case 'spot2':
|
|
198
251
|
case 'spot3':
|
|
199
252
|
case 'spot4':
|
|
253
|
+
case 'spottest':
|
|
200
254
|
default:
|
|
201
255
|
return 'api/v3/time';
|
|
202
256
|
case 'usdm':
|
|
@@ -210,6 +264,27 @@ function getServerTimeEndpoint(urlKey) {
|
|
|
210
264
|
return 'vapi/v1/time';
|
|
211
265
|
}
|
|
212
266
|
}
|
|
267
|
+
function getTestnetBaseUrlKey(urlKey) {
|
|
268
|
+
switch (urlKey) {
|
|
269
|
+
case 'spot':
|
|
270
|
+
case 'spot1':
|
|
271
|
+
case 'spot2':
|
|
272
|
+
case 'spot3':
|
|
273
|
+
case 'spot4':
|
|
274
|
+
case 'spottest':
|
|
275
|
+
default:
|
|
276
|
+
return 'spottest';
|
|
277
|
+
case 'usdm':
|
|
278
|
+
case 'usdmtest':
|
|
279
|
+
return 'usdmtest';
|
|
280
|
+
case 'coinm':
|
|
281
|
+
case 'coinmtest':
|
|
282
|
+
return 'coinmtest';
|
|
283
|
+
case 'voptions':
|
|
284
|
+
case 'voptionstest':
|
|
285
|
+
return 'voptionstest';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
213
288
|
function getRestBaseUrl(clientType, restClientOptions) {
|
|
214
289
|
if (restClientOptions.baseUrl) {
|
|
215
290
|
return restClientOptions.baseUrl;
|
|
@@ -245,10 +320,37 @@ function logInvalidOrderId(orderIdProperty, expectedOrderIdPrefix, params) {
|
|
|
245
320
|
* - For the old WebsocketClient, this is extracted using the WsKey.
|
|
246
321
|
* - For the new multiplex Websocketclient, this is extracted using the "stream" parameter.
|
|
247
322
|
*/
|
|
248
|
-
function appendEventIfMissing(wsMsg, wsKey
|
|
323
|
+
function appendEventIfMissing(wsMsg, wsKey,
|
|
324
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
325
|
+
eventType) {
|
|
249
326
|
if (wsMsg.e) {
|
|
250
327
|
return;
|
|
251
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
*
|
|
331
|
+
* This is a mess right now, diff places parsing in diff levels, because
|
|
332
|
+
* there's convenient parse-to-child happening too early on, and the
|
|
333
|
+
* stream name is missing from the child data!
|
|
334
|
+
*
|
|
335
|
+
* First parse should be simple, extract json. All handling from there should be later on!!
|
|
336
|
+
*
|
|
337
|
+
* Maybe it's time to improve the type handling from the first part where an event is received!
|
|
338
|
+
*
|
|
339
|
+
* Also, stream or streamName? what's the right one here??
|
|
340
|
+
*
|
|
341
|
+
* TODO: review me and clean up
|
|
342
|
+
*/
|
|
343
|
+
if (eventType) {
|
|
344
|
+
if (!Array.isArray(wsMsg)) {
|
|
345
|
+
wsMsg.e = eventType;
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
for (const key in wsMsg) {
|
|
349
|
+
// wsMsg[key].streamName = wsMsg.stream;
|
|
350
|
+
wsMsg[key].e = eventType;
|
|
351
|
+
}
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
252
354
|
// Multiplex websockets include the eventType as the stream name
|
|
253
355
|
if (wsMsg.stream && wsMsg.data) {
|
|
254
356
|
const eventType = (0, websocket_util_1.parseEventTypeFromMessage)(wsKey, wsMsg);
|
|
@@ -260,7 +362,6 @@ function appendEventIfMissing(wsMsg, wsKey) {
|
|
|
260
362
|
}
|
|
261
363
|
return;
|
|
262
364
|
}
|
|
263
|
-
wsMsg.data = Object.assign({ streamName: wsMsg.stream, e: eventType }, wsMsg.data);
|
|
264
365
|
}
|
|
265
366
|
}
|
|
266
367
|
if (wsKey.indexOf('bookTicker') !== -1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../src/util/requestUtils.ts"],"names":[],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../src/util/requestUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rounds a price to the correct number of decimal places based on the symbol's tick size
|
|
3
|
+
*/
|
|
4
|
+
export declare function roundToTickSize(price: number, tickSize: string): number;
|
|
5
|
+
/**
|
|
6
|
+
* Rounds a quantity to the correct step size
|
|
7
|
+
*/
|
|
8
|
+
export declare function roundToStepSize(quantity: number, stepSize: string): number;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.roundToTickSize = roundToTickSize;
|
|
4
|
+
exports.roundToStepSize = roundToStepSize;
|
|
5
|
+
/**
|
|
6
|
+
* Rounds a price to the correct number of decimal places based on the symbol's tick size
|
|
7
|
+
*/
|
|
8
|
+
function roundToTickSize(price, tickSize) {
|
|
9
|
+
if (!tickSize) {
|
|
10
|
+
return price;
|
|
11
|
+
}
|
|
12
|
+
// Calculate precision from tick size (e.g., 0.00010000 → 4 decimal places)
|
|
13
|
+
const precision = tickSize.indexOf('1') - 1;
|
|
14
|
+
if (precision < 0) {
|
|
15
|
+
return Math.floor(price);
|
|
16
|
+
}
|
|
17
|
+
// Round to the nearest tick
|
|
18
|
+
const tickSizeNum = parseFloat(tickSize);
|
|
19
|
+
const rounded = Math.floor(price / tickSizeNum) * tickSizeNum;
|
|
20
|
+
// Format with correct precision
|
|
21
|
+
return +rounded.toFixed(precision);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Rounds a quantity to the correct step size
|
|
25
|
+
*/
|
|
26
|
+
function roundToStepSize(quantity, stepSize) {
|
|
27
|
+
if (!stepSize) {
|
|
28
|
+
return quantity;
|
|
29
|
+
}
|
|
30
|
+
// Calculate precision from step size
|
|
31
|
+
const precision = stepSize.indexOf('1') - 1;
|
|
32
|
+
if (precision < 0) {
|
|
33
|
+
return Math.floor(quantity);
|
|
34
|
+
}
|
|
35
|
+
// Round to the nearest step
|
|
36
|
+
const stepSizeNum = parseFloat(stepSize);
|
|
37
|
+
const rounded = Math.floor(quantity / stepSizeNum) * stepSizeNum;
|
|
38
|
+
// Format with correct precision
|
|
39
|
+
return +rounded.toFixed(precision);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=rounding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rounding.js","sourceRoot":"","sources":["../../src/util/rounding.ts"],"names":[],"mappings":";;AAGA,0CAiBC;AAKD,0CAiBC;AA1CD;;GAEG;AACH,SAAgB,eAAe,CAAC,KAAa,EAAE,QAAgB;IAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2EAA2E;IAC3E,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,4BAA4B;IAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;IAE9D,gCAAgC;IAChC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAgB,eAAe,CAAC,QAAgB,EAAE,QAAgB;IAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,qCAAqC;IACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,4BAA4B;IAC5B,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC;IAEjE,gCAAgC;IAChC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC"}
|
package/lib/util/typeGuards.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { WsFormattedMessage,
|
|
2
|
-
import {
|
|
1
|
+
import { WsFormattedMessage, WsMessage24hrTickerFormatted, WsMessageAggTradeFormatted, WsMessageForceOrderFormatted, WsMessageFuturesUserDataAccountConfigUpdateEventFormatted, WsMessageFuturesUserDataAccountUpdateFormatted, WsMessageFuturesUserDataCondOrderTriggerRejectEventFormatted, WsMessageFuturesUserDataEventFormatted, WsMessageFuturesUserDataListenKeyExpiredFormatted, WsMessageFuturesUserDataMarginCallFormatted, WsMessageFuturesUserDataTradeUpdateEventFormatted, WsMessageKlineFormatted, WsMessageMarkPriceUpdateEventFormatted, WsMessagePartialBookDepthEventFormatted, WsMessageSpotBalanceUpdateFormatted, WsMessageSpotOutboundAccountPositionFormatted, WsMessageSpotUserDataEventFormatted, WsMessageSpotUserDataExecutionReportEventFormatted, WsMessageSpotUserDataListStatusEventFormatted, WsMessageTradeFormatted, WsUserDataEvents } from '../types/websockets/ws-events-formatted';
|
|
2
|
+
import { WsMessage24hrMiniTickerRaw, WsMessageFuturesUserDataAccountConfigUpdateEventRaw, WsMessageFuturesUserDataAccountUpdateRaw, WsMessageFuturesUserDataOrderTradeUpdateEventRaw, WsMessageKlineRaw, WsMessageRollingWindowTickerRaw, WsRawMessage } from '../types/websockets/ws-events-raw';
|
|
3
|
+
import { WSAPIWsKey, WsKey } from './websockets/websocket-util';
|
|
3
4
|
export declare function neverGuard(x: never, msg: string): Error;
|
|
4
5
|
/**
|
|
5
6
|
* Use type guards to narrow down types with minimal efforts.
|
|
@@ -8,6 +9,9 @@ export declare function neverGuard(x: never, msg: string): Error;
|
|
|
8
9
|
* and `WsRawMessage` typeguards in the second half.
|
|
9
10
|
*
|
|
10
11
|
*/
|
|
12
|
+
export declare function isWsSpotConnection(data: WsFormattedMessage): boolean;
|
|
13
|
+
export declare function isWsFuturesConnection(data: WsFormattedMessage): boolean;
|
|
14
|
+
export declare function isWSAPIWsKey(wsKey: WsKey): wsKey is WSAPIWsKey;
|
|
11
15
|
/**
|
|
12
16
|
* Typeguards for WsFormattedMessage event types:
|
|
13
17
|
*/
|
|
@@ -19,13 +23,37 @@ export declare function isWsFormattedTrade(data: WsFormattedMessage): data is Ws
|
|
|
19
23
|
export declare function isWsFormattedKline(data: WsFormattedMessage): data is WsMessageKlineFormatted;
|
|
20
24
|
export declare function isWsFormatted24hrTicker(data: WsFormattedMessage): data is WsMessage24hrTickerFormatted;
|
|
21
25
|
export declare function isWsFormattedForceOrder(data: WsFormattedMessage): data is WsMessageForceOrderFormatted;
|
|
26
|
+
/**
|
|
27
|
+
* !ticker@arr
|
|
28
|
+
* @param data
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
22
31
|
export declare function isWsFormatted24hrTickerArray(data: WsFormattedMessage): data is WsMessage24hrTickerFormatted[];
|
|
23
|
-
|
|
32
|
+
/**
|
|
33
|
+
* !ticker_1h@arr
|
|
34
|
+
*
|
|
35
|
+
* @param data
|
|
36
|
+
* @returns
|
|
37
|
+
*/
|
|
38
|
+
export declare function isWsFormattedRollingWindowTickerArray(data: WsFormattedMessage): data is WsMessage24hrTickerFormatted[];
|
|
24
39
|
/**
|
|
25
40
|
* Typeguard to validate a 'Compressed/Aggregate' trade
|
|
26
41
|
*/
|
|
27
42
|
export declare function isWsAggTradeFormatted(data: WsFormattedMessage): data is WsMessageAggTradeFormatted;
|
|
43
|
+
/**
|
|
44
|
+
* <symbol>@depth<levels> OR <symbol>@depth<levels>@100ms
|
|
45
|
+
* @param data
|
|
46
|
+
* @returns
|
|
47
|
+
*/
|
|
28
48
|
export declare function isWsPartialBookDepthEventFormatted(data: WsFormattedMessage): data is WsMessagePartialBookDepthEventFormatted;
|
|
49
|
+
/**
|
|
50
|
+
* Works for both the listen key & WS API user data stream workflows.
|
|
51
|
+
*
|
|
52
|
+
* - For the listen key workflow, uses the wsKey to identify the connection dedicated
|
|
53
|
+
* to the user data stream.
|
|
54
|
+
* - For the WS API user data stream, uses the eventType to identify user data events
|
|
55
|
+
* from a known list (`EVENT_TYPES_USER_DATA`).
|
|
56
|
+
*/
|
|
29
57
|
export declare function isWsFormattedUserDataEvent(data: WsFormattedMessage): data is WsUserDataEvents;
|
|
30
58
|
export declare function isWsFormattedSpotUserDataEvent(data: WsFormattedMessage): data is WsMessageSpotUserDataEventFormatted;
|
|
31
59
|
export declare function isWsFormattedFuturesUserDataEvent(data: WsFormattedMessage): data is WsMessageFuturesUserDataEventFormatted;
|
package/lib/util/typeGuards.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.neverGuard = neverGuard;
|
|
4
|
+
exports.isWsSpotConnection = isWsSpotConnection;
|
|
5
|
+
exports.isWsFuturesConnection = isWsFuturesConnection;
|
|
6
|
+
exports.isWSAPIWsKey = isWSAPIWsKey;
|
|
4
7
|
exports.isWsFormattedMarkPriceUpdateEvent = isWsFormattedMarkPriceUpdateEvent;
|
|
5
8
|
exports.isWsFormattedMarkPriceUpdateArray = isWsFormattedMarkPriceUpdateArray;
|
|
6
9
|
exports.isWsFormattedMarkPriceUpdate = isWsFormattedMarkPriceUpdate;
|
|
@@ -34,6 +37,7 @@ exports.isAccountConfigUpdateRaw = isAccountConfigUpdateRaw;
|
|
|
34
37
|
exports.isAccountUpdateRaw = isAccountUpdateRaw;
|
|
35
38
|
exports.isTopicSubscriptionConfirmation = isTopicSubscriptionConfirmation;
|
|
36
39
|
exports.isTopicSubscriptionSuccess = isTopicSubscriptionSuccess;
|
|
40
|
+
const websocket_util_1 = require("./websockets/websocket-util");
|
|
37
41
|
function neverGuard(x, msg) {
|
|
38
42
|
return new Error(`Unhandled value exception "${x}", ${msg}`);
|
|
39
43
|
}
|
|
@@ -44,6 +48,44 @@ function neverGuard(x, msg) {
|
|
|
44
48
|
* and `WsRawMessage` typeguards in the second half.
|
|
45
49
|
*
|
|
46
50
|
*/
|
|
51
|
+
function isWsSpotConnection(data) {
|
|
52
|
+
return (!Array.isArray(data) && data.wsKey && websocket_util_1.WS_KEYS_SPOT.includes(data.wsKey));
|
|
53
|
+
}
|
|
54
|
+
function isWsFuturesConnection(data) {
|
|
55
|
+
return (!Array.isArray(data) && data.wsKey && websocket_util_1.WS_KEYS_FUTURES.includes(data.wsKey));
|
|
56
|
+
}
|
|
57
|
+
function isWSAPIWsKey(wsKey) {
|
|
58
|
+
switch (wsKey) {
|
|
59
|
+
case 'mainWSAPITestnet':
|
|
60
|
+
case 'mainWSAPI':
|
|
61
|
+
case 'mainWSAPI2':
|
|
62
|
+
case 'usdmWSAPI':
|
|
63
|
+
case 'usdmWSAPITestnet':
|
|
64
|
+
case 'coinmWSAPI':
|
|
65
|
+
case 'coinmWSAPITestnet': {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
case 'main':
|
|
69
|
+
case 'main2':
|
|
70
|
+
case 'main3':
|
|
71
|
+
case 'marginRiskUserData':
|
|
72
|
+
case 'mainTestnetPublic':
|
|
73
|
+
case 'mainTestnetUserData':
|
|
74
|
+
case 'usdm':
|
|
75
|
+
case 'usdmTestnet':
|
|
76
|
+
case 'coinm':
|
|
77
|
+
case 'coinmTestnet':
|
|
78
|
+
case 'eoptions':
|
|
79
|
+
case 'coinm2':
|
|
80
|
+
case 'portfolioMarginUserData':
|
|
81
|
+
case 'portfolioMarginProUserData': {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
default: {
|
|
85
|
+
throw neverGuard(wsKey, `Unhandled WsKey "${wsKey}"`);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
47
89
|
/**
|
|
48
90
|
* Typeguards for WsFormattedMessage event types:
|
|
49
91
|
*/
|
|
@@ -53,7 +95,7 @@ function isWsFormattedMarkPriceUpdateEvent(data) {
|
|
|
53
95
|
function isWsFormattedMarkPriceUpdateArray(data) {
|
|
54
96
|
return (Array.isArray(data) &&
|
|
55
97
|
data.length !== 0 &&
|
|
56
|
-
data[0].eventType
|
|
98
|
+
['markPriceUpdate', 'markPrice'].includes(data[0].eventType));
|
|
57
99
|
}
|
|
58
100
|
/** @deprecated, use isWsFormattedMarkPriceUpdateEvent or isWsFormattedMarkPriceUpdateArray */
|
|
59
101
|
function isWsFormattedMarkPriceUpdate(data) {
|
|
@@ -71,15 +113,32 @@ function isWsFormatted24hrTicker(data) {
|
|
|
71
113
|
function isWsFormattedForceOrder(data) {
|
|
72
114
|
return !Array.isArray(data) && data.eventType === 'forceOrder';
|
|
73
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* !ticker@arr
|
|
118
|
+
* @param data
|
|
119
|
+
* @returns
|
|
120
|
+
*/
|
|
74
121
|
function isWsFormatted24hrTickerArray(data) {
|
|
75
122
|
return (Array.isArray(data) &&
|
|
76
123
|
data.length !== 0 &&
|
|
77
|
-
|
|
124
|
+
// topic in ws url
|
|
125
|
+
(['24hrTicker'].includes(data[0].eventType) || // multiplex subscriptions
|
|
126
|
+
(!!data[0].streamName && ['!ticker@arr'].includes(data[0].streamName))));
|
|
78
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* !ticker_1h@arr
|
|
130
|
+
*
|
|
131
|
+
* @param data
|
|
132
|
+
* @returns
|
|
133
|
+
*/
|
|
79
134
|
function isWsFormattedRollingWindowTickerArray(data) {
|
|
80
135
|
return (Array.isArray(data) &&
|
|
81
136
|
data.length !== 0 &&
|
|
82
|
-
|
|
137
|
+
// topic in ws url
|
|
138
|
+
(['1hTicker', '4hTicker', '1dTicker'].includes(data[0].eventType) ||
|
|
139
|
+
// multiplex subscriptions
|
|
140
|
+
(!!data[0].streamName &&
|
|
141
|
+
['!ticker_1h@arr', '!ticker_4h@arr', '!ticker_1d@arr'].includes(data[0].streamName))));
|
|
83
142
|
}
|
|
84
143
|
/**
|
|
85
144
|
* Typeguard to validate a 'Compressed/Aggregate' trade
|
|
@@ -87,20 +146,58 @@ function isWsFormattedRollingWindowTickerArray(data) {
|
|
|
87
146
|
function isWsAggTradeFormatted(data) {
|
|
88
147
|
return !Array.isArray(data) && data.eventType === 'aggTrade';
|
|
89
148
|
}
|
|
149
|
+
const partialBookDepthEventTypeMap = new Map()
|
|
150
|
+
// For dedicated connection
|
|
151
|
+
.set('partialBookDepth', true)
|
|
152
|
+
// For multiplex connection
|
|
153
|
+
.set('depth5', true)
|
|
154
|
+
.set('depth10', true)
|
|
155
|
+
.set('depth20', true)
|
|
156
|
+
.set('depth5@100ms', true)
|
|
157
|
+
.set('depth10@100ms', true)
|
|
158
|
+
.set('depth20@100ms', true)
|
|
159
|
+
.set('depth5@1000ms', true)
|
|
160
|
+
.set('depth10@1000ms', true)
|
|
161
|
+
.set('depth20@1000ms', true);
|
|
162
|
+
/**
|
|
163
|
+
* <symbol>@depth<levels> OR <symbol>@depth<levels>@100ms
|
|
164
|
+
* @param data
|
|
165
|
+
* @returns
|
|
166
|
+
*/
|
|
90
167
|
function isWsPartialBookDepthEventFormatted(data) {
|
|
91
|
-
return !Array.isArray(data) && data.eventType
|
|
168
|
+
return (!Array.isArray(data) && partialBookDepthEventTypeMap.has(data.eventType));
|
|
92
169
|
}
|
|
93
|
-
|
|
170
|
+
/**
|
|
171
|
+
* Works for both the listen key & WS API user data stream workflows.
|
|
172
|
+
*
|
|
173
|
+
* - For the listen key workflow, uses the wsKey to identify the connection dedicated
|
|
174
|
+
* to the user data stream.
|
|
175
|
+
* - For the WS API user data stream, uses the eventType to identify user data events
|
|
176
|
+
* from a known list (`EVENT_TYPES_USER_DATA`).
|
|
177
|
+
*/
|
|
94
178
|
function isWsFormattedUserDataEvent(data) {
|
|
95
|
-
|
|
179
|
+
if (Array.isArray(data)) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
// Old listenKey workflow has one dedicated connection per user data stream
|
|
183
|
+
// Won't work for new WS API user data stream without listen key
|
|
184
|
+
if (data.wsKey.includes('userData')) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
if ((data === null || data === void 0 ? void 0 : data.eventType) && websocket_util_1.EVENT_TYPES_USER_DATA.includes(data.eventType)) {
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
return false;
|
|
96
191
|
}
|
|
97
192
|
function isWsFormattedSpotUserDataEvent(data) {
|
|
98
193
|
var _a;
|
|
99
|
-
return isWsFormattedUserDataEvent(data) &&
|
|
194
|
+
return (isWsFormattedUserDataEvent(data) &&
|
|
195
|
+
(((_a = data.wsMarket) === null || _a === void 0 ? void 0 : _a.includes('spot')) || isWsSpotConnection(data)));
|
|
100
196
|
}
|
|
101
197
|
function isWsFormattedFuturesUserDataEvent(data) {
|
|
102
198
|
var _a;
|
|
103
|
-
return isWsFormattedUserDataEvent(data) &&
|
|
199
|
+
return (isWsFormattedUserDataEvent(data) &&
|
|
200
|
+
(((_a = data.wsMarket) === null || _a === void 0 ? void 0 : _a.includes('usdm')) || isWsFuturesConnection(data)));
|
|
104
201
|
}
|
|
105
202
|
function isWsFormattedSpotUserDataExecutionReport(data) {
|
|
106
203
|
return (isWsFormattedSpotUserDataEvent(data) && data.eventType === 'executionReport');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../src/util/typeGuards.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../src/util/typeGuards.ts"],"names":[],"mappings":"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"}
|