import { z } from 'zod';
import { ProtocolType } from '@hyperlane-xyz/utils';
import { ChainMap, ProtocolMap } from '../../../types.js';
import { MultiProvider } from '../../MultiProvider.js';
import { TxSubmitterInterface } from './TxSubmitterInterface.js';
import { EvmSubmitterMetadataSchema } from './ethersV5/types.js';
export declare const SubmitterMetadataSchema: z.ZodUnion<[z.ZodObject<{
    chain: z.ZodString;
    userAddress: z.ZodOptional<z.ZodString>;
    accountAddress: z.ZodOptional<z.ZodString>;
    privateKey: z.ZodOptional<z.ZodString>;
    extraParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    type: z.ZodLiteral<import("./TxSubmitterTypes.js").TxSubmitterType.JSON_RPC>;
}, "strip", z.ZodTypeAny, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.JSON_RPC;
    chain: string;
    privateKey?: string | undefined;
    userAddress?: string | undefined;
    accountAddress?: string | undefined;
    extraParams?: Record<string, string> | undefined;
}, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.JSON_RPC;
    chain: string;
    privateKey?: string | undefined;
    userAddress?: string | undefined;
    accountAddress?: string | undefined;
    extraParams?: Record<string, string> | undefined;
}>, z.ZodObject<{
    chain: z.ZodString;
    accountAddress: z.ZodOptional<z.ZodString>;
    privateKey: z.ZodOptional<z.ZodString>;
    extraParams: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    userAddress: z.ZodString;
    type: z.ZodLiteral<import("./TxSubmitterTypes.js").TxSubmitterType.IMPERSONATED_ACCOUNT>;
}, "strip", z.ZodTypeAny, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.IMPERSONATED_ACCOUNT;
    chain: string;
    userAddress: string;
    privateKey?: string | undefined;
    accountAddress?: string | undefined;
    extraParams?: Record<string, string> | undefined;
}, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.IMPERSONATED_ACCOUNT;
    chain: string;
    userAddress: string;
    privateKey?: string | undefined;
    accountAddress?: string | undefined;
    extraParams?: Record<string, string> | undefined;
}>, z.ZodObject<{
    chain: z.ZodString;
    safeAddress: z.ZodString;
    type: z.ZodLiteral<import("./TxSubmitterTypes.js").TxSubmitterType.GNOSIS_SAFE>;
}, "strip", z.ZodTypeAny, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.GNOSIS_SAFE;
    chain: string;
    safeAddress: string;
}, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.GNOSIS_SAFE;
    chain: string;
    safeAddress: string;
}>, z.ZodObject<{
    version: z.ZodDefault<z.ZodString>;
    chain: z.ZodString;
    safeAddress: z.ZodString;
    type: z.ZodLiteral<import("./TxSubmitterTypes.js").TxSubmitterType.GNOSIS_TX_BUILDER>;
}, "strip", z.ZodTypeAny, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.GNOSIS_TX_BUILDER;
    chain: string;
    version: string;
    safeAddress: string;
}, {
    type: import("./TxSubmitterTypes.js").TxSubmitterType.GNOSIS_TX_BUILDER;
    chain: string;
    safeAddress: string;
    version?: string | undefined;
}>, z.ZodType<import("./ethersV5/types.js").EvmIcaTxSubmitterProps, z.ZodTypeDef, import("./ethersV5/types.js").EvmIcaTxSubmitterProps>, z.ZodType<import("./ethersV5/types.js").EvmTimelockControllerSubmitterProps, z.ZodTypeDef, import("./ethersV5/types.js").EvmTimelockControllerSubmitterProps>]>;
export type SubmitterMetadata = z.infer<typeof EvmSubmitterMetadataSchema>;
/**
 * Function type for getting a submitter instance.
 * Used for dependency injection to break circular imports.
 */
export type SubmitterGetter = <TProtocol extends ProtocolType>(multiProvider: MultiProvider, submitterMetadata: SubmitterMetadata, coreAddressesByChain: ChainMap<Record<string, string>>, additionalSubmitterFactories?: ProtocolMap<Record<string, any>>) => Promise<TxSubmitterInterface<TProtocol>>;
//# sourceMappingURL=types.d.ts.map