#!/usr/bin/env npx tsx import type { CancelResponse, OrderResponse } from '../core/types.js'; import { type FillWatcher } from './execution.js'; export interface BracketOptions { coin: string; side: 'buy' | 'sell'; size: number; /** Take profit distance in % from entry. Optional if tpPrice/sl* given. */ tpPct?: number; /** Stop loss distance in % from entry. Optional if slPrice/tp* given. */ slPct?: number; /** Absolute take profit price (takes precedence over tpPct). */ tpPrice?: number; /** Absolute stop loss trigger price (takes precedence over slPct). */ slPrice?: number; entryType?: 'market' | 'limit'; entryPrice?: number; slippage?: number; entryTimeoutSec?: number; slSlippageBps?: number; /** SL fires as a market trigger (default true); false = stop-limit. */ slMarket?: boolean; /** * Limit entries only: submit entry + TP/SL as one atomic normalTpsl batch * (default true) — the exchange arms the exits when the entry fills, so the * bracket survives this process exiting. false = legacy fill-watch path. */ atomic?: boolean; leverage?: number; dryRun?: boolean; verbose?: boolean; client?: BracketClient; fillWatcher?: FillWatcher; /** Receives each output line. Defaults to console.log. */ output?: (line: string) => void; } export interface BracketClient { verbose: boolean; getAllMids(): Promise>; marketOrder(coin: string, isBuy: boolean, size: number, slippageBps?: number, leverage?: number): Promise; limitOrder(coin: string, isBuy: boolean, size: number, price: number, tif?: 'Gtc' | 'Ioc' | 'Alo', reduceOnly?: boolean, leverage?: number): Promise; tpslOrders(coin: string, isBuy: boolean, size: number, opts?: { takeProfitPrice?: number; stopLossPrice?: number; stopLossSlippageBps?: number; stopLossIsMarket?: boolean; grouping?: 'positionTpsl' | 'normalTpsl'; leverage?: number; }): Promise; bracketOrder(coin: string, isBuy: boolean, size: number, entryPrice: number, opts?: { entryTif?: 'Gtc' | 'Alo'; takeProfitPrice?: number; stopLossPrice?: number; stopLossSlippageBps?: number; stopLossIsMarket?: boolean; leverage?: number; }): Promise; cancel(coin: string, oid: number): Promise; address: string; getUserFills(user?: string): Promise>; } export interface BracketResult { status: 'dry' | 'armed' | 'limit_resting' | 'complete' | 'entry_failed' | 'partial'; entryPrice?: number; tpPrice?: number; slPrice?: number; tpOid?: number | null; slOid?: number | null; entryOid?: number | null; protectedSize?: number; reason?: string; } export declare function runBracket(opts: BracketOptions): Promise; //# sourceMappingURL=bracket.d.ts.map