/**
 * SmartAPI client configuration
 */
export interface SmartAPIConfig {
    /**
     * API key provided by Angel One
     */
    apiKey: string;
    /**
     * Client code/user id for Angel One
     */
    clientId?: string;
    /**
     * Password for authentication
     */
    password?: string;
    /**
     * Two-factor authentication PIN
     */
    totp?: string;
    /**
     * TOTP secret key for automatic generation of TOTP codes
     */
    totpSecret?: string;
    /**
     * JWT token for authenticated API calls
     */
    jwtToken?: string;
    /**
     * Refresh token for renewing JWT token
     */
    refreshToken?: string;
    /**
     * Feedback email (optional)
     */
    feedbackEmail?: string;
    /**
     * Debug mode flag
     */
    debug?: boolean;
}
/**
 * API response format
 */
export interface ApiResponse<T = any> {
    status: boolean;
    message: string;
    errorcode?: string;
    data?: T;
}
/**
 * User session data
 */
export interface SessionData {
    jwtToken: string;
    refreshToken: string;
    feedToken: string;
    state?: string;
}
/**
 * Login request payload
 */
export interface LoginRequest {
    clientcode: string;
    password: string;
    totp?: string;
    state?: string;
}
/**
 * Order types
 */
export declare enum OrderType {
    MARKET = "MARKET",
    LIMIT = "LIMIT",
    STOPLOSS_LIMIT = "STOPLOSS_LIMIT",
    STOPLOSS_MARKET = "STOPLOSS_MARKET"
}
/**
 * Transaction types
 */
export declare enum TransactionType {
    BUY = "BUY",
    SELL = "SELL"
}
/**
 * Product types
 */
export declare enum ProductType {
    DELIVERY = "DELIVERY",// Cash & Carry for equity (CNC)
    CARRYFORWARD = "CARRYFORWARD",// Normal for futures and options (NRML)
    MARGIN = "MARGIN",// Margin Delivery
    INTRADAY = "INTRADAY",// Margin Intraday Squareoff (MIS)
    BO = "BO",// Bracket Order (Only for ROBO variety)
    CO = "CO"
}
/**
 * Order varieties
 */
export declare enum Variety {
    NORMAL = "NORMAL",// Normal Order (Regular)
    STOPLOSS = "STOPLOSS",// Stop loss order
    ROBO = "ROBO"
}
/**
 * Order validity types
 */
export declare enum Validity {
    DAY = "DAY",// Regular Order
    IOC = "IOC"
}
/**
 * Exchange types
 */
export declare enum Exchange {
    NSE = "NSE",
    BSE = "BSE",
    NFO = "NFO",// NSE Futures & Options
    BFO = "BFO",// BSE Futures & Options
    CDS = "CDS",// Currency Derivatives
    MCX = "MCX"
}
/**
 * Order request payload
 */
export interface OrderParams {
    symboltoken: string;
    exchange: string;
    tradingsymbol: string;
    quantity: number;
    price: number;
    producttype: ProductType;
    transactiontype: TransactionType;
    ordertype: OrderType;
    variety: Variety;
    triggerprice?: number;
    squareoff?: number;
    stoploss?: number;
    ordertag?: string;
    validity?: Validity;
    disclosedquantity?: number;
}
/**
 * Bracket Order parameters
 */
export interface BracketOrderParams extends OrderParams {
    squareoff: number;
    stoploss: number;
    trailingStoploss?: number;
}
/**
 * Cover Order parameters
 */
export interface CoverOrderParams extends OrderParams {
    triggerprice: number;
}
/**
 * Historical data request parameters
 */
export interface HistoricalDataParams {
    exchange: string;
    symboltoken: string;
    interval: HistoricalInterval;
    fromdate: string;
    todate: string;
}
/**
 * Historical data intervals
 */
export declare enum HistoricalInterval {
    ONE_MINUTE = "ONE_MINUTE",
    THREE_MINUTE = "THREE_MINUTE",
    FIVE_MINUTE = "FIVE_MINUTE",
    TEN_MINUTE = "TEN_MINUTE",
    FIFTEEN_MINUTE = "FIFTEEN_MINUTE",
    THIRTY_MINUTE = "THIRTY_MINUTE",
    ONE_HOUR = "ONE_HOUR",
    ONE_DAY = "ONE_DAY"
}
/**
 * Historical candle data structure
 * The API returns an array of arrays in the format:
 * [timestamp, open, high, low, close, volume]
 */
