import type BigNumber from "bignumber.js";
import { type ILimitOrder, type IStopLimitOrder, type IStopMarketOrder, type InternalLimitOrderOptions, type InternalStopLimitOrderOptions, type InternalStopMarketOrderOptions, type OrderOptions, OrderType, type Side, type TimeInForce } from "./types";
declare abstract class BaseOrder {
    readonly _id: string;
    readonly _side: Side;
    _size: BigNumber;
    _time: number;
    constructor(options: OrderOptions);
    get id(): string;
    get side(): Side;
    get size(): BigNumber;
    set size(size: BigNumber);
    get time(): number;
    set time(time: number);
    abstract toString(): void;
    abstract toJSON(): void;
    abstract toObject(): void;
}
export declare class LimitOrder extends BaseOrder {
    private readonly _type;
    readonly _origSize: BigNumber;
    private _price;
    private readonly _timeInForce;
    private readonly _makerQty;
    private readonly _takerQty;
    private readonly _postOnly;
    private readonly _ocoStopPrice?;
    constructor(options: InternalLimitOrderOptions);
    get type(): OrderType.LIMIT;
    get price(): BigNumber;
    set price(price: BigNumber);
    get timeInForce(): TimeInForce;
    get postOnly(): boolean;
    get origSize(): BigNumber;
    get makerQty(): BigNumber;
    get takerQty(): BigNumber;
    get ocoStopPrice(): BigNumber | undefined;
    toString: () => string;
    toJSON: () => string | null;
    toObject: () => ILimitOrder;
}
export declare class StopMarketOrder extends BaseOrder {
    private readonly _type;
    private readonly _stopPrice;
    constructor(options: InternalStopMarketOrderOptions);
    get type(): OrderType.STOP_MARKET;
    get stopPrice(): BigNumber;
    toString: () => string;
    toJSON: () => string | null;
    toObject: () => IStopMarketOrder;
}
export declare class StopLimitOrder extends BaseOrder {
    private readonly _type;
    private _price;
    private readonly _stopPrice;
    private readonly _timeInForce;
    private readonly _isOCO;
    constructor(options: InternalStopLimitOrderOptions);
    get type(): OrderType.STOP_LIMIT;
    get price(): BigNumber;
    set price(price: BigNumber);
    get stopPrice(): BigNumber;
    get timeInForce(): TimeInForce;
    get isOCO(): boolean;
    toString: () => string;
    toJSON: () => string | null;
    toObject: () => IStopLimitOrder;
}
export declare const OrderFactory: {
    createOrder<T extends OrderOptions>(options: T): T extends InternalLimitOrderOptions ? LimitOrder : T extends InternalStopLimitOrderOptions ? StopLimitOrder : T extends InternalStopMarketOrderOptions ? StopMarketOrder : never;
};
export {};
