import { Method } from 'axios';
import { Commitment, Keypair, PublicKey, Signer, Transaction } from '@solana/web3.js';
import { MessageSignerWalletAdapter, SignerWalletAdapter, WalletAdapter } from '@solana/wallet-adapter-base';
import { IBrickArgs, instructionsAndSigners } from '../common.types';
export declare const DEFAULT_BASE_URL = "http://localhost:3000";
export declare enum Serum {
    PlaceOrder = "PlaceOrder",
    CancelOrder = "CancelOrder",
    InitMarket = "InitMarket",
    SettleMarket = "SettleMarket"
}
export declare const serumEndpoints: {
    PlaceOrder: string;
    CancelOrder: string;
    InitMarket: string;
    SettleMarket: string;
};
export declare enum Mango {
    Deposit = "Deposit",
    Withdraw = "Withdraw",
    PlaceSpotOrder = "PlaceSpotOrder",
    CancelSpotOrder = "CancelSpotOrder",
    SettleSpotMarket = "SettleSpotMarket",
    PlacePerpOrder = "PlacePerpOrder",
    CancelPerpOrder = "CancelPerpOrder",
    SettlePerpMarket = "SettlePerpMarket"
}
export declare const mangoEndpoints: {
    Deposit: string;
    Withdraw: string;
    PlaceSpotOrder: string;
    CancelSpotOrder: string;
    SettleSpotMarket: string;
    PlacePerpOrder: string;
    CancelPerpOrder: string;
    SettlePerpMarket: string;
};
export declare enum Saber {
    Swap = "Swap",
    PoolDeposit = "PoolDeposit",
    PoolWithdraw = "PoolWithdraw",
    FarmDeposit = "FarmDeposit",
    FarmWithdraw = "FarmWithdraw",
    FarmHarvest = "FarmHarvest"
}
export declare const saberEndpoints: {
    Swap: string;
    PoolDeposit: string;
    PoolWithdraw: string;
    FarmDeposit: string;
    FarmWithdraw: string;
    FarmHarvest: string;
};
export declare enum Solend {
    Deposit = "Deposit",
    Withdraw = "Withdraw",
    Borrow = "Borrow",
    Repay = "Repay"
}
export declare const solendEndpoints: {
    Deposit: string;
    Withdraw: string;
    Borrow: string;
    Repay: string;
};
export declare enum Raydium {
    TBD = "TBD"
}
export declare const raydiumEndpoints: {
    TBD: string;
};
export declare enum Wormhole {
    TBD = "TBD"
}
export declare const wormholeEndpoints: {
    TBD: string;
};
export declare enum Sunny {
    TBD = "TBD"
}
export declare const sunnyEndpoints: {
    TBD: string;
};
export declare enum Orca {
    TBD = "TBD"
}
export declare const orcaEndpoints: {
    TBD: string;
};
export declare enum Solfarm {
    TBD = "TBD"
}
export declare const solfarmEndpoints: {
    TBD: string;
};
export declare enum Parrot {
    TBD = "TBD"
}
export declare const parrotEndpoints: {
    TBD: string;
};
export declare enum Marinade {
    TBD = "TBD"
}
export declare const marinadeEndpoints: {
    TBD: string;
};
export declare enum Mercurial {
    TBD = "TBD"
}
export declare const mercurialEndpoints: {
    TBD: string;
};
export declare enum Protocol {
    Serum = "Serum",
    Mango = "Mango",
    Saber = "Saber",
    Solend = "Solend",
    Raydium = "Raydium",
    Wormhole = "Wormhole",
    Sunny = "Sunny",
    Orca = "Orca",
    Solfarm = "Solfarm",
    Parrot = "Parrot",
    Marinade = "Marinade",
    Mercurial = "Mercurial"
}
export declare const Action: {
    Serum: typeof Serum;
    Mango: typeof Mango;
    Saber: typeof Saber;
    Solend: typeof Solend;
    Raydium: typeof Raydium;
    Wormhole: typeof Wormhole;
    Sunny: typeof Sunny;
    Orca: typeof Orca;
    Solfarm: typeof Solfarm;
    Parrot: typeof Parrot;
    Marinade: typeof Marinade;
    Mercurial: typeof Mercurial;
};
export declare const endpoints: {
    Serum: {
        PlaceOrder: string;
        CancelOrder: string;
        InitMarket: string;
        SettleMarket: string;
    };
    Mango: {
        Deposit: string;
        Withdraw: string;
        PlaceSpotOrder: string;
        CancelSpotOrder: string;
        SettleSpotMarket: string;
        PlacePerpOrder: string;
        CancelPerpOrder: string;
        SettlePerpMarket: string;
    };
    Saber: {
        Swap: string;
        PoolDeposit: string;
        PoolWithdraw: string;
        FarmDeposit: string;
        FarmWithdraw: string;
        FarmHarvest: string;
    };
    Solend: {
        Deposit: string;
        Withdraw: string;
        Borrow: string;
        Repay: string;
    };
    Raydium: {
        TBD: string;
    };
    Wormhole: {
        TBD: string;
    };
    Sunny: {
        TBD: string;
    };
    Orca: {
        TBD: string;
    };
    Solfarm: {
        TBD: string;
    };
    Parrot: {
        TBD: string;
    };
    Marinade: {
        TBD: string;
    };
    Mercurial: {
        TBD: string;
    };
};
export declare type IAction = Serum | Mango | Saber | Solend | Raydium | Wormhole | Sunny | Orca | Solfarm | Parrot | Marinade | Mercurial;
export interface IRawBrick {
    protocol: Protocol;
    action: IAction;
    args: IBrickArgs;
}
export interface IParsedBrick {
    protocol: Protocol;
    action: IAction;
    method: Method;
    route: string;
    args: IBrickArgs;
}
export interface IFetchedBrick {
    protocol: Protocol;
    action: IAction;
    instructionsAndSigners: instructionsAndSigners[];
}
export interface IFlattenedBrick {
    protocol: Protocol;
    action: IAction;
    instructionsAndSigners: instructionsAndSigners;
}
export interface ISizedBrick {
    protocols: Protocol[];
    actions: IAction[];
    transaction: Transaction;
    signers: Signer[];
}
export interface IBuilderParams {
    ownerPubkey: PublicKey;
    connectionUrl: string;
    committment: Commitment;
    baseUrl?: string;
    apiKey?: string;
}
export declare type connectedAdapter = WalletAdapter | SignerWalletAdapter | MessageSignerWalletAdapter;
export interface IFinalBuildParams {
    keypair?: Keypair;
    connectedAdapter?: connectedAdapter;
    signCallback?: (tx: Transaction, ...args: any) => Promise<Transaction>;
    callbackArgs?: any[];
}
