@binance/common 1.0.0 → 1.0.2
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/dist/index.d.mts +9 -28
- package/dist/index.d.ts +9 -28
- package/dist/index.js +69 -137
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +66 -115
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -2
package/dist/index.js
CHANGED
|
@@ -28,21 +28,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
|
|
30
30
|
// src/index.ts
|
|
31
|
-
var
|
|
32
|
-
__export(
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
33
|
ALGO_REST_API_PROD_URL: () => ALGO_REST_API_PROD_URL,
|
|
34
|
-
ALGO_REST_API_TESTNET_URL: () => ALGO_REST_API_TESTNET_URL,
|
|
35
34
|
AUTO_INVEST_REST_API_PROD_URL: () => AUTO_INVEST_REST_API_PROD_URL,
|
|
36
|
-
AUTO_INVEST_REST_API_TESTNET_URL: () => AUTO_INVEST_REST_API_TESTNET_URL,
|
|
37
35
|
BadRequestError: () => BadRequestError,
|
|
38
36
|
C2C_REST_API_PROD_URL: () => C2C_REST_API_PROD_URL,
|
|
39
|
-
C2C_REST_API_TESTNET_URL: () => C2C_REST_API_TESTNET_URL,
|
|
40
37
|
CONVERT_REST_API_PROD_URL: () => CONVERT_REST_API_PROD_URL,
|
|
41
|
-
CONVERT_REST_API_TESTNET_URL: () => CONVERT_REST_API_TESTNET_URL,
|
|
42
38
|
COPY_TRADING_REST_API_PROD_URL: () => COPY_TRADING_REST_API_PROD_URL,
|
|
43
|
-
COPY_TRADING_REST_API_TESTNET_URL: () => COPY_TRADING_REST_API_TESTNET_URL,
|
|
44
39
|
CRYPTO_LOAN_REST_API_PROD_URL: () => CRYPTO_LOAN_REST_API_PROD_URL,
|
|
45
|
-
CRYPTO_LOAN_REST_API_TESTNET_URL: () => CRYPTO_LOAN_REST_API_TESTNET_URL,
|
|
46
40
|
ConfigurationRestAPI: () => ConfigurationRestAPI,
|
|
47
41
|
ConfigurationWebsocketAPI: () => ConfigurationWebsocketAPI,
|
|
48
42
|
ConfigurationWebsocketStreams: () => ConfigurationWebsocketStreams,
|
|
@@ -66,30 +60,21 @@ __export(src_exports, {
|
|
|
66
60
|
DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_PROD_URL: () => DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_PROD_URL,
|
|
67
61
|
DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_TESTNET_URL: () => DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_TESTNET_URL,
|
|
68
62
|
DUAL_INVESTMENT_REST_API_PROD_URL: () => DUAL_INVESTMENT_REST_API_PROD_URL,
|
|
69
|
-
DUAL_INVESTMENT_REST_API_TESTNET_URL: () => DUAL_INVESTMENT_REST_API_TESTNET_URL,
|
|
70
63
|
FIAT_REST_API_PROD_URL: () => FIAT_REST_API_PROD_URL,
|
|
71
|
-
FIAT_REST_API_TESTNET_URL: () => FIAT_REST_API_TESTNET_URL,
|
|
72
64
|
ForbiddenError: () => ForbiddenError,
|
|
73
65
|
GIFT_CARD_REST_API_PROD_URL: () => GIFT_CARD_REST_API_PROD_URL,
|
|
74
|
-
GIFT_CARD_REST_API_TESTNET_URL: () => GIFT_CARD_REST_API_TESTNET_URL,
|
|
75
66
|
LogLevel: () => LogLevel,
|
|
76
67
|
Logger: () => Logger,
|
|
77
68
|
MARGIN_TRADING_REST_API_PROD_URL: () => MARGIN_TRADING_REST_API_PROD_URL,
|
|
78
|
-
MARGIN_TRADING_REST_API_TESTNET_URL: () => MARGIN_TRADING_REST_API_TESTNET_URL,
|
|
79
69
|
MINING_REST_API_PROD_URL: () => MINING_REST_API_PROD_URL,
|
|
80
|
-
MINING_REST_API_TESTNET_URL: () => MINING_REST_API_TESTNET_URL,
|
|
81
70
|
NFT_REST_API_PROD_URL: () => NFT_REST_API_PROD_URL,
|
|
82
|
-
NFT_REST_API_TESTNET_URL: () => NFT_REST_API_TESTNET_URL,
|
|
83
71
|
NetworkError: () => NetworkError,
|
|
84
72
|
NotFoundError: () => NotFoundError,
|
|
85
73
|
PAY_REST_API_PROD_URL: () => PAY_REST_API_PROD_URL,
|
|
86
|
-
PAY_REST_API_TESTNET_URL: () => PAY_REST_API_TESTNET_URL,
|
|
87
74
|
REBATE_REST_API_PROD_URL: () => REBATE_REST_API_PROD_URL,
|
|
88
|
-
REBATE_REST_API_TESTNET_URL: () => REBATE_REST_API_TESTNET_URL,
|
|
89
75
|
RateLimitBanError: () => RateLimitBanError,
|
|
90
76
|
RequiredError: () => RequiredError,
|
|
91
77
|
SIMPLE_EARN_REST_API_PROD_URL: () => SIMPLE_EARN_REST_API_PROD_URL,
|
|
92
|
-
SIMPLE_EARN_REST_API_TESTNET_URL: () => SIMPLE_EARN_REST_API_TESTNET_URL,
|
|
93
78
|
SPOT_REST_API_MARKET_URL: () => SPOT_REST_API_MARKET_URL,
|
|
94
79
|
SPOT_REST_API_PROD_URL: () => SPOT_REST_API_PROD_URL,
|
|
95
80
|
SPOT_REST_API_TESTNET_URL: () => SPOT_REST_API_TESTNET_URL,
|
|
@@ -99,17 +84,13 @@ __export(src_exports, {
|
|
|
99
84
|
SPOT_WS_STREAMS_PROD_URL: () => SPOT_WS_STREAMS_PROD_URL,
|
|
100
85
|
SPOT_WS_STREAMS_TESTNET_URL: () => SPOT_WS_STREAMS_TESTNET_URL,
|
|
101
86
|
STAKING_REST_API_PROD_URL: () => STAKING_REST_API_PROD_URL,
|
|
102
|
-
STAKING_REST_API_TESTNET_URL: () => STAKING_REST_API_TESTNET_URL,
|
|
103
87
|
SUB_ACCOUNT_REST_API_PROD_URL: () => SUB_ACCOUNT_REST_API_PROD_URL,
|
|
104
|
-
SUB_ACCOUNT_REST_API_TESTNET_URL: () => SUB_ACCOUNT_REST_API_TESTNET_URL,
|
|
105
88
|
ServerError: () => ServerError,
|
|
106
89
|
TimeUnit: () => TimeUnit,
|
|
107
90
|
TooManyRequestsError: () => TooManyRequestsError,
|
|
108
91
|
UnauthorizedError: () => UnauthorizedError,
|
|
109
92
|
VIP_LOAN_REST_API_PROD_URL: () => VIP_LOAN_REST_API_PROD_URL,
|
|
110
|
-
VIP_LOAN_REST_API_TESTNET_URL: () => VIP_LOAN_REST_API_TESTNET_URL,
|
|
111
93
|
WALLET_REST_API_PROD_URL: () => WALLET_REST_API_PROD_URL,
|
|
112
|
-
WALLET_REST_API_TESTNET_URL: () => WALLET_REST_API_TESTNET_URL,
|
|
113
94
|
WebsocketAPIBase: () => WebsocketAPIBase,
|
|
114
95
|
WebsocketCommon: () => WebsocketCommon,
|
|
115
96
|
WebsocketEventEmitter: () => WebsocketEventEmitter,
|
|
@@ -132,7 +113,7 @@ __export(src_exports, {
|
|
|
132
113
|
toPathString: () => toPathString,
|
|
133
114
|
validateTimeUnit: () => validateTimeUnit
|
|
134
115
|
});
|
|
135
|
-
module.exports = __toCommonJS(
|
|
116
|
+
module.exports = __toCommonJS(index_exports);
|
|
136
117
|
|
|
137
118
|
// src/configuration.ts
|
|
138
119
|
var ConfigurationRestAPI = class {
|
|
@@ -197,26 +178,12 @@ var TimeUnit = {
|
|
|
197
178
|
MICROSECOND: "MICROSECOND",
|
|
198
179
|
microsecond: "microsecond"
|
|
199
180
|
};
|
|
200
|
-
var SPOT_REST_API_PROD_URL = "https://api.binance.com";
|
|
201
|
-
var SPOT_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
202
|
-
var SPOT_WS_API_PROD_URL = "wss://ws-api.binance.com:443/ws-api/v3";
|
|
203
|
-
var SPOT_WS_API_TESTNET_URL = "wss://ws-api.testnet.binance.vision/ws-api/v3";
|
|
204
|
-
var SPOT_WS_STREAMS_PROD_URL = "wss://stream.binance.com:9443";
|
|
205
|
-
var SPOT_WS_STREAMS_TESTNET_URL = "wss://stream.testnet.binance.vision";
|
|
206
|
-
var SPOT_REST_API_MARKET_URL = "https://data-api.binance.vision";
|
|
207
|
-
var SPOT_WS_STREAMS_MARKET_URL = "wss://data-stream.binance.vision";
|
|
208
181
|
var ALGO_REST_API_PROD_URL = "https://api.binance.com";
|
|
209
|
-
var ALGO_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
210
182
|
var AUTO_INVEST_REST_API_PROD_URL = "https://api.binance.com";
|
|
211
|
-
var AUTO_INVEST_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
212
183
|
var C2C_REST_API_PROD_URL = "https://api.binance.com";
|
|
213
|
-
var C2C_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
214
184
|
var CONVERT_REST_API_PROD_URL = "https://api.binance.com";
|
|
215
|
-
var CONVERT_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
216
185
|
var COPY_TRADING_REST_API_PROD_URL = "https://api.binance.com";
|
|
217
|
-
var COPY_TRADING_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
218
186
|
var CRYPTO_LOAN_REST_API_PROD_URL = "https://api.binance.com";
|
|
219
|
-
var CRYPTO_LOAN_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
220
187
|
var DERIVATIVES_TRADING_COIN_FUTURES_REST_API_PROD_URL = "https://dapi.binance.com";
|
|
221
188
|
var DERIVATIVES_TRADING_COIN_FUTURES_REST_API_TESTNET_URL = "https://testnet.binancefuture.com";
|
|
222
189
|
var DERIVATIVES_TRADING_COIN_FUTURES_WS_API_PROD_URL = "wss://ws-dapi.binance.com/ws-dapi/v1";
|
|
@@ -236,31 +203,26 @@ var DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_TESTNET_URL = "https://testnet
|
|
|
236
203
|
var DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_REST_API_PROD_URL = "https://fapi.binance.com";
|
|
237
204
|
var DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_REST_API_TESTNET_URL = "https://testnet.binancefuture.com";
|
|
238
205
|
var DUAL_INVESTMENT_REST_API_PROD_URL = "https://api.binance.com";
|
|
239
|
-
var DUAL_INVESTMENT_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
240
206
|
var FIAT_REST_API_PROD_URL = "https://api.binance.com";
|
|
241
|
-
var FIAT_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
242
207
|
var GIFT_CARD_REST_API_PROD_URL = "https://api.binance.com";
|
|
243
|
-
var GIFT_CARD_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
244
208
|
var MARGIN_TRADING_REST_API_PROD_URL = "https://api.binance.com";
|
|
245
|
-
var MARGIN_TRADING_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
246
209
|
var MINING_REST_API_PROD_URL = "https://api.binance.com";
|
|
247
|
-
var MINING_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
248
210
|
var NFT_REST_API_PROD_URL = "https://api.binance.com";
|
|
249
|
-
var NFT_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
250
211
|
var PAY_REST_API_PROD_URL = "https://api.binance.com";
|
|
251
|
-
var PAY_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
252
212
|
var REBATE_REST_API_PROD_URL = "https://api.binance.com";
|
|
253
|
-
var REBATE_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
254
213
|
var SIMPLE_EARN_REST_API_PROD_URL = "https://api.binance.com";
|
|
255
|
-
var
|
|
214
|
+
var SPOT_REST_API_PROD_URL = "https://api.binance.com";
|
|
215
|
+
var SPOT_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
216
|
+
var SPOT_WS_API_PROD_URL = "wss://ws-api.binance.com:443/ws-api/v3";
|
|
217
|
+
var SPOT_WS_API_TESTNET_URL = "wss://ws-api.testnet.binance.vision/ws-api/v3";
|
|
218
|
+
var SPOT_WS_STREAMS_PROD_URL = "wss://stream.binance.com:9443";
|
|
219
|
+
var SPOT_WS_STREAMS_TESTNET_URL = "wss://stream.testnet.binance.vision";
|
|
220
|
+
var SPOT_REST_API_MARKET_URL = "https://data-api.binance.vision";
|
|
221
|
+
var SPOT_WS_STREAMS_MARKET_URL = "wss://data-stream.binance.vision";
|
|
256
222
|
var STAKING_REST_API_PROD_URL = "https://api.binance.com";
|
|
257
|
-
var STAKING_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
258
223
|
var SUB_ACCOUNT_REST_API_PROD_URL = "https://api.binance.com";
|
|
259
|
-
var SUB_ACCOUNT_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
260
224
|
var VIP_LOAN_REST_API_PROD_URL = "https://api.binance.com";
|
|
261
|
-
var VIP_LOAN_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
262
225
|
var WALLET_REST_API_PROD_URL = "https://api.binance.com";
|
|
263
|
-
var WALLET_REST_API_TESTNET_URL = "https://testnet.binance.vision";
|
|
264
226
|
|
|
265
227
|
// src/errors.ts
|
|
266
228
|
var ConnectorClientError = class _ConnectorClientError extends Error {
|
|
@@ -406,8 +368,7 @@ var import_fs = __toESM(require("fs"));
|
|
|
406
368
|
var import_https = __toESM(require("https"));
|
|
407
369
|
var import_axios = __toESM(require("axios"));
|
|
408
370
|
function buildQueryString(params) {
|
|
409
|
-
if (!params)
|
|
410
|
-
return "";
|
|
371
|
+
if (!params) return "";
|
|
411
372
|
return Object.entries(params).map(stringifyKeyValuePair).join("&");
|
|
412
373
|
}
|
|
413
374
|
function stringifyKeyValuePair([key, value]) {
|
|
@@ -475,8 +436,7 @@ var assertParamExists = function(functionName, paramName, paramValue) {
|
|
|
475
436
|
}
|
|
476
437
|
};
|
|
477
438
|
function setFlattenedQueryParams(urlSearchParams, parameter, key = "") {
|
|
478
|
-
if (parameter == null)
|
|
479
|
-
return;
|
|
439
|
+
if (parameter == null) return;
|
|
480
440
|
if (typeof parameter === "object") {
|
|
481
441
|
if (Array.isArray(parameter)) {
|
|
482
442
|
parameter.forEach((item) => setFlattenedQueryParams(urlSearchParams, item, key));
|
|
@@ -532,6 +492,7 @@ var httpRequestFunction = async function(axiosArgs, configuration) {
|
|
|
532
492
|
const retries = configuration?.retries ?? 0;
|
|
533
493
|
const backoff = configuration?.backoff ?? 0;
|
|
534
494
|
let attempt = 0;
|
|
495
|
+
let lastError;
|
|
535
496
|
while (attempt <= retries) {
|
|
536
497
|
try {
|
|
537
498
|
const response = await import_axios.default.request({
|
|
@@ -547,50 +508,59 @@ var httpRequestFunction = async function(axiosArgs, configuration) {
|
|
|
547
508
|
};
|
|
548
509
|
} catch (error) {
|
|
549
510
|
attempt++;
|
|
511
|
+
const axiosError = error;
|
|
550
512
|
if (shouldRetryRequest(
|
|
551
|
-
|
|
513
|
+
axiosError,
|
|
552
514
|
axiosRequestArgs?.method?.toUpperCase(),
|
|
553
515
|
retries - attempt
|
|
554
516
|
)) {
|
|
555
517
|
await delay(backoff * attempt);
|
|
556
518
|
} else {
|
|
557
|
-
if (
|
|
558
|
-
const status =
|
|
559
|
-
const
|
|
560
|
-
|
|
561
|
-
)
|
|
519
|
+
if (axiosError.response && axiosError.response.status) {
|
|
520
|
+
const status = axiosError.response?.status;
|
|
521
|
+
const responseData = axiosError.response.data;
|
|
522
|
+
let data = {};
|
|
523
|
+
if (responseData && responseData !== null) {
|
|
524
|
+
if (typeof responseData === "string" && responseData !== "")
|
|
525
|
+
data = JSON.parse(responseData);
|
|
526
|
+
else if (typeof responseData === "object")
|
|
527
|
+
data = responseData;
|
|
528
|
+
}
|
|
529
|
+
const errorMsg = data.msg;
|
|
562
530
|
switch (status) {
|
|
563
531
|
case 400:
|
|
564
|
-
throw new BadRequestError(
|
|
532
|
+
throw new BadRequestError(errorMsg);
|
|
565
533
|
case 401:
|
|
566
|
-
throw new UnauthorizedError(
|
|
534
|
+
throw new UnauthorizedError(errorMsg);
|
|
567
535
|
case 403:
|
|
568
|
-
throw new ForbiddenError(
|
|
536
|
+
throw new ForbiddenError(errorMsg);
|
|
569
537
|
case 404:
|
|
570
|
-
throw new NotFoundError(
|
|
538
|
+
throw new NotFoundError(errorMsg);
|
|
571
539
|
case 418:
|
|
572
|
-
throw new RateLimitBanError(
|
|
540
|
+
throw new RateLimitBanError(errorMsg);
|
|
573
541
|
case 429:
|
|
574
|
-
throw new TooManyRequestsError(
|
|
542
|
+
throw new TooManyRequestsError(errorMsg);
|
|
575
543
|
default:
|
|
576
544
|
if (status >= 500 && status < 600)
|
|
577
545
|
throw new ServerError(`Server error: ${status}`, status);
|
|
578
|
-
throw new ConnectorClientError(
|
|
546
|
+
throw new ConnectorClientError(errorMsg);
|
|
579
547
|
}
|
|
580
548
|
} else {
|
|
581
|
-
|
|
549
|
+
if (retries > 0 && attempt >= retries)
|
|
550
|
+
lastError = new Error(`Request failed after ${retries} retries`);
|
|
551
|
+
else lastError = new NetworkError("Network error or request timeout.");
|
|
552
|
+
break;
|
|
582
553
|
}
|
|
583
554
|
}
|
|
584
555
|
}
|
|
585
556
|
}
|
|
586
|
-
throw
|
|
557
|
+
throw lastError;
|
|
587
558
|
};
|
|
588
559
|
var parseRateLimitHeaders = function(headers) {
|
|
589
560
|
const rateLimits = [];
|
|
590
561
|
const parseIntervalDetails = (key) => {
|
|
591
562
|
const match = key.match(/x-mbx-used-weight-(\d+)([smhd])|x-mbx-order-count-(\d+)([smhd])/i);
|
|
592
|
-
if (!match)
|
|
593
|
-
return null;
|
|
563
|
+
if (!match) return null;
|
|
594
564
|
const intervalNum = parseInt(match[1] || match[3], 10);
|
|
595
565
|
const intervalLetter = (match[2] || match[4])?.toUpperCase();
|
|
596
566
|
let interval;
|
|
@@ -614,8 +584,7 @@ var parseRateLimitHeaders = function(headers) {
|
|
|
614
584
|
};
|
|
615
585
|
for (const [key, value] of Object.entries(headers)) {
|
|
616
586
|
const normalizedKey = key.toLowerCase();
|
|
617
|
-
if (value === void 0)
|
|
618
|
-
continue;
|
|
587
|
+
if (value === void 0) continue;
|
|
619
588
|
if (normalizedKey.startsWith("x-mbx-used-weight-")) {
|
|
620
589
|
const details = parseIntervalDetails(normalizedKey);
|
|
621
590
|
if (details) {
|
|
@@ -678,8 +647,7 @@ var sendRequest = function(configuration, endpoint, method, params = {}, timeUni
|
|
|
678
647
|
);
|
|
679
648
|
};
|
|
680
649
|
function removeEmptyValue(obj) {
|
|
681
|
-
if (!(obj instanceof Object))
|
|
682
|
-
return {};
|
|
650
|
+
if (!(obj instanceof Object)) return {};
|
|
683
651
|
return Object.fromEntries(
|
|
684
652
|
Object.entries(obj).filter(
|
|
685
653
|
([, value]) => value !== null && value !== void 0 && value !== ""
|
|
@@ -695,12 +663,13 @@ function sortObject(obj) {
|
|
|
695
663
|
function replaceWebsocketStreamsPlaceholders(str, variables) {
|
|
696
664
|
const normalizedVariables = Object.keys(variables).reduce(
|
|
697
665
|
(acc, key) => {
|
|
698
|
-
|
|
666
|
+
const normalizedKey = key.toLowerCase().replace(/[-_]/g, "");
|
|
667
|
+
acc[normalizedKey] = variables[key];
|
|
699
668
|
return acc;
|
|
700
669
|
},
|
|
701
670
|
{}
|
|
702
671
|
);
|
|
703
|
-
return str.replace(
|
|
672
|
+
return str.replace(/(@)?<([^>]+)>/g, (match, precedingAt, fieldName) => {
|
|
704
673
|
const normalizedFieldName = fieldName.toLowerCase().replace(/[-_]/g, "");
|
|
705
674
|
if (Object.prototype.hasOwnProperty.call(normalizedVariables, normalizedFieldName) && normalizedVariables[normalizedFieldName] != null) {
|
|
706
675
|
const value = normalizedVariables[normalizedFieldName];
|
|
@@ -711,7 +680,7 @@ function replaceWebsocketStreamsPlaceholders(str, variables) {
|
|
|
711
680
|
case "updatespeed":
|
|
712
681
|
return `@${value}`;
|
|
713
682
|
default:
|
|
714
|
-
return value;
|
|
683
|
+
return (precedingAt || "") + value;
|
|
715
684
|
}
|
|
716
685
|
}
|
|
717
686
|
return "";
|
|
@@ -757,7 +726,7 @@ var WebsocketEventEmitter = class {
|
|
|
757
726
|
this.eventEmitter.emit(event, ...args);
|
|
758
727
|
}
|
|
759
728
|
};
|
|
760
|
-
var
|
|
729
|
+
var WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
761
730
|
constructor(configuration, connectionPool = []) {
|
|
762
731
|
super();
|
|
763
732
|
this.configuration = configuration;
|
|
@@ -769,8 +738,10 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
769
738
|
this.connectionPool = connectionPool;
|
|
770
739
|
this.mode = this.configuration?.mode ?? "single";
|
|
771
740
|
this.poolSize = this.mode === "pool" && this.configuration?.poolSize ? this.configuration.poolSize : 1;
|
|
772
|
-
if (!connectionPool || connectionPool.length === 0)
|
|
773
|
-
|
|
741
|
+
if (!connectionPool || connectionPool.length === 0) this.initializePool(this.poolSize);
|
|
742
|
+
}
|
|
743
|
+
static {
|
|
744
|
+
this.MAX_CONNECTION_DURATION = 23 * 60 * 60 * 1e3;
|
|
774
745
|
}
|
|
775
746
|
/**
|
|
776
747
|
* Initializes the WebSocket connection pool by creating a specified number of connection objects
|
|
@@ -802,8 +773,7 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
802
773
|
* @returns {WebsocketConnection} The selected WebSocket connection.
|
|
803
774
|
*/
|
|
804
775
|
getConnection(allowNonEstablishedWebsockets = false) {
|
|
805
|
-
if (this.mode === "single")
|
|
806
|
-
return this.connectionPool[0];
|
|
776
|
+
if (this.mode === "single") return this.connectionPool[0];
|
|
807
777
|
const availableConnections = this.connectionPool.filter(
|
|
808
778
|
(connection) => this.isConnectionReady(connection, allowNonEstablishedWebsockets)
|
|
809
779
|
);
|
|
@@ -848,10 +818,8 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
848
818
|
const timers = this.connectionTimers.get(connection);
|
|
849
819
|
if (timers) {
|
|
850
820
|
timers.forEach(({ timer, type }) => {
|
|
851
|
-
if (type === "timeout")
|
|
852
|
-
|
|
853
|
-
else if (type === "interval")
|
|
854
|
-
clearInterval(timer);
|
|
821
|
+
if (type === "timeout") clearTimeout(timer);
|
|
822
|
+
else if (type === "interval") clearInterval(timer);
|
|
855
823
|
});
|
|
856
824
|
this.connectionTimers.delete(connection);
|
|
857
825
|
}
|
|
@@ -867,8 +835,7 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
867
835
|
* @returns A Promise that resolves when the queue has been fully processed.
|
|
868
836
|
*/
|
|
869
837
|
async processQueue(throttleRate = 1e3) {
|
|
870
|
-
if (this.queueProcessing)
|
|
871
|
-
return;
|
|
838
|
+
if (this.queueProcessing) return;
|
|
872
839
|
this.queueProcessing = true;
|
|
873
840
|
while (this.connectionQueue.length > 0) {
|
|
874
841
|
const { connection, url, isRenewal } = this.connectionQueue.shift();
|
|
@@ -901,8 +868,7 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
901
868
|
* @returns Promise that resolves when the connection is closed.
|
|
902
869
|
*/
|
|
903
870
|
async closeConnectionGracefully(WebsocketConnectionToClose, connection) {
|
|
904
|
-
if (!WebsocketConnectionToClose || !connection)
|
|
905
|
-
return;
|
|
871
|
+
if (!WebsocketConnectionToClose || !connection) return;
|
|
906
872
|
this.logger.debug("Waiting for pending requests to complete before disconnecting.");
|
|
907
873
|
const closePromise = new Promise((resolve) => {
|
|
908
874
|
this.scheduleTimer(
|
|
@@ -1035,10 +1001,8 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
1035
1001
|
this.logger.info(
|
|
1036
1002
|
`Establishing Websocket connection with id ${targetConnection.id} to: ${url}`
|
|
1037
1003
|
);
|
|
1038
|
-
if (isRenewal)
|
|
1039
|
-
|
|
1040
|
-
else
|
|
1041
|
-
targetConnection.ws = ws;
|
|
1004
|
+
if (isRenewal) targetConnection.renewalPending = true;
|
|
1005
|
+
else targetConnection.ws = ws;
|
|
1042
1006
|
this.scheduleTimer(
|
|
1043
1007
|
ws,
|
|
1044
1008
|
() => {
|
|
@@ -1053,8 +1017,7 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
1053
1017
|
);
|
|
1054
1018
|
ws.on("open", () => {
|
|
1055
1019
|
const oldWSConnection = targetConnection.ws;
|
|
1056
|
-
if (targetConnection.renewalPending)
|
|
1057
|
-
targetConnection.ws = ws;
|
|
1020
|
+
if (targetConnection.renewalPending) targetConnection.ws = ws;
|
|
1058
1021
|
this.onOpen(url, targetConnection, oldWSConnection);
|
|
1059
1022
|
});
|
|
1060
1023
|
ws.on("message", (data) => {
|
|
@@ -1118,8 +1081,7 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
1118
1081
|
* @throws Error if the WebSocket client is not set.
|
|
1119
1082
|
*/
|
|
1120
1083
|
async disconnect() {
|
|
1121
|
-
if (!this.isConnected())
|
|
1122
|
-
this.logger.warn("No connection to close.");
|
|
1084
|
+
if (!this.isConnected()) this.logger.warn("No connection to close.");
|
|
1123
1085
|
else {
|
|
1124
1086
|
this.connectionPool.forEach((connection) => {
|
|
1125
1087
|
connection.closeInitiated = true;
|
|
@@ -1169,25 +1131,20 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
1169
1131
|
if (!this.isConnected(connection)) {
|
|
1170
1132
|
const errorMsg = "Send can only be sent when connection is ready.";
|
|
1171
1133
|
this.logger.warn(errorMsg);
|
|
1172
|
-
if (promiseBased)
|
|
1173
|
-
|
|
1174
|
-
else
|
|
1175
|
-
throw new Error(errorMsg);
|
|
1134
|
+
if (promiseBased) return Promise.reject(new Error(errorMsg));
|
|
1135
|
+
else throw new Error(errorMsg);
|
|
1176
1136
|
}
|
|
1177
1137
|
const connectionToUse = connection ?? this.getConnection();
|
|
1178
1138
|
if (!connectionToUse.ws) {
|
|
1179
1139
|
const errorMsg = "Websocket Client not set";
|
|
1180
1140
|
this.logger.error(errorMsg);
|
|
1181
|
-
if (promiseBased)
|
|
1182
|
-
|
|
1183
|
-
else
|
|
1184
|
-
throw new Error(errorMsg);
|
|
1141
|
+
if (promiseBased) return Promise.reject(new Error(errorMsg));
|
|
1142
|
+
else throw new Error(errorMsg);
|
|
1185
1143
|
}
|
|
1186
1144
|
connectionToUse.ws.send(payload);
|
|
1187
1145
|
if (promiseBased) {
|
|
1188
1146
|
return new Promise((resolve, reject) => {
|
|
1189
|
-
if (!id)
|
|
1190
|
-
return reject(new Error("id is required for promise-based sending."));
|
|
1147
|
+
if (!id) return reject(new Error("id is required for promise-based sending."));
|
|
1191
1148
|
connectionToUse.pendingRequests.set(id, { resolve, reject });
|
|
1192
1149
|
this.scheduleTimer(
|
|
1193
1150
|
connectionToUse.ws,
|
|
@@ -1203,8 +1160,6 @@ var _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
1203
1160
|
}
|
|
1204
1161
|
}
|
|
1205
1162
|
};
|
|
1206
|
-
_WebsocketCommon.MAX_CONNECTION_DURATION = 23 * 60 * 60 * 1e3;
|
|
1207
|
-
var WebsocketCommon = _WebsocketCommon;
|
|
1208
1163
|
var WebsocketAPIBase = class extends WebsocketCommon {
|
|
1209
1164
|
constructor(configuration, connectionPool = []) {
|
|
1210
1165
|
super(configuration, connectionPool);
|
|
@@ -1244,8 +1199,7 @@ var WebsocketAPIBase = class extends WebsocketCommon {
|
|
|
1244
1199
|
request?.reject(message.error);
|
|
1245
1200
|
} else {
|
|
1246
1201
|
const response = { data: message.result };
|
|
1247
|
-
if (message?.rateLimits)
|
|
1248
|
-
response.rateLimits = message.rateLimits;
|
|
1202
|
+
if (message?.rateLimits) response.rateLimits = message.rateLimits;
|
|
1249
1203
|
request?.resolve(response);
|
|
1250
1204
|
}
|
|
1251
1205
|
} else {
|
|
@@ -1267,8 +1221,7 @@ var WebsocketAPIBase = class extends WebsocketCommon {
|
|
|
1267
1221
|
return Promise.resolve();
|
|
1268
1222
|
}
|
|
1269
1223
|
return new Promise((resolve, reject) => {
|
|
1270
|
-
if (this.isConnecting)
|
|
1271
|
-
return;
|
|
1224
|
+
if (this.isConnecting) return;
|
|
1272
1225
|
this.isConnecting = true;
|
|
1273
1226
|
const timeout = setTimeout(() => {
|
|
1274
1227
|
this.isConnecting = false;
|
|
@@ -1364,15 +1317,13 @@ var WebsocketStreamsBase2 = class extends WebsocketCommon {
|
|
|
1364
1317
|
handleStreamAssignment(streams) {
|
|
1365
1318
|
const connectionStreamMap = /* @__PURE__ */ new Map();
|
|
1366
1319
|
streams.forEach((stream) => {
|
|
1367
|
-
if (!this.streamCallbackMap.has(stream))
|
|
1368
|
-
this.streamCallbackMap.set(stream, /* @__PURE__ */ new Set());
|
|
1320
|
+
if (!this.streamCallbackMap.has(stream)) this.streamCallbackMap.set(stream, /* @__PURE__ */ new Set());
|
|
1369
1321
|
let connection = this.streamConnectionMap.get(stream);
|
|
1370
1322
|
if (!connection || connection.closeInitiated || connection.reconnectionPending) {
|
|
1371
1323
|
connection = this.getConnection(true);
|
|
1372
1324
|
this.streamConnectionMap.set(stream, connection);
|
|
1373
1325
|
}
|
|
1374
|
-
if (!connectionStreamMap.has(connection))
|
|
1375
|
-
connectionStreamMap.set(connection, []);
|
|
1326
|
+
if (!connectionStreamMap.has(connection)) connectionStreamMap.set(connection, []);
|
|
1376
1327
|
connectionStreamMap.get(connection)?.push(stream);
|
|
1377
1328
|
});
|
|
1378
1329
|
return connectionStreamMap;
|
|
@@ -1529,18 +1480,12 @@ var WebsocketStreamsBase2 = class extends WebsocketCommon {
|
|
|
1529
1480
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1530
1481
|
0 && (module.exports = {
|
|
1531
1482
|
ALGO_REST_API_PROD_URL,
|
|
1532
|
-
ALGO_REST_API_TESTNET_URL,
|
|
1533
1483
|
AUTO_INVEST_REST_API_PROD_URL,
|
|
1534
|
-
AUTO_INVEST_REST_API_TESTNET_URL,
|
|
1535
1484
|
BadRequestError,
|
|
1536
1485
|
C2C_REST_API_PROD_URL,
|
|
1537
|
-
C2C_REST_API_TESTNET_URL,
|
|
1538
1486
|
CONVERT_REST_API_PROD_URL,
|
|
1539
|
-
CONVERT_REST_API_TESTNET_URL,
|
|
1540
1487
|
COPY_TRADING_REST_API_PROD_URL,
|
|
1541
|
-
COPY_TRADING_REST_API_TESTNET_URL,
|
|
1542
1488
|
CRYPTO_LOAN_REST_API_PROD_URL,
|
|
1543
|
-
CRYPTO_LOAN_REST_API_TESTNET_URL,
|
|
1544
1489
|
ConfigurationRestAPI,
|
|
1545
1490
|
ConfigurationWebsocketAPI,
|
|
1546
1491
|
ConfigurationWebsocketStreams,
|
|
@@ -1564,30 +1509,21 @@ var WebsocketStreamsBase2 = class extends WebsocketCommon {
|
|
|
1564
1509
|
DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_PROD_URL,
|
|
1565
1510
|
DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_TESTNET_URL,
|
|
1566
1511
|
DUAL_INVESTMENT_REST_API_PROD_URL,
|
|
1567
|
-
DUAL_INVESTMENT_REST_API_TESTNET_URL,
|
|
1568
1512
|
FIAT_REST_API_PROD_URL,
|
|
1569
|
-
FIAT_REST_API_TESTNET_URL,
|
|
1570
1513
|
ForbiddenError,
|
|
1571
1514
|
GIFT_CARD_REST_API_PROD_URL,
|
|
1572
|
-
GIFT_CARD_REST_API_TESTNET_URL,
|
|
1573
1515
|
LogLevel,
|
|
1574
1516
|
Logger,
|
|
1575
1517
|
MARGIN_TRADING_REST_API_PROD_URL,
|
|
1576
|
-
MARGIN_TRADING_REST_API_TESTNET_URL,
|
|
1577
1518
|
MINING_REST_API_PROD_URL,
|
|
1578
|
-
MINING_REST_API_TESTNET_URL,
|
|
1579
1519
|
NFT_REST_API_PROD_URL,
|
|
1580
|
-
NFT_REST_API_TESTNET_URL,
|
|
1581
1520
|
NetworkError,
|
|
1582
1521
|
NotFoundError,
|
|
1583
1522
|
PAY_REST_API_PROD_URL,
|
|
1584
|
-
PAY_REST_API_TESTNET_URL,
|
|
1585
1523
|
REBATE_REST_API_PROD_URL,
|
|
1586
|
-
REBATE_REST_API_TESTNET_URL,
|
|
1587
1524
|
RateLimitBanError,
|
|
1588
1525
|
RequiredError,
|
|
1589
1526
|
SIMPLE_EARN_REST_API_PROD_URL,
|
|
1590
|
-
SIMPLE_EARN_REST_API_TESTNET_URL,
|
|
1591
1527
|
SPOT_REST_API_MARKET_URL,
|
|
1592
1528
|
SPOT_REST_API_PROD_URL,
|
|
1593
1529
|
SPOT_REST_API_TESTNET_URL,
|
|
@@ -1597,17 +1533,13 @@ var WebsocketStreamsBase2 = class extends WebsocketCommon {
|
|
|
1597
1533
|
SPOT_WS_STREAMS_PROD_URL,
|
|
1598
1534
|
SPOT_WS_STREAMS_TESTNET_URL,
|
|
1599
1535
|
STAKING_REST_API_PROD_URL,
|
|
1600
|
-
STAKING_REST_API_TESTNET_URL,
|
|
1601
1536
|
SUB_ACCOUNT_REST_API_PROD_URL,
|
|
1602
|
-
SUB_ACCOUNT_REST_API_TESTNET_URL,
|
|
1603
1537
|
ServerError,
|
|
1604
1538
|
TimeUnit,
|
|
1605
1539
|
TooManyRequestsError,
|
|
1606
1540
|
UnauthorizedError,
|
|
1607
1541
|
VIP_LOAN_REST_API_PROD_URL,
|
|
1608
|
-
VIP_LOAN_REST_API_TESTNET_URL,
|
|
1609
1542
|
WALLET_REST_API_PROD_URL,
|
|
1610
|
-
WALLET_REST_API_TESTNET_URL,
|
|
1611
1543
|
WebsocketAPIBase,
|
|
1612
1544
|
WebsocketCommon,
|
|
1613
1545
|
WebsocketEventEmitter,
|