binance 2.0.20 → 2.0.21-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.
|
@@ -41,23 +41,19 @@ export default abstract class BaseRestClient {
|
|
|
41
41
|
putPrivate(endpoint: string, params?: any): GenericAPIResponse;
|
|
42
42
|
delete(endpoint: string, params?: any): GenericAPIResponse;
|
|
43
43
|
deletePrivate(endpoint: string, params?: any): GenericAPIResponse;
|
|
44
|
-
private updateApiLimitState;
|
|
45
44
|
/**
|
|
46
45
|
* @private Make a HTTP request to a specific endpoint. Private endpoints are automatically signed.
|
|
47
46
|
*/
|
|
48
|
-
_call(method: Method, endpoint: string, params?: any, isPrivate?: boolean, baseUrlOverride?: string
|
|
47
|
+
_call(method: Method, endpoint: string, params?: any, isPrivate?: boolean, baseUrlOverride?: string): GenericAPIResponse;
|
|
49
48
|
/**
|
|
50
49
|
* @private generic handler to parse request exceptions
|
|
51
50
|
*/
|
|
52
51
|
private parseException;
|
|
53
|
-
|
|
54
|
-
* @private sign request and set recv window
|
|
55
|
-
*/
|
|
56
|
-
signRequest(data: any, key?: string | undefined, secret?: string | undefined): Promise<any>;
|
|
52
|
+
private updateApiLimitState;
|
|
57
53
|
/**
|
|
58
54
|
* Trigger time sync and store promise
|
|
59
55
|
*/
|
|
60
|
-
|
|
56
|
+
syncTime(): Promise<void>;
|
|
61
57
|
/**
|
|
62
58
|
* Estimate drift based on client<->server latency
|
|
63
59
|
*/
|
|
@@ -13,8 +13,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const axios_1 = __importDefault(require("axios"));
|
|
16
|
-
const qs_1 = __importDefault(require("qs"));
|
|
17
|
-
const node_support_1 = require("./node-support");
|
|
18
16
|
const requestUtils_1 = require("./requestUtils");
|
|
19
17
|
const beautifier_1 = __importDefault(require("./beautifier"));
|
|
20
18
|
class BaseRestClient {
|
|
@@ -101,75 +99,32 @@ class BaseRestClient {
|
|
|
101
99
|
deletePrivate(endpoint, params) {
|
|
102
100
|
return this._call('DELETE', endpoint, params, true);
|
|
103
101
|
}
|
|
104
|
-
// TODO: cleanup?
|
|
105
|
-
updateApiLimitState(responseHeaders, requestedUrl) {
|
|
106
|
-
const delta = {};
|
|
107
|
-
for (const headerKey in this.apiLimitTrackers) {
|
|
108
|
-
const headerValue = responseHeaders[headerKey];
|
|
109
|
-
const value = parseInt(headerValue);
|
|
110
|
-
if (headerValue !== undefined && !isNaN(value)) {
|
|
111
|
-
// TODO: track last seen by key? insetad of all? some keys not returned by some endpoints more useful in estimating whether reset should've happened
|
|
112
|
-
this.apiLimitTrackers[headerKey] = value;
|
|
113
|
-
delta[headerKey] = {
|
|
114
|
-
updated: true,
|
|
115
|
-
valueParsed: value,
|
|
116
|
-
valueRaw: headerValue
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
delta[headerKey] = {
|
|
121
|
-
updated: false,
|
|
122
|
-
valueParsed: value,
|
|
123
|
-
valueRaw: headerValue
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// console.log('responseHeaders: ', requestedUrl);
|
|
128
|
-
// console.table(responseHeaders);
|
|
129
|
-
// console.table(delta);
|
|
130
|
-
this.apiLimitLastUpdated = new Date().getTime();
|
|
131
|
-
}
|
|
132
102
|
/**
|
|
133
103
|
* @private Make a HTTP request to a specific endpoint. Private endpoints are automatically signed.
|
|
134
104
|
*/
|
|
135
|
-
_call(method, endpoint, params, isPrivate, baseUrlOverride
|
|
105
|
+
_call(method, endpoint, params, isPrivate, baseUrlOverride) {
|
|
136
106
|
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
};
|
|
141
|
-
if (isPrivate) {
|
|
142
|
-
if (!this.key || !this.secret) {
|
|
143
|
-
throw new Error('Private endpoints require api and private keys set');
|
|
144
|
-
}
|
|
145
|
-
requestInfo = yield this.signRequest(params);
|
|
107
|
+
const timestamp = Date.now() + (this.getTimeOffset() || 0);
|
|
108
|
+
if (isPrivate && (!this.key || !this.secret)) {
|
|
109
|
+
throw new Error('Private endpoints require api and private keys to be set');
|
|
146
110
|
}
|
|
111
|
+
// Handles serialisation of params into query string (url?key1=value1&key2=value2), handles encoding of values, adds timestamp and signature to request.
|
|
112
|
+
const { serialisedParams, signature, requestBody } = yield requestUtils_1.getRequestSignature(params, this.key, this.secret, this.options.recvWindow, timestamp, this.options.strictParamValidation);
|
|
147
113
|
const baseUrl = baseUrlOverride || this.baseUrl;
|
|
148
114
|
const options = Object.assign(Object.assign({}, this.globalRequestOptions), { url: [baseUrl, endpoint].join('/'), method: method, json: true });
|
|
149
|
-
if (
|
|
150
|
-
options.
|
|
115
|
+
if (isPrivate) {
|
|
116
|
+
options.url += '?' + [serialisedParams, 'signature=' + signature].join('&');
|
|
117
|
+
}
|
|
118
|
+
else if (method === 'GET' || method === 'DELETE') {
|
|
119
|
+
options.params = params;
|
|
151
120
|
}
|
|
152
121
|
else {
|
|
153
|
-
|
|
154
|
-
const signed = yield this.signRequest(params);
|
|
155
|
-
console.log('signed details: ', signed);
|
|
156
|
-
options.url += '?' + [encodeURIComponent(signed.serialisedParams), 'timestamp=' + signed.timestamp, 'recvWindow=' + signed.recvWindow, 'signature=' + signed.signature].join('&');
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
options.data = qs_1.default.stringify(requestInfo.params);
|
|
160
|
-
}
|
|
161
|
-
// Requests should be x-www-form-urlencoded
|
|
162
|
-
// TODO: optimise in the browser to use URLSearchParams
|
|
163
|
-
// options.data = qs.stringify(encodeURIComponent(requestInfo.serialisedParams));
|
|
164
|
-
// options.data = qs.stringify(requestInfo.params);
|
|
165
|
-
// options.data = params;
|
|
166
|
-
// options.url += '?' + qs.stringify(requestInfo.serialisedParams);
|
|
167
|
-
// options.url += '?' + qs.stringify(encodeURIComponent(JSON.stringify(requestInfo.serialisedParams)));
|
|
122
|
+
options.data = requestUtils_1.serialiseParams(requestBody, this.options.strictParamValidation, true);
|
|
168
123
|
}
|
|
169
|
-
console.log('sending request: ', JSON.stringify({
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
}, null, 2));
|
|
124
|
+
// console.log('sending request: ', JSON.stringify({
|
|
125
|
+
// reqOptions: options,
|
|
126
|
+
// reqParams: params,
|
|
127
|
+
// }, null, 2));
|
|
173
128
|
return axios_1.default(options).then(response => {
|
|
174
129
|
this.updateApiLimitState(response.headers, options.url);
|
|
175
130
|
if (response.status == 200) {
|
|
@@ -225,30 +180,33 @@ class BaseRestClient {
|
|
|
225
180
|
requestOptions: Object.assign(Object.assign({}, this.options), { api_key: undefined, api_secret: undefined }),
|
|
226
181
|
};
|
|
227
182
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
183
|
+
// TODO: cleanup?
|
|
184
|
+
updateApiLimitState(responseHeaders, requestedUrl) {
|
|
185
|
+
const delta = {};
|
|
186
|
+
for (const headerKey in this.apiLimitTrackers) {
|
|
187
|
+
const headerValue = responseHeaders[headerKey];
|
|
188
|
+
const value = parseInt(headerValue);
|
|
189
|
+
if (headerValue !== undefined && !isNaN(value)) {
|
|
190
|
+
// TODO: track last seen by key? insetad of all? some keys not returned by some endpoints more useful in estimating whether reset should've happened
|
|
191
|
+
this.apiLimitTrackers[headerKey] = value;
|
|
192
|
+
delta[headerKey] = {
|
|
193
|
+
updated: true,
|
|
194
|
+
valueParsed: value,
|
|
195
|
+
valueRaw: headerValue
|
|
196
|
+
};
|
|
237
197
|
}
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
params,
|
|
244
|
-
serialisedParams,
|
|
245
|
-
timestamp: params.timestamp,
|
|
246
|
-
signature: params.signature,
|
|
247
|
-
recvWindow: params.recvWindow || 5000,
|
|
198
|
+
else {
|
|
199
|
+
delta[headerKey] = {
|
|
200
|
+
updated: false,
|
|
201
|
+
valueParsed: value,
|
|
202
|
+
valueRaw: headerValue
|
|
248
203
|
};
|
|
249
204
|
}
|
|
250
|
-
|
|
251
|
-
|
|
205
|
+
}
|
|
206
|
+
// console.log('responseHeaders: ', requestedUrl);
|
|
207
|
+
// console.table(responseHeaders);
|
|
208
|
+
// console.table(delta);
|
|
209
|
+
this.apiLimitLastUpdated = new Date().getTime();
|
|
252
210
|
}
|
|
253
211
|
/**
|
|
254
212
|
* Trigger time sync and store promise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../src/util/BaseRestClient.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,kDAAsE;
|
|
1
|
+
{"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../src/util/BaseRestClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,15 @@ export interface RestClientOptions {
|
|
|
20
20
|
export declare type GenericAPIResponse<T = any> = Promise<T>;
|
|
21
21
|
export declare function getOrderIdPrefix(network: BinanceBaseUrlKey): string;
|
|
22
22
|
export declare function generateNewOrderId(network: BinanceBaseUrlKey): string;
|
|
23
|
-
export declare function serialiseParams(params?: object, strict_validation?: boolean): string;
|
|
23
|
+
export declare function serialiseParams(params?: object, strict_validation?: boolean, encodeValues?: boolean): string;
|
|
24
|
+
export interface SignedRequestState {
|
|
25
|
+
requestBody: any;
|
|
26
|
+
serialisedParams: string | undefined;
|
|
27
|
+
timestamp?: number;
|
|
28
|
+
signature?: string;
|
|
29
|
+
recvWindow?: number;
|
|
30
|
+
}
|
|
31
|
+
export declare function getRequestSignature(data: any, key?: string, secret?: string, recvWindow?: number, timestamp?: number, strictParamValidation?: boolean): Promise<SignedRequestState>;
|
|
24
32
|
export declare function getServerTimeEndpoint(urlKey: BinanceBaseUrlKey): string;
|
|
25
33
|
export declare function getRestBaseUrl(clientType: BinanceBaseUrlKey, restInverseOptions: RestClientOptions): string;
|
|
26
34
|
export declare function isPublicEndpoint(endpoint: string): boolean;
|
package/lib/util/requestUtils.js
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.appendEventMarket = exports.getWsKeyWithContext = exports.getContextFromWsKey = exports.appendEventIfMissing = exports.logInvalidOrderId = exports.isWsPong = exports.isPublicEndpoint = exports.getRestBaseUrl = exports.getServerTimeEndpoint = exports.serialiseParams = exports.generateNewOrderId = exports.getOrderIdPrefix = void 0;
|
|
12
|
+
exports.appendEventMarket = exports.getWsKeyWithContext = exports.getContextFromWsKey = exports.appendEventIfMissing = exports.logInvalidOrderId = exports.isWsPong = exports.isPublicEndpoint = exports.getRestBaseUrl = exports.getServerTimeEndpoint = exports.getRequestSignature = exports.serialiseParams = exports.generateNewOrderId = exports.getOrderIdPrefix = void 0;
|
|
13
|
+
const node_support_1 = require("./node-support");
|
|
4
14
|
function getOrderIdPrefix(network) {
|
|
5
15
|
switch (network) {
|
|
6
16
|
case 'spot':
|
|
@@ -31,19 +41,42 @@ function generateNewOrderId(network) {
|
|
|
31
41
|
return randomString;
|
|
32
42
|
}
|
|
33
43
|
exports.generateNewOrderId = generateNewOrderId;
|
|
34
|
-
function serialiseParams(params = {}, strict_validation = false) {
|
|
44
|
+
function serialiseParams(params = {}, strict_validation = false, encodeValues = false) {
|
|
35
45
|
return Object.keys(params)
|
|
36
46
|
.map(key => {
|
|
37
47
|
const value = params[key];
|
|
38
48
|
if (strict_validation === true && typeof value === 'undefined') {
|
|
39
49
|
throw new Error('Failed to sign API request due to undefined parameter');
|
|
40
50
|
}
|
|
41
|
-
|
|
51
|
+
const encodedValue = encodeValues ? encodeURIComponent(value) : value;
|
|
52
|
+
return `${key}=${encodedValue}`;
|
|
42
53
|
})
|
|
43
54
|
.join('&');
|
|
44
55
|
}
|
|
45
56
|
exports.serialiseParams = serialiseParams;
|
|
46
57
|
;
|
|
58
|
+
function getRequestSignature(data, key, secret, recvWindow, timestamp, strictParamValidation) {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
// Optional, set to 5000 by default. Increase if timestamp/recvWindow errors are seen.
|
|
62
|
+
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;
|
|
63
|
+
if (key && secret) {
|
|
64
|
+
const requestParams = Object.assign(Object.assign({}, data), { timestamp, recvWindow: requestRecvWindow });
|
|
65
|
+
const serialisedParams = serialiseParams(requestParams, strictParamValidation, true);
|
|
66
|
+
const signature = yield node_support_1.signMessage(serialisedParams, secret);
|
|
67
|
+
requestParams.signature = signature;
|
|
68
|
+
return {
|
|
69
|
+
requestBody: Object.assign({}, data),
|
|
70
|
+
serialisedParams,
|
|
71
|
+
timestamp: timestamp,
|
|
72
|
+
signature: signature,
|
|
73
|
+
recvWindow: requestRecvWindow,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return { requestBody: data, serialisedParams: undefined };
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
exports.getRequestSignature = getRequestSignature;
|
|
47
80
|
const BINANCE_BASE_URLS = {
|
|
48
81
|
// spot/margin/savings/mining
|
|
49
82
|
spot: 'https://api.binance.com',
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "binance",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.21-beta.1",
|
|
4
4
|
"description": "Node.js connector for Binance's REST APIs and WebSockets, with TypeScript & integration tests.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"axios": "^0.21.0",
|
|
35
35
|
"isomorphic-ws": "^4.0.1",
|
|
36
|
-
"qs": "^6.10.1",
|
|
37
36
|
"ws": "^7.4.0"
|
|
38
37
|
},
|
|
39
38
|
"devDependencies": {
|