export type CandleData = [string, number, number, number, number, number];
/**
 * Historical OI data structure
 */
export interface OIData {
    time: string;
    oi: number;
}
/**
 * Holdings data structure
 */
export interface Holding {
    tradingsymbol: string;
    exchange: string;
    isin: string;
    t1quantity: number;
    realisedquantity: number;
    quantity: number;
    authorisedquantity: number;
    product: string;
    collateralquantity: number | null;
    collateraltype: string | null;
    haircut: number;
    averageprice: number;
    ltp: number;
    symboltoken: string;
    close: number;
    profitandloss: number;
    pnlpercentage: number;
}
/**
 * Total holdings summary data structure
 */
export interface TotalHolding {
    totalholdingvalue: number;
    totalinvvalue: number;
    totalprofitandloss: number;
    totalpnlpercentage: number;
}
/**
 * Complete holdings response structure
 */
export interface AllHoldingsResponse {
    holdings: Holding[];
    totalholding: TotalHolding;
}
/**
 * Position data structure
 */
export interface Position {
    exchange: string;
    symboltoken: string;
    producttype: string;
    tradingsymbol: string;
    symbolname: string;
    instrumenttype: string;
    priceden: string;
    pricenum: string;
    genden: string;
    gennum: string;
    precision: string;
    multiplier: string;
    boardlotsize: string;
    buyqty: string;
    sellqty: string;
    buyamount: string;
    sellamount: string;
    symbolgroup: string;
    strikeprice: string;
    optiontype: string;
    expirydate: string;
    lotsize: string;
    cfbuyqty: string;
    cfsellqty: string;
    cfbuyamount: string;
    cfsellamount: string;
    buyavgprice: string;
    sellavgprice: string;
    avgnetprice: string;
    netvalue: string;
    netqty: string;
    totalbuyvalue: string;
    totalsellvalue: string;
    cfbuyavgprice: string;
    cfsellavgprice: string;
    totalbuyavgprice: string;
    totalsellavgprice: string;
    netprice: string;
}
/**
 * Position conversion parameters
 */
export interface PositionConversionParams {
    exchange: string;
    symboltoken: string;
    oldproducttype: ProductType;
    newproducttype: ProductType;
    tradingsymbol: string;
    symbolname?: string;
    instrumenttype?: string;
    priceden?: string;
    pricenum?: string;
    genden?: string;
    gennum?: string;
    precision?: string;
    multiplier?: string;
    boardlotsize?: string;
    buyqty?: string;
    sellqty?: string;
    buyamount?: string;
    sellamount?: string;
    transactiontype: TransactionType;
    quantity: number;
    type: string;
}
/**
 * User profile data structure
 */
export interface UserProfile {
    clientcode: string;
    name: string;
    email: string;
    mobileno: string;
    exchanges: string[];
    products: string[];
    lastlogintime: string;
    brokerid: string;
}
/**
 * RMS (Risk Management System) / Funds data structure
 */
export interface RMSData {
    net: string;
    availablecash: string;
    availableintradaypayin: string;
    availablelimitmargin: string;
    collateral: string;
    m2munrealized: string;
    m2mrealized: string;
    utiliseddebits: string;
    utilisedspan: string;
    utilisedoptionpremium: string;
    utilisedholdingsales: string;
    utilisedexposure: string;
    utilisedturnover: string;
    utilisedpayout: string;
}
/**
 * Postback/Webhook data structure for real-time order updates
 * This matches the webhook data format shown in the official documentation
 */
