export type ExchangeName = 'binance' | 'bitget' | 'blofin' | 'bybit' | 'gate' | 'okx' | 'phemex' | 'woo'; export type ExtraExchangeOptions = { [key in ExchangeName]?: { http?: { livenet: string; testnet: string; }; ws?: { public?: { testnet: string; livenet: string; }; private?: { testnet: string; livenet: string; }; }; }; }; export type ExchangeOptions = { readonly key: string; readonly secret: string; readonly passphrase?: string; readonly applicationId?: string; readonly testnet?: boolean; readonly corsAnywhere?: string; readonly extra?: ExtraExchangeOptions & { tickInterval?: number; recvWindow?: number; }; }; export type Balance = { readonly used: number; readonly free: number; readonly total: number; readonly upnl: number; }; export type Market = { readonly id: string; readonly symbol: string; readonly base: string; readonly quote: string; readonly active: boolean; readonly precision: { readonly amount: number; readonly price: number; }; readonly limits: { readonly amount: { readonly min: number; readonly max: number; }; readonly leverage: { readonly min: number; readonly max: number; }; }; }; export type Ticker = { readonly id: string; readonly symbol: string; readonly bid: number; readonly ask: number; readonly last: number; readonly mark: number; readonly index: number; readonly percentage: number; readonly openInterest: number; readonly fundingRate: number; readonly volume: number; readonly quoteVolume: number; }; export declare enum OrderStatus { Open = "open", Closed = "closed", Canceled = "canceled" } export declare enum OrderType { Market = "market", Limit = "limit", StopLoss = "stop_market", TakeProfit = "take_profit_market", TrailingStopLoss = "trailing_stop_market" } export declare enum OrderSide { Buy = "buy", Sell = "sell" } export declare enum OrderTimeInForce { GoodTillCancel = "GoodTillCancel", ImmediateOrCancel = "ImmediateOrCancel", FillOrKill = "FillOrKill", PostOnly = "PostOnly" } export type Order = { readonly id: string; readonly parentId?: string; readonly status: OrderStatus; readonly symbol: string; readonly type: OrderType; readonly side: OrderSide; readonly price: number; readonly amount: number; readonly filled: number; readonly remaining: number; readonly reduceOnly: boolean; }; export declare enum PositionSide { Long = "long", Short = "short" } export type Position = { readonly symbol: string; readonly side: PositionSide; readonly entryPrice: number; readonly notional: number; readonly leverage: number; readonly unrealizedPnl: number; readonly contracts: number; readonly liquidationPrice: number; }; export type Timeframe = '1d' | '1h' | '1m' | '1w' | '2h' | '3m' | '4h' | '5m' | '6h' | '12h' | '15m' | '30m'; export type Candle = { readonly timestamp: number; readonly open: number; readonly high: number; readonly low: number; readonly close: number; readonly volume: number; }; export type PlaceOrderOpts = { readonly symbol: string; readonly type: OrderType; readonly side: OrderSide; readonly amount: number; readonly price?: number; readonly stopLoss?: number; readonly takeProfit?: number; readonly reduceOnly?: boolean; readonly timeInForce?: OrderTimeInForce; }; export type UpdateOrderOpts = { readonly order: Order; readonly update: { readonly amount: number; } | { readonly price: number; }; }; export type OHLCVOptions = { readonly symbol: string; readonly interval: Timeframe; readonly from?: number; readonly to?: number; readonly limit?: number; }; export type OrderFillEvent = Pick; export declare enum LogSeverity { Info = "info", Warning = "warning", Error = "error" } export type OrderBookOrders = { price: number; amount: number; total: number; }; export type OrderBook = { bids: OrderBookOrders[]; asks: OrderBookOrders[]; }; export type StoreDataLoaded = { readonly balance: boolean; readonly orders: boolean; readonly markets: boolean; readonly tickers: boolean; readonly positions: boolean; }; export type StoreOptions = { readonly isHedged: boolean; }; export type StoreData = { readonly latency: number; readonly balance: Balance; readonly markets: Market[]; readonly tickers: Ticker[]; readonly orders: Order[]; readonly positions: Position[]; readonly loaded: StoreDataLoaded; readonly options: StoreOptions; }; export type Writable = T extends Date | RegExp | ((...args: any[]) => any) ? T : T extends ReadonlyMap ? Map, Writable> : T extends ReadonlySet ? Set> : T extends readonly unknown[] ? `${bigint}` extends `${any & keyof T}` ? { -readonly [K in keyof T]: Writable; } : Array> : T extends Record ? { -readonly [K in keyof T]: Writable; } : T; export type WritableStoreData = { latency: number; balance: Writable; markets: Array>; tickers: Array>; orders: Array>; positions: Array>; loaded: Writable; options: Writable; }; export type ExchangeAccount = { readonly userId: string; readonly subId?: string | null; readonly affiliateId?: string | null; };