okx-api
Version:
Complete Node.js SDK for OKX's REST APIs and WebSockets, with TypeScript & end-to-end tests
140 lines (138 loc) • 5.37 kB
TypeScript
import { WS_KEY_MAP, WsKey } from '../../util/websocket-util.js';
import { OrderIdRequest } from '../rest/request/trade.js';
import { OrderResult } from '../rest/response/private-trade.js';
import { numberInString } from '../rest/shared.js';
import { WSAPIAmendOrderRequestV5, WSAPIAmendSpreadOrderRequestV5, WSAPICancelSpreadOrderRequestV5, WSAPIMassCancelOrdersRequestV5, WSAPIPlaceOrderRequestV5, WSAPIPlaceSpreadOrderRequestV5, WSAPISpreadMassCancelOrdersRequestV5 } from './ws-api-request.js';
import { WSAPICancelOrderResultV5, WSAPISpreadAmendOrderResultV5, WSAPISpreadCancelOrderResultV5, WSAPISpreadPlaceOrderResultV5 } from './ws-api-response.js';
import { WsAuthRequestArg, WsChannelSubUnSubRequestArg } from './ws-request.js';
export interface WSAPIRequestFlags {
/** If true, will skip auth requirement for WS API connection */
authIsOptional?: boolean | undefined;
/**
* Request effective deadline. Unix timestamp format in milliseconds, e.g. 1597026383085
*
* Only applies for order placement and order amend (batch commands included)
*/
expTime?: numberInString;
}
export type WSOperation = 'subscribe' | 'unsubscribe' | 'login';
/**
*
* Top level requests with args
*
*/
/**
/**
* request looks like this:
{
"id": "1512",
"op": "subscribe",
"args": [
{
"channel": "tickers",
"instId": "BTC-USDT"
}
]
}
*/
export interface WsRequestOperationOKX<TWSRequestArg> {
id: string;
op: WSOperation;
args?: TWSRequestArg[];
}
export interface WsSubRequest extends WsRequestOperationOKX<WsChannelSubUnSubRequestArg> {
op: 'subscribe';
}
export interface WsUnsubRequest extends WsRequestOperationOKX<WsChannelSubUnSubRequestArg> {
op: 'unsubscribe';
}
export interface WsAuthRequest extends WsRequestOperationOKX<WsAuthRequestArg> {
op: 'login';
}
export type WSAPIPrivateOperations = 'order' | 'batch-orders' | 'cancel-order' | 'batch-cancel-orders' | 'amend-order' | 'batch-amend-orders' | 'mass-cancel';
export type WSAPIBusinessOperations = 'sprd-order' | 'sprd-amend-order' | 'sprd-cancel-order' | 'sprd-mass-cancel';
export type WSAPIOperation = WSAPIPrivateOperations | WSAPIBusinessOperations;
export declare const WS_API_Operations: WSAPIOperation[];
export declare const WS_API_PRIVATE_OPERATIONS: WSAPIPrivateOperations[];
export declare const WS_API_BUSINESS_OPERATIONS: WSAPIBusinessOperations[];
export declare const WS_API_TAG_OPERATIONS: WSAPIOperation[];
export interface WSAPIRequestOKX<TRequestParams> {
id: numberInString;
op: WSAPIOperation;
expTime?: numberInString;
args: TRequestParams[];
}
export interface WSAPIResponse<TResponseData extends object = object, TOperation extends WSAPIOperation = WSAPIOperation> {
wsKey: WsKey;
id: numberInString;
op: TOperation;
code: numberInString;
msg: string;
data: TResponseData;
inTime: numberInString;
outTime: numberInString;
}
export interface WSOperationLoginParams {
apiKey: string;
passphrase: string;
timestamp: number;
sign: string;
}
export type Exact<T> = {
[K: string]: never;
} & {
[K in keyof T]: T[K];
};
/**
* List of operations supported for this WsKey (connection)
*/
export interface WsAPIWsKeyTopicMap {
[WS_KEY_MAP.prodPrivate]: WSAPIPrivateOperations;
[WS_KEY_MAP.prodDemoPrivate]: WSAPIPrivateOperations;
[WS_KEY_MAP.prodBusiness]: WSAPIBusinessOperations;
[WS_KEY_MAP.prodDemoBusiness]: WSAPIBusinessOperations;
[WS_KEY_MAP.eeaLivePrivate]: WSAPIPrivateOperations;
[WS_KEY_MAP.eeaDemoPrivate]: WSAPIPrivateOperations;
[WS_KEY_MAP.usLivePrivate]: WSAPIPrivateOperations;
[WS_KEY_MAP.usDemoPrivate]: WSAPIPrivateOperations;
}
/**
* Request parameters expected per operation
*/
export interface WsAPITopicRequestParamMap {
order: WSAPIPlaceOrderRequestV5;
'batch-orders': WSAPIPlaceOrderRequestV5[];
'cancel-order': OrderIdRequest;
'batch-cancel-orders': OrderIdRequest[];
'amend-order': WSAPIAmendOrderRequestV5;
'batch-amend-orders': WSAPIAmendOrderRequestV5[];
'mass-cancel': WSAPIMassCancelOrdersRequestV5;
'sprd-order': WSAPIPlaceSpreadOrderRequestV5;
'sprd-amend-order': WSAPIAmendSpreadOrderRequestV5;
'sprd-cancel-order': WSAPICancelSpreadOrderRequestV5;
'sprd-mass-cancel': WSAPISpreadMassCancelOrdersRequestV5;
}
/**
* Response structure expected for each operation
*/
export interface WsAPIOperationResponseMap {
order: WSAPIResponse<[OrderResult], 'order'>;
'batch-orders': WSAPIResponse<OrderResult[], 'batch-orders'>;
'cancel-order': WSAPIResponse<[WSAPICancelOrderResultV5], 'cancel-order'>;
'batch-cancel-orders': WSAPIResponse<WSAPICancelOrderResultV5[], 'batch-cancel-orders'>;
'amend-order': WSAPIResponse<[OrderResult], 'amend-order'>;
'batch-amend-orders': WSAPIResponse<[OrderResult], 'batch-amend-orders'>;
'mass-cancel': WSAPIResponse<[{
result: boolean;
}], 'mass-cancel'>;
'sprd-order': WSAPIResponse<[WSAPISpreadPlaceOrderResultV5], 'sprd-order'>;
'sprd-amend-order': WSAPIResponse<[
WSAPISpreadAmendOrderResultV5
], 'sprd-amend-order'>;
'sprd-cancel-order': WSAPIResponse<[
WSAPISpreadCancelOrderResultV5
], 'sprd-cancel-order'>;
'sprd-mass-cancel': WSAPIResponse<[{
result: boolean;
}], 'sprd-mass-cancel'>;
}