diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 2303f41..a228bf0 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -7,7 +7,7 @@ module.exports = { }, plugins: [ '@typescript-eslint/eslint-plugin', - 'simple-import-sort', + // 'simple-import-sort', // 'require-extensions', ], extends: [ @@ -78,7 +78,7 @@ module.exports = { '@typescript-eslint/interface-name-prefix': 'off', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', - 'simple-import-sort/imports': 'error', - 'simple-import-sort/exports': 'error', + // 'simple-import-sort/imports': 'error', + // 'simple-import-sort/exports': 'error', }, }; diff --git a/src/copy-trading-client.ts b/src/copy-trading-client.ts index 45f85b9..1fa226f 100644 --- a/src/copy-trading-client.ts +++ b/src/copy-trading-client.ts @@ -86,7 +86,10 @@ export class CopyTradingClient extends BaseRestClient { ); } - /** Close Order. This endpoint's rate_limit will decrease by 10 per request; ie, one request to this endpoint consumes 10 from the limit allowed per minute. */ + /** Close Order. + * This endpoint's rate_limit will decrease by 10 per request; + * ie, one request to this endpoint consumes 10 from the limit allowed per minute. + */ closeOrder( params: CopyTradingCloseOrderRequest, ): Promise> { diff --git a/src/rest-client-v5.ts b/src/rest-client-v5.ts index 7a77635..1bb0efa 100644 --- a/src/rest-client-v5.ts +++ b/src/rest-client-v5.ts @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { APIResponseV3, @@ -242,7 +243,7 @@ export class RestClientV5 extends BaseRestClient { console.log(result); console.log( - `Your approximate latency to exchange server: + `Your approximate latency to exchange server: One way: ${estimatedOneWayLatency}ms. Round trip: ${roundTripTime}ms. `, diff --git a/src/spot-client-v3.ts b/src/spot-client-v3.ts index ddd443a..4bc1e8f 100644 --- a/src/spot-client-v3.ts +++ b/src/spot-client-v3.ts @@ -53,7 +53,7 @@ export class SpotClientV3 extends BaseRestClient { getMergedOrderBook( symbol: string, scale?: number, - limit?: number + limit?: number, ): Promise> { return this.get('/spot/v3/public/quote/depth/merged', { symbol, @@ -73,7 +73,7 @@ export class SpotClientV3 extends BaseRestClient { interval: KlineInterval, limit?: number, startTime?: number, - endTime?: number + endTime?: number, ): Promise> { return this.get('/spot/v3/public/quote/kline', { symbol, @@ -124,7 +124,7 @@ export class SpotClientV3 extends BaseRestClient { /** Batch cancel orders */ cancelOrderBatch( - params: SpotCancelOrderBatchRequest + params: SpotCancelOrderBatchRequest, ): Promise> { const orderTypes = params.orderTypes ? params.orderTypes.join(',') @@ -149,7 +149,7 @@ export class SpotClientV3 extends BaseRestClient { symbol?: string, orderId?: string, limit?: number, - orderCategory?: 0 | 1 + orderCategory?: 0 | 1, ): Promise> { return this.getPrivate('/spot/v3/private/open-orders', { symbol, @@ -164,7 +164,7 @@ export class SpotClientV3 extends BaseRestClient { symbol?: string, orderId?: string, limit?: number, - orderCategory?: 0 | 1 + orderCategory?: 0 | 1, ): Promise> { return this.getPrivate('/spot/v3/private/history-orders', { symbol, @@ -224,7 +224,7 @@ export class SpotClientV3 extends BaseRestClient { purchaseLeveragedToken( ltCode: string, ltAmount: string, - serialNo?: string + serialNo?: string, ): Promise> { return this.postPrivate('/spot/v3/private/purchase', { ltCode, @@ -237,7 +237,7 @@ export class SpotClientV3 extends BaseRestClient { redeemLeveragedToken( ltCode: string, ltAmount: string, - serialNo?: string + serialNo?: string, ): Promise> { return this.postPrivate('/spot/v3/private/redeem', { ltCode, @@ -248,7 +248,7 @@ export class SpotClientV3 extends BaseRestClient { /** Get leveraged token purchase/redemption history */ getLeveragedTokenPRHistory( - params?: SpotLeveragedTokenPRHistoryRequest + params?: SpotLeveragedTokenPRHistoryRequest, ): Promise> { return this.getPrivate('/spot/v3/private/record', params); } @@ -262,7 +262,7 @@ export class SpotClientV3 extends BaseRestClient { /** Borrow margin loan */ borrowCrossMarginLoan( coin: string, - qty: string + qty: string, ): Promise> { return this.postPrivate('/spot/v3/private/cross-margin-loan', { coin, @@ -280,7 +280,7 @@ export class SpotClientV3 extends BaseRestClient { /** Query borrowing info */ getCrossMarginBorrowingInfo( - params?: SpotCrossMarginBorrowingInfoRequest + params?: SpotCrossMarginBorrowingInfoRequest, ): Promise> { return this.getPrivate('/spot/v3/private/cross-margin-orders', params); } @@ -297,11 +297,11 @@ export class SpotClientV3 extends BaseRestClient { /** Query repayment history */ getCrossMarginRepaymentHistory( - params?: SpotCrossMarginRepaymentHistoryRequest + params?: SpotCrossMarginRepaymentHistoryRequest, ): Promise> { return this.getPrivate( '/spot/v3/private/cross-margin-repay-history', - params + params, ); } } diff --git a/src/types/request/linear.ts b/src/types/request/linear.ts index 3ec68fe..4e35455 100644 --- a/src/types/request/linear.ts +++ b/src/types/request/linear.ts @@ -133,12 +133,12 @@ export interface LinearSetMarginSwitchRequest { export interface LinearSetPositionModeRequest { symbol: string; - mode: typeof linearPositionModeEnum[keyof typeof linearPositionModeEnum]; + mode: (typeof linearPositionModeEnum)[keyof typeof linearPositionModeEnum]; } export interface LinearSetPositionTpSlModeRequest { symbol: string; - tp_sl_mode: typeof positionTpSlModeEnum[keyof typeof positionTpSlModeEnum]; + tp_sl_mode: (typeof positionTpSlModeEnum)[keyof typeof positionTpSlModeEnum]; } export interface LinearSetAddReduceMarginRequest { diff --git a/src/types/v5-shared.ts b/src/types/v5-shared.ts index 1cc8f95..514111f 100644 --- a/src/types/v5-shared.ts +++ b/src/types/v5-shared.ts @@ -11,7 +11,6 @@ export type InstrumentStatusV5 = | 'Settling' | 'Delivering' | 'Closed'; - export type MarginTradingV5 = 'none' | 'both' | 'utaOnly' | 'normalSpotOnly'; @@ -156,7 +155,7 @@ export type PositionIdx = 0 | 1 | 2; /** * Position status. - * + * * - 'Normal' * - 'Liq' in the liquidation progress * - 'Adl' in the auto-deleverage progress @@ -175,7 +174,10 @@ export type OptionTypeV5 = 'Call' | 'Put'; export type TradeModeV5 = 0 | 1; export type TPSLModeV5 = 'Full' | 'Partial'; -export type AccountMarginModeV5 = 'ISOLATED_MARGIN' | 'REGULAR_MARGIN' | 'PORTFOLIO_MARGIN'; +export type AccountMarginModeV5 = + | 'ISOLATED_MARGIN' + | 'REGULAR_MARGIN' + | 'PORTFOLIO_MARGIN'; export type UnifiedUpdateStatusV5 = 'FAIL' | 'PROCESS' | 'SUCCESS'; export type AccountTypeV5 = diff --git a/src/types/websocket.events.ts b/src/types/websocket.events.ts index fa06f6e..8c57f7a 100644 --- a/src/types/websocket.events.ts +++ b/src/types/websocket.events.ts @@ -60,7 +60,11 @@ export interface WSOrderbookV5 { seq: number; } -export type WSOrderbookEventV5 = WSPublicTopicEventV5; +export type WSOrderbookEventV5 = WSPublicTopicEventV5< + string, + 'delta' | 'snapshot', + WSOrderbookV5[] +>; export interface WSPositionV5 { category: string; @@ -103,7 +107,10 @@ export interface WSPositionV5 { seq: number; } -export type WSPositionEventV5 = WSPrivateTopicEventV5<'position', WSPositionV5[]>; +export type WSPositionEventV5 = WSPrivateTopicEventV5< + 'position', + WSPositionV5[] +>; export interface WSAccountOrderV5 { category: CategoryV5; @@ -155,7 +162,10 @@ export interface WSAccountOrderV5 { updatedTime: string; } -export type WSAccountOrderEventV5 = WSPrivateTopicEventV5<'order', WSAccountOrderV5[]>; +export type WSAccountOrderEventV5 = WSPrivateTopicEventV5< + 'order', + WSAccountOrderV5[] +>; export interface WSExecutionV5 { category: CategoryV5; @@ -190,4 +200,7 @@ export interface WSExecutionV5 { marketUnit: string; } -export type WSExecutionEventV5 = WSPrivateTopicEventV5<'execution', WSExecutionV5[]>; \ No newline at end of file +export type WSExecutionEventV5 = WSPrivateTopicEventV5< + 'execution', + WSExecutionV5[] +>; diff --git a/src/unified-margin-client.ts b/src/unified-margin-client.ts index 049251d..bbfce4a 100644 --- a/src/unified-margin-client.ts +++ b/src/unified-margin-client.ts @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { APIResponseV3, diff --git a/src/usdc-perpetual-client.ts b/src/usdc-perpetual-client.ts index 58ab690..0c76819 100644 --- a/src/usdc-perpetual-client.ts +++ b/src/usdc-perpetual-client.ts @@ -1,3 +1,4 @@ +/* eslint-disable max-len */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { APIResponseV3, @@ -133,7 +134,10 @@ export class USDCPerpetualClient extends BaseRestClient { ); } - /** Active order parameters (such as quantity, price) and stop order parameters cannot be modified in one request at the same time. Please request modification separately. */ + /** + * Active order parameters (such as quantity, price) and stop order parameters cannot be modified in one request at the same time. + * Please request modification separately. + */ modifyOrder(params: USDCPerpModifyOrderRequest): Promise> { return this.postPrivate( '/perpetual/usdc/openapi/private/v1/replace-order', diff --git a/src/util/WsStore.ts b/src/util/WsStore.ts index 024022d..9ca4698 100644 --- a/src/util/WsStore.ts +++ b/src/util/WsStore.ts @@ -71,7 +71,7 @@ export default class WsStore { if (this.hasExistingActiveConnection(key)) { this.logger.warning( 'WsStore setConnection() overwriting existing open connection: ', - this.getWs(key) + this.getWs(key), ); } this.wsState[key] = { @@ -86,7 +86,7 @@ export default class WsStore { const ws = this.getWs(key); this.logger.warning( 'WsStore deleting state for connection still open: ', - ws + ws, ); ws?.close(); } @@ -107,7 +107,7 @@ export default class WsStore { if (this.isWsOpen(key)) { this.logger.warning( 'WsStore setConnection() overwriting existing open connection: ', - this.getWs(key) + this.getWs(key), ); } this.get(key, true)!.ws = wsConnection; diff --git a/src/util/browser-support.ts b/src/util/browser-support.ts index a7e0980..280ce37 100644 --- a/src/util/browser-support.ts +++ b/src/util/browser-support.ts @@ -1,6 +1,6 @@ export async function signMessage( message: string, - secret: string + secret: string, ): Promise { const encoder = new TextEncoder(); // eslint-disable-next-line no-undef @@ -9,21 +9,21 @@ export async function signMessage( encoder.encode(secret), { name: 'HMAC', hash: { name: 'SHA-256' } }, false, - ['sign'] + ['sign'], ); // eslint-disable-next-line no-undef const signature = await window.crypto.subtle.sign( 'HMAC', key, - encoder.encode(message) + encoder.encode(message), ); return Array.prototype.map .call( new Uint8Array(signature), (x: { toString: (arg0: number) => string }) => - ('00' + x.toString(16)).slice(-2) + ('00' + x.toString(16)).slice(-2), ) .join(''); } diff --git a/src/util/node-support.ts b/src/util/node-support.ts index bbbf8bd..0d352d7 100644 --- a/src/util/node-support.ts +++ b/src/util/node-support.ts @@ -3,7 +3,7 @@ import { createHmac } from 'crypto'; /** This is async because the browser version uses a promise (browser-support) */ export async function signMessage( message: string, - secret: string + secret: string, ): Promise { return createHmac('sha256', secret).update(message).digest('hex'); } diff --git a/src/util/typeGuards.ts b/src/util/typeGuards.ts index 44308f8..dbe78ab 100644 --- a/src/util/typeGuards.ts +++ b/src/util/typeGuards.ts @@ -2,7 +2,12 @@ * Use type guards to narrow down types with minimal efforts. */ -import { WSAccountOrderEventV5, WSExecutionEventV5, WSOrderbookEventV5, WSPositionEventV5 } from '../types/websocket.events'; +import { + WSAccountOrderEventV5, + WSExecutionEventV5, + WSOrderbookEventV5, + WSPositionEventV5, +} from '../types/websocket.events'; /** * Type guard to detect a V5 orderbook event (delta & snapshots) @@ -30,7 +35,7 @@ export function isWsOrderbookEventV5( /** * Type guard to detect a V5 position event. - * + * * @param event * @returns */ @@ -86,4 +91,4 @@ export function isWsExecutionEventV5( } return event['topic'] === 'execution'; -} \ No newline at end of file +} diff --git a/src/websocket-client.ts b/src/websocket-client.ts index 816524c..1a76fc5 100644 --- a/src/websocket-client.ts +++ b/src/websocket-client.ts @@ -4,18 +4,12 @@ import { EventEmitter } from 'events'; import WebSocket from 'isomorphic-ws'; +import { ContractClient } from './contract-client'; import { InverseClient } from './inverse-client'; import { LinearClient } from './linear-client'; -import { SpotClientV3 } from './spot-client-v3'; +import { RestClientV5 } from './rest-client-v5'; import { SpotClient } from './spot-client'; -import { USDCOptionClient } from './usdc-option-client'; -import { USDCPerpetualClient } from './usdc-perpetual-client'; -import { UnifiedMarginClient } from './unified-margin-client'; -import { ContractClient } from './contract-client'; - -import { signMessage } from './util/node-support'; -import WsStore from './util/WsStore'; - +import { SpotClientV3 } from './spot-client-v3'; import { APIMarket, CategoryV5, @@ -26,7 +20,10 @@ import { WsKey, WsTopic, } from './types'; - +import { WebsocketTopicSubscriptionConfirmationEvent } from './types/ws-events/topic-subscription-confirmation'; +import { UnifiedMarginClient } from './unified-margin-client'; +import { USDCOptionClient } from './usdc-option-client'; +import { USDCPerpetualClient } from './usdc-perpetual-client'; import { DefaultLogger, PUBLIC_WS_KEYS, @@ -44,8 +41,8 @@ import { safeTerminateWs, serializeParams, } from './util'; -import { RestClientV5 } from './rest-client-v5'; -import { WebsocketTopicSubscriptionConfirmationEvent } from './types/ws-events/topic-subscription-confirmation'; +import { signMessage } from './util/node-support'; +import WsStore from './util/WsStore'; const loggerCategory = { category: 'bybit-ws' };