import { WS_KEY_MAP } from '../../util/websocket-util.js';
import { CancelOrderRequestV3 } from '../request/v3/trade.js';
import { CancelOrderResponseV3 } from '../response/v3/trade.js';
import { WSAPIPlaceOrderRequestV3 } from './ws-api-request.js';
import { WSAPIPlaceOrderResponseV3 } from './ws-api-response.js';
import { BitgetInstTypeV3, WsKey } from './ws-general.js';
export type WSOperation = 'subscribe' | 'unsubscribe' | 'login';
export type WSAPIOperation = 'place-order' | 'batch-place' | 'cancel-order' | 'batch-cancel';
export declare const WS_API_Operations: WSAPIOperation[];
export interface WSOperationLoginParams {
    apiKey: string;
    passphrase: string;
    timestamp: number;
    sign: string;
}
export interface WSAPIRequestBitgetV3<TWSParams> {
    op: 'trade';
    id: string;
    category: BitgetInstTypeV3;
    topic: WSAPIOperation;
    args: TWSParams | TWSParams[];
}
export interface WSAPIRequestFlags {
    /** If true, will skip auth requirement for WS API connection */
    authIsOptional?: boolean | undefined;
}
export type Exact<T> = {
    [K: string]: never;
} & {
    [K in keyof T]: T[K];
};
/**

/**
 * V2 request looks like this:
{
  "op":"subscribe",
  "args":[
      {
          "instType":"SPOT",
          "channel":"ticker",
          "instId":"BTCUSDT"
      },
      {
          "instType":"SPOT",
          "channel":"candle5m",
          "instId":"BTCUSDT"
      }
  ]
}
 */
export interface WsRequestOperationBitget<TWSRequestArg> {
    op: WSOperation;
    args?: (TWSRequestArg | string | number)[];
}
export interface WSAPIResponse<TResponseData extends object = object, TOperation extends WSAPIOperation = WSAPIOperation> {
    wsKey: WsKey;
    /** Auto-generated */
    id: string;
    event: 'trade';
    category: BitgetInstTypeV3;
    topic: TOperation;
    args: TResponseData;
    code: '0' | string;
    msg: 'success' | string;
    ts: string;
}
/**
 * List of operations supported for this WsKey (connection)
 */
export interface WsAPIWsKeyTopicMap {
    [WS_KEY_MAP.v3Private]: WSAPIOperation;
}
/**
 * Request parameters expected per operation
 */
export interface WsAPITopicRequestParamMap {
    'place-order': WSAPIPlaceOrderRequestV3;
    'batch-place': WSAPIPlaceOrderRequestV3[];
    'cancel-order': CancelOrderRequestV3;
    'batch-cancel': CancelOrderRequestV3[];
}
/**
 * Response structure expected for each operation
 */
export interface WsAPIOperationResponseMap {
    'place-order': WSAPIResponse<[WSAPIPlaceOrderResponseV3], 'place-order'>;
    'batch-place': WSAPIResponse<WSAPIPlaceOrderResponseV3[], 'batch-place'>;
    'cancel-order': WSAPIResponse<[CancelOrderResponseV3], 'cancel-order'>;
    'batch-cancel': WSAPIResponse<CancelOrderResponseV3[], 'batch-cancel'>;
}
