Merge pull request #210 from tiagosiebler/types

v3.3.6: add response type for contract ticker
This commit is contained in:
Tiago
2022-12-28 13:43:24 +00:00
committed by GitHub
13 changed files with 59 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "bybit-api", "name": "bybit-api",
"version": "3.3.5", "version": "3.3.6",
"description": "Complete & robust node.js SDK for Bybit's REST APIs and WebSockets, with TypeScript & integration tests.", "description": "Complete & robust node.js SDK for Bybit's REST APIs and WebSockets, with TypeScript & integration 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 @@ export const API_ERROR_CODE = {
NO_ACTIVE_ORDER: 3100205, NO_ACTIVE_ORDER: 3100205,
/** E.g. USDC Options trading when the account hasn't been opened for USDC Options yet */ /** E.g. USDC Options trading when the account hasn't been opened for USDC Options yet */
ACCOUNT_NOT_EXIST: 3200200, ACCOUNT_NOT_EXIST: 3200200,
SET_MARGIN_MODE_FAILED_USDC: 3400045,
INCORRECT_MMP_PARAMETERS: 3500712, INCORRECT_MMP_PARAMETERS: 3500712,
INSTITION_MMP_PROFILE_NOT_FOUND: 3500713, INSTITION_MMP_PROFILE_NOT_FOUND: 3500713,
} as const; } as const;

View File

@@ -23,6 +23,7 @@ import {
ContractWalletFundRecordRequest, ContractWalletFundRecordRequest,
PaginatedResult, PaginatedResult,
ContractHistoricOrder, ContractHistoricOrder,
ContractSymbolTicker,
} from './types'; } from './types';
import { REST_CLIENT_TYPE_ENUM } from './util'; import { REST_CLIENT_TYPE_ENUM } from './util';
import BaseRestClient from './util/BaseRestClient'; import BaseRestClient from './util/BaseRestClient';
@@ -67,9 +68,9 @@ export class ContractClient extends BaseRestClient {
/** Get a symbol price/statistics ticker */ /** Get a symbol price/statistics ticker */
getSymbolTicker( getSymbolTicker(
category: UMCategory, category: UMCategory | '',
symbol?: string symbol?: string
): Promise<APIResponseV3<any>> { ): Promise<APIResponseV3<ContractSymbolTicker[]>> {
return this.get('/derivatives/v3/public/tickers', { category, symbol }); return this.get('/derivatives/v3/public/tickers', { category, symbol });
} }

View File

@@ -33,3 +33,27 @@ export interface ContractHistoricOrder {
triggerDirection: number; triggerDirection: number;
positionIdx: number; positionIdx: number;
} }
export interface ContractSymbolTicker {
symbol: string;
bidPrice: string;
askPrice: string;
lastPrice: string;
lastTickDirection: string;
prevPrice24h: string;
price24hPcnt: string;
highPrice24h: string;
lowPrice24h: string;
prevPrice1h: string;
markPrice: string;
indexPrice: string;
openInterest: string;
turnover24h: string;
volume24h: string;
fundingRate: string;
nextFundingTime: string;
predictedDeliveryPrice: string;
basisRate: string;
deliveryFeeRate: string;
deliveryTime: string;
}

View File

