@binance/common 1.2.1 → 1.2.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 CHANGED
@@ -583,7 +583,34 @@ declare function setFlattenedQueryParams(urlSearchParams: URLSearchParams, param
583
583
  * @param objects - One or more objects to flatten into the URL's search parameters.
584
584
  */
585
585
  declare const setSearchParams: (url: URL, ...objects: Record<string, unknown>[]) => void;
586
+ /**
587
+ * Converts a URL object to a full path string, including pathname, search parameters, and hash.
588
+ *
589
+ * @param url The URL object to convert to a path string.
590
+ * @returns A complete path string representation of the URL.
591
+ */
586
592
  declare const toPathString: (url: URL) => string;
593
+ /**
594
+ * A type utility that transforms numbers in a type to their string representation when in scientific notation,
595
+ * while preserving the structure of arrays and objects.
596
+ *
597
+ * @template T The input type to be transformed
598
+ * @returns A type where numbers potentially become strings, maintaining the original type's structure
599
+ */
600
+ type ScientificToString<T> = T extends number ? string | number : T extends Array<infer U> ? Array<ScientificToString<U>> : T extends object ? {
601
+ [K in keyof T]: ScientificToString<T[K]>;
602
+ } : T;
603
+ /**
604
+ * Normalizes scientific notation numbers in an object or array to a fixed number of decimal places.
605
+ *
606
+ * This function recursively processes objects, arrays, and numbers, converting scientific notation
607
+ * to a fixed decimal representation. Non-numeric values are left unchanged.
608
+ *
609
+ * @template T The type of the input object or value
610
+ * @param obj The object, array, or value to normalize
611
+ * @returns A new object or value with scientific notation numbers normalized
612
+ */
613
+ declare function normalizeScientificNumbers<T>(obj: T): ScientificToString<T>;
587
614
  /**
588
615
  * Determines whether a request should be retried based on the provided error.
589
616
  *
@@ -667,7 +694,7 @@ declare function buildUserAgent(packageName: string, packageVersion: string): st
667
694
  declare function buildWebsocketAPIMessage(configuration: ConfigurationWebsocketAPI, method: string, payload: WebsocketSendMsgOptions, options: WebsocketSendMsgConfig, skipAuth?: boolean): {
668
695
  id: string;
669
696
  method: string;
670
- params: SendMessageOptions;
697
+ params: Record<string, unknown>;
671
698
  };
672
699
  /**
673
700
  * Sanitizes a header value by checking for and preventing carriage return and line feed characters.
@@ -1052,4 +1079,4 @@ interface WebsocketStream<T> {
1052
1079
  */
1053
1080
  declare function createStreamHandler<T>(websocketBase: WebsocketAPIBase | WebsocketStreamsBase, streamOrId: string, id?: string): WebsocketStream<T>;
1054
1081
 
1055
- export { ALGO_REST_API_PROD_URL, AUTO_INVEST_REST_API_PROD_URL, type AxiosRequestArgs, BadRequestError, C2C_REST_API_PROD_URL, CONVERT_REST_API_PROD_URL, COPY_TRADING_REST_API_PROD_URL, CRYPTO_LOAN_REST_API_PROD_URL, ConfigurationRestAPI, ConfigurationWebsocketAPI, ConfigurationWebsocketStreams, ConnectorClientError, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_OPTIONS_REST_API_PROD_URL, DERIVATIVES_TRADING_OPTIONS_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_TESTNET_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_TESTNET_URL, DUAL_INVESTMENT_REST_API_PROD_URL, FIAT_REST_API_PROD_URL, ForbiddenError, GIFT_CARD_REST_API_PROD_URL, LogLevel, Logger, MARGIN_TRADING_REST_API_PROD_URL, MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL, MARGIN_TRADING_WS_STREAMS_PROD_URL, MINING_REST_API_PROD_URL, NFT_REST_API_PROD_URL, NetworkError, NotFoundError, type ObjectType, PAY_REST_API_PROD_URL, REBATE_REST_API_PROD_URL, RateLimitBanError, type RequestArgs, RequiredError, type RestApiRateLimit, type RestApiResponse, SIMPLE_EARN_REST_API_PROD_URL, SPOT_REST_API_MARKET_URL, SPOT_REST_API_PROD_URL, SPOT_REST_API_TESTNET_URL, SPOT_WS_API_PROD_URL, SPOT_WS_API_TESTNET_URL, SPOT_WS_STREAMS_MARKET_URL, SPOT_WS_STREAMS_PROD_URL, SPOT_WS_STREAMS_TESTNET_URL, STAKING_REST_API_PROD_URL, SUB_ACCOUNT_REST_API_PROD_URL, type SendMessageOptions, ServerError, TimeUnit, TooManyRequestsError, UnauthorizedError, VIP_LOAN_REST_API_PROD_URL, WALLET_REST_API_PROD_URL, WebsocketAPIBase, type WebsocketApiRateLimit, type WebsocketApiResponse, WebsocketCommon, type WebsocketConnection, WebsocketEventEmitter, type WebsocketSendMsgConfig, type WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, buildUserAgent, buildWebsocketAPIMessage, clearSignerCache, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, parseCustomHeaders, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sanitizeHeaderValue, sendRequest, setFlattenedQueryParams, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
1082
+ export { ALGO_REST_API_PROD_URL, AUTO_INVEST_REST_API_PROD_URL, type AxiosRequestArgs, BadRequestError, C2C_REST_API_PROD_URL, CONVERT_REST_API_PROD_URL, COPY_TRADING_REST_API_PROD_URL, CRYPTO_LOAN_REST_API_PROD_URL, ConfigurationRestAPI, ConfigurationWebsocketAPI, ConfigurationWebsocketStreams, ConnectorClientError, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_OPTIONS_REST_API_PROD_URL, DERIVATIVES_TRADING_OPTIONS_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_TESTNET_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_TESTNET_URL, DUAL_INVESTMENT_REST_API_PROD_URL, FIAT_REST_API_PROD_URL, ForbiddenError, GIFT_CARD_REST_API_PROD_URL, LogLevel, Logger, MARGIN_TRADING_REST_API_PROD_URL, MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL, MARGIN_TRADING_WS_STREAMS_PROD_URL, MINING_REST_API_PROD_URL, NFT_REST_API_PROD_URL, NetworkError, NotFoundError, type ObjectType, PAY_REST_API_PROD_URL, REBATE_REST_API_PROD_URL, RateLimitBanError, type RequestArgs, RequiredError, type RestApiRateLimit, type RestApiResponse, SIMPLE_EARN_REST_API_PROD_URL, SPOT_REST_API_MARKET_URL, SPOT_REST_API_PROD_URL, SPOT_REST_API_TESTNET_URL, SPOT_WS_API_PROD_URL, SPOT_WS_API_TESTNET_URL, SPOT_WS_STREAMS_MARKET_URL, SPOT_WS_STREAMS_PROD_URL, SPOT_WS_STREAMS_TESTNET_URL, STAKING_REST_API_PROD_URL, SUB_ACCOUNT_REST_API_PROD_URL, type SendMessageOptions, ServerError, TimeUnit, TooManyRequestsError, UnauthorizedError, VIP_LOAN_REST_API_PROD_URL, WALLET_REST_API_PROD_URL, WebsocketAPIBase, type WebsocketApiRateLimit, type WebsocketApiResponse, WebsocketCommon, type WebsocketConnection, WebsocketEventEmitter, type WebsocketSendMsgConfig, type WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, buildUserAgent, buildWebsocketAPIMessage, clearSignerCache, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, normalizeScientificNumbers, parseCustomHeaders, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sanitizeHeaderValue, sendRequest, setFlattenedQueryParams, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
package/dist/index.d.ts CHANGED
@@ -583,7 +583,34 @@ declare function setFlattenedQueryParams(urlSearchParams: URLSearchParams, param
583
583
  * @param objects - One or more objects to flatten into the URL's search parameters.
584
584
  */
585
585
  declare const setSearchParams: (url: URL, ...objects: Record<string, unknown>[]) => void;
586
+ /**
587
+ * Converts a URL object to a full path string, including pathname, search parameters, and hash.
588
+ *
589
+ * @param url The URL object to convert to a path string.
590
+ * @returns A complete path string representation of the URL.
591
+ */
586
592
  declare const toPathString: (url: URL) => string;
593
+ /**
594
+ * A type utility that transforms numbers in a type to their string representation when in scientific notation,
595
+ * while preserving the structure of arrays and objects.
596
+ *
597
+ * @template T The input type to be transformed
598
+ * @returns A type where numbers potentially become strings, maintaining the original type's structure
599
+ */
600
+ type ScientificToString<T> = T extends number ? string | number : T extends Array<infer U> ? Array<ScientificToString<U>> : T extends object ? {
601
+ [K in keyof T]: ScientificToString<T[K]>;
602
+ } : T;
603
+ /**
604
+ * Normalizes scientific notation numbers in an object or array to a fixed number of decimal places.
605
+ *
606
+ * This function recursively processes objects, arrays, and numbers, converting scientific notation
607
+ * to a fixed decimal representation. Non-numeric values are left unchanged.
608
+ *
609
+ * @template T The type of the input object or value
610
+ * @param obj The object, array, or value to normalize
611
+ * @returns A new object or value with scientific notation numbers normalized
612
+ */
613
+ declare function normalizeScientificNumbers<T>(obj: T): ScientificToString<T>;
587
614
  /**
588
615
  * Determines whether a request should be retried based on the provided error.
589
616
  *
@@ -667,7 +694,7 @@ declare function buildUserAgent(packageName: string, packageVersion: string): st
667
694
  declare function buildWebsocketAPIMessage(configuration: ConfigurationWebsocketAPI, method: string, payload: WebsocketSendMsgOptions, options: WebsocketSendMsgConfig, skipAuth?: boolean): {
668
695
  id: string;
669
696
  method: string;
670
- params: SendMessageOptions;
697
+ params: Record<string, unknown>;
671
698
  };
672
699
  /**
673
700
  * Sanitizes a header value by checking for and preventing carriage return and line feed characters.
@@ -1052,4 +1079,4 @@ interface WebsocketStream<T> {
1052
1079
  */
1053
1080
  declare function createStreamHandler<T>(websocketBase: WebsocketAPIBase | WebsocketStreamsBase, streamOrId: string, id?: string): WebsocketStream<T>;
1054
1081
 
1055
- export { ALGO_REST_API_PROD_URL, AUTO_INVEST_REST_API_PROD_URL, type AxiosRequestArgs, BadRequestError, C2C_REST_API_PROD_URL, CONVERT_REST_API_PROD_URL, COPY_TRADING_REST_API_PROD_URL, CRYPTO_LOAN_REST_API_PROD_URL, ConfigurationRestAPI, ConfigurationWebsocketAPI, ConfigurationWebsocketStreams, ConnectorClientError, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_OPTIONS_REST_API_PROD_URL, DERIVATIVES_TRADING_OPTIONS_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_TESTNET_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_TESTNET_URL, DUAL_INVESTMENT_REST_API_PROD_URL, FIAT_REST_API_PROD_URL, ForbiddenError, GIFT_CARD_REST_API_PROD_URL, LogLevel, Logger, MARGIN_TRADING_REST_API_PROD_URL, MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL, MARGIN_TRADING_WS_STREAMS_PROD_URL, MINING_REST_API_PROD_URL, NFT_REST_API_PROD_URL, NetworkError, NotFoundError, type ObjectType, PAY_REST_API_PROD_URL, REBATE_REST_API_PROD_URL, RateLimitBanError, type RequestArgs, RequiredError, type RestApiRateLimit, type RestApiResponse, SIMPLE_EARN_REST_API_PROD_URL, SPOT_REST_API_MARKET_URL, SPOT_REST_API_PROD_URL, SPOT_REST_API_TESTNET_URL, SPOT_WS_API_PROD_URL, SPOT_WS_API_TESTNET_URL, SPOT_WS_STREAMS_MARKET_URL, SPOT_WS_STREAMS_PROD_URL, SPOT_WS_STREAMS_TESTNET_URL, STAKING_REST_API_PROD_URL, SUB_ACCOUNT_REST_API_PROD_URL, type SendMessageOptions, ServerError, TimeUnit, TooManyRequestsError, UnauthorizedError, VIP_LOAN_REST_API_PROD_URL, WALLET_REST_API_PROD_URL, WebsocketAPIBase, type WebsocketApiRateLimit, type WebsocketApiResponse, WebsocketCommon, type WebsocketConnection, WebsocketEventEmitter, type WebsocketSendMsgConfig, type WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, buildUserAgent, buildWebsocketAPIMessage, clearSignerCache, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, parseCustomHeaders, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sanitizeHeaderValue, sendRequest, setFlattenedQueryParams, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
1082
+ export { ALGO_REST_API_PROD_URL, AUTO_INVEST_REST_API_PROD_URL, type AxiosRequestArgs, BadRequestError, C2C_REST_API_PROD_URL, CONVERT_REST_API_PROD_URL, COPY_TRADING_REST_API_PROD_URL, CRYPTO_LOAN_REST_API_PROD_URL, ConfigurationRestAPI, ConfigurationWebsocketAPI, ConfigurationWebsocketStreams, ConnectorClientError, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_COIN_FUTURES_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_OPTIONS_REST_API_PROD_URL, DERIVATIVES_TRADING_OPTIONS_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_PRO_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_TESTNET_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_WS_STREAMS_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_REST_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_API_TESTNET_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_PROD_URL, DERIVATIVES_TRADING_USDS_FUTURES_WS_STREAMS_TESTNET_URL, DUAL_INVESTMENT_REST_API_PROD_URL, FIAT_REST_API_PROD_URL, ForbiddenError, GIFT_CARD_REST_API_PROD_URL, LogLevel, Logger, MARGIN_TRADING_REST_API_PROD_URL, MARGIN_TRADING_RISK_WS_STREAMS_PROD_URL, MARGIN_TRADING_WS_STREAMS_PROD_URL, MINING_REST_API_PROD_URL, NFT_REST_API_PROD_URL, NetworkError, NotFoundError, type ObjectType, PAY_REST_API_PROD_URL, REBATE_REST_API_PROD_URL, RateLimitBanError, type RequestArgs, RequiredError, type RestApiRateLimit, type RestApiResponse, SIMPLE_EARN_REST_API_PROD_URL, SPOT_REST_API_MARKET_URL, SPOT_REST_API_PROD_URL, SPOT_REST_API_TESTNET_URL, SPOT_WS_API_PROD_URL, SPOT_WS_API_TESTNET_URL, SPOT_WS_STREAMS_MARKET_URL, SPOT_WS_STREAMS_PROD_URL, SPOT_WS_STREAMS_TESTNET_URL, STAKING_REST_API_PROD_URL, SUB_ACCOUNT_REST_API_PROD_URL, type SendMessageOptions, ServerError, TimeUnit, TooManyRequestsError, UnauthorizedError, VIP_LOAN_REST_API_PROD_URL, WALLET_REST_API_PROD_URL, WebsocketAPIBase, type WebsocketApiRateLimit, type WebsocketApiResponse, WebsocketCommon, type WebsocketConnection, WebsocketEventEmitter, type WebsocketSendMsgConfig, type WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, buildUserAgent, buildWebsocketAPIMessage, clearSignerCache, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, normalizeScientificNumbers, parseCustomHeaders, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sanitizeHeaderValue, sendRequest, setFlattenedQueryParams, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
package/dist/index.js CHANGED
@@ -109,6 +109,7 @@ __export(index_exports, {
109
109
  getSignature: () => getSignature,
110
110
  getTimestamp: () => getTimestamp,
111
111
  httpRequestFunction: () => httpRequestFunction,
112
+ normalizeScientificNumbers: () => normalizeScientificNumbers,
112
113
  parseCustomHeaders: () => parseCustomHeaders,
113
114
  parseRateLimitHeaders: () => parseRateLimitHeaders,
114
115
  randomString: () => randomString,
@@ -249,6 +250,39 @@ var setSearchParams = function(url, ...objects) {
249
250
  var toPathString = function(url) {
250
251
  return url.pathname + url.search + url.hash;
251
252
  };
253
+ function normalizeScientificNumbers(obj) {
254
+ if (Array.isArray(obj)) {
255
+ return obj.map((item) => normalizeScientificNumbers(item));
256
+ } else if (typeof obj === "object" && obj !== null) {
257
+ const result = {};
258
+ for (const key of Object.keys(obj)) {
259
+ result[key] = normalizeScientificNumbers(obj[key]);
260
+ }
261
+ return result;
262
+ } else if (typeof obj === "number") {
263
+ if (!Number.isFinite(obj)) return obj;
264
+ const abs = Math.abs(obj);
265
+ if (abs === 0 || abs >= 1e-6 && abs < 1e21) return String(obj);
266
+ const isNegative = obj < 0;
267
+ const [rawMantissa, rawExponent] = abs.toExponential().split("e");
268
+ const exponent = +rawExponent;
269
+ const digits = rawMantissa.replace(".", "");
270
+ if (exponent < 0) {
271
+ const zeros = "0".repeat(Math.abs(exponent) - 1);
272
+ return (isNegative ? "-" : "") + "0." + zeros + digits;
273
+ } else {
274
+ const pad = exponent - (digits.length - 1);
275
+ if (pad >= 0) {
276
+ return (isNegative ? "-" : "") + digits + "0".repeat(pad);
277
+ } else {
278
+ const point = digits.length + pad;
279
+ return (isNegative ? "-" : "") + digits.slice(0, point) + "." + digits.slice(point);
280
+ }
281
+ }
282
+ } else {
283
+ return obj;
284
+ }
285
+ }
252
286
  var shouldRetryRequest = function(error, method, retriesLeft) {
253
287
  const isRetriableMethod = ["GET", "DELETE"].includes(method ?? "");
254
288
  const isRetriableStatus = [500, 502, 503, 504].includes(
@@ -410,7 +444,7 @@ var sendRequest = function(configuration, endpoint, method, params = {}, timeUni
410
444
  method,
411
445
  ...configuration?.baseOptions
412
446
  };
413
- const localVarQueryParameter = { ...params };
447
+ const localVarQueryParameter = { ...normalizeScientificNumbers(params) };
414
448
  if (options.isSigned) {
415
449
  const timestamp = getTimestamp();
416
450
  localVarQueryParameter["timestamp"] = timestamp;
@@ -481,7 +515,7 @@ function buildUserAgent(packageName, packageVersion) {
481
515
  function buildWebsocketAPIMessage(configuration, method, payload, options, skipAuth = false) {
482
516
  const id = payload.id && /^[0-9a-f]{32}$/.test(payload.id) ? payload.id : randomString();
483
517
  delete payload.id;
484
- let params = removeEmptyValue(payload);
518
+ let params = normalizeScientificNumbers(removeEmptyValue(payload));
485
519
  if ((options.withApiKey || options.isSigned) && !skipAuth) params.apiKey = configuration.apiKey;
486
520
  if (options.isSigned) {
487
521
  params.timestamp = getTimestamp();
@@ -504,7 +538,7 @@ function parseCustomHeaders(headers) {
504
538
  for (const [rawName, rawValue] of Object.entries(headers || {})) {
505
539
  const name = rawName.trim();
506
540
  if (forbidden.has(name.toLowerCase())) {
507
- console.warn(`Dropping forbidden header: ${name}`);
541
+ Logger.getInstance().warn(`Dropping forbidden header: ${name}`);
508
542
  continue;
509
543
  }
510
544
  try {
@@ -724,33 +758,27 @@ var Logger = class _Logger {
724
758
  "warn" /* WARN */,
725
759
  "error" /* ERROR */
726
760
  ];
761
+ const envLevel = process.env.LOG_LEVEL?.toLowerCase();
762
+ this.minLogLevel = envLevel && this.isValidLogLevel(envLevel) ? envLevel : "info" /* INFO */;
727
763
  }
728
764
  static getInstance() {
729
- if (!_Logger.instance) {
730
- _Logger.instance = new _Logger();
731
- }
765
+ if (!_Logger.instance) _Logger.instance = new _Logger();
732
766
  return _Logger.instance;
733
767
  }
734
768
  setMinLogLevel(level) {
735
- if (!this.isValidLogLevel(level)) {
736
- throw new Error(`Invalid log level: ${level}`);
737
- }
769
+ if (!this.isValidLogLevel(level)) throw new Error(`Invalid log level: ${level}`);
738
770
  this.minLogLevel = level;
739
771
  }
740
772
  isValidLogLevel(level) {
741
773
  return this.levelsOrder.includes(level);
742
774
  }
743
775
  log(level, ...message) {
744
- if (level === "" /* NONE */ || !this.allowLevelLog(level)) {
745
- return;
746
- }
776
+ if (level === "" /* NONE */ || !this.allowLevelLog(level)) return;
747
777
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
748
778
  console[level](`[${timestamp}] [${level.toLowerCase()}]`, ...message);
749
779
  }
750
780
  allowLevelLog(level) {
751
- if (!this.isValidLogLevel(level)) {
752
- throw new Error(`Invalid log level: ${level}`);
753
- }
781
+ if (!this.isValidLogLevel(level)) throw new Error(`Invalid log level: ${level}`);
754
782
  const currentLevelIndex = this.levelsOrder.indexOf(level);
755
783
  const minLevelIndex = this.levelsOrder.indexOf(this.minLogLevel);
756
784
  return currentLevelIndex >= minLevelIndex;
@@ -1475,7 +1503,7 @@ var WebsocketStreamsBase = class extends WebsocketCommon {
1475
1503
  params: streams,
1476
1504
  id: id && /^[0-9a-f]{32}$/.test(id) ? id : randomString()
1477
1505
  };
1478
- this.logger.info("SUBSCRIBE", payload);
1506
+ this.logger.debug("SUBSCRIBE", payload);
1479
1507
  this.send(JSON.stringify(payload), void 0, false, 0, connection);
1480
1508
  }
1481
1509
  /**
@@ -1595,7 +1623,7 @@ var WebsocketStreamsBase = class extends WebsocketCommon {
1595
1623
  params: [stream2],
1596
1624
  id: id && /^[0-9a-f]{32}$/.test(id) ? id : randomString()
1597
1625
  };
1598
- this.logger.info("UNSUBSCRIBE", payload);
1626
+ this.logger.debug("UNSUBSCRIBE", payload);
1599
1627
  this.send(JSON.stringify(payload), void 0, false, 0, connection);
1600
1628
  this.streamConnectionMap.delete(stream2);
1601
1629
  this.streamCallbackMap.delete(stream2);
@@ -1716,6 +1744,7 @@ function createStreamHandler(websocketBase, streamOrId, id) {
1716
1744
  getSignature,
1717
1745
  getTimestamp,
1718
1746
  httpRequestFunction,
1747
+ normalizeScientificNumbers,
1719
1748
  parseCustomHeaders,
1720
1749
  parseRateLimitHeaders,
1721
1750
  randomString,