@binance/common 1.2.0 → 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 +29 -2
- package/dist/index.d.ts +29 -2
- package/dist/index.js +67 -31
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +66 -31
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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:
|
|
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:
|
|
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
|
-
|
|
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;
|
|
@@ -943,12 +971,16 @@ var WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
943
971
|
*/
|
|
944
972
|
async closeConnectionGracefully(WebsocketConnectionToClose, connection) {
|
|
945
973
|
if (!WebsocketConnectionToClose || !connection) return;
|
|
946
|
-
this.logger.debug(
|
|
974
|
+
this.logger.debug(
|
|
975
|
+
`Waiting for pending requests to complete before disconnecting websocket on connection ${connection.id}.`
|
|
976
|
+
);
|
|
947
977
|
const closePromise = new Promise((resolve) => {
|
|
948
978
|
this.scheduleTimer(
|
|
949
979
|
WebsocketConnectionToClose,
|
|
950
980
|
() => {
|
|
951
|
-
this.logger.warn(
|
|
981
|
+
this.logger.warn(
|
|
982
|
+
`Force-closing websocket connection after 30 seconds on connection ${connection.id}.`
|
|
983
|
+
);
|
|
952
984
|
resolve();
|
|
953
985
|
},
|
|
954
986
|
3e4
|
|
@@ -957,7 +989,9 @@ var WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
957
989
|
WebsocketConnectionToClose,
|
|
958
990
|
() => {
|
|
959
991
|
if (connection.pendingRequests.size === 0) {
|
|
960
|
-
this.logger.debug(
|
|
992
|
+
this.logger.debug(
|
|
993
|
+
`All pending requests completed, closing websocket connection on connection ${connection.id}.`
|
|
994
|
+
);
|
|
961
995
|
resolve();
|
|
962
996
|
}
|
|
963
997
|
},
|
|
@@ -966,7 +1000,7 @@ var WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
966
1000
|
);
|
|
967
1001
|
});
|
|
968
1002
|
await closePromise;
|
|
969
|
-
this.logger.info(
|
|
1003
|
+
this.logger.info(`Closing Websocket connection on connection ${connection.id}.`);
|
|
970
1004
|
WebsocketConnectionToClose.close();
|
|
971
1005
|
this.cleanup(WebsocketConnectionToClose);
|
|
972
1006
|
}
|
|
@@ -986,7 +1020,7 @@ var WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
986
1020
|
req.payload,
|
|
987
1021
|
req.options
|
|
988
1022
|
);
|
|
989
|
-
this.logger.debug(`Session re-logon
|
|
1023
|
+
this.logger.debug(`Session re-logon on connection ${connection.id}`, data);
|
|
990
1024
|
try {
|
|
991
1025
|
await this.send(
|
|
992
1026
|
JSON.stringify(data),
|
|
@@ -995,12 +1029,12 @@ var WebsocketCommon = class _WebsocketCommon extends WebsocketEventEmitter {
|
|
|
995
1029
|
this.configuration.timeout,
|
|
996
1030
|
connection
|
|
997
1031
|
);
|
|
1032
|
+
this.logger.debug(
|
|
1033
|
+
`Session re-logon on connection ${connection.id} was successful.`
|
|
1034
|
+
);
|
|
998
1035
|
connection.isSessionLoggedOn = true;
|
|
999
1036
|
} catch (err) {
|
|
1000
|
-
this.logger.error(
|
|
1001
|
-
`Session re-logon with connection id ${connection.id} failed:`,
|
|
1002
|
-
err
|
|
1003
|
-
);
|
|
1037
|
+
this.logger.error(`Session re-logon on connection ${connection.id} failed:`, err);
|
|
1004
1038
|
}
|
|
1005
1039
|
}
|
|
1006
1040
|
}
|
|
@@ -1364,8 +1398,9 @@ var WebsocketAPIBase = class extends WebsocketCommon {
|
|
|
1364
1398
|
if (!this.isConnected()) {
|
|
1365
1399
|
throw new Error("Not connected");
|
|
1366
1400
|
}
|
|
1367
|
-
const
|
|
1368
|
-
const
|
|
1401
|
+
const isSessionReq = options.isSessionLogon || options.isSessionLogout;
|
|
1402
|
+
const connections = isSessionReq ? this.getAvailableConnections() : [this.getConnection()];
|
|
1403
|
+
const skipAuth = isSessionReq ? false : this.configuration.autoSessionReLogon && connections[0].isSessionLoggedOn;
|
|
1369
1404
|
const data = buildWebsocketAPIMessage(
|
|
1370
1405
|
this.configuration,
|
|
1371
1406
|
method,
|
|
@@ -1385,7 +1420,7 @@ var WebsocketAPIBase = class extends WebsocketCommon {
|
|
|
1385
1420
|
)
|
|
1386
1421
|
)
|
|
1387
1422
|
);
|
|
1388
|
-
if (
|
|
1423
|
+
if (isSessionReq && this.configuration.autoSessionReLogon) {
|
|
1389
1424
|
connections.forEach((connection) => {
|
|
1390
1425
|
if (options.isSessionLogon) {
|
|
1391
1426
|
connection.isSessionLoggedOn = true;
|
|
@@ -1396,7 +1431,7 @@ var WebsocketAPIBase = class extends WebsocketCommon {
|
|
|
1396
1431
|
}
|
|
1397
1432
|
});
|
|
1398
1433
|
}
|
|
1399
|
-
return connections.length === 1 ? responses[0] : responses;
|
|
1434
|
+
return connections.length === 1 && !isSessionReq ? responses[0] : responses;
|
|
1400
1435
|
}
|
|
1401
1436
|
};
|
|
1402
1437
|
var WebsocketStreamsBase = class extends WebsocketCommon {
|
|
@@ -1468,7 +1503,7 @@ var WebsocketStreamsBase = class extends WebsocketCommon {
|
|
|
1468
1503
|
params: streams,
|
|
1469
1504
|
id: id && /^[0-9a-f]{32}$/.test(id) ? id : randomString()
|
|
1470
1505
|
};
|
|
1471
|
-
this.logger.
|
|
1506
|
+
this.logger.debug("SUBSCRIBE", payload);
|
|
1472
1507
|
this.send(JSON.stringify(payload), void 0, false, 0, connection);
|
|
1473
1508
|
}
|
|
1474
1509
|
/**
|
|
@@ -1559,7 +1594,7 @@ var WebsocketStreamsBase = class extends WebsocketCommon {
|
|
|
1559
1594
|
connectionStreamMap.forEach((streams2, connection) => {
|
|
1560
1595
|
if (!this.isConnected(connection)) {
|
|
1561
1596
|
this.logger.info(
|
|
1562
|
-
`Connection is not ready. Queuing subscription for streams: ${streams2}`
|
|
1597
|
+
`Connection ${connection.id} is not ready. Queuing subscription for streams: ${streams2}`
|
|
1563
1598
|
);
|
|
1564
1599
|
connection.pendingSubscriptions?.push(...streams2);
|
|
1565
1600
|
return;
|
|
@@ -1588,7 +1623,7 @@ var WebsocketStreamsBase = class extends WebsocketCommon {
|
|
|
1588
1623
|
params: [stream2],
|
|
1589
1624
|
id: id && /^[0-9a-f]{32}$/.test(id) ? id : randomString()
|
|
1590
1625
|
};
|
|
1591
|
-
this.logger.
|
|
1626
|
+
this.logger.debug("UNSUBSCRIBE", payload);
|
|
1592
1627
|
this.send(JSON.stringify(payload), void 0, false, 0, connection);
|
|
1593
1628
|
this.streamConnectionMap.delete(stream2);
|
|
1594
1629
|
this.streamCallbackMap.delete(stream2);
|
|
@@ -1709,6 +1744,7 @@ function createStreamHandler(websocketBase, streamOrId, id) {
|
|
|
1709
1744
|
getSignature,
|
|
1710
1745
|
getTimestamp,
|
|
1711
1746
|
httpRequestFunction,
|
|
1747
|
+
normalizeScientificNumbers,
|
|
1712
1748
|
parseCustomHeaders,
|
|
1713
1749
|
parseRateLimitHeaders,
|
|
1714
1750
|
randomString,
|