import type { Address, GetAccountInfoApi, GetTokenAccountBalanceApi, Rpc } from '@solana/kit';
import type Decimal from 'decimal.js';
import { type KaminoReserve } from '../classes';
import type { FlashBorrowType } from './types';
export declare const getExpectedTokenBalanceAfterBorrow: (rpc: Rpc<GetAccountInfoApi & GetTokenAccountBalanceApi>, mint: Address, owner: Address, amountToBorrowLamports: Decimal, amountToBorrowMintDecimals: number) => Promise<Decimal>;
export declare const isBorrowingEnabled: (reserve: KaminoReserve) => boolean;
/**
 * Returns true if flash loans are enabled on this reserve.
 * Flash loans are disabled when flashLoanFeeSf === U64_MAX (sentinel value).
 * Note: getFlashLoanFee() returns 0 for both "free" and "disabled", so we check the raw field.
 */
export declare function isFlashLoanEnabled(reserve: KaminoReserve): boolean;
/**
 * Determines which token to flash borrow based on reserve capabilities.
 *
 * Checks:
 * 1. Whether flash loans are enabled on the reserve (flashLoanFeeSf !== U64_MAX)
 * 2. Whether the reserve has sufficient available liquidity to service the flash borrow AND,
 *    on a withdraw/close, the collateral redeem that happens in the same transaction.
 *
 * Coll-flash and the collateral redeem (WithdrawObligationCollateralAndRedeemReserveCollateral)
 * both draw from the collateral reserve within a single transaction, and the flash loan is not
 * repaid until after the redeem. So a thin collateral reserve can satisfy the flash borrow alone
 * yet still revert with InsufficientLiquidity (klend 6008) once the redeem is added on top.
 *
 * `redeemCollateralLamports` is required (not optional): every caller must pass the collateral that
 * its transaction redeems from the collateral reserve in the same tx, so coll-flash viability always
 * accounts for both legs. Pass 0 only when the op genuinely has no redeem (opens / leverage-up
 * deposits). Withdraw/close, deleverage (adjust-decrease) and repay-with-collateral all redeem.
 *
 * @param collReserve - The collateral reserve
 * @param debtReserve - The debt reserve
 * @param requiredCollLamports - Amount needed if flash borrowing collateral
 * @param requiredDebtLamports - Amount needed if flash borrowing debt
 * @param redeemCollateralLamports - Collateral liquidity redeemed from the collateral reserve in the
 *   same tx (the coll withdraw/redeem amount). 0 only when the op has no redeem leg. Coll-flash
 *   requires the reserve to cover `requiredCollLamports + redeemCollateralLamports`.
 * @returns 'coll' or 'debt'
 * @throws if neither reserve supports flash borrowing the required amount
 */
export declare function determineFlashBorrowType(collReserve: KaminoReserve, debtReserve: KaminoReserve, requiredCollLamports: Decimal, requiredDebtLamports: Decimal, redeemCollateralLamports: Decimal): FlashBorrowType;
//# sourceMappingURL=utils.d.ts.map