Merge pull request #343 from tiagosiebler/proxyheadersexample

v3.10.3: feat(#340) fix pass-through headers for proxying via nginx. add second proxy example. feat(#399) add longshort ratio endpoint
This commit is contained in:
Tiago
2024-05-07 13:20:55 +01:00
committed by GitHub
9 changed files with 91 additions and 4 deletions

View File

@@ -17,7 +17,12 @@ const client = new RestClientV5(
// recv_window: 10000, // recv_window: 10000,
}, },
{ {
/**
* Axios has a native way of supporting http/https proxies. It works for most proxy services but not all.
* If you have issues making any proxied requests this way, take a look at the rest-v5-proxies2.ts example using the https-proxy-agent.
*/
proxy: { proxy: {
protocol: 'http', // or 'https'
host: 'proxyhost', host: 'proxyhost',
port: Number('proxyport'), port: Number('proxyport'),
auth: { auth: {

View File

@@ -0,0 +1,54 @@
// @ts-ignore
import { HttpsProxyAgent } from 'https-proxy-agent';
import { RestClientV5 } from '../src/index';
// or
// import { RestClientV5 } from 'bybit-api';
const key = process.env.API_KEY_COM;
const secret = process.env.API_SECRET_COM;
/**
* Some proxy services don't work with the proxy configuration that axios supports.
*
* For these, you can try using HttpsProxyAgent or SocksProxyAgent (depending on your proxy type, HTTP or SOCKS).
*
* The following example uses the HttpsProxyAgent (via the npm module https-proxy-agent).
*/
const proxyDetails = {
user: 'yourProxyUser',
pass: 'yourProxyPassword',
host: '127.0.0.1',
port: 31413,
};
const proxyURL = `http://${proxyDetails.user}:${proxyDetails.pass}@${proxyDetails.host}:${proxyDetails.port}`;
const proxyAgent = new HttpsProxyAgent(proxyURL);
const client = new RestClientV5(
{
key: key,
secret: secret,
parseAPIRateLimits: true,
testnet: true,
// Sometimes using a proxy introduces recv timestamp errors (due to the extra latency)
// If that happens, you can try increasing the recv window (which is 5000ms by default)
// recv_window: 10000,
},
{
httpAgent: proxyAgent,
httpsAgent: proxyAgent,
},
);
(async () => {
try {
const res = await client.getWalletBalance({ accountType: 'UNIFIED' });
console.log('response: ', JSON.stringify(res, null, 2));
} catch (e) {
console.error('request failed: ', e);
}
})();

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "bybit-api", "name": "bybit-api",
"version": "3.10.1", "version": "3.10.3",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "bybit-api", "name": "bybit-api",
"version": "3.10.1", "version": "3.10.3",
"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.2", "version": "3.10.3",
"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

@@ -69,6 +69,7 @@ import {
GetInternalDepositRecordParamsV5, GetInternalDepositRecordParamsV5,
GetInternalTransferParamsV5, GetInternalTransferParamsV5,
GetKlineParamsV5, GetKlineParamsV5,
GetLongShortRatioParamsV5,
GetMarkPriceKlineParamsV5, GetMarkPriceKlineParamsV5,
GetOpenInterestParamsV5, GetOpenInterestParamsV5,
GetOptionDeliveryPriceParamsV5, GetOptionDeliveryPriceParamsV5,
@@ -94,6 +95,7 @@ import {
InternalTransferRecordV5, InternalTransferRecordV5,
LeverageTokenInfoV5, LeverageTokenInfoV5,
LeveragedTokenMarketResultV5, LeveragedTokenMarketResultV5,
LongShortRatioV5,
MMPModifyParamsV5, MMPModifyParamsV5,
MMPStateV5, MMPStateV5,
OHLCKlineV5, OHLCKlineV5,
@@ -390,6 +392,12 @@ export class RestClientV5 extends BaseRestClient {
return this.get('/v5/market/delivery-price', params); return this.get('/v5/market/delivery-price', params);
} }
getLongShortRatio(
params: GetLongShortRatioParamsV5,
): Promise<APIResponseV3WithTime<{ list: LongShortRatioV5[] }>> {
return this.get('/v5/market/account-ratio', params);
}
/** /**
* *
****** Trade APIs ****** Trade APIs

View File

@@ -125,3 +125,10 @@ export interface GetDeliveryPriceParamsV5 {
limit?: number; limit?: number;
cursor?: string; cursor?: string;
} }
export interface GetLongShortRatioParamsV5 {
category: 'linear' | 'inverse';
symbol: string;
period: OpenInterestIntervalV5;
limit?: number;
}

View File

@@ -120,7 +120,7 @@ export interface SpotInstrumentInfoV5 {
riskParameters: { riskParameters: {
limitParameter: string; limitParameter: string;
marketParameter: string; marketParameter: string;
} };
} }
type InstrumentInfoV5Mapping = { type InstrumentInfoV5Mapping = {
@@ -290,3 +290,10 @@ export interface DeliveryPriceV5 {
deliveryPrice: string; deliveryPrice: string;
deliveryTime: string; deliveryTime: string;
} }
export interface LongShortRatioV5 {
symbol: string;
buyRatio: string;
sellRatio: string;
timestamp: string;
}

View File

@@ -132,6 +132,7 @@ export default abstract class BaseRestClient {
// custom request options based on axios specs - see: https://github.com/axios/axios#request-config // custom request options based on axios specs - see: https://github.com/axios/axios#request-config
...networkOptions, ...networkOptions,
headers: { headers: {
...networkOptions.headers,
'x-referer': APIID, 'x-referer': APIID,
}, },
}; };

5
tea.yaml Normal file
View File

@@ -0,0 +1,5 @@
---
version: 1.0.0
codeOwners:
- '0xeb1a7BF44a801e33a339705A266Afc0Cba3D6D54'
quorum: 1