import { Connection, PublicKey, RpcResponseAndContext, SimulatedTransactionResponse, Transaction, TransactionInstruction, TransactionSignature } from '@solana/web3.js';
import BN from 'bn.js';
import { ObligationType, ScopeRefresh } from '../utils';
import { KaminoMarket } from './market';
import { KaminoObligation } from './obligation';
import { KaminoReserve } from './reserve';
export declare const POSITION_LIMIT = 10;
export declare const BORROWS_LIMIT = 5;
export declare const DEPOSITS_LIMIT = 8;
export type ActionType = 'deposit' | 'borrow' | 'withdraw' | 'repay' | 'mint' | 'redeem' | 'depositCollateral' | 'liquidate' | 'depositAndBorrow' | 'repayAndWithdraw' | 'refreshObligation' | 'requestElevationGroup' | 'withdrawReferrerFees';
export type AuxiliaryIx = 'setup' | 'inBetween' | 'cleanup';
export declare class KaminoAction {
    kaminoMarket: KaminoMarket;
    reserve: KaminoReserve;
    outflowReserve: KaminoReserve | undefined;
    owner: PublicKey;
    payer: PublicKey;
    obligation: KaminoObligation | null;
    referrer: PublicKey;
    userTokenAccountAddress: PublicKey;
    userCollateralAccountAddress: PublicKey;
    additionalTokenAccountAddress?: PublicKey;
    /**
     * Null unless the obligation is not passed
     */
    obligationType: ObligationType | null;
    mint: PublicKey;
    secondaryMint?: PublicKey;
    positions?: number;
    amount: BN;
    outflowAmount?: BN;
    computeBudgetIxs: Array<TransactionInstruction>;
    computeBudgetIxsLabels: Array<string>;
    setupIxs: Array<TransactionInstruction>;
    setupIxsLabels: Array<string>;
    inBetweenIxs: Array<TransactionInstruction>;
    inBetweenIxsLabels: Array<string>;
    lendingIxs: Array<TransactionInstruction>;
    lendingIxsLabels: Array<string>;
    cleanupIxs: Array<TransactionInstruction>;
    cleanupIxsLabels: Array<string>;
    preTxnIxs: Array<TransactionInstruction>;
    preTxnIxsLabels: Array<string>;
    postTxnIxs: Array<TransactionInstruction>;
    postTxnIxsLabels: Array<string>;
    refreshFarmsCleanupTxnIxs: Array<TransactionInstruction>;
    refreshFarmsCleanupTxnIxsLabels: Array<string>;
    depositReserves: Array<PublicKey>;
    borrowReserves: Array<PublicKey>;
    preLoadedDepositReservesSameTx: Array<PublicKey>;
    preLoadedBorrowReservesSameTx: Array<PublicKey>;
    currentSlot: number;
    private constructor();
    static initialize(action: ActionType, amount: string | BN, mint: PublicKey, owner: PublicKey, kaminoMarket: KaminoMarket, obligation: KaminoObligation | ObligationType, referrer?: PublicKey, currentSlot?: number, payer?: PublicKey): Promise<KaminoAction>;
    private static getUserAccountAddresses;
    private static loadObligation;
    static buildRefreshObligationTxns(kaminoMarket: KaminoMarket, payer: PublicKey, obligation: KaminoObligation, extraComputeBudget?: number, // if > 0 then adds the ixn
    currentSlot?: number): Promise<KaminoAction>;
    static buildRequestElevationGroupTxns(kaminoMarket: KaminoMarket, payer: PublicKey, obligation: KaminoObligation, elevationGroup: number, extraComputeBudget?: number, // if > 0 then adds the ixn
    currentSlot?: number): Promise<KaminoAction>;
    static buildDepositTxns(kaminoMarket: KaminoMarket, amount: string | BN, mint: PublicKey, owner: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas,
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata
    referrer?: PublicKey, currentSlot?: number, scopeRefresh?: ScopeRefresh, overrideElevationGroupRequest?: number | undefined): Promise<KaminoAction>;
    getTokenIdsForScopeRefresh(kaminoMarket: KaminoMarket, reserves: PublicKey[]): number[];
    addScopeRefreshIxs(tokens: number[], feed?: string): Promise<void>;
    static buildBorrowTxns(kaminoMarket: KaminoMarket, amount: string | BN, mint: PublicKey, owner: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas,
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata
    referrer?: PublicKey, currentSlot?: number, scopeRefresh?: ScopeRefresh, overrideElevationGroupRequest?: number | undefined): Promise<KaminoAction>;
    static buildDepositReserveLiquidityTxns(kaminoMarket: KaminoMarket, amount: string | BN, mint: PublicKey, owner: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata
    referrer?: PublicKey, currentSlot?: number, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    static buildRedeemReserveCollateralTxns(kaminoMarket: KaminoMarket, amount: string | BN, mint: PublicKey, owner: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata,
    referrer?: PublicKey, currentSlot?: number, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    static buildDepositObligationCollateralTxns(kaminoMarket: KaminoMarket, amount: string | BN, mint: PublicKey, owner: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata
    referrer?: PublicKey, currentSlot?: number, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    static buildDepositAndBorrowTxns(kaminoMarket: KaminoMarket, depositAmount: string | BN, depositMint: PublicKey, borrowAmount: string | BN, borrowMint: PublicKey, payer: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas,
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata,
    referrer?: PublicKey, currentSlot?: number, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    static buildRepayAndWithdrawTxns(kaminoMarket: KaminoMarket, repayAmount: string | BN, repayMint: PublicKey, withdrawAmount: string | BN, withdrawMint: PublicKey, payer: PublicKey, currentSlot: number, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas,
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata,
    isClosingPosition?: boolean, referrer?: PublicKey, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    static buildWithdrawTxns(kaminoMarket: KaminoMarket, amount: string | BN, mint: PublicKey, owner: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas,
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata
    referrer?: PublicKey, currentSlot?: number, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    /**
     *
     * @param kaminoMarket
     * @param amount
     * @param mint
     * @param owner
     * @param obligation - obligation to repay or the PDA seeds
     * @param currentSlot
     * @param payer - if not set then owner is used
     * @param extraComputeBudget - if > 0 then adds the ixn
     * @param includeAtaIxns - if true it includes create and close wsol and token atas
     * @param requestElevationGroup
     * @param includeUserMetadata - if true it includes user metadata
     * @param referrer
     */
    static buildRepayTxns(kaminoMarket: KaminoMarket, amount: string | BN, mint: PublicKey, owner: PublicKey, obligation: KaminoObligation | ObligationType, currentSlot: number, payer?: PublicKey | undefined, extraComputeBudget?: number, includeAtaIxns?: boolean, requestElevationGroup?: boolean, includeUserMetadata?: boolean, referrer?: PublicKey, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    static buildLiquidateTxns(kaminoMarket: KaminoMarket, amount: string | BN, minCollateralReceiveAmount: string | BN, repayTokenMint: PublicKey, withdrawTokenMint: PublicKey, liquidator: PublicKey, obligationOwner: PublicKey, obligation: KaminoObligation | ObligationType, extraComputeBudget?: number, // if > 0 then adds the ixn
    includeAtaIxns?: boolean, // if true it includes create and close wsol and token atas, and creates all other token atas if they don't exist
    requestElevationGroup?: boolean, includeUserMetadata?: boolean, // if true it includes user metadata
    referrer?: PublicKey, maxAllowedLtvOverridePercent?: number, currentSlot?: number, scopeRefresh?: ScopeRefresh): Promise<KaminoAction>;
    static buildWithdrawReferrerFeeTxns(owner: PublicKey, tokenMint: PublicKey, kaminoMarket: KaminoMarket, currentSlot?: number): Promise<KaminoAction>;
    getTransactions(): Promise<{
        preLendingTxn: Transaction | null;
        lendingTxn: Transaction | null;
        postLendingTxn: Transaction | null;
    }>;
    sendTransactions(sendTransaction: (txn: Transaction, connection: Connection) => Promise<TransactionSignature>): Promise<string>;
    private sendSingleTransaction;
    simulateTransactions(sendTransaction: (txn: Transaction, connection: Connection) => Promise<RpcResponseAndContext<SimulatedTransactionResponse>>): Promise<"" | RpcResponseAndContext<SimulatedTransactionResponse>>;
    private simulateSingleTransaction;
    addDepositIx(): void;
    addDepositReserveLiquidityIx(): void;
    addRedeemReserveCollateralIx(): void;
    addDepositObligationCollateralIx(): void;
    addBorrowIx(): void;
    addDepositAndBorrowIx(): Promise<void>;
    addRepayAndWithdrawIxs(): Promise<void>;
    addWithdrawIx(): Promise<void>;
    addRepayIx(): Promise<void>;
    addLiquidateIx(maxAllowedLtvOverridePercent?: number): Promise<void>;
    addInBetweenIxs(action: ActionType, includeAtaIxns: boolean, requestElevationGroup: boolean, addInitObligationForFarm: boolean, isClosingPosition?: boolean): Promise<void>;
    addRefreshObligation(crank: PublicKey): void;
    addSupportIxsWithoutInitObligation(action: ActionType, includeAtaIxns: boolean, addAsSupportIx?: AuxiliaryIx, requestElevationGroup?: boolean, addInitObligationForFarm?: boolean, isClosingPosition?: boolean, twoTokenAction?: boolean, overrideElevationGroupRequest?: number): Promise<void>;
    addSupportIxs(action: ActionType, includeAtaIxns: boolean, requestElevationGroup: boolean, includeUserMetadata: boolean, addInitObligationForFarm: boolean, twoTokenAction?: boolean, overrideElevationGroupRequest?: number): Promise<void>;
    private static optionalAccount;
    private addRefreshReserveIxs;
    static getRefreshAllReserves(kaminoMarket: KaminoMarket, reserves: PublicKey[]): TransactionInstruction[];
    private addRefreshObligationIx;
    private addRequestElevationIx;
    private addRefreshFarmsForReserve;
    private addRefreshFarmsCleanupTxnIxsToCleanupIxs;
    private addInitObligationForFarm;
    private addInitObligationIxs;
    private addInitUserMetadataIxs;
    private addInitReferrerTokenStateIx;
    private addWithdrawReferrerFeesIxs;
    private addComputeBudgetIxn;
    private addAtaIxs;
    private updateWSOLAccount;
    static initializeMultiTokenAction(kaminoMarket: KaminoMarket, action: ActionType, inflowAmount: string | BN, inflowTokenMint: PublicKey, outflowTokenMint: PublicKey, payer: PublicKey, obligationOwner: PublicKey, obligation: KaminoObligation | ObligationType, outflowAmount?: string | BN, referrer?: PublicKey, currentSlot?: number): Promise<KaminoAction>;
    static initializeWithdrawReferrerFees(mint: PublicKey, owner: PublicKey, kaminoMarket: KaminoMarket, currentSlot?: number): Promise<{
        axn: KaminoAction;
        createAtaIxs: TransactionInstruction[];
    }>;
    getObligationPda(): PublicKey;
    getAdditionalDepositReservesList(): PublicKey[];
    private static getReferrerKey;
    static actionToIxs(action: KaminoAction): Array<TransactionInstruction>;
    static actionToLendingIxs(action: KaminoAction): Array<TransactionInstruction>;
    static actionToIxLabels(action: KaminoAction): Array<string>;
    static actionToLendingIxLabels(action: KaminoAction): Array<string>;
}
//# sourceMappingURL=action.d.ts.map