import { Token } from '../config/tokens';
import { Chain, TransactionId, TokenId, Network, Signer, routes, amount as sdkAmount } from '@wormhole-foundation/sdk';
import { default as SDKv2Route } from './sdkv2/route';
import { QuoteMetadata } from './types';
export interface TxInfo {
    route: string;
    receipt: routes.Receipt;
}
export type QuoteResult = routes.QuoteResult<routes.Options>;
type forEachCallback<T> = (name: string, route: SDKv2Route) => T;
export declare const DEFAULT_ROUTES: (typeof routes.AutomaticCCTPRoute | typeof routes.CCTPRoute | typeof routes.AutomaticTokenBridgeRoute | typeof routes.TokenBridgeRoute | typeof routes.TBTCRoute)[];
export interface QuoteParams {
    sourceChain: Chain;
    sourceToken: Token;
    destChain: Chain;
    destToken: Token;
    amount: sdkAmount.Amount;
    nativeGas: number;
    sender?: string;
    recipient?: string;
}
export default class RouteOperator {
    preference: string[];
    routes: Record<string, SDKv2Route>;
    quoteMetadataCache: QuoteMetadataCache;
    constructor(routesConfig?: routes.RouteConstructor<any>[]);
    get(name: string): SDKv2Route;
    forEach<T>(callback: forEachCallback<T>): Promise<T[]>;
    resumeFromTx(tx: TransactionId): Promise<TxInfo | null>;
    allSupportedChains(): Chain[];
    allSupportedDestTokens(sourceToken: Token | undefined, sourceChain: Chain, destChain: Chain): Promise<TokenId[]>;
    getQuotes(routes: string[], params: QuoteParams): Promise<Record<string, QuoteResult>>;
    isSameChainSwapSupported: (chain: Chain) => boolean;
    execute(routeName: string, sourceToken: Token, amount: sdkAmount.Amount, sourceChain: Chain, signer: Signer, destChain: Chain, senderAddress: string, recipientAddress: string, destToken: Token, options: routes.AutomaticTokenBridgeRoute.Options): Promise<[routes.Route<"Mainnet" | "Testnet" | "Devnet", routes.Options, routes.ValidatedTransferParams<routes.Options>, routes.Receipt>, routes.Receipt<import('@wormhole-foundation/sdk').AttestationReceipt>]>;
}
declare class QuoteMetadataCache {
    cache: Record<string, QuoteMetadataEntry>;
    pending: Record<string, QuotePromiseHandlers[]>;
    constructor();
    quoteParamsKey(routeName: string, params: QuoteParams): string;
    get(routeName: string, params: QuoteParams): QuoteMetadata | null;
    fetchQuote(routeName: string, params: QuoteParams, route: SDKv2Route): Promise<QuoteResult>;
    nextExpiry(routes: string[], params: QuoteParams): Date | undefined;
}
interface QuotePromiseHandlers {
    resolve: (quote: QuoteResult) => void;
    reject: (err: Error) => void;
}
declare class QuoteMetadataEntry {
    quote: QuoteResult;
    timestamp: Date;
    routeInstance: routes.Route<Network>;
    request: routes.RouteTransferRequest<Network>;
    constructor(quote: QuoteResult, routeInstance: routes.Route<Network>, request: routes.RouteTransferRequest<Network>);
    expires(): Date;
    ttl(): number;
}
export {};
//# sourceMappingURL=operator.d.ts.map