binance 3.0.0-beta.0 → 3.0.0-beta.10
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 -4
- 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 +22 -4
- package/lib/util/requestUtils.js +76 -25
- 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 +27 -6
- package/lib/util/websockets/websocket-util.js +147 -52
- 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 +11 -10
- package/lib/websocket-client-legacy.js.map +1 -1
- package/lib/websocket-client.d.ts +26 -11
- package/lib/websocket-client.js +185 -139
- 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:
|
|
@@ -114,6 +95,45 @@ function getWSAPINewOrderIdProperties(operation, wsKey) {
|
|
|
114
95
|
}
|
|
115
96
|
}
|
|
116
97
|
}
|
|
98
|
+
function requiresWSAPINewClientOID(request, wsKey) {
|
|
99
|
+
switch (wsKey) {
|
|
100
|
+
case websocket_util_1.WS_KEY_MAP.mainWSAPI:
|
|
101
|
+
case websocket_util_1.WS_KEY_MAP.mainWSAPI2:
|
|
102
|
+
case websocket_util_1.WS_KEY_MAP.mainWSAPITestnet:
|
|
103
|
+
case websocket_util_1.WS_KEY_MAP.usdmWSAPI:
|
|
104
|
+
case websocket_util_1.WS_KEY_MAP.usdmWSAPITestnet:
|
|
105
|
+
case websocket_util_1.WS_KEY_MAP.coinmWSAPI:
|
|
106
|
+
case websocket_util_1.WS_KEY_MAP.coinmWSAPITestnet: {
|
|
107
|
+
switch (request.method) {
|
|
108
|
+
case 'order.place':
|
|
109
|
+
case 'order.amend.keepPriority': {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
default: {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
case websocket_util_1.WS_KEY_MAP.main:
|
|
118
|
+
case websocket_util_1.WS_KEY_MAP.main2:
|
|
119
|
+
case websocket_util_1.WS_KEY_MAP.main3:
|
|
120
|
+
case websocket_util_1.WS_KEY_MAP.mainTestnetPublic:
|
|
121
|
+
case websocket_util_1.WS_KEY_MAP.mainTestnetUserData:
|
|
122
|
+
case websocket_util_1.WS_KEY_MAP.marginRiskUserData:
|
|
123
|
+
case websocket_util_1.WS_KEY_MAP.usdm:
|
|
124
|
+
case websocket_util_1.WS_KEY_MAP.usdmTestnet:
|
|
125
|
+
case websocket_util_1.WS_KEY_MAP.coinm:
|
|
126
|
+
case websocket_util_1.WS_KEY_MAP.coinm2:
|
|
127
|
+
case websocket_util_1.WS_KEY_MAP.coinmTestnet:
|
|
128
|
+
case websocket_util_1.WS_KEY_MAP.eoptions:
|
|
129
|
+
case websocket_util_1.WS_KEY_MAP.portfolioMarginUserData:
|
|
130
|
+
case websocket_util_1.WS_KEY_MAP.portfolioMarginProUserData:
|
|
131
|
+
return false;
|
|
132
|
+
default: {
|
|
133
|
+
throw (0, typeGuards_1.neverGuard)(wsKey, `Unhandled WsKey "${wsKey}"`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
117
137
|
function validateWSAPINewClientOID(request, wsKey) {
|
|
118
138
|
if (!requiresWSAPINewClientOID(request, wsKey) || !request.params) {
|
|
119
139
|
return;
|
|
@@ -149,16 +169,24 @@ function serialiseParams(params = {}, strict_validation = false, encodeValues =
|
|
|
149
169
|
})
|
|
150
170
|
.join('&');
|
|
151
171
|
}
|
|
152
|
-
function getRequestSignature(data, key, secret,
|
|
172
|
+
function getRequestSignature(data, options, key, secret, timestamp) {
|
|
153
173
|
return __awaiter(this, void 0, void 0, function* () {
|
|
154
174
|
var _a, _b;
|
|
175
|
+
const { recvWindow, strictParamValidation, filterUndefinedParams } = options;
|
|
155
176
|
// Optional, set to 5000 by default. Increase if timestamp/recvWindow errors are seen.
|
|
156
177
|
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
178
|
if (key && secret) {
|
|
158
179
|
const requestParams = Object.assign(Object.assign({}, data), { timestamp, recvWindow: requestRecvWindow });
|
|
180
|
+
const signMethod = 'hex';
|
|
181
|
+
const signAlgorithm = 'SHA-256';
|
|
159
182
|
const serialisedParams = serialiseParams(requestParams, strictParamValidation, true, filterUndefinedParams);
|
|
160
|
-
|
|
161
|
-
|
|
183
|
+
let signature;
|
|
184
|
+
if (typeof options.customSignMessageFn === 'function') {
|
|
185
|
+
signature = yield options.customSignMessageFn(serialisedParams, secret);
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
signature = yield (0, node_support_1.signMessage)(serialisedParams, secret, signMethod, signAlgorithm);
|
|
189
|
+
}
|
|
162
190
|
requestParams.signature = signature;
|
|
163
191
|
return {
|
|
164
192
|
requestBody: Object.assign({}, data),
|
|
@@ -178,6 +206,7 @@ const BINANCE_BASE_URLS = {
|
|
|
178
206
|
spot2: 'https://api1.binance.com',
|
|
179
207
|
spot3: 'https://api2.binance.com',
|
|
180
208
|
spot4: 'https://api3.binance.com',
|
|
209
|
+
spottest: 'https://testnet.binance.vision',
|
|
181
210
|
// USDM Futures
|
|
182
211
|
usdm: 'https://fapi.binance.com',
|
|
183
212
|
usdmtest: 'https://testnet.binancefuture.com',
|
|
@@ -197,6 +226,7 @@ function getServerTimeEndpoint(urlKey) {
|
|
|
197
226
|
case 'spot2':
|
|
198
227
|
case 'spot3':
|
|
199
228
|
case 'spot4':
|
|
229
|
+
case 'spottest':
|
|
200
230
|
default:
|
|
201
231
|
return 'api/v3/time';
|
|
202
232
|
case 'usdm':
|
|
@@ -210,6 +240,27 @@ function getServerTimeEndpoint(urlKey) {
|
|
|
210
240
|
return 'vapi/v1/time';
|
|
211
241
|
}
|
|
212
242
|
}
|
|
243
|
+
function getTestnetBaseUrlKey(urlKey) {
|
|
244
|
+
switch (urlKey) {
|
|
245
|
+
case 'spot':
|
|
246
|
+
case 'spot1':
|
|
247
|
+
case 'spot2':
|
|
248
|
+
case 'spot3':
|
|
249
|
+
case 'spot4':
|
|
250
|
+
case 'spottest':
|
|
251
|
+
default:
|
|
252
|
+
return 'spottest';
|
|
253
|
+
case 'usdm':
|
|
254
|
+
case 'usdmtest':
|
|
255
|
+
return 'usdmtest';
|
|
256
|
+
case 'coinm':
|
|
257
|
+
case 'coinmtest':
|
|
258
|
+
return 'coinmtest';
|
|
259
|
+
case 'voptions':
|
|
260
|
+
case 'voptionstest':
|
|
261
|
+
return 'voptionstest';
|
|
262
|
+
}
|
|
263
|
+
}
|
|
213
264
|
function getRestBaseUrl(clientType, restClientOptions) {
|
|
214
265
|
if (restClientOptions.baseUrl) {
|
|
215
266
|
return restClientOptions.baseUrl;
|
|
@@ -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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"}
|
package/lib/util/webCryptoAPI.js
CHANGED
|
@@ -11,6 +11,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.getSignKeyType = getSignKeyType;
|
|
13
13
|
exports.signMessage = signMessage;
|
|
14
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
14
15
|
const typeGuards_1 = require("./typeGuards");
|
|
15
16
|
function bufferToB64(buffer) {
|
|
16
17
|
let binary = '';
|
|
@@ -23,62 +24,36 @@ function bufferToB64(buffer) {
|
|
|
23
24
|
}
|
|
24
25
|
function getSignKeyType(secret) {
|
|
25
26
|
if (secret.includes('PRIVATE KEY')) {
|
|
27
|
+
// Sometimes, not always, RSA keys include "RSA" in the header. That's a definite RSA key.
|
|
26
28
|
if (secret.includes('RSA PRIVATE KEY')) {
|
|
29
|
+
console.log('RSA web crpyto api');
|
|
27
30
|
return 'RSASSA-PKCS1-v1_5';
|
|
28
31
|
}
|
|
29
|
-
|
|
32
|
+
// RSA keys are significantly longer than Ed25519 keys. 150 accounts for length of header & footer
|
|
33
|
+
if (secret.length <= 150) {
|
|
34
|
+
// console.log('Ed25519 key, due to length', secret.length);
|
|
35
|
+
return 'Ed25519';
|
|
36
|
+
}
|
|
37
|
+
return 'RSASSA-PKCS1-v1_5';
|
|
30
38
|
}
|
|
31
39
|
return 'HMAC';
|
|
32
40
|
}
|
|
33
|
-
// async function importEd25519PrivateKey(
|
|
34
|
-
// pem: string,
|
|
35
|
-
// algorithm: SignAlgorithm,
|
|
36
|
-
// ): Promise<CryptoKey> {
|
|
37
|
-
// const base64Key = pem
|
|
38
|
-
// .replace(/-----BEGIN PRIVATE KEY-----/, '')
|
|
39
|
-
// .replace(/-----END PRIVATE KEY-----/, '')
|
|
40
|
-
// .replace(/\s+/g, ''); // Remove spaces and newlines
|
|
41
|
-
// const binaryKey = Uint8Array.from(atob(base64Key), (c) => c.charCodeAt(0));
|
|
42
|
-
// return crypto.subtle.importKey(
|
|
43
|
-
// 'pkcs8',
|
|
44
|
-
// binaryKey.buffer,
|
|
45
|
-
// { name: 'Ed25519', hash: { name: algorithm } },
|
|
46
|
-
// false,
|
|
47
|
-
// ['sign'],
|
|
48
|
-
// );
|
|
49
|
-
// }
|
|
50
|
-
// async function importRSAPrivateKey(
|
|
51
|
-
// pem: string,
|
|
52
|
-
// algorithm: SignAlgorithm,
|
|
53
|
-
// ): Promise<CryptoKey> {
|
|
54
|
-
// const base64Key = pem
|
|
55
|
-
// .replace(/-----BEGIN RSA PRIVATE KEY-----/, '')
|
|
56
|
-
// .replace(/-----END RSA PRIVATE KEY-----/, '')
|
|
57
|
-
// .replace(/\s+/g, ''); // Remove spaces and newlines
|
|
58
|
-
// const binaryKey = Uint8Array.from(atob(base64Key), (c) => c.charCodeAt(0));
|
|
59
|
-
// return crypto.subtle.importKey(
|
|
60
|
-
// 'pkcs8',
|
|
61
|
-
// binaryKey.buffer,
|
|
62
|
-
// { name: 'RSASSA-PKCS1-v1_5', hash: { name: algorithm } },
|
|
63
|
-
// false,
|
|
64
|
-
// ['sign'],
|
|
65
|
-
// );
|
|
66
|
-
// }
|
|
67
41
|
function importKey(pem, type, algorithm, encoder) {
|
|
68
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
69
43
|
switch (type) {
|
|
70
44
|
case 'Ed25519':
|
|
71
45
|
case 'RSASSA-PKCS1-v1_5': {
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
46
|
+
// const prefixRSA = /-----BEGIN RSA PRIVATE KEY-----/;
|
|
47
|
+
// const prefixEd25519 = /-----BEGIN PRIVATE KEY-----/;
|
|
48
|
+
// const suffixRSA = /-----END RSA PRIVATE KEY-----/;
|
|
49
|
+
// const suffixEd25519 = /-----END PRIVATE KEY-----/;
|
|
50
|
+
// const base64Key = pem
|
|
51
|
+
// .replace(prefixEd25519, '')
|
|
52
|
+
// .replace(prefixRSA, '')
|
|
53
|
+
// .replace(suffixEd25519, '')
|
|
54
|
+
// .replace(suffixRSA, '')
|
|
55
|
+
// .replace(/\s+/g, ''); // Remove spaces and newlines
|
|
56
|
+
const base64Key = pem.replace(/(?:-----BEGIN RSA PRIVATE KEY-----|-----BEGIN PRIVATE KEY-----|-----END RSA PRIVATE KEY-----|-----END PRIVATE KEY-----|\s+)/g, '');
|
|
82
57
|
const binaryKey = Uint8Array.from(atob(base64Key), (c) => c.charCodeAt(0));
|
|
83
58
|
return crypto.subtle.importKey('pkcs8', binaryKey.buffer, { name: type, hash: { name: algorithm } }, false, ['sign']);
|
|
84
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webCryptoAPI.js","sourceRoot":"","sources":["../../src/util/webCryptoAPI.ts"],"names":[],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"webCryptoAPI.js","sourceRoot":"","sources":["../../src/util/webCryptoAPI.ts"],"names":[],"mappings":"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"}
|