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 { AddWarpRouteConfigOptions, ChainAddresses, MaybePromise, WarpDeployConfigMap, WarpRouteConfigMap, WarpRouteId, WarpRouteFilterParams, UpdateChainParams } from '../types.js';
type MethodsOf<T> = {
    [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
}[keyof T];
/**
 * A type listing all method names on IRegistry.
 * It is derived from IRegistry to ensure it's always in sync.
 * Omit is used to avoid a circular reference with the `unimplementedMethods` property.
 */
export type IRegistryMethods = MethodsOf<Omit<IRegistry, 'unimplementedMethods'>>;
export interface ChainFiles {
    metadata?: string;
    addresses?: string;
    logo?: string;
    'darkmode-logo'?: string;
}
export interface RegistryContent {
    chains: ChainMap<ChainFiles>;
    deployments: {
        warpRoutes: Record<WarpRouteId, string>;
        warpDeployConfig: Record<WarpRouteId, string>;
    };
}
export declare enum RegistryType {
    Github = "github",
    FileSystem = "filesystem",
    Merged = "merged",
    Partial = "partial",
    Http = "http"
}
export interface IRegistry {
    type: RegistryType;
    uri: string;
    /**
     * An optional set of method names that are not implemented by the registry.
     * If a method is in this set, it should not be called.
     * If this property is undefined, all methods are assumed to be implemented.
     */
    readonly unimplementedMethods?: Set<IRegistryMethods>;
    getUri(itemPath?: string): string;
    listRegistryContent(): MaybePromise<RegistryContent>;
    getChains(): MaybePromise<Array<ChainName>>;
    getMetadata(): MaybePromise<ChainMap<ChainMetadata>>;
    getChainMetadata(chainName: ChainName): MaybePromise<ChainMetadata | null>;
    getAddresses(): MaybePromise<ChainMap<ChainAddresses>>;
    getChainAddresses(chainName: ChainName): MaybePromise<ChainAddresses | null>;
    getChainLogoUri(chainName: ChainName): Promise<string | null>;
    addChain(chain: UpdateChainParams): MaybePromise<void>;
    updateChain(chain: UpdateChainParams): MaybePromise<void>;
    removeChain(chain: ChainName): MaybePromise<void>;
    getWarpRoute(routeId: string): MaybePromise<WarpCoreConfig | null>;
    getWarpRoutes(filter?: WarpRouteFilterParams): MaybePromise<WarpRouteConfigMap>;
    addWarpRoute(config: WarpCoreConfig, options?: AddWarpRouteConfigOptions): MaybePromise<void>;
    addWarpRouteConfig(config: WarpRouteDeployConfig, options: AddWarpRouteConfigOptions): MaybePromise<void>;
    getWarpDeployConfig(routeId: string): MaybePromise<WarpRouteDeployConfig | null>;
    getWarpDeployConfigs(filter?: WarpRouteFilterParams): MaybePromise<WarpDeployConfigMap>;
    merge(otherRegistry: IRegistry): IRegistry;
}
export {};