export interface PostbackData {
    variety: string;
    ordertype: string;
    producttype: string;
    duration: string;
    price: number;
    triggerprice: number;
    quantity: string;
    disclosedquantity: string;
    squareoff: number;
    stoploss: number;
    trailingstoploss: number;
    tradingsymbol: string;
    transactiontype: string;
    exchange: string;
    symboltoken: string;
    ordertag: string;
    instrumenttype: string;
    strikeprice: number;
    optiontype: string;
    expirydate: string;
    lotsize: string;
    cancelsize: string;
    averageprice: number;
    filledshares: string;
    unfilledshares: string;
    orderid: string;
    text: string;
    status: string;
    orderstatus: string;
    updatetime: string;
    exchtime: string;
    exchorderupdatetime: string;
    fillid: string;
    filltime: string;
    parentorderid: string;
    clientcode: string;
}
/**
 * Order response data with uniqueorderid
 */
export interface OrderResponse {
    script?: string;
    orderid: string;
    uniqueorderid: string;
    exchangeorderid?: string;
}
/**
 * Order details response data
 */
export interface OrderDetails {
    variety: string;
    ordertype: string;
    producttype: string;
    duration: string;
    price: number;
    triggerprice: number;
    quantity: string;
    disclosedquantity: string;
    squareoff: number;
    stoploss: number;
    trailingstoploss: number;
    tradingsymbol: string;
    transactiontype: string;
    exchange: string;
    symboltoken: string;
    instrumenttype: string;
    strikeprice: number;
    optiontype: string;
    expirydate: string;
    lotsize: string;
    cancelsize: string;
    averageprice: number;
    filledshares: string;
    unfilledshares: string;
    orderid: string;
    text: string;
    status: string;
    orderstatus: string;
    updatetime: string;
    exchtime: string;
    exchorderupdatetime: string;
    fillid: string;
    filltime: string;
    parentorderid: string;
    uniqueorderid: string;
    exchangeorderid?: string;
    ordertag?: string;
}
/**
 * GTT Rule Status types
 */
export declare enum GTTStatus {
    NEW = "NEW",
    CANCELLED = "CANCELLED",
    ACTIVE = "ACTIVE",
    SENTTOEXCHANGE = "SENTTOEXCHANGE",
    FORALL = "FORALL"
}
/**
 * GTT Create Rule Request parameters
 */
export interface GTTCreateParams {
    tradingsymbol: string;
    symboltoken: string;
    exchange: Exchange;
    transactiontype: TransactionType;
    producttype: ProductType;
    price: string;
    qty: string;
    triggerprice: string;
    disclosedqty: string;
}
/**
 * GTT Modify Rule Request parameters
 */
export interface GTTModifyParams {
    id: string;
    symboltoken: string;
    exchange: Exchange;
    price: string;
    qty: string;
    triggerprice: string;
    disclosedqty: string;
}
/**
 * GTT Cancel Rule Request parameters
 */
export interface GTTCancelParams {
    id: string;
    symboltoken: string;
    exchange: Exchange;
}
/**
 * GTT Rule Details Request parameters
 */
export interface GTTRuleDetailsParams {
    id: string;
}
/**
 * GTT Rule List Request parameters
 */
export interface GTTRuleListParams {
    status: GTTStatus[];
    page: number;
    count: number;
}
/**
 * GTT Rule Response structure
 */
export interface GTTRuleData {
    id: string;
    status: string;
    createddate: string;
    updateddate: string;
    expirydate: string;
    clientid: string;
    tradingsymbol: string;
    symboltoken: string;
    exchange: string;
    transactiontype: string;
    producttype: string;
    price: string;
    qty: string;
    triggerprice: string;
    disclosedqty: string;
}
/**
 * GTT Error Codes
 */
export declare enum GTTErrorCodes {
    AB9000 = "Internal Server Error",
    AB9001 = "Invalid Parameters",
    AB9002 = "Method Not Allowed",
    AB9003 = "Invalid Client ID",
    AB9004 = "Invalid Status Array Size",
    AB9005 = "Invalid Session ID",
    AB9006 = "Invalid Order Quantity",
    AB9007 = "Invalid Disclosed Quantity",
    AB9008 = "Invalid Price",
    AB9009 = "Invalid Trigger Price",
    AB9010 = "Invalid Exchange Segment",
    AB9011 = "Invalid Symbol Token",
    AB9012 = "Invalid Trading Symbol",
    AB9013 = "Invalid Rule ID",
    AB9014 = "Invalid Order Side",
    AB9015 = "Invalid Product Type",
    AB9016 = "Invalid Time Period",
    AB9017 = "Invalid Page Value",
    AB9018 = "Invalid Count Value"
}
/**
 * Brokerage Calculator Order parameters
 * Used to estimate brokerage charges for orders
 */
