Skip to content

Commit

Permalink
fix(): wsapi response mapping
Browse files Browse the repository at this point in the history
  • Loading branch information
tiagosiebler committed Jan 17, 2025
1 parent 56e945f commit 10b2af1
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 18 deletions.
16 changes: 6 additions & 10 deletions src/types/websockets/ws-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
CancelOrderParamsV5,
OrderParamsV5,
} from '../request';
import { OrderResultV5 } from '../response';
import { WsKey } from './ws-general';

export type WSAPIOperation = 'order.create' | 'order.amend' | 'order.cancel';
Expand Down Expand Up @@ -58,9 +59,6 @@ export interface WsAPITopicRequestParamMap {
// ping: undefined;
}

export type WsAPITopicRequestParams =
WsAPITopicRequestParamMap[keyof WsAPITopicRequestParamMap];

export interface WSAPIResponse<
TResponseData extends object = object,
TOperation extends WSAPIOperation = WSAPIOperation,
Expand All @@ -71,7 +69,7 @@ export interface WSAPIResponse<
retCode: 0 | number;
retMsg: 'OK' | string;
op: TOperation;
data: [TResponseData];
data: TResponseData;
header?: {
'X-Bapi-Limit': string;
'X-Bapi-Limit-Status': string;
Expand All @@ -88,12 +86,10 @@ export interface WSAPIResponse<
// string: object;
// }

export interface WsAPIOperationResponseMap<
TResponseType extends object = object,
> {
'order.create': WSAPIResponse<TResponseType, 'order.cancel'>;
'order.amend': WSAPIResponse<TResponseType, 'order.amend'>;
'order.cancel': WSAPIResponse<TResponseType, 'order.cancel'>;
export interface WsAPIOperationResponseMap {
'order.create': WSAPIResponse<OrderResultV5, 'order.create'>;
'order.amend': WSAPIResponse<OrderResultV5, 'order.amend'>;
'order.cancel': WSAPIResponse<OrderResultV5, 'order.cancel'>;
ping: {
retCode: 0 | number;
retMsg: 'OK' | string;
Expand Down
13 changes: 5 additions & 8 deletions src/websocket-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -696,6 +696,7 @@ export class WebsocketClient extends BaseWebsocketClient<WsKey> {

// WS API Exception
if (isError) {
console.log('wsAPI error: ', parsed);
try {
this.getWsStore().rejectDeferredPromise(
wsKey,
Expand Down Expand Up @@ -908,19 +909,16 @@ export class WebsocketClient extends BaseWebsocketClient<WsKey> {

// This overload allows the caller to omit the 3rd param, if it isn't required (e.g. for the login call)
async sendWSAPIRequest<
TWSKey extends keyof WsAPIWsKeyTopicMap,
TWSKey extends keyof WsAPIWsKeyTopicMap = keyof WsAPIWsKeyTopicMap,
TWSOperation extends
WsAPIWsKeyTopicMap[TWSKey] = WsAPIWsKeyTopicMap[TWSKey],
TWSParams extends
WsAPITopicRequestParamMap[TWSOperation] = WsAPITopicRequestParamMap[TWSOperation],
TWSAPIResponse extends
| WsAPIOperationResponseMap[TWSOperation]
| object = WsAPIOperationResponseMap[TWSOperation],
>(
wsKey: TWSKey,
operation: TWSOperation,
...params: TWSParams extends undefined ? [] : [TWSParams]
): Promise<TWSAPIResponse>;
): Promise<WsAPIOperationResponseMap[TWSOperation]>;

async sendWSAPIRequest<
TWSKey extends keyof WsAPIWsKeyTopicMap = keyof WsAPIWsKeyTopicMap,
Expand All @@ -929,13 +927,12 @@ export class WebsocketClient extends BaseWebsocketClient<WsKey> {
TWSParams extends
WsAPITopicRequestParamMap[TWSOperation] = WsAPITopicRequestParamMap[TWSOperation],
TWSAPIResponse extends
| WsAPIOperationResponseMap[TWSOperation]
| object = WsAPIOperationResponseMap[TWSOperation],
WsAPIOperationResponseMap[TWSOperation] = WsAPIOperationResponseMap[TWSOperation],
>(
wsKey: WsKey = WS_KEY_MAP.v5PrivateTrade,
operation: TWSOperation,
params: TWSParams,
): Promise<any> {
): Promise<WsAPIOperationResponseMap[TWSOperation]> {
this.logger.trace(`sendWSAPIRequest(): assert "${wsKey}" is connected`);
await this.assertIsConnected(wsKey);
this.logger.trace('sendWSAPIRequest()->assertIsConnected() ok');
Expand Down

0 comments on commit 10b2af1

Please sign in to comment.