@@ -281,7 +281,7 @@ export function getWsKeyForTopic(
} }
throw new Error( throw new Error(
`Failed to determine wskey for unified perps topic: "${topic}` `Failed to determine wskey for unified perps topic: "${topic}"`
); );
} }
case 'contractInverse': { case 'contractInverse': {

View File

@@ -46,7 +46,7 @@ describe('Public Contract Inverse Websocket Client', () => {
const wsResponsePromise = waitForSocketEvent(wsClient, 'response'); const wsResponsePromise = waitForSocketEvent(wsClient, 'response');
const wsUpdatePromise = waitForSocketEvent(wsClient, 'update'); const wsUpdatePromise = waitForSocketEvent(wsClient, 'update');
const wsTopic = 'orderbook.25.BTCUSD'; const wsTopic = 'orderbook.1.BTCUSD';
wsClient.subscribe(wsTopic); wsClient.subscribe(wsTopic);
try { try {

View File

@@ -46,7 +46,7 @@ describe('Public Contract USDT Websocket Client', () => {
const wsResponsePromise = waitForSocketEvent(wsClient, 'response'); const wsResponsePromise = waitForSocketEvent(wsClient, 'response');
const wsUpdatePromise = waitForSocketEvent(wsClient, 'update'); const wsUpdatePromise = waitForSocketEvent(wsClient, 'update');
const wsTopic = 'orderbook.25.BTCUSDT'; const wsTopic = 'orderbook.1.BTCUSDT';
wsClient.subscribe(wsTopic); wsClient.subscribe(wsTopic);
try { try {

View File

@@ -58,18 +58,6 @@ describe('Public Spot V3 Websocket Client', () => {
req_id: wsTopic, req_id: wsTopic,
}); });
expect(wsUpdatePromise).resolves.toMatchObject({
data: {
a: expect.any(Array),
b: expect.any(Array),
s: symbol,
t: expect.any(Number),
},
topic: wsTopic,
ts: expect.any(Number),
type: 'delta',
});
wsClient.subscribe(wsTopic); wsClient.subscribe(wsTopic);
try { try {
@@ -82,9 +70,20 @@ describe('Public Spot V3 Websocket Client', () => {
} }
try { try {
await wsUpdatePromise; expect(await wsUpdatePromise).toMatchObject({
data: {
a: expect.any(Array),
b: expect.any(Array),
s: symbol,
t: expect.any(Number),
},
topic: wsTopic,
ts: expect.any(Number),
type: 'snapshot',
});
} catch (e) { } catch (e) {
console.error(`Wait for "${wsTopic}" event exception: `, e); console.error(`Wait for "${wsTopic}" event exception: `, e);
expect(e).toBeFalsy();
} }
}); });
}); });

View File

@@ -70,12 +70,14 @@ describe('Public Unified Margin Websocket Client (Perps - USDC)', () => {
s: 'BTCUSDT', s: 'BTCUSDT',
u: expect.any(Number), u: expect.any(Number),
}, },
wsKey: WS_KEY_MAP.unifiedPerpUSDTPublic,
topic: 'orderbook.25.BTCUSDC', topic: 'orderbook.25.BTCUSDC',
ts: expect.any(Number), ts: expect.any(Number),
type: 'snapshot', type: 'snapshot',
wsKey: WS_KEY_MAP.unifiedPerpUSDTPublic,
}); });
} catch (e) { } catch (e) {
console.error('unified margin perp ws public error: ', e);
// no data // no data
expect(e).toBeFalsy(); expect(e).toBeFalsy();
} }

View File

@@ -49,7 +49,7 @@ describe('Public Unified Margin Websocket Client (Perps - USDT)', () => {
const wsUpdatePromise = waitForSocketEvent(wsClient, 'update'); const wsUpdatePromise = waitForSocketEvent(wsClient, 'update');
// USDT should be detected and automatically routed through the USDT connection // USDT should be detected and automatically routed through the USDT connection
const topic = 'orderbook.25.BTCUSDT'; const topic = 'orderbook.1.BTCUSDT';
wsClient.subscribe(topic); wsClient.subscribe(topic);
try { try {
@@ -74,10 +74,11 @@ describe('Public Unified Margin Websocket Client (Perps - USDT)', () => {
}, },
topic: topic, topic: topic,
ts: expect.any(Number), ts: expect.any(Number),
type: 'snapshot',
wsKey: WS_KEY_MAP.unifiedPerpUSDTPublic, wsKey: WS_KEY_MAP.unifiedPerpUSDTPublic,
type: 'snapshot',
}); });
} catch (e) { } catch (e) {
console.error('unified margin perp usdt orderbook test fail', e);
// no data // no data
expect(e).toBeFalsy(); expect(e).toBeFalsy();
} }

View File

@@ -135,7 +135,10 @@ describe('Private USDC Options REST API POST Endpoints', () => {
it('setMarginMode()', async () => { it('setMarginMode()', async () => {
expect(await api.setMarginMode('REGULAR_MARGIN')).toMatchObject( expect(await api.setMarginMode('REGULAR_MARGIN')).toMatchObject(
successResponseObjectV3() {
retCode: API_ERROR_CODE.SET_MARGIN_MODE_FAILED_USDC,
}
// successResponseObjectV3()
); );
}); });

View File

@@ -71,7 +71,10 @@ describe('Private USDC Perp REST API POST Endpoints', () => {
it('setMarginMode()', async () => { it('setMarginMode()', async () => {
expect(await api.setMarginMode('REGULAR_MARGIN')).toMatchObject( expect(await api.setMarginMode('REGULAR_MARGIN')).toMatchObject(
successResponseObjectV3() {
retCode: API_ERROR_CODE.SET_MARGIN_MODE_FAILED_USDC,
}
// successResponseObjectV3()
); );
}); });

View File

@@ -69,6 +69,7 @@ describe('Public USDC Perp Websocket Client', () => {
type: 'snapshot', type: 'snapshot',
}); });
} catch (e) { } catch (e) {
console.error('usdc perp ws public error: ', e);
// no data // no data
expect(e).toBeFalsy(); expect(e).toBeFalsy();
} }