@binance/common 1.0.6 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +28 -7
- package/dist/index.d.ts +28 -7
- package/dist/index.js +92 -59
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +90 -59
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -100,7 +100,7 @@ declare class ConfigurationRestAPI {
|
|
|
100
100
|
};
|
|
101
101
|
};
|
|
102
102
|
/**
|
|
103
|
-
* enables keep-alive functionality for the connection
|
|
103
|
+
* enables keep-alive functionality for the connection (if httpsAgent is set then we use httpsAgent.keepAlive instead)
|
|
104
104
|
* @default true
|
|
105
105
|
* @type {boolean}
|
|
106
106
|
* @memberof ConfigurationRestAPI
|
|
@@ -485,6 +485,13 @@ interface RequestArgs {
|
|
|
485
485
|
timeUnit?: TimeUnit;
|
|
486
486
|
}
|
|
487
487
|
|
|
488
|
+
/**
|
|
489
|
+
* Resets the signer cache to a new empty WeakMap.
|
|
490
|
+
*
|
|
491
|
+
* This function clears the existing signer cache, creating a fresh WeakMap
|
|
492
|
+
* to store RequestSigner instances associated with configuration objects.
|
|
493
|
+
*/
|
|
494
|
+
declare const clearSignerCache: () => void;
|
|
488
495
|
/**
|
|
489
496
|
* Generates a query string from an object of parameters.
|
|
490
497
|
*
|
|
@@ -520,11 +527,11 @@ declare function delay(ms: number): Promise<void>;
|
|
|
520
527
|
*/
|
|
521
528
|
declare function getTimestamp(): number;
|
|
522
529
|
/**
|
|
523
|
-
* Generates a signature for
|
|
530
|
+
* Generates a signature for the given configuration and query parameters using a cached request signer.
|
|
524
531
|
*
|
|
525
|
-
* @param configuration -
|
|
526
|
-
* @param queryParams - The
|
|
527
|
-
* @returns
|
|
532
|
+
* @param configuration - Configuration object containing API secret, private key, and optional passphrase.
|
|
533
|
+
* @param queryParams - The query parameters to be signed.
|
|
534
|
+
* @returns A string representing the generated signature.
|
|
528
535
|
*/
|
|
529
536
|
declare const getSignature: (configuration: {
|
|
530
537
|
apiSecret?: string;
|
|
@@ -540,6 +547,20 @@ declare const getSignature: (configuration: {
|
|
|
540
547
|
* @throws {RequiredError} If the parameter is null or undefined.
|
|
541
548
|
*/
|
|
542
549
|
declare const assertParamExists: (functionName: string, paramName: string, paramValue: unknown) => void;
|
|
550
|
+
/**
|
|
551
|
+
* Recursively flattens an object or array into URL search parameters.
|
|
552
|
+
*
|
|
553
|
+
* This function handles nested objects and arrays by converting them into dot-notation query parameters.
|
|
554
|
+
* It supports different types of parameters:
|
|
555
|
+
* - Arrays can be stringified or recursively added
|
|
556
|
+
* - Objects are flattened with dot notation keys
|
|
557
|
+
* - Primitive values are converted to strings
|
|
558
|
+
*
|
|
559
|
+
* @param urlSearchParams The URLSearchParams object to modify
|
|
560
|
+
* @param parameter The parameter to flatten (can be an object, array, or primitive)
|
|
561
|
+
* @param key Optional key for nested parameters, used for creating dot-notation keys
|
|
562
|
+
*/
|
|
563
|
+
declare function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: unknown, key?: string): void;
|
|
543
564
|
/**
|
|
544
565
|
* Sets the search parameters of the provided URL by flattening the given objects into the URL's search parameters.
|
|
545
566
|
*
|
|
@@ -943,7 +964,7 @@ interface WebsocketStream<T> {
|
|
|
943
964
|
* @param event - Event name (currently supports "message").
|
|
944
965
|
* @param callback - Callback function to handle incoming data.
|
|
945
966
|
*/
|
|
946
|
-
on(event: 'message', callback: (data: T) => void): void;
|
|
967
|
+
on(event: 'message', callback: (data: T) => void | Promise<void>): void;
|
|
947
968
|
/**
|
|
948
969
|
* Unsubscribe from the stream and clean up resources.
|
|
949
970
|
*/
|
|
@@ -960,4 +981,4 @@ interface WebsocketStream<T> {
|
|
|
960
981
|
*/
|
|
961
982
|
declare function createStreamHandler<T>(websocketBase: WebsocketAPIBase | WebsocketStreamsBase, streamOrId: string, id?: string): WebsocketStream<T>;
|
|
962
983
|
|
|
963
|
-
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_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_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, 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 WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sendRequest, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
|
|
984
|
+
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_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_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, 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 WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, clearSignerCache, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sendRequest, setFlattenedQueryParams, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
|
package/dist/index.d.ts
CHANGED
|
@@ -100,7 +100,7 @@ declare class ConfigurationRestAPI {
|
|
|
100
100
|
};
|
|
101
101
|
};
|
|
102
102
|
/**
|
|
103
|
-
* enables keep-alive functionality for the connection
|
|
103
|
+
* enables keep-alive functionality for the connection (if httpsAgent is set then we use httpsAgent.keepAlive instead)
|
|
104
104
|
* @default true
|
|
105
105
|
* @type {boolean}
|
|
106
106
|
* @memberof ConfigurationRestAPI
|
|
@@ -485,6 +485,13 @@ interface RequestArgs {
|
|
|
485
485
|
timeUnit?: TimeUnit;
|
|
486
486
|
}
|
|
487
487
|
|
|
488
|
+
/**
|
|
489
|
+
* Resets the signer cache to a new empty WeakMap.
|
|
490
|
+
*
|
|
491
|
+
* This function clears the existing signer cache, creating a fresh WeakMap
|
|
492
|
+
* to store RequestSigner instances associated with configuration objects.
|
|
493
|
+
*/
|
|
494
|
+
declare const clearSignerCache: () => void;
|
|
488
495
|
/**
|
|
489
496
|
* Generates a query string from an object of parameters.
|
|
490
497
|
*
|
|
@@ -520,11 +527,11 @@ declare function delay(ms: number): Promise<void>;
|
|
|
520
527
|
*/
|
|
521
528
|
declare function getTimestamp(): number;
|
|
522
529
|
/**
|
|
523
|
-
* Generates a signature for
|
|
530
|
+
* Generates a signature for the given configuration and query parameters using a cached request signer.
|
|
524
531
|
*
|
|
525
|
-
* @param configuration -
|
|
526
|
-
* @param queryParams - The
|
|
527
|
-
* @returns
|
|
532
|
+
* @param configuration - Configuration object containing API secret, private key, and optional passphrase.
|
|
533
|
+
* @param queryParams - The query parameters to be signed.
|
|
534
|
+
* @returns A string representing the generated signature.
|
|
528
535
|
*/
|
|
529
536
|
declare const getSignature: (configuration: {
|
|
530
537
|
apiSecret?: string;
|
|
@@ -540,6 +547,20 @@ declare const getSignature: (configuration: {
|
|
|
540
547
|
* @throws {RequiredError} If the parameter is null or undefined.
|
|
541
548
|
*/
|
|
542
549
|
declare const assertParamExists: (functionName: string, paramName: string, paramValue: unknown) => void;
|
|
550
|
+
/**
|
|
551
|
+
* Recursively flattens an object or array into URL search parameters.
|
|
552
|
+
*
|
|
553
|
+
* This function handles nested objects and arrays by converting them into dot-notation query parameters.
|
|
554
|
+
* It supports different types of parameters:
|
|
555
|
+
* - Arrays can be stringified or recursively added
|
|
556
|
+
* - Objects are flattened with dot notation keys
|
|
557
|
+
* - Primitive values are converted to strings
|
|
558
|
+
*
|
|
559
|
+
* @param urlSearchParams The URLSearchParams object to modify
|
|
560
|
+
* @param parameter The parameter to flatten (can be an object, array, or primitive)
|
|
561
|
+
* @param key Optional key for nested parameters, used for creating dot-notation keys
|
|
562
|
+
*/
|
|
563
|
+
declare function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: unknown, key?: string): void;
|
|
543
564
|
/**
|
|
544
565
|
* Sets the search parameters of the provided URL by flattening the given objects into the URL's search parameters.
|
|
545
566
|
*
|
|
@@ -943,7 +964,7 @@ interface WebsocketStream<T> {
|
|
|
943
964
|
* @param event - Event name (currently supports "message").
|
|
944
965
|
* @param callback - Callback function to handle incoming data.
|
|
945
966
|
*/
|
|
946
|
-
on(event: 'message', callback: (data: T) => void): void;
|
|
967
|
+
on(event: 'message', callback: (data: T) => void | Promise<void>): void;
|
|
947
968
|
/**
|
|
948
969
|
* Unsubscribe from the stream and clean up resources.
|
|
949
970
|
*/
|
|
@@ -960,4 +981,4 @@ interface WebsocketStream<T> {
|
|
|
960
981
|
*/
|
|
961
982
|
declare function createStreamHandler<T>(websocketBase: WebsocketAPIBase | WebsocketStreamsBase, streamOrId: string, id?: string): WebsocketStream<T>;
|
|
962
983
|
|
|
963
|
-
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_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_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, 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 WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sendRequest, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
|
|
984
|
+
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_REST_API_PROD_URL, DERIVATIVES_TRADING_PORTFOLIO_MARGIN_REST_API_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, 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 WebsocketSendMsgOptions, type WebsocketStream, WebsocketStreamsBase, assertParamExists, buildQueryString, clearSignerCache, createStreamHandler, delay, getSignature, getTimestamp, httpRequestFunction, parseRateLimitHeaders, randomString, removeEmptyValue, replaceWebsocketStreamsPlaceholders, sendRequest, setFlattenedQueryParams, setSearchParams, shouldRetryRequest, sortObject, toPathString, validateTimeUnit };
|
package/dist/index.js
CHANGED
|
@@ -96,6 +96,7 @@ __export(index_exports, {
|
|
|
96
96
|
WebsocketStreamsBase: () => WebsocketStreamsBase,
|
|
97
97
|
assertParamExists: () => assertParamExists,
|
|
98
98
|
buildQueryString: () => buildQueryString,
|
|
99
|
+
clearSignerCache: () => clearSignerCache,
|
|
99
100
|
createStreamHandler: () => createStreamHandler,
|
|
100
101
|
delay: () => delay,
|
|
101
102
|
getSignature: () => getSignature,
|
|
@@ -106,6 +107,7 @@ __export(index_exports, {
|
|
|
106
107
|
removeEmptyValue: () => removeEmptyValue,
|
|
107
108
|
replaceWebsocketStreamsPlaceholders: () => replaceWebsocketStreamsPlaceholders,
|
|
108
109
|
sendRequest: () => sendRequest,
|
|
110
|
+
setFlattenedQueryParams: () => setFlattenedQueryParams,
|
|
109
111
|
setSearchParams: () => setSearchParams,
|
|
110
112
|
shouldRetryRequest: () => shouldRetryRequest,
|
|
111
113
|
sortObject: () => sortObject,
|
|
@@ -365,6 +367,52 @@ var import_crypto = __toESM(require("crypto"));
|
|
|
365
367
|
var import_fs = __toESM(require("fs"));
|
|
366
368
|
var import_https = __toESM(require("https"));
|
|
367
369
|
var import_axios = __toESM(require("axios"));
|
|
370
|
+
var signerCache = /* @__PURE__ */ new WeakMap();
|
|
371
|
+
var RequestSigner = class {
|
|
372
|
+
constructor(configuration) {
|
|
373
|
+
if (configuration.apiSecret && !configuration.privateKey) {
|
|
374
|
+
this.apiSecret = configuration.apiSecret;
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
if (configuration.privateKey) {
|
|
378
|
+
let privateKey = configuration.privateKey;
|
|
379
|
+
if (typeof privateKey === "string" && import_fs.default.existsSync(privateKey)) {
|
|
380
|
+
privateKey = import_fs.default.readFileSync(privateKey, "utf-8");
|
|
381
|
+
}
|
|
382
|
+
const keyInput = { key: privateKey };
|
|
383
|
+
if (configuration.privateKeyPassphrase && typeof configuration.privateKeyPassphrase === "string") {
|
|
384
|
+
keyInput.passphrase = configuration.privateKeyPassphrase;
|
|
385
|
+
}
|
|
386
|
+
try {
|
|
387
|
+
this.keyObject = import_crypto.default.createPrivateKey(keyInput);
|
|
388
|
+
this.keyType = this.keyObject.asymmetricKeyType;
|
|
389
|
+
} catch {
|
|
390
|
+
throw new Error(
|
|
391
|
+
"Invalid private key. Please provide a valid RSA or ED25519 private key."
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
throw new Error("Either 'apiSecret' or 'privateKey' must be provided for signed requests.");
|
|
397
|
+
}
|
|
398
|
+
sign(queryParams) {
|
|
399
|
+
const params = buildQueryString(queryParams);
|
|
400
|
+
if (this.apiSecret)
|
|
401
|
+
return import_crypto.default.createHmac("sha256", this.apiSecret).update(params).digest("hex");
|
|
402
|
+
if (this.keyObject && this.keyType) {
|
|
403
|
+
const data = Buffer.from(params);
|
|
404
|
+
if (this.keyType === "rsa")
|
|
405
|
+
return import_crypto.default.sign("RSA-SHA256", data, this.keyObject).toString("base64");
|
|
406
|
+
if (this.keyType === "ed25519")
|
|
407
|
+
return import_crypto.default.sign(null, data, this.keyObject).toString("base64");
|
|
408
|
+
throw new Error("Unsupported private key type. Must be RSA or ED25519.");
|
|
409
|
+
}
|
|
410
|
+
throw new Error("Signer is not properly initialized.");
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
var clearSignerCache = function() {
|
|
414
|
+
signerCache = /* @__PURE__ */ new WeakMap();
|
|
415
|
+
};
|
|
368
416
|
function buildQueryString(params) {
|
|
369
417
|
if (!params) return "";
|
|
370
418
|
return Object.entries(params).map(stringifyKeyValuePair).join("&");
|
|
@@ -391,39 +439,12 @@ function getTimestamp() {
|
|
|
391
439
|
return Date.now();
|
|
392
440
|
}
|
|
393
441
|
var getSignature = function(configuration, queryParams) {
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
} else if (configuration?.privateKey) {
|
|
399
|
-
let privateKey = configuration.privateKey;
|
|
400
|
-
if (typeof privateKey === "string" && import_fs.default.existsSync(privateKey)) {
|
|
401
|
-
privateKey = import_fs.default.readFileSync(privateKey, "utf-8");
|
|
402
|
-
}
|
|
403
|
-
let keyObject;
|
|
404
|
-
try {
|
|
405
|
-
const privateKeyObj = { key: privateKey };
|
|
406
|
-
if (configuration.privateKeyPassphrase && typeof configuration.privateKeyPassphrase === "string") {
|
|
407
|
-
privateKeyObj.passphrase = configuration.privateKeyPassphrase;
|
|
408
|
-
}
|
|
409
|
-
keyObject = import_crypto.default.createPrivateKey(privateKeyObj);
|
|
410
|
-
} catch {
|
|
411
|
-
throw new Error(
|
|
412
|
-
"Invalid private key. Please provide a valid RSA or ED25519 private key."
|
|
413
|
-
);
|
|
414
|
-
}
|
|
415
|
-
const keyType = keyObject.asymmetricKeyType;
|
|
416
|
-
if (keyType === "rsa") {
|
|
417
|
-
signature = import_crypto.default.sign("RSA-SHA256", Buffer.from(params), keyObject).toString("base64");
|
|
418
|
-
} else if (keyType === "ed25519") {
|
|
419
|
-
signature = import_crypto.default.sign(null, Buffer.from(params), keyObject).toString("base64");
|
|
420
|
-
} else {
|
|
421
|
-
throw new Error("Unsupported private key type. Must be RSA or ED25519.");
|
|
422
|
-
}
|
|
423
|
-
} else {
|
|
424
|
-
throw new Error("Either 'apiSecret' or 'privateKey' must be provided for signed requests.");
|
|
442
|
+
let signer = signerCache.get(configuration);
|
|
443
|
+
if (!signer) {
|
|
444
|
+
signer = new RequestSigner(configuration);
|
|
445
|
+
signerCache.set(configuration, signer);
|
|
425
446
|
}
|
|
426
|
-
return
|
|
447
|
+
return signer.sign(queryParams);
|
|
427
448
|
};
|
|
428
449
|
var assertParamExists = function(functionName, paramName, paramValue) {
|
|
429
450
|
if (paramValue === null || paramValue === void 0) {
|
|
@@ -435,25 +456,26 @@ var assertParamExists = function(functionName, paramName, paramValue) {
|
|
|
435
456
|
};
|
|
436
457
|
function setFlattenedQueryParams(urlSearchParams, parameter, key = "") {
|
|
437
458
|
if (parameter == null) return;
|
|
459
|
+
if (Array.isArray(parameter)) {
|
|
460
|
+
if (key)
|
|
461
|
+
urlSearchParams.set(key, JSON.stringify(parameter));
|
|
462
|
+
else
|
|
463
|
+
for (const item of parameter) {
|
|
464
|
+
setFlattenedQueryParams(urlSearchParams, item, "");
|
|
465
|
+
}
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
438
468
|
if (typeof parameter === "object") {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
(currentKey) => setFlattenedQueryParams(
|
|
444
|
-
urlSearchParams,
|
|
445
|
-
parameter[currentKey],
|
|
446
|
-
`${key}${key !== "" ? "." : ""}${currentKey}`
|
|
447
|
-
)
|
|
448
|
-
);
|
|
449
|
-
}
|
|
450
|
-
} else {
|
|
451
|
-
if (urlSearchParams.has(key)) {
|
|
452
|
-
urlSearchParams.append(key, String(parameter));
|
|
453
|
-
} else {
|
|
454
|
-
urlSearchParams.set(key, String(parameter));
|
|
469
|
+
for (const subKey of Object.keys(parameter)) {
|
|
470
|
+
const subVal = parameter[subKey];
|
|
471
|
+
const newKey = key ? `${key}.${subKey}` : subKey;
|
|
472
|
+
setFlattenedQueryParams(urlSearchParams, subVal, newKey);
|
|
455
473
|
}
|
|
474
|
+
return;
|
|
456
475
|
}
|
|
476
|
+
const str = String(parameter);
|
|
477
|
+
if (urlSearchParams.has(key)) urlSearchParams.append(key, str);
|
|
478
|
+
else urlSearchParams.set(key, str);
|
|
457
479
|
}
|
|
458
480
|
var setSearchParams = function(url, ...objects) {
|
|
459
481
|
const searchParams = new URLSearchParams(url.search);
|
|
@@ -475,18 +497,13 @@ var httpRequestFunction = async function(axiosArgs, configuration) {
|
|
|
475
497
|
...axiosArgs.options,
|
|
476
498
|
url: (import_axios.default.defaults?.baseURL ? "" : configuration?.basePath ?? "") + axiosArgs.url
|
|
477
499
|
};
|
|
478
|
-
if (configuration?.keepAlive)
|
|
479
|
-
axiosRequestArgs.httpsAgent = new import_https.default.Agent({
|
|
480
|
-
|
|
481
|
-
keepAlive: true
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
if (configuration?.compression) {
|
|
500
|
+
if (configuration?.keepAlive && !configuration?.baseOptions?.httpsAgent)
|
|
501
|
+
axiosRequestArgs.httpsAgent = new import_https.default.Agent({ keepAlive: true });
|
|
502
|
+
if (configuration?.compression)
|
|
485
503
|
axiosRequestArgs.headers = {
|
|
486
504
|
...axiosRequestArgs.headers,
|
|
487
505
|
"Accept-Encoding": "gzip, deflate, br"
|
|
488
506
|
};
|
|
489
|
-
}
|
|
490
507
|
const retries = configuration?.retries ?? 0;
|
|
491
508
|
const backoff = configuration?.backoff ?? 0;
|
|
492
509
|
let attempt = 0;
|
|
@@ -499,7 +516,13 @@ var httpRequestFunction = async function(axiosArgs, configuration) {
|
|
|
499
516
|
});
|
|
500
517
|
const rateLimits = parseRateLimitHeaders(response.headers);
|
|
501
518
|
return {
|
|
502
|
-
data: async () =>
|
|
519
|
+
data: async () => {
|
|
520
|
+
try {
|
|
521
|
+
return JSON.parse(response.data);
|
|
522
|
+
} catch (err) {
|
|
523
|
+
throw new Error(`Failed to parse JSON response: ${err}`);
|
|
524
|
+
}
|
|
525
|
+
},
|
|
503
526
|
status: response.status,
|
|
504
527
|
headers: response.headers,
|
|
505
528
|
rateLimits
|
|
@@ -520,7 +543,11 @@ var httpRequestFunction = async function(axiosArgs, configuration) {
|
|
|
520
543
|
let data = {};
|
|
521
544
|
if (responseData && responseData !== null) {
|
|
522
545
|
if (typeof responseData === "string" && responseData !== "")
|
|
523
|
-
|
|
546
|
+
try {
|
|
547
|
+
data = JSON.parse(responseData);
|
|
548
|
+
} catch {
|
|
549
|
+
data = {};
|
|
550
|
+
}
|
|
524
551
|
else if (typeof responseData === "object")
|
|
525
552
|
data = responseData;
|
|
526
553
|
}
|
|
@@ -1469,7 +1496,11 @@ function createStreamHandler(websocketBase, streamOrId, id) {
|
|
|
1469
1496
|
return {
|
|
1470
1497
|
on: (event, callback) => {
|
|
1471
1498
|
if (event === "message") {
|
|
1472
|
-
registeredCallback = (data) =>
|
|
1499
|
+
registeredCallback = (data) => {
|
|
1500
|
+
Promise.resolve(callback(data)).catch((err) => {
|
|
1501
|
+
websocketBase.logger.error(`Error in stream callback: ${err}`);
|
|
1502
|
+
});
|
|
1503
|
+
};
|
|
1473
1504
|
const callbackSet = websocketBase.streamCallbackMap.get(streamOrId) ?? /* @__PURE__ */ new Set();
|
|
1474
1505
|
callbackSet.add(registeredCallback);
|
|
1475
1506
|
websocketBase.streamCallbackMap.set(streamOrId, callbackSet);
|
|
@@ -1551,6 +1582,7 @@ function createStreamHandler(websocketBase, streamOrId, id) {
|
|
|
1551
1582
|
WebsocketStreamsBase,
|
|
1552
1583
|
assertParamExists,
|
|
1553
1584
|
buildQueryString,
|
|
1585
|
+
clearSignerCache,
|
|
1554
1586
|
createStreamHandler,
|
|
1555
1587
|
delay,
|
|
1556
1588
|
getSignature,
|
|
@@ -1561,6 +1593,7 @@ function createStreamHandler(websocketBase, streamOrId, id) {
|
|
|
1561
1593
|
removeEmptyValue,
|
|
1562
1594
|
replaceWebsocketStreamsPlaceholders,
|
|
1563
1595
|
sendRequest,
|
|
1596
|
+
setFlattenedQueryParams,
|
|
1564
1597
|
setSearchParams,
|
|
1565
1598
|
shouldRetryRequest,
|
|
1566
1599
|
sortObject,
|