import { APICredentials } from './utils';
import type { WsTradeOp, WsRequestOp, WsChannel, WsChannelSubUnSubRequestArg, WsEvent, WsTicker, WsTradeOpEvent, WsTradeRequest, WsOrderArg, WsCancelOrderArg, WsPosition, WsAccount, WsOrder } from './types';
interface WsEventMap {
    close: CloseEvent;
    error: ErrorEvent & WsApiEvent<WsEvent>;
    tickers: WsChannelEvent<WsTicker[]>;
    positions: WsChannelEvent<WsPosition[]>;
    orders: WsChannelEvent<WsOrder[]>;
    account: WsChannelEvent<WsAccount[]>;
}
type WsEventMapEx = WsEventMap & Record<WsRequestOp, WsApiEvent<WsEvent>> & Record<`${WsTradeOp}-${string}`, WsApiEvent<WsTradeOpEvent>> & Record<Exclude<WsChannel, keyof WsEventMap>, WsChannelEvent> & Record<string, Event>;
declare class WsApiEvent<T> extends Event {
    data: T;
    constructor(type: string, data: T);
}
declare class WsChannelEvent<T = any[]> extends Event {
    arg: WsChannelSubUnSubRequestArg;
    data: T;
    constructor(type: string, arg: WsChannelSubUnSubRequestArg, data: T);
}
declare class WsApi extends EventTarget {
    private url;
    protected ws?: WebSocket;
    private shouldReconnect;
    constructor(url: string);
    addEventListener<K extends keyof WsEventMapEx>(type: K, listener: (ev: WsEventMapEx[K]) => void, options?: AddEventListenerOptions | boolean): void;
    connect(): void;
    close(): void;
    subscribe(wsEvents: WsChannelSubUnSubRequestArg[] | WsChannelSubUnSubRequestArg): Promise<void>;
    unsubscribe(wsEvents: WsChannelSubUnSubRequestArg[] | WsChannelSubUnSubRequestArg): Promise<void>;
    waitForReady(timeout?: number): Promise<unknown>;
    protected send(data: any): Promise<void>;
}
export declare class WsPublic extends WsApi {
    static create(baseURL?: string): WsPublic;
    constructor(baseURL?: string);
}
export declare class WsPrivate extends WsApi {
    private credentials;
    static create(apiKey: string, apiSecret: string, passphrase: string, baseURL?: string): Promise<WsPrivate>;
    private ready;
    constructor(credentials: APICredentials, baseURL?: string);
    connect(): void;
    waitForReady(timeout?: number): Promise<void>;
    sendTradeOp(op: WsTradeRequest<WsOrderArg | WsCancelOrderArg>): Promise<WsTradeOpEvent>;
    order(arg: WsOrderArg): Promise<WsTradeOpEvent>;
    batchOrder(args: WsOrderArg[]): Promise<WsTradeOpEvent>;
    cancelOrder(arg: WsCancelOrderArg): Promise<WsTradeOpEvent>;
    batchCancelOrder(args: WsCancelOrderArg[]): Promise<WsTradeOpEvent>;
}
export {};
