import type { ChainMetadata } from '@hyperlane-xyz/sdk/metadata/chainMetadataTypes';
import type { WarpRouteDeployConfig } from '@hyperlane-xyz/sdk/token/types';
import type { ChainMap, ChainName } from '@hyperlane-xyz/sdk/types';
import type { WarpCoreConfig } from '@hyperlane-xyz/sdk/warp/types';
import type { Logger } from 'pino';
import { AddWarpRouteConfigOptions, ChainAddresses, UpdateChainParams, WarpDeployConfigMap, WarpRouteConfigMap, WarpRouteFilterParams, WarpRouteId } from '../types.js';
import { IRegistry, IRegistryMethods, RegistryContent, RegistryType } from './IRegistry.js';
export interface MergedRegistryOptions {
    registries: Array<IRegistry>;
    logger?: Logger;
}
/**
 * A registry that accepts multiple sub-registries.
 * Read methods are performed on all sub-registries and the results are merged.
 * Write methods are performed on all sub-registries.
 * Can be created manually or by calling `.merge()` on an existing registry.
 */
export declare class MergedRegistry implements IRegistry {
    readonly type = RegistryType.Merged;
    readonly uri = "__merged_registry__";
    readonly registries: Array<IRegistry>;
    protected readonly logger: Logger;
    constructor({ registries, logger }: MergedRegistryOptions);
    getUri(): string;
    listRegistryContent(): Promise<RegistryContent>;
    getChains(): Promise<Array<ChainName>>;
    getMetadata(): Promise<ChainMap<ChainMetadata>>;
    getChainMetadata(chainName: ChainName): Promise<ChainMetadata | null>;
    getAddresses(): Promise<ChainMap<ChainAddresses>>;
    getChainAddresses(chainName: ChainName): Promise<ChainAddresses | null>;
    getChainLogoUri(chainName: ChainName): Promise<string | null>;
    addChain(chain: UpdateChainParams): Promise<void>;
    updateChain(chain: UpdateChainParams): Promise<void>;
    removeChain(chain: ChainName): Promise<void>;
    getWarpRoute(id: WarpRouteId): Promise<WarpCoreConfig | null>;
    getWarpDeployConfig(id: WarpRouteId): Promise<WarpRouteDeployConfig | null>;
    getWarpRoutes(filter?: WarpRouteFilterParams): Promise<WarpRouteConfigMap>;
    getWarpDeployConfigs(filter?: WarpRouteFilterParams): Promise<WarpDeployConfigMap>;
    addWarpRoute(config: WarpCoreConfig, options?: AddWarpRouteConfigOptions): Promise<void>;
    addWarpRouteConfig(config: WarpRouteDeployConfig, options: AddWarpRouteConfigOptions): Promise<void>;
    protected multiRegistryRead<R>(readFn: (registry: IRegistry) => Promise<R> | R): Promise<R[]>;
    protected multiRegistryWrite(writeFn: (registry: IRegistry) => Promise<void>, methodName: IRegistryMethods, logMsg: string): Promise<void>;
    merge(otherRegistry: IRegistry): IRegistry;
}
