import type { Address, PermissionTemplate } from "../types.js";
/** Swap sub-domain config — mirrors the contract's `SwapConfig` struct. */
export type DefiBundleSwapConfig = {
    routers: Address[];
    tokensIn: Address[];
    tokensOut: Address[];
    maxAmountPerTx: bigint;
    maxSlippageBps: number;
    priceOracle: Address;
    maxPriceAgeSec: number;
};
/** Borrow sub-domain config — mirrors the contract's `BorrowConfig` struct. */
export type DefiBundleBorrowConfig = {
    protocols: Address[];
    assets: Address[];
    maxAmountPerTx: bigint;
    maxLtvBps: number;
    collateralOracle: Address;
    borrowOracle: Address;
    maxPriceAgeSec: number;
};
/** Transfer sub-domain config — mirrors the contract's `TransferConfig` struct. */
export type DefiBundleTransferConfig = {
    recipients: Address[];
    tokens: Address[];
    maxAmountPerTx: bigint;
};
/**
 * Params for SharedDeFiBundlePermission.
 *
 * Matches the on-chain `_applyConfig` decode exactly:
 *   abi.decode(params, (SwapConfig, BorrowConfig, TransferConfig))
 */
export type DefiBundleParams = {
    swap: DefiBundleSwapConfig;
    borrow: DefiBundleBorrowConfig;
    transfer: DefiBundleTransferConfig;
};
export declare const defiBundleTemplate: PermissionTemplate<DefiBundleParams>;
//# sourceMappingURL=defiBundle.d.ts.map