import { z } from 'zod';
export declare enum IcaRouterType {
    REGULAR = "regular",
    MINIMAL = "minimal"
}
/**
 * Schema for fee token approval configuration.
 * Used to pre-approve ERC-20 fee tokens for hooks (e.g., IGP inside aggregation hooks).
 */
export declare const FeeTokenApprovalSchema: z.ZodObject<{
    /** ERC-20 fee token address */
    feeToken: z.ZodString;
    /** Hook address to approve (e.g., IGP inside StaticAggregationHook) */
    hook: z.ZodString;
}, "strip", z.ZodTypeAny, {
    hook: string;
    feeToken: string;
}, {
    hook: string;
    feeToken: string;
}>;
export type FeeTokenApproval = z.infer<typeof FeeTokenApprovalSchema>;
export declare const IcaRouterConfigSchema: z.ZodObject<{
    owner: z.ZodString;
    ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
    mailbox: z.ZodString;
    hook: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"protocolFee">;
        beneficiary: z.ZodString;
        maxProtocolFee: z.ZodString;
        protocolFee: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        paused: z.ZodBoolean;
    } & {
        type: z.ZodLiteral<"pausableHook">;
    }, "strip", z.ZodTypeAny, {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"opStackHook">;
        nativeBridge: z.ZodString;
        destinationChain: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"merkleTreeHook">;
    }, "strip", z.ZodTypeAny, {
        type: "merkleTreeHook";
    }, {
        type: "merkleTreeHook";
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"interchainGasPaymaster">;
        beneficiary: z.ZodString;
        oracleKey: z.ZodString;
        overhead: z.ZodRecord<z.ZodString, z.ZodNumber>;
        oracleConfig: z.ZodRecord<z.ZodString, z.ZodObject<{
            gasPrice: z.ZodString;
            tokenExchangeRate: z.ZodString;
        } & {
            tokenDecimals: z.ZodOptional<z.ZodNumber>;
        } & {
            typicalCost: z.ZodOptional<z.ZodObject<{
                handleGasAmount: z.ZodNumber;
                totalGasAmount: z.ZodNumber;
                totalUsdCost: z.ZodNumber;
            }, "strip", z.ZodTypeAny, {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            }, {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            }>>;
        }, "strip", z.ZodTypeAny, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>>;
        quoteSigners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
        contractVersion: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    }, {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    }>, z.ZodType<import("../index.js").DomainRoutingHookConfig, z.ZodTypeDef, import("../index.js").DomainRoutingHookConfig>, z.ZodType<import("../index.js").FallbackRoutingHookConfig, z.ZodTypeDef, import("../index.js").FallbackRoutingHookConfig>, z.ZodType<import("../hook/types.js").AmountRoutingHookConfig, z.ZodTypeDef, import("../hook/types.js").AmountRoutingHookConfig>, z.ZodType<import("../index.js").AggregationHookConfig, z.ZodTypeDef, import("../index.js").AggregationHookConfig>, z.ZodObject<{
        type: z.ZodLiteral<"arbL2ToL1Hook">;
        arbSys: z.ZodString;
        bridge: z.ZodOptional<z.ZodString>;
        destinationChain: z.ZodString;
        childHook: z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>;
    }, "strip", z.ZodTypeAny, {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    }, {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"defaultHook">;
    }, "strip", z.ZodTypeAny, {
        type: "defaultHook";
    }, {
        type: "defaultHook";
    }>, z.ZodObject<{
        type: z.ZodLiteral<"ccipHook">;
        destinationChain: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "ccipHook";
        destinationChain: string;
    }, {
        type: "ccipHook";
        destinationChain: string;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"cctpHook">;
        address: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "cctpHook";
        address: string;
    }, {
        type: "cctpHook";
        address: string;
    }>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"rateLimitedHook">;
        maxCapacity: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"unknownHook">;
    }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
        type: z.ZodLiteral<"predicateHook">;
        address: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "predicateHook";
        address: string;
    }, {
        type: "predicateHook";
        address: string;
    }>]>>;
    interchainSecurityModule: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
        type: z.ZodLiteral<"testIsm">;
    }, "strip", z.ZodTypeAny, {
        type: "testIsm";
    }, {
        type: "testIsm";
    }>, z.ZodObject<{
        type: z.ZodLiteral<"opStackIsm">;
        origin: z.ZodString;
        nativeBridge: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    }, {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    }>, z.ZodIntersection<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        paused: z.ZodBoolean;
    }, "strip", z.ZodTypeAny, {
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"pausableIsm">;
    }, "strip", z.ZodTypeAny, {
        type: "pausableIsm";
    }, {
        type: "pausableIsm";
    }>>, z.ZodObject<{
        type: z.ZodLiteral<"trustedRelayerIsm">;
        relayer: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "trustedRelayerIsm";
        relayer: string;
    }, {
        type: "trustedRelayerIsm";
        relayer: string;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"ccipIsm">;
        originChain: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "ccipIsm";
        originChain: string;
    }, {
        type: "ccipIsm";
        originChain: string;
    }>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
        type: z.ZodLiteral<"rateLimitedIsm">;
        maxCapacity: z.ZodString;
        recipient: z.ZodOptional<z.ZodString>;
        owner: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }>, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }>, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }>, z.ZodIntersection<z.ZodObject<{
        validators: z.ZodArray<z.ZodString, "many">;
        threshold: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        threshold: number;
        validators: string[];
    }, {
        threshold: number;
        validators: string[];
    }>, z.ZodObject<{
        type: z.ZodUnion<[z.ZodLiteral<"merkleRootMultisigIsm">, z.ZodLiteral<"messageIdMultisigIsm">, z.ZodLiteral<"storageMerkleRootMultisigIsm">, z.ZodLiteral<"storageMessageIdMultisigIsm">]>;
    }, "strip", z.ZodTypeAny, {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }, {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }>>, z.ZodIntersection<z.ZodObject<{
        validators: z.ZodArray<z.ZodObject<{
            signingAddress: z.ZodString;
            weight: z.ZodNumber;
        }, "strip", z.ZodTypeAny, {
            signingAddress: string;
            weight: number;
        }, {
            signingAddress: string;
            weight: number;
        }>, "many">;
        thresholdWeight: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    }, {
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    }>, z.ZodObject<{
        type: z.ZodUnion<[z.ZodLiteral<"weightedMerkleRootMultisigIsm">, z.ZodLiteral<"weightedMessageIdMultisigIsm">]>;
    }, "strip", z.ZodTypeAny, {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }, {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }>>, z.ZodType<import("../ism/types.js").RoutingIsmConfig, z.ZodTypeDef, import("../ism/types.js").RoutingIsmConfig>, z.ZodType<import("../ism/types.js").AggregationIsmConfig, z.ZodTypeDef, import("../ism/types.js").AggregationIsmConfig>, z.ZodObject<{
        type: z.ZodLiteral<"arbL2ToL1Ism">;
        bridge: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "arbL2ToL1Ism";
        bridge: string;
    }, {
        type: "arbL2ToL1Ism";
        bridge: string;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"offchainLookupIsm">;
        urls: z.ZodArray<z.ZodString, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"interchainAccountRouting">;
        isms: z.ZodRecord<z.ZodString, z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        type: "interchainAccountRouting";
        owner: string;
        isms: Record<string, string>;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "interchainAccountRouting";
        owner: string;
        isms: Record<string, string>;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"unknownIsm">;
    }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough">>]>>;
} & {
    foreignDeployment: z.ZodOptional<z.ZodString>;
} & {
    remoteRouters: z.ZodOptional<z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodObject<{
        address: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        address: string;
    }, {
        address: string;
    }>>>;
    proxyAdmin: z.ZodOptional<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        address: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    }>>;
    tokenFee: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        maxFee: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        halfAmount: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        type: z.ZodLiteral<import("../index.js").TokenFeeType.LinearFee>;
        bps: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodNumber, z.ZodString]>, number, string | number>, number, string | number>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
    }, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    }>, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
    }, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    }>, {
        bps: number;
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
    }, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    }>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        quoteSigners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    } & {
        maxFee: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        halfAmount: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        type: z.ZodLiteral<import("../index.js").TokenFeeType.OffchainQuotedLinearFee>;
        bps: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodNumber, z.ZodString]>, number, string | number>, number, string | number>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
        quoteSigners?: string[] | undefined;
    }, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    }>, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
        quoteSigners?: string[] | undefined;
    }, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    }>, {
        bps: number;
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        quoteSigners?: string[] | undefined;
    }, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.ProgressiveFee>;
        maxFee: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
        halfAmount: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.RegressiveFee>;
        maxFee: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
        halfAmount: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.RoutingFee>;
        feeContracts: z.ZodRecord<z.ZodString, z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }>, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.CrossCollateralRoutingFee>;
        feeContracts: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>>, Record<string, any>, Record<string, any>>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }>, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }>]>>;
} & {
    /** Router variant. 'regular' (default) deploys full InterchainAccountRouter with commit-reveal;
     *  'minimal' deploys MinimalInterchainAccountRouter for size-constrained chains. */
    routerType: z.ZodOptional<z.ZodNativeEnum<typeof IcaRouterType>>;
    /** Commitment ISM config — required for regular routers, must be omitted for minimal. */
    commitmentIsm: z.ZodOptional<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"offchainLookupIsm">;
        urls: z.ZodArray<z.ZodString, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }>>;
    /**
     * Optional: Pre-approve fee tokens for hooks.
     * Use this when the ICA router will be used with ERC-20 fee tokens and
     * aggregation hooks containing an IGP as a child hook.
     */
    feeTokenApprovals: z.ZodOptional<z.ZodArray<z.ZodObject<{
        /** ERC-20 fee token address */
        feeToken: z.ZodString;
        /** Hook address to approve (e.g., IGP inside StaticAggregationHook) */
        hook: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        hook: string;
        feeToken: string;
    }, {
        hook: string;
        feeToken: string;
    }>, "many">>;
}, "strip", z.ZodTypeAny, {
    owner: string;
    mailbox: string;
    ownerOverrides?: Record<string, string> | undefined;
    proxyAdmin?: {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    hook?: string | {
        type: "merkleTreeHook";
    } | {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    } | {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    } | {
        type: "defaultHook";
    } | {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "ccipHook";
        destinationChain: string;
    } | import("../index.js").DomainRoutingHookConfig | import("../index.js").FallbackRoutingHookConfig | import("../hook/types.js").AmountRoutingHookConfig | import("../index.js").AggregationHookConfig | {
        type: "cctpHook";
        address: string;
    } | z.objectOutputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough"> | {
        type: "predicateHook";
        address: string;
    } | undefined;
    interchainSecurityModule?: string | ({
        threshold: number;
        validators: string[];
    } & {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }) | ({
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    } & {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }) | {
        type: "testIsm";
    } | ({
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } & {
        type: "pausableIsm";
    }) | {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    } | {
        type: "trustedRelayerIsm";
        relayer: string;
    } | {
        type: "ccipIsm";
        originChain: string;
    } | {
        type: "arbL2ToL1Ism";
        bridge: string;
    } | {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    } | {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | import("../ism/types.js").RoutingIsmConfig | import("../ism/types.js").AggregationIsmConfig | z.objectOutputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough"> | undefined;
    foreignDeployment?: string | undefined;
    remoteRouters?: Record<string | number, {
        address: string;
    }> | undefined;
    tokenFee?: {
        bps: number;
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
    } | {
        bps: number;
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        quoteSigners?: string[] | undefined;
    } | {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    } | {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    } | {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    } | {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    } | undefined;
    routerType?: IcaRouterType | undefined;
    commitmentIsm?: {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    feeTokenApprovals?: {
        hook: string;
        feeToken: string;
    }[] | undefined;
}, {
    owner: string;
    mailbox: string;
    ownerOverrides?: Record<string, string> | undefined;
    proxyAdmin?: {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    hook?: string | {
        type: "merkleTreeHook";
    } | {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    } | {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    } | {
        type: "defaultHook";
    } | {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "ccipHook";
        destinationChain: string;
    } | import("../index.js").DomainRoutingHookConfig | import("../index.js").FallbackRoutingHookConfig | import("../hook/types.js").AmountRoutingHookConfig | import("../index.js").AggregationHookConfig | {
        type: "cctpHook";
        address: string;
    } | z.objectInputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough"> | {
        type: "predicateHook";
        address: string;
    } | undefined;
    interchainSecurityModule?: string | ({
        threshold: number;
        validators: string[];
    } & {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }) | ({
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    } & {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }) | {
        type: "testIsm";
    } | ({
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } & {
        type: "pausableIsm";
    }) | {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    } | {
        type: "trustedRelayerIsm";
        relayer: string;
    } | {
        type: "ccipIsm";
        originChain: string;
    } | {
        type: "arbL2ToL1Ism";
        bridge: string;
    } | {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    } | {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "interchainAccountRouting";
        owner: string;
        isms: Record<string, string>;
        ownerOverrides?: Record<string, string> | undefined;
    } | import("../ism/types.js").RoutingIsmConfig | import("../ism/types.js").AggregationIsmConfig | z.objectInputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough"> | undefined;
    foreignDeployment?: string | undefined;
    remoteRouters?: Record<string | number, {
        address: string;
    }> | undefined;
    tokenFee?: {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    } | {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    } | {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    } | {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    } | {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    } | {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    } | undefined;
    routerType?: IcaRouterType | undefined;
    commitmentIsm?: {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    feeTokenApprovals?: {
        hook: string;
        feeToken: string;
    }[] | undefined;
}>;
export type IcaRouterConfig = z.infer<typeof IcaRouterConfigSchema>;
export declare const DerivedIcaRouterConfigSchema: z.ZodObject<{
    owner: z.ZodString;
    ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
} & {
    mailbox: z.ZodString;
    hook: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"protocolFee">;
        beneficiary: z.ZodString;
        maxProtocolFee: z.ZodString;
        protocolFee: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        paused: z.ZodBoolean;
    } & {
        type: z.ZodLiteral<"pausableHook">;
    }, "strip", z.ZodTypeAny, {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"opStackHook">;
        nativeBridge: z.ZodString;
        destinationChain: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"merkleTreeHook">;
    }, "strip", z.ZodTypeAny, {
        type: "merkleTreeHook";
    }, {
        type: "merkleTreeHook";
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"interchainGasPaymaster">;
        beneficiary: z.ZodString;
        oracleKey: z.ZodString;
        overhead: z.ZodRecord<z.ZodString, z.ZodNumber>;
        oracleConfig: z.ZodRecord<z.ZodString, z.ZodObject<{
            gasPrice: z.ZodString;
            tokenExchangeRate: z.ZodString;
        } & {
            tokenDecimals: z.ZodOptional<z.ZodNumber>;
        } & {
            typicalCost: z.ZodOptional<z.ZodObject<{
                handleGasAmount: z.ZodNumber;
                totalGasAmount: z.ZodNumber;
                totalUsdCost: z.ZodNumber;
            }, "strip", z.ZodTypeAny, {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            }, {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            }>>;
        }, "strip", z.ZodTypeAny, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>>;
        quoteSigners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
        contractVersion: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    }, {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    }>, z.ZodType<import("../index.js").DomainRoutingHookConfig, z.ZodTypeDef, import("../index.js").DomainRoutingHookConfig>, z.ZodType<import("../index.js").FallbackRoutingHookConfig, z.ZodTypeDef, import("../index.js").FallbackRoutingHookConfig>, z.ZodType<import("../hook/types.js").AmountRoutingHookConfig, z.ZodTypeDef, import("../hook/types.js").AmountRoutingHookConfig>, z.ZodType<import("../index.js").AggregationHookConfig, z.ZodTypeDef, import("../index.js").AggregationHookConfig>, z.ZodObject<{
        type: z.ZodLiteral<"arbL2ToL1Hook">;
        arbSys: z.ZodString;
        bridge: z.ZodOptional<z.ZodString>;
        destinationChain: z.ZodString;
        childHook: z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>;
    }, "strip", z.ZodTypeAny, {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    }, {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"defaultHook">;
    }, "strip", z.ZodTypeAny, {
        type: "defaultHook";
    }, {
        type: "defaultHook";
    }>, z.ZodObject<{
        type: z.ZodLiteral<"ccipHook">;
        destinationChain: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "ccipHook";
        destinationChain: string;
    }, {
        type: "ccipHook";
        destinationChain: string;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"cctpHook">;
        address: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "cctpHook";
        address: string;
    }, {
        type: "cctpHook";
        address: string;
    }>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"rateLimitedHook">;
        maxCapacity: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"unknownHook">;
    }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough">>, z.ZodObject<{
        type: z.ZodLiteral<"predicateHook">;
        address: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "predicateHook";
        address: string;
    }, {
        type: "predicateHook";
        address: string;
    }>]>>;
    interchainSecurityModule: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodObject<{
        type: z.ZodLiteral<"testIsm">;
    }, "strip", z.ZodTypeAny, {
        type: "testIsm";
    }, {
        type: "testIsm";
    }>, z.ZodObject<{
        type: z.ZodLiteral<"opStackIsm">;
        origin: z.ZodString;
        nativeBridge: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    }, {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    }>, z.ZodIntersection<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        paused: z.ZodBoolean;
    }, "strip", z.ZodTypeAny, {
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"pausableIsm">;
    }, "strip", z.ZodTypeAny, {
        type: "pausableIsm";
    }, {
        type: "pausableIsm";
    }>>, z.ZodObject<{
        type: z.ZodLiteral<"trustedRelayerIsm">;
        relayer: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "trustedRelayerIsm";
        relayer: string;
    }, {
        type: "trustedRelayerIsm";
        relayer: string;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"ccipIsm">;
        originChain: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "ccipIsm";
        originChain: string;
    }, {
        type: "ccipIsm";
        originChain: string;
    }>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
        type: z.ZodLiteral<"rateLimitedIsm">;
        maxCapacity: z.ZodString;
        recipient: z.ZodOptional<z.ZodString>;
        owner: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }>, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }>, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }, {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    }>, z.ZodIntersection<z.ZodObject<{
        validators: z.ZodArray<z.ZodString, "many">;
        threshold: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        threshold: number;
        validators: string[];
    }, {
        threshold: number;
        validators: string[];
    }>, z.ZodObject<{
        type: z.ZodUnion<[z.ZodLiteral<"merkleRootMultisigIsm">, z.ZodLiteral<"messageIdMultisigIsm">, z.ZodLiteral<"storageMerkleRootMultisigIsm">, z.ZodLiteral<"storageMessageIdMultisigIsm">]>;
    }, "strip", z.ZodTypeAny, {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }, {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }>>, z.ZodIntersection<z.ZodObject<{
        validators: z.ZodArray<z.ZodObject<{
            signingAddress: z.ZodString;
            weight: z.ZodNumber;
        }, "strip", z.ZodTypeAny, {
            signingAddress: string;
            weight: number;
        }, {
            signingAddress: string;
            weight: number;
        }>, "many">;
        thresholdWeight: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    }, {
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    }>, z.ZodObject<{
        type: z.ZodUnion<[z.ZodLiteral<"weightedMerkleRootMultisigIsm">, z.ZodLiteral<"weightedMessageIdMultisigIsm">]>;
    }, "strip", z.ZodTypeAny, {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }, {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }>>, z.ZodType<import("../ism/types.js").RoutingIsmConfig, z.ZodTypeDef, import("../ism/types.js").RoutingIsmConfig>, z.ZodType<import("../ism/types.js").AggregationIsmConfig, z.ZodTypeDef, import("../ism/types.js").AggregationIsmConfig>, z.ZodObject<{
        type: z.ZodLiteral<"arbL2ToL1Ism">;
        bridge: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        type: "arbL2ToL1Ism";
        bridge: string;
    }, {
        type: "arbL2ToL1Ism";
        bridge: string;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"offchainLookupIsm">;
        urls: z.ZodArray<z.ZodString, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"interchainAccountRouting">;
        isms: z.ZodRecord<z.ZodString, z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        type: "interchainAccountRouting";
        owner: string;
        isms: Record<string, string>;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "interchainAccountRouting";
        owner: string;
        isms: Record<string, string>;
        ownerOverrides?: Record<string, string> | undefined;
    }>, z.ZodObject<{
        type: z.ZodLiteral<"unknownIsm">;
    }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough">>]>>;
} & {
    foreignDeployment: z.ZodOptional<z.ZodString>;
} & {
    remoteRouters: z.ZodOptional<z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodObject<{
        address: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        address: string;
    }, {
        address: string;
    }>>>;
    proxyAdmin: z.ZodOptional<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        address: z.ZodOptional<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    }>>;
    tokenFee: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        maxFee: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        halfAmount: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        type: z.ZodLiteral<import("../index.js").TokenFeeType.LinearFee>;
        bps: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodNumber, z.ZodString]>, number, string | number>, number, string | number>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
    }, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    }>, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
    }, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    }>, {
        bps: number;
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
    }, {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    }>, z.ZodEffects<z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        quoteSigners: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
    } & {
        maxFee: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        halfAmount: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>>;
        type: z.ZodLiteral<import("../index.js").TokenFeeType.OffchainQuotedLinearFee>;
        bps: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodUnion<[z.ZodNumber, z.ZodString]>, number, string | number>, number, string | number>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
        quoteSigners?: string[] | undefined;
    }, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    }>, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        bps?: number | undefined;
        quoteSigners?: string[] | undefined;
    }, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    }>, {
        bps: number;
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        quoteSigners?: string[] | undefined;
    }, {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.ProgressiveFee>;
        maxFee: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
        halfAmount: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.RegressiveFee>;
        maxFee: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
        halfAmount: z.ZodEffects<z.ZodUnion<[z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>, z.ZodString]>, bigint, string | number | bigint>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    }, {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.RoutingFee>;
        feeContracts: z.ZodRecord<z.ZodString, z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }>, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }, {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    }>, z.ZodEffects<z.ZodObject<{
        owner: z.ZodString;
    } & {
        type: z.ZodLiteral<import("../index.js").TokenFeeType.CrossCollateralRoutingFee>;
        feeContracts: z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodLazy<z.ZodType<any, z.ZodTypeDef, any>>>, Record<string, any>, Record<string, any>>>;
    }, "strip", z.ZodTypeAny, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }>, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }, {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    }>]>>;
} & {
    /** Router variant. 'regular' (default) deploys full InterchainAccountRouter with commit-reveal;
     *  'minimal' deploys MinimalInterchainAccountRouter for size-constrained chains. */
    routerType: z.ZodOptional<z.ZodNativeEnum<typeof IcaRouterType>>;
    /** Commitment ISM config — required for regular routers, must be omitted for minimal. */
    commitmentIsm: z.ZodOptional<z.ZodObject<{
        owner: z.ZodString;
        ownerOverrides: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    } & {
        type: z.ZodLiteral<"offchainLookupIsm">;
        urls: z.ZodArray<z.ZodString, "many">;
    }, "strip", z.ZodTypeAny, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }, {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    }>>;
    /**
     * Optional: Pre-approve fee tokens for hooks.
     * Use this when the ICA router will be used with ERC-20 fee tokens and
     * aggregation hooks containing an IGP as a child hook.
     */
    feeTokenApprovals: z.ZodOptional<z.ZodArray<z.ZodObject<{
        /** ERC-20 fee token address */
        feeToken: z.ZodString;
        /** Hook address to approve (e.g., IGP inside StaticAggregationHook) */
        hook: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        hook: string;
        feeToken: string;
    }, {
        hook: string;
        feeToken: string;
    }>, "many">>;
} & {
    address: z.ZodString;
}, "strip", z.ZodTypeAny, {
    address: string;
    owner: string;
    mailbox: string;
    ownerOverrides?: Record<string, string> | undefined;
    proxyAdmin?: {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    hook?: string | {
        type: "merkleTreeHook";
    } | {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    } | {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    } | {
        type: "defaultHook";
    } | {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "ccipHook";
        destinationChain: string;
    } | import("../index.js").DomainRoutingHookConfig | import("../index.js").FallbackRoutingHookConfig | import("../hook/types.js").AmountRoutingHookConfig | import("../index.js").AggregationHookConfig | {
        type: "cctpHook";
        address: string;
    } | z.objectOutputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough"> | {
        type: "predicateHook";
        address: string;
    } | undefined;
    interchainSecurityModule?: string | ({
        threshold: number;
        validators: string[];
    } & {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }) | ({
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    } & {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }) | {
        type: "testIsm";
    } | ({
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } & {
        type: "pausableIsm";
    }) | {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    } | {
        type: "trustedRelayerIsm";
        relayer: string;
    } | {
        type: "ccipIsm";
        originChain: string;
    } | {
        type: "arbL2ToL1Ism";
        bridge: string;
    } | {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    } | {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | import("../ism/types.js").RoutingIsmConfig | import("../ism/types.js").AggregationIsmConfig | z.objectOutputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough"> | undefined;
    foreignDeployment?: string | undefined;
    remoteRouters?: Record<string | number, {
        address: string;
    }> | undefined;
    tokenFee?: {
        bps: number;
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
    } | {
        bps: number;
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: bigint | undefined;
        halfAmount?: bigint | undefined;
        quoteSigners?: string[] | undefined;
    } | {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    } | {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: bigint;
        halfAmount: bigint;
    } | {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    } | {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    } | undefined;
    routerType?: IcaRouterType | undefined;
    commitmentIsm?: {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    feeTokenApprovals?: {
        hook: string;
        feeToken: string;
    }[] | undefined;
}, {
    address: string;
    owner: string;
    mailbox: string;
    ownerOverrides?: Record<string, string> | undefined;
    proxyAdmin?: {
        owner: string;
        address?: string | undefined;
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    hook?: string | {
        type: "merkleTreeHook";
    } | {
        type: "interchainGasPaymaster";
        owner: string;
        beneficiary: string;
        oracleKey: string;
        overhead: Record<string, number>;
        oracleConfig: Record<string, {
            gasPrice: string;
            tokenExchangeRate: string;
            tokenDecimals?: number | undefined;
            typicalCost?: {
                handleGasAmount: number;
                totalGasAmount: number;
                totalUsdCost: number;
            } | undefined;
        }>;
        ownerOverrides?: Record<string, string> | undefined;
        quoteSigners?: string[] | undefined;
        contractVersion?: string | undefined;
    } | {
        type: "protocolFee";
        owner: string;
        protocolFee: string;
        beneficiary: string;
        maxProtocolFee: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "pausableHook";
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "opStackHook";
        owner: string;
        nativeBridge: string;
        destinationChain: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "arbL2ToL1Hook";
        destinationChain: string;
        arbSys: string;
        bridge?: string | undefined;
        childHook?: any;
    } | {
        type: "defaultHook";
    } | {
        type: "rateLimitedHook";
        owner: string;
        maxCapacity: string;
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "ccipHook";
        destinationChain: string;
    } | import("../index.js").DomainRoutingHookConfig | import("../index.js").FallbackRoutingHookConfig | import("../hook/types.js").AmountRoutingHookConfig | import("../index.js").AggregationHookConfig | {
        type: "cctpHook";
        address: string;
    } | z.objectInputType<{
        type: z.ZodLiteral<"unknownHook">;
    }, z.ZodTypeAny, "passthrough"> | {
        type: "predicateHook";
        address: string;
    } | undefined;
    interchainSecurityModule?: string | ({
        threshold: number;
        validators: string[];
    } & {
        type: "merkleRootMultisigIsm" | "messageIdMultisigIsm" | "storageMerkleRootMultisigIsm" | "storageMessageIdMultisigIsm";
    }) | ({
        validators: {
            signingAddress: string;
            weight: number;
        }[];
        thresholdWeight: number;
    } & {
        type: "weightedMerkleRootMultisigIsm" | "weightedMessageIdMultisigIsm";
    }) | {
        type: "testIsm";
    } | ({
        owner: string;
        paused: boolean;
        ownerOverrides?: Record<string, string> | undefined;
    } & {
        type: "pausableIsm";
    }) | {
        type: "opStackIsm";
        origin: string;
        nativeBridge: string;
    } | {
        type: "trustedRelayerIsm";
        relayer: string;
    } | {
        type: "ccipIsm";
        originChain: string;
    } | {
        type: "arbL2ToL1Ism";
        bridge: string;
    } | {
        type: "rateLimitedIsm";
        maxCapacity: string;
        owner?: string | undefined;
        recipient?: string | undefined;
    } | {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | {
        type: "interchainAccountRouting";
        owner: string;
        isms: Record<string, string>;
        ownerOverrides?: Record<string, string> | undefined;
    } | import("../ism/types.js").RoutingIsmConfig | import("../ism/types.js").AggregationIsmConfig | z.objectInputType<{
        type: z.ZodLiteral<"unknownIsm">;
    }, z.ZodTypeAny, "passthrough"> | undefined;
    foreignDeployment?: string | undefined;
    remoteRouters?: Record<string | number, {
        address: string;
    }> | undefined;
    tokenFee?: {
        type: import("../index.js").TokenFeeType.LinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
    } | {
        type: import("../index.js").TokenFeeType.OffchainQuotedLinearFee;
        owner: string;
        maxFee?: string | number | bigint | undefined;
        halfAmount?: string | number | bigint | undefined;
        bps?: string | number | undefined;
        quoteSigners?: string[] | undefined;
    } | {
        type: import("../index.js").TokenFeeType.ProgressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    } | {
        type: import("../index.js").TokenFeeType.RegressiveFee;
        owner: string;
        maxFee: string | number | bigint;
        halfAmount: string | number | bigint;
    } | {
        type: import("../index.js").TokenFeeType.RoutingFee;
        owner: string;
        feeContracts: Record<string, any>;
    } | {
        type: import("../index.js").TokenFeeType.CrossCollateralRoutingFee;
        owner: string;
        feeContracts: Record<string, Record<string, any>>;
    } | undefined;
    routerType?: IcaRouterType | undefined;
    commitmentIsm?: {
        type: "offchainLookupIsm";
        owner: string;
        urls: string[];
        ownerOverrides?: Record<string, string> | undefined;
    } | undefined;
    feeTokenApprovals?: {
        hook: string;
        feeToken: string;
    }[] | undefined;
}>;
export type DerivedIcaRouterConfig = z.infer<typeof DerivedIcaRouterConfigSchema>;
//# sourceMappingURL=types.d.ts.map