export interface BrokerageCalculatorOrder {
    /**
     * Product type (e.g., "DELIVERY", "INTRADAY")
     */
    product_type: string;
    /**
     * Transaction type (BUY or SELL)
     */
    transaction_type: string;
    /**
     * Quantity of securities
     */
    quantity: string;
    /**
     * Price per security
     */
    price: string;
    /**
     * Exchange (NSE, BSE, etc.)
     */
    exchange: string;
    /**
     * Symbol name
     */
    symbol_name: string;
    /**
     * Security token
     */
    token: string;
}
/**
 * Brokerage Calculator Request parameters
 */
export interface BrokerageCalculatorParams {
    /**
     * Array of orders to calculate charges for
     */
    orders: BrokerageCalculatorOrder[];
}
/**
 * Charge breakup item structure for Brokerage Calculator
 */
export interface ChargeBreakupItem {
    /**
     * Name of the charge (e.g., "Exchange Transaction Charges")
     */
    name: string;
    /**
     * Amount of the charge
     */
    amount: number;
    /**
     * Optional message
     */
    msg: string;
    /**
     * Optional further breakdown of the charge
     */
    breakup: ChargeBreakupItem[];
}
/**
 * Charge summary structure for individual orders
 */
export interface OrderChargesSummary {
    /**
     * Total charges for the order
     */
    total_charges: number;
    /**
     * Total trade value
     */
    trade_value: number;
    /**
     * Breakdown of charges
     */
    breakup: ChargeBreakupItem[];
}
/**
 * Brokerage Calculator Response data structure
 */
export interface BrokerageCalculatorResult {
    /**
     * Summary of all charges
     */
    summary: OrderChargesSummary;
    /**
     * Individual breakdown for each order
     */
    charges: OrderChargesSummary[];
}
/**
 * Margin Calculator Position parameters for request
 */
export interface MarginCalculatorPosition {
    /**
     * Exchange type - NSE, BSE, NFO, BFO, CDS, MCX
     */
    exchange: string;
    /**
     * Quantity. In the NFO segment it denotes the no. of units in a lot
     */
    qty: number;
    /**
     * Price of the security
     */
    price: number;
    /**
     * Product type - DELIVERY, CARRYFORWARD, MARGIN, INTRADAY, BO
     */
    productType: ProductType | string;
    /**
     * Symbol/token being traded
     */
    token: string;
    /**
     * Trade type - BUY, SELL
     */
    tradeType: TransactionType | string;
    /**
     * Order type - LIMIT, MARKET, STOPLOSS_LIMIT, STOPLOSS_MARKET
     * Default value is "LIMIT"
     */
    orderType?: OrderType | string;
}
/**
 * Margin Calculator Request parameters
 */
export interface MarginCalculatorParams {
    /**
     * Array of positions to calculate margin for
     * Can contain up to 50 positions in a single request
     */
    positions: MarginCalculatorPosition[];
}
/**
 * Margin Components structure in response
 */
export interface MarginComponents {
    /**
     * Net premium
     */
    netPremium: number;
    /**
     * SPAN margin
     */
    spanMargin: number;
    /**
     * Margin benefit
     */
    marginBenefit: number;
    /**
     * Delivery margin
     */
    deliveryMargin: number;
    /**
     * Non-NFO margin
     */
    nonNFOMargin: number;
    /**
     * Total options premium
     */
    totOptionsPremium: number;
}
/**
 * Margin Calculator Response data structure
 */
export interface MarginCalculatorResult {
    /**
     * Total margin required for the positions
     */
    totalMarginRequired: number;
    /**
     * Breakdown of different margin components
     */
    marginComponents: MarginComponents;
}
/**
 * Option Greeks Request Parameters
 */
export interface OptionGreeksParams {
    /**
     * The underlying stock/index name
     */
    name: string;
    /**
     * Expiry date in format like "25JAN2024"
     */
    expirydate: string;
}
/**
 * Option Greeks data for a particular strike price
 */
export interface OptionGreekData {
    /**
     * The underlying stock/index name
     */
    name: string;
    /**
     * Expiry date
     */
    expiry: string;
    /**
     * Option strike price
     */
    strikePrice: string;
    /**
     * Option type (CE - Call, PE - Put)
     */
    optionType: string;
    /**
     * Delta - Rate of change of option price with respect to underlying price
     */
    delta: string;
    /**
     * Gamma - Rate of change of Delta with respect to underlying price
     */
    gamma: string;
    /**
     * Theta - Rate of change of option price with respect to time decay
     */
    theta: string;
    /**
     * Vega - Rate of change of option price with respect to volatility
     */
    vega: string;
    /**
     * Implied Volatility
     */
    impliedVolatility: string;
    /**
     * Trade volume for the option
     */
    tradeVolume: string;
}
/**
 * Option Greeks Response
 */
export interface OptionGreeksResponse {
    /**
     * Array of option greek data for different strike prices
     */
    data: OptionGreekData[];
}
/**
 * Market Data Mode types
 */
export declare enum MarketDataMode {
    LTP = "LTP",
    OHLC = "OHLC",
    FULL = "FULL"
}
/**
 * Market Quote Request for the Live Market Data API
 */
export interface MarketQuoteRequest {
    /**
     * Mode of data to fetch: LTP, OHLC, or FULL
     */
    mode: MarketDataMode;
    /**
     * Map of exchange to array of token strings
     * Example: { "NSE": ["3045", "881"], "NFO": ["58662"] }
     */
    exchangeTokens: Record<string, string[]>;
}
/**
 * Depth information for market data (buy/sell orders)
 */
export interface MarketDepth {
    price: number;
    quantity: number;
    orders: number;
}
/**
 * Full Market Data response for a symbol
 */
export interface FullMarketData {
    exchange: string;
    tradingSymbol: string;
    symbolToken: string;
    ltp: number;
    open: number;
    high: number;
    low: number;
    close: number;
    lastTradeQty?: number;
    exchFeedTime?: string;
    exchTradeTime?: string;
    netChange?: number;
    percentChange?: number;
    avgPrice?: number;
    tradeVolume?: number;
    opnInterest?: number;
    lowerCircuit?: number;
    upperCircuit?: number;
    totBuyQuan?: number;
    totSellQuan?: number;
    '52WeekLow'?: number;
    '52WeekHigh'?: number;
    depth?: {
        buy: MarketDepth[];
        sell: MarketDepth[];
    };
}
/**
 * OHLC Market Data response for a symbol
 */
export interface OHLCMarketData {
    exchange: string;
    tradingSymbol: string;
    symbolToken: string;
    ltp: number;
    open: number;
    high: number;
    low: number;
    close: number;
}
/**
 * LTP Market Data response for a symbol
 */
export interface LTPMarketData {
    exchange: string;
    tradingSymbol: string;
    symbolToken: string;
    ltp: number;
}
/**
 * Unfetched data response with error information
 */
export interface UnfetchedMarketData {
    exchange: string;
    symbolToken: string;
    message: string;
    errorCode: string;
}
/**
 * Market Quote Response for the Live Market Data API
 */
export interface MarketQuoteResponse {
    fetched: Array<FullMarketData | OHLCMarketData | LTPMarketData>;
    unfetched: UnfetchedMarketData[];
}
/**
 * Data types for Gainers/Losers API
 */
export declare enum GainersLosersDataType {
    /**
     * Percentage price gainers
     */
    PRICE_GAINERS = "PercPriceGainers",
    /**
     * Percentage price losers
     */
    PRICE_LOSERS = "PercPriceLosers",
    /**
     * Percentage open interest losers
     */
    OI_LOSERS = "PercOILosers",
    /**
     * Percentage open interest gainers
     */
    OI_GAINERS = "PercOIGainers"
}
/**
 * Expiry type for Gainers/Losers API
 */
export declare enum ExpiryType {
    /**
     * Current month expiry
     */
    NEAR = "NEAR",
    /**
     * Next month expiry
     */
    NEXT = "NEXT",
    /**
     * Month after next month expiry
     */
    FAR = "FAR"
}
/**
 * Request parameters for Gainers/Losers API
 */
export interface GainersLosersParams {
    /**
     * Type of data to fetch (Price or OI, Gainers or Losers)
     */
    datatype: GainersLosersDataType;
    /**
     * Expiry type (NEAR, NEXT, or FAR)
     */
    expirytype: ExpiryType;
}
/**
 * Single item data structure for Gainers/Losers API response
 */
export interface GainersLosersItem {
    /**
     * Trading symbol of the contract
     */
    tradingSymbol: string;
    /**
     * Percentage change in price or open interest
     */
    percentChange: number;
    /**
     * Symbol token/ID
     */
    symbolToken: number;
    /**
     * Open interest value
     */
    opnInterest: number;
    /**
     * Net change in open interest
     */
    netChangeOpnInterest: number;
}
/**
 * Response data structure for Gainers/Losers API
 */
export interface GainersLosersResponse {
    data: GainersLosersItem[];
}
/**
 * Order Status Codes returned by WebSocket
 */
export declare enum OrderStatusCode {
    CONNECTED = "AB00",// after-successful connection
    OPEN = "AB01",// open
    CANCELLED = "AB02",// cancelled
    REJECTED = "AB03",// rejected
    MODIFIED = "AB04",// modified
    COMPLETE = "AB05",// complete
    AMO_RECEIVED = "AB06",// after market order req received
    AMO_CANCELLED = "AB07",// cancelled after market order
    AMO_MODIFY_RECEIVED = "AB08",// modify after market order req received
    OPEN_PENDING = "AB09",// open pending
    TRIGGER_PENDING = "AB10",// trigger pending
    MODIFY_PENDING = "AB11"
}
/**
 * Order Status WebSocket Response structure
 */
export interface OrderStatusResponse {
    'user-id': string;
    'status-code': string;
    'order-status': string;
    'error-message': string;
    orderData: OrderStatusData;
}
/**
 * Order data structure for Order Status WebSocket
 */
export interface OrderStatusData {
    variety: string;
    ordertype: string;
    ordertag: string;
    producttype: string;
    price: number;
    triggerprice: number;
    quantity: string;
    disclosedquantity: string;
    duration: string;
    squareoff: number;
    stoploss: number;
    trailingstoploss: number;
    tradingsymbol: string;
    transactiontype: string;
    exchange: string;
    symboltoken: string;
    instrumenttype: string;
    strikeprice: number;
    optiontype: string;
    expirydate: string;
    lotsize: string;
    cancelsize: string;
    averageprice: number;
    filledshares: string;
    unfilledshares: string;
    orderid: string;
    text: string;
    status: string;
    orderstatus: string;
    updatetime: string;
    exchtime: string;
    exchorderupdatetime: string;
    fillid: string;
    filltime: string;
    parentorderid: string;
}
/**
 * Instrument data structure from master list
 */
export interface InstrumentData {
    token: string;
    symbol: string;
    name: string;
    expiry: string;
    strike: string;
    lotsize: string;
    instrumenttype: string;
    exch_seg: string;
    tick_size: string;
}
/**
 * LTP Data request parameters
 */
export interface LtpDataRequest {
    exchange: string;
    symboltoken: string;
    tradingsymbol: string;
}
/**
 * LTP Data response structure
 */
export interface LtpData {
    exchange: string;
    tradingsymbol: string;
    symboltoken: string;
    open: string;
    high: string;
    low: string;
    close: string;
    ltp: string;
}
/**
 * Search Scrip request parameters
 */
export interface SearchScripRequest {
    exchange: string;
    searchscrip: string;
}
/**
 * Search Scrip result item
 */
export interface SearchScripResult {
    exchange: string;
    tradingsymbol: string;
    symboltoken: string;
}
/**
 * Intraday scrips data structure
 */
export interface IntradayScrip {
    Exchange: string;
    SymbolName: string;
    Multiplier: string;
}
