binance
Version:
Professional Node.js & JavaScript SDK for Binance REST APIs & WebSockets, with TypeScript & end-to-end tests.
299 lines (298 loc) • 16.4 kB
TypeScript
import { WS_KEY_MAP, WsKey } from '../../util/websockets/websocket-util';
import { FuturesExchangeInfo } from '../futures';
import { ExchangeInfo } from '../spot';
import { WSAPIAccountCommissionWSAPIRequest, WSAPIAccountInformationRequest, WSAPIAllOrderListsRequest, WSAPIAllOrdersRequest, WSAPIAvgPriceRequest, WSAPIExchangeInfoRequest, WSAPIFuturesOrderBookRequest, WSAPIFuturesOrderCancelRequest, WSAPIFuturesOrderModifyRequest, WSAPIFuturesOrderStatusRequest, WSAPIFuturesTickerBookRequest, WSAPIFuturesTickerPriceRequest, WSAPIKlinesRequest, WSAPIMyAllocationsRequest, WSAPIMyPreventedMatchesRequest, WSAPIMyTradesRequest, WSAPINewFuturesOrderRequest, WSAPINewSpotOrderRequest, WSAPIOpenOrdersCancelAllRequest, WSAPIOpenOrdersStatusRequest, WSAPIOrderAmendKeepPriorityRequest, WSAPIOrderBookRequest, WSAPIOrderCancelReplaceRequest, WSAPIOrderCancelRequest, WSAPIOrderListCancelRequest, WSAPIOrderListPlaceOCORequest, WSAPIOrderListPlaceOTOCORequest, WSAPIOrderListPlaceOTORequest, WSAPIOrderListPlaceRequest, WSAPIOrderListStatusRequest, WSAPIOrderStatusRequest, WSAPIOrderTestRequest, WSAPIRecvWindowTimestamp, WSAPISessionLogonRequest, WSAPISOROrderPlaceRequest, WSAPISOROrderTestRequest, WSAPITicker24hrRequest, WSAPITickerBookRequest, WSAPITickerPriceRequest, WSAPITickerRequest, WSAPITickerTradingDayRequest, WSAPITradesAggregateRequest, WSAPITradesHistoricalRequest, WSAPITradesRecentRequest } from './ws-api-requests';
import { WSAPIAccountCommission, WSAPIAccountInformation, WSAPIAggregateTrade, WSAPIAllocation, WSAPIAvgPrice, WSAPIBookTicker, WSAPIFullTicker, WSAPIFuturesAccountBalanceItem, WSAPIFuturesAccountStatus, WSAPIFuturesBookTicker, WSAPIFuturesOrder, WSAPIFuturesOrderBook, WSAPIFuturesPosition, WSAPIFuturesPositionV2, WSAPIFuturesPriceTicker, WSAPIKline, WSAPIMiniTicker, WSAPIOrder, WSAPIOrderBook, WSAPIOrderCancel, WSAPIOrderCancelReplaceResponse, WSAPIOrderListCancelResponse, WSAPIOrderListPlaceResponse, WSAPIOrderListStatusResponse, WSAPIOrderTestResponse, WSAPIOrderTestWithCommission, WSAPIPreventedMatch, WSAPIPriceTicker, WSAPIRateLimit, WSAPIServerTime, WSAPISessionStatus, WSAPISOROrderPlaceResponse, WSAPISOROrderTestResponse, WSAPISOROrderTestResponseWithCommission, WSAPISpotOrderResponse, WSAPITrade } from './ws-api-responses';
/**
* Standard WS commands (for consumers)
*/
export type WsOperation = 'SUBSCRIBE' | 'UNSUBSCRIBE' | 'LIST_SUBSCRIPTIONS' | 'SET_PROPERTY' | 'GET_PROPERTY';
/**
* WS API commands (for sending requests via WS)
*/
export declare const WS_API_Operations: readonly ["session.logon", "session.status", "session.logout", "ping", "time", "exchangeInfo", "depth", "trades.recent", "trades.historical", "trades.aggregate", "klines", "uiKlines", "avgPrice", "ticker.24hr", "ticker.tradingDay", "ticker", "ticker.price", "ticker.book", "account.status", "account.commission", "account.rateLimits.orders", "allOrders", "allOrderLists", "myTrades", "myPreventedMatches", "myAllocations", "v2/account.balance", "account.balance", "v2/account.status", "account.position", "v2/account.position", "order.place", "order.test", "order.status", "order.cancel", "order.cancelReplace", "order.amend.keepPriority", "order.modify", "openOrders.status", "openOrders.cancelAll", "orderList.place", "orderList.place.oco", "orderList.place.oto", "orderList.place.otoco", "orderList.status", "orderList.cancel", "openOrderLists.status", "sor.order.place", "sor.order.test", "userDataStream.start", "userDataStream.ping", "userDataStream.stop", "userDataStream.subscribe", "userDataStream.unsubscribe"];
export interface WSAPIUserDataListenKeyRequest {
apiKey: string;
listenKey: string;
}
export type WsAPIOperation = (typeof WS_API_Operations)[number];
export interface WsRequestOperationBinance<TWSTopic extends string, TWSParams extends object = any> {
method: WsOperation | WsAPIOperation;
params?: (TWSTopic | string | number)[] | TWSParams;
id: number;
}
export interface WSAPIResponse<TResponseData extends object = object> {
/** Auto-generated */
id: string;
status: number;
result: TResponseData;
rateLimits: {
rateLimitType: 'REQUEST_WEIGHT';
interval: 'MINUTE';
intervalNum: number;
limit: number;
count: number;
}[];
wsKey: WsKey;
isWSAPIResponse: boolean;
request?: any;
}
export type Exact<T> = {} & {
[K in keyof T]: T[K];
};
/**
* List of operations supported for this WsKey (connection)
*/
export interface WsAPIWsKeyTopicMap {
[WS_KEY_MAP.main]: WsOperation;
[WS_KEY_MAP.main2]: WsOperation;
[WS_KEY_MAP.main3]: WsOperation;
[WS_KEY_MAP.mainTestnetPublic]: WsOperation;
[WS_KEY_MAP.mainTestnetUserData]: WsOperation;
[WS_KEY_MAP.marginRiskUserData]: WsOperation;
[WS_KEY_MAP.usdm]: WsOperation;
[WS_KEY_MAP.usdmTestnet]: WsOperation;
[WS_KEY_MAP.coinm]: WsOperation;
[WS_KEY_MAP.coinm2]: WsOperation;
[WS_KEY_MAP.coinmTestnet]: WsOperation;
[WS_KEY_MAP.eoptions]: WsOperation;
[WS_KEY_MAP.portfolioMarginUserData]: WsOperation;
[WS_KEY_MAP.portfolioMarginProUserData]: WsOperation;
[WS_KEY_MAP.mainWSAPI]: WsAPIOperation;
[WS_KEY_MAP.mainWSAPI2]: WsAPIOperation;
[WS_KEY_MAP.mainWSAPITestnet]: WsAPIOperation;
[WS_KEY_MAP.usdmWSAPI]: WsAPIOperation;
[WS_KEY_MAP.usdmWSAPITestnet]: WsAPIOperation;
[WS_KEY_MAP.coinmWSAPI]: WsAPIOperation;
[WS_KEY_MAP.coinmWSAPITestnet]: WsAPIOperation;
}
export type WsAPIFuturesWsKey = typeof WS_KEY_MAP.usdmWSAPI | typeof WS_KEY_MAP.usdmWSAPITestnet;
/**
* Request parameters expected per operation.
*
* - Each "key" here is the name of the command/operation.
* - Each "value" here has the parameters required for the command.
*
* Make sure to add new topics to WS_API_Operations and the response param map too.
*/
export interface WsAPITopicRequestParamMap<TWSKey = WsKey> {
SUBSCRIBE: never;
UNSUBSCRIBE: never;
LIST_SUBSCRIPTIONS: never;
SET_PROPERTY: never;
GET_PROPERTY: never;
/**
* Authentication commands & parameters:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/authentication-requests
*/
'session.logon': WSAPISessionLogonRequest;
'session.status': void;
'session.logout': void;
/**
* General requests & parameters:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/general-requests
*/
ping: void;
time: void;
exchangeInfo: void | WSAPIExchangeInfoRequest;
/**
* Market data requests & parameters:
* - Spot:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/market-data-requests
* - Futures:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/market-data/websocket-api
*/
depth: TWSKey extends WsAPIFuturesWsKey ? WSAPIFuturesOrderBookRequest : WSAPIOrderBookRequest;
'trades.recent': WSAPITradesRecentRequest;
'trades.historical': WSAPITradesHistoricalRequest;
'trades.aggregate': WSAPITradesAggregateRequest;
klines: WSAPIKlinesRequest;
uiKlines: WSAPIKlinesRequest;
avgPrice: WSAPIAvgPriceRequest;
'ticker.24hr': void | WSAPITicker24hrRequest;
'ticker.tradingDay': WSAPITickerTradingDayRequest;
ticker: WSAPITickerRequest;
'ticker.price': void | TWSKey extends WsAPIFuturesWsKey ? WSAPIFuturesTickerPriceRequest | undefined : WSAPITickerPriceRequest | undefined;
'ticker.book': void | TWSKey extends WsAPIFuturesWsKey ? WSAPIFuturesTickerBookRequest | undefined : WSAPITickerBookRequest | undefined;
/**
* Account requests & parameters:
* - Spot:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/account-requests
* - Futures:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/account/websocket-api
*/
'account.status': void | (TWSKey extends WsAPIFuturesWsKey ? WSAPIRecvWindowTimestamp : WSAPIAccountInformationRequest);
'account.rateLimits.orders': void | WSAPIRecvWindowTimestamp;
allOrders: WSAPIAllOrdersRequest;
allOrderLists: void | WSAPIAllOrderListsRequest;
myTrades: WSAPIMyTradesRequest;
myPreventedMatches: WSAPIMyPreventedMatchesRequest;
myAllocations: WSAPIMyAllocationsRequest;
'account.commission': WSAPIAccountCommissionWSAPIRequest;
/**
* Futures account requests & parameters:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/account/websocket-api
*/
'account.position': WSAPIRecvWindowTimestamp;
'v2/account.position': WSAPIRecvWindowTimestamp;
'account.balance': WSAPIRecvWindowTimestamp;
'v2/account.balance': WSAPIRecvWindowTimestamp;
'v2/account.status': WSAPIRecvWindowTimestamp;
/**
* Trading requests & parameters:
* - Spot:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/trading-requests
* - Futures:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/trading/websocket-api
*/
'order.place': (TWSKey extends WsAPIFuturesWsKey ? WSAPINewFuturesOrderRequest : WSAPINewSpotOrderRequest) & {
timestamp?: number;
};
'order.test': WSAPIOrderTestRequest;
'order.status': TWSKey extends WsAPIFuturesWsKey ? WSAPIFuturesOrderStatusRequest : WSAPIOrderStatusRequest;
'order.cancel': TWSKey extends WsAPIFuturesWsKey ? WSAPIFuturesOrderCancelRequest : WSAPIOrderCancelRequest;
'order.modify': WSAPIFuturesOrderModifyRequest;
'order.cancelReplace': WSAPIOrderCancelReplaceRequest;
'order.amend.keepPriority': WSAPIOrderAmendKeepPriorityRequest;
'openOrders.status': WSAPIOpenOrdersStatusRequest;
'openOrders.cancelAll': WSAPIOpenOrdersCancelAllRequest;
/**
* Order list requests & parameters:
*/
'orderList.place': WSAPIOrderListPlaceRequest;
'orderList.place.oco': WSAPIOrderListPlaceOCORequest;
'orderList.place.oto': WSAPIOrderListPlaceOTORequest;
'orderList.place.otoco': WSAPIOrderListPlaceOTOCORequest;
'orderList.status': WSAPIOrderListStatusRequest;
'orderList.cancel': WSAPIOrderListCancelRequest;
'openOrderLists.status': WSAPIRecvWindowTimestamp;
/**
* SOR requests & parameters:
*/
'sor.order.place': WSAPISOROrderPlaceRequest;
'sor.order.test': WSAPISOROrderTestRequest;
/**
* User data stream:
*
* - Spot:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/user-data-stream-requests
*
* - Futures:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/account/websocket-api
*
* Note: for the user data stream, use the subscribe*UserDataStream() methods from the WS Client.
*/
'userDataStream.start': {
apiKey: string;
};
'userDataStream.ping': WSAPIUserDataListenKeyRequest;
'userDataStream.stop': WSAPIUserDataListenKeyRequest;
'userDataStream.subscribe': void;
'userDataStream.unsubscribe': void;
}
/**
* Response structure expected for each operation
*
* - Each "key" here is a command/request supported by the WS API
* - Each "value" here is the response schema for that command.
*/
export interface WsAPIOperationResponseMap {
[key: string]: unknown;
SUBSCRIBE: never;
UNSUBSCRIBE: never;
LIST_SUBSCRIPTIONS: never;
SET_PROPERTY: never;
GET_PROPERTY: never;
/**
* Session authentication responses:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/session-authentication
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/authentication-requests
*/
'session.login': WSAPIResponse<WSAPISessionStatus>;
'session.status': WSAPIResponse<WSAPISessionStatus>;
'session.logout': WSAPIResponse<WSAPISessionStatus>;
/**
* General responses:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/general-requests
*/
ping: unknown;
time: WSAPIResponse<WSAPIServerTime>;
exchangeInfo: WSAPIResponse<FuturesExchangeInfo | ExchangeInfo>;
/**
* Market data responses
* - Spot:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/market-data-requests
* - Futures:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/market-data/websocket-api
*/
depth: WSAPIResponse<WSAPIOrderBook | WSAPIFuturesOrderBook>;
'trades.recent': WSAPIResponse<WSAPITrade[]>;
'trades.historical': WSAPIResponse<WSAPITrade[]>;
'trades.aggregate': WSAPIResponse<WSAPIAggregateTrade[]>;
klines: WSAPIResponse<WSAPIKline[]>;
uiKlines: WSAPIResponse<WSAPIKline[]>;
avgPrice: WSAPIResponse<WSAPIAvgPrice>;
'ticker.24hr': WSAPIResponse<WSAPIFullTicker | WSAPIMiniTicker | WSAPIFullTicker[] | WSAPIMiniTicker[]>;
'ticker.tradingDay': WSAPIResponse<WSAPIFullTicker | WSAPIMiniTicker | WSAPIFullTicker[] | WSAPIMiniTicker[]>;
ticker: WSAPIResponse<WSAPIFullTicker | WSAPIMiniTicker | WSAPIFullTicker[] | WSAPIMiniTicker[]>;
'ticker.price': WSAPIResponse<WSAPIPriceTicker | WSAPIPriceTicker[] | WSAPIFuturesPriceTicker | WSAPIFuturesPriceTicker[]>;
'ticker.book': WSAPIResponse<WSAPIBookTicker | WSAPIBookTicker[] | WSAPIFuturesBookTicker | WSAPIFuturesBookTicker[]>;
/**
* Account responses:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/account-requests
*/
'account.status': WSAPIResponse<WSAPIAccountInformation | WSAPIFuturesAccountStatus>;
'account.commission': WSAPIResponse<WSAPIAccountCommission>;
'account.rateLimits.orders': WSAPIResponse<WSAPIRateLimit[]>;
allOrders: WSAPIResponse<WSAPIOrder[]>;
allOrderLists: WSAPIResponse<WSAPIOrderListStatusResponse[]>;
myTrades: WSAPIResponse<WSAPITrade[]>;
myPreventedMatches: WSAPIResponse<WSAPIPreventedMatch[]>;
myAllocations: WSAPIResponse<WSAPIAllocation[]>;
/**
* Futures account responses:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/account/websocket-api
*/
'account.position': WSAPIResponse<WSAPIFuturesPosition[]>;
'v2/account.position': WSAPIResponse<WSAPIFuturesPositionV2[]>;
'account.balance': WSAPIResponse<WSAPIFuturesAccountBalanceItem[]>;
'v2/account.balance': WSAPIResponse<WSAPIFuturesAccountBalanceItem[]>;
'v2/account.status': WSAPIResponse<WSAPIFuturesAccountStatus>;
/**
* Trading responses
* - Spot:
* https://developers.binance.com/docs/binance-spot-api-docs/web-socket-api/trading-requests
* - Futures:
* https://developers.binance.com/docs/derivatives/usds-margined-futures/trading/websocket-api
*/
'order.place': WSAPIResponse<WSAPISpotOrderResponse | WSAPIFuturesOrder>;
'order.test': WSAPIResponse<WSAPIOrderTestResponse | WSAPIOrderTestWithCommission>;
'order.status': WSAPIResponse<WSAPIOrder | WSAPIFuturesOrder>;
'order.cancel': WSAPIResponse<WSAPIOrderCancel | WSAPIFuturesOrder>;
'order.modify': WSAPIResponse<WSAPIFuturesOrder>;
'order.cancelReplace': WSAPIResponse<WSAPIOrderCancelReplaceResponse>;
'openOrders.status': WSAPIResponse<WSAPIOrder[] | WSAPIFuturesOrder[]>;
'openOrders.cancelAll': WSAPIResponse<(WSAPIOrderCancel | WSAPIOrderListCancelResponse)[]>;
/**
* Order list responses
*/
'orderList.place': WSAPIResponse<WSAPIOrderListPlaceResponse>;
'orderList.place.oco': WSAPIResponse<WSAPIOrderListPlaceResponse>;
'orderList.place.oto': WSAPIResponse<WSAPIOrderListPlaceResponse>;
'orderList.place.otoco': WSAPIResponse<WSAPIOrderListPlaceResponse>;
'orderList.status': WSAPIResponse<WSAPIOrderListStatusResponse>;
'orderList.cancel': WSAPIResponse<WSAPIOrderListCancelResponse>;
'openOrderLists.status': WSAPIResponse<WSAPIOrderListStatusResponse[]>;
/**
* SOR responses
*/
'sor.order.place': WSAPIResponse<WSAPISOROrderPlaceResponse>;
'sor.order.test': WSAPIResponse<WSAPISOROrderTestResponse | WSAPISOROrderTestResponseWithCommission>;
'userDataStream.start': WSAPIResponse<{
listenKey: string;
}>;
'userDataStream.ping': WSAPIResponse<object>;
'userDataStream.stop': WSAPIResponse<object>;
'userDataStream.subscribe': WSAPIResponse<object>;
'userDataStream.unsubscribe': WSAPIResponse<object>;
}