v3.10.18: feat(#368) add config for HTTP keep alive via axios

This commit is contained in:
tiagosiebler
2024-09-09 11:11:42 +01:00
parent 3f1e12ac9d
commit d7c2c02648
4 changed files with 27 additions and 3 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "bybit-api", "name": "bybit-api",
"version": "3.10.17", "version": "3.10.18",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "bybit-api", "name": "bybit-api",
"version": "3.10.17", "version": "3.10.18",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"axios": "^1.6.6", "axios": "^1.6.6",

View File

@@ -1,6 +1,6 @@
{ {
"name": "bybit-api", "name": "bybit-api",
"version": "3.10.17", "version": "3.10.18",
"description": "Complete & robust Node.js SDK for Bybit's REST APIs and WebSockets, with TypeScript & strong end to end tests.", "description": "Complete & robust Node.js SDK for Bybit's REST APIs and WebSockets, with TypeScript & strong end to end tests.",
"main": "lib/index.js", "main": "lib/index.js",
"types": "lib/index.d.ts", "types": "lib/index.d.ts",

View File

@@ -1,5 +1,6 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import axios, { AxiosRequestConfig, AxiosResponse, Method } from 'axios'; import axios, { AxiosRequestConfig, AxiosResponse, Method } from 'axios';
import https from 'https';
import { import {
APIID, APIID,
@@ -137,6 +138,16 @@ export default abstract class BaseRestClient {
}, },
}; };
// If enabled, configure a https agent with keepAlive enabled
if (this.options.keepAlive) {
// For more advanced configuration, raise an issue on GitHub or use the "networkOptions"
// parameter to define a custom httpsAgent with the desired properties
this.globalRequestOptions.httpsAgent = new https.Agent({
keepAlive: true,
keepAliveMsecs: this.options.keepAliveMsecs,
});
}
this.baseUrl = getRestBaseUrl(!!this.options.testnet, restOptions); this.baseUrl = getRestBaseUrl(!!this.options.testnet, restOptions);
this.key = this.options.key; this.key = this.options.key;
this.secret = this.options.secret; this.secret = this.options.secret;

View File

@@ -29,6 +29,19 @@ export interface RestClientOptions {
*/ */
enable_time_sync?: boolean; enable_time_sync?: boolean;
/**
* Enable keep alive for REST API requests (via axios).
* See: https://github.com/tiagosiebler/bybit-api/issues/368
*/
keepAlive?: boolean;
/**
* When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
* Only relevant if keepAlive is set to true.
* Default: 1000 (defaults comes from https agent)
*/
keepAliveMsecs?: number;
/** How often to sync time drift with bybit servers */ /** How often to sync time drift with bybit servers */
sync_interval_ms?: number | string; sync_interval_ms?: number | string;