import { ProtocolType } from '@hyperlane-xyz/utils';
import { ChainMap } from '../../../types.js';
import { MultiProvider } from '../../MultiProvider.js';
import { TxSubmitterInterface } from './TxSubmitterInterface.js';
import { TxSubmitterBuilder } from './builder/TxSubmitterBuilder.js';
import { SubmissionStrategy } from './builder/types.js';
import { SubmitterMetadata } from './types.js';
export type SubmitterBuilderSettings = {
    submissionStrategy: SubmissionStrategy;
    multiProvider: MultiProvider;
    coreAddressesByChain: ChainMap<Record<string, string>>;
    additionalSubmitterFactories?: Record<string, SubmitterFactory>;
};
export declare function getSubmitterBuilder<TProtocol extends ProtocolType>({ submissionStrategy, multiProvider, coreAddressesByChain, additionalSubmitterFactories, }: SubmitterBuilderSettings): Promise<TxSubmitterBuilder<TProtocol>>;
export type SubmitterFactory<TProtocol extends ProtocolType = any> = (multiProvider: MultiProvider, metadata: SubmitterMetadata, coreAddressesByChain: ChainMap<Record<string, string>>) => Promise<TxSubmitterInterface<TProtocol>> | TxSubmitterInterface<TProtocol>;
/**
 * Retrieves a transaction submitter instance based on the provided metadata.
 * This function acts as a factory, using a registry of submitter builders
 * to construct the appropriate submitter for the given protocol and submission strategy.
 * It allows for extending the default registry with custom submitter types.
 *
 * @param multiProvider - The MultiProvider instance
 * @param submitterMetadata - The metadata defining the type and configuration of the submitter.
 * @param coreAddressesByChain - The address of the core Hyperlane deployments by chain. Used for filling some default values for the submission strategies.
 * @param additionalSubmitterFactories optional extension to extend the default registry. Can override if specifying the the same key.
 * @returns A promise that resolves to an instance of a TxSubmitterInterface.
 * @throws If no submitter factory is registered for the type specified in the metadata.
 */
export declare function getSubmitter<TProtocol extends ProtocolType>(multiProvider: MultiProvider, submitterMetadata: SubmitterMetadata, coreAddressesByChain: ChainMap<Record<string, string>>, additionalSubmitterFactories?: Record<string, SubmitterFactory>): Promise<TxSubmitterInterface<TProtocol>>;
//# sourceMappingURL=submitterBuilderGetter.d.ts.map