@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.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 src_exports = {};
32
- __export(src_exports, {
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(src_exports);
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 SIMPLE_EARN_REST_API_TESTNET_URL = "https://testnet.binance.vision";
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
- error,
513
+ axiosError,
552
514
  axiosRequestArgs?.method?.toUpperCase(),
553
515
  retries - attempt
554
516
  )) {
555
517
  await delay(backoff * attempt);
556
518
  } else {
557
- if (error.response) {
558
- const status = error.response?.status;
559
- const data = JSON.parse(
560
- error.response?.data ?? "{}"
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(data?.msg);
532
+ throw new BadRequestError(errorMsg);
565
533
  case 401:
566
- throw new UnauthorizedError(data?.msg);
534
+ throw new UnauthorizedError(errorMsg);
567
535
  case 403:
568
- throw new ForbiddenError(data?.msg);
536
+ throw new ForbiddenError(errorMsg);
569
537
  case 404:
570
- throw new NotFoundError(data?.msg);
538
+ throw new NotFoundError(errorMsg);
571
539
  case 418:
572
- throw new RateLimitBanError(data?.msg);
540
+ throw new RateLimitBanError(errorMsg);
573
541
  case 429:
574
- throw new TooManyRequestsError(data?.msg);
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(data?.msg);
546
+ throw new ConnectorClientError(errorMsg);
579
547
  }
580
548
  } else {
581
- throw new NetworkError("Network error or request timeout.");
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 new Error(`Request failed after ${retries} retries`);
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
- acc[key.toLowerCase().replace(/[-_]/g, "")] = variables[key];
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(/<([^>]+)>/g, (match, fieldName) => {
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 _WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
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
- this.initializePool(this.poolSize);
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
- clearTimeout(timer);
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
- targetConnection.renewalPending = true;
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
- return Promise.reject(new Error(errorMsg));
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
- return Promise.reject(new Error(errorMsg));
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,