import { IBaseAdapterCommonOptions, IBridgeProvider } from '../adapters/base/types';
import { CBridgeAdapter } from '../adapters/cBridge/adapter';
import { DeBridgeAdapter } from '../adapters/deBridge/adapter';
import { LayerZeroAdapter } from '../adapters/layerZero/adapter';
import { MesonAdapter } from '../adapters/meson/adapter';
import { StargateAdapter } from '../adapters/stargate/adapter';
import { BridgeType, IBridgeChain, IBridgeToken, INativeCurrency, ValueOf } from '../shared/types';
import { MayanAdapter } from '../adapters/mayan/adapter';

export interface Adapters {
    cBridge: CBridgeAdapter;
    deBridge: DeBridgeAdapter;
    layerZero: LayerZeroAdapter;
    meson: MesonAdapter;
    stargate: StargateAdapter;
    mayan: MayanAdapter;
}
export interface AggregatorOptions extends Omit<IBaseAdapterCommonOptions, 'nativeCurrencies'> {
    providers: IBridgeProvider[];
    chainSorter?: (a: IBridgeChain, b: IBridgeChain) => number;
    tokenSorter?: (a: IBridgeToken, b: IBridgeToken) => number;
}
export declare class Aggregator {
    private options;
    adapters: Array<ValueOf<Adapters>>;
    nativeCurrencies: Record<string, INativeCurrency>;
    constructor(options: AggregatorOptions);
    private initNativeCurrencies;
    private initAdapters;
    getAdapter<P extends BridgeType>(id: P): Adapters[P] | undefined;
    getNativeCurrency(chainId?: number): INativeCurrency | undefined;
    getFromChains(): IBridgeChain[];
    getToChains({ fromChainId }: {
        fromChainId: number;
    }): IBridgeChain[];
    getTokens({ fromChainId, toChainId, }: {
        fromChainId: number;
        toChainId: number;
    }): IBridgeToken[];
    getToTokens({ fromChainId, toChainId, tokenAddress, }: {
        fromChainId: number;
        toChainId: number;
        tokenAddress: string;
    }): IBridgeToken[];
    getFromChainDetail({ fromChainId, toChainId, tokenAddress, }: {
        fromChainId: number;
        toChainId: number;
        tokenAddress: string;
    }): IBridgeChain | undefined;
    getToChainDetail({ fromChainId, toChainId, tokenAddress, }: {
        fromChainId: number;
        toChainId: number;
        tokenAddress: string;
    }): IBridgeChain | undefined;
    getTokenDetail({ fromChainId, toChainId, tokenAddress, }: {
        fromChainId: number;
        toChainId: number;
        tokenAddress: string;
    }): IBridgeToken | undefined;
    getToTokenDetail({ fromChainId, toChainId, fromTokenAddress, toTokenAddress, }: {
        fromChainId: number;
        toChainId: number;
        fromTokenAddress: string;
        toTokenAddress: string;
    }): IBridgeToken | undefined;
}
