import { FinalExecutionOutcome, Transaction } from '@near-wallet-selector/core';
import JSBI from 'jsbi';
import { PlatformFeeAndAccounts, SwapMode, SwapRoute, TokenRouteSegments } from './amms/common/types';
import './config';
import { Near } from 'near-api-js';
import { Provider, TokenMap, UserTokensMap } from './types';
declare class PerkAggregator {
    private wrapNear;
    near: Near;
    provider: Provider;
    tokenMap: TokenMap;
    availableTokens: string[];
    tokenRouteSegments: TokenRouteSegments;
    platformFeeAndAccounts: PlatformFeeAndAccounts;
    routeCacheDuration: number;
    intermediateTokens: string[];
    user: string | null;
    routeCache: Map<string, {
        fetchTimestamp: number;
    }>;
    userTokensMapCache: Map<string, UserTokensMap>;
    constructor(near: Near, provider: Provider, tokenMap: TokenMap, availableTokens: string[], tokenRouteSegments: TokenRouteSegments, platformFeeAndAccounts: PlatformFeeAndAccounts, routeCacheDuration: number, intermediateTokens: string[], wrapNear: boolean);
    static load({ provider, user, privateKey, platformFeeAndAccounts, // figure out how to fetch all accounts for address
    routeCacheDuration, wrapNear, }: {
        provider?: Provider;
        user?: string;
        privateKey?: string;
        platformFeeAndAccounts?: PlatformFeeAndAccounts;
        routeCacheDuration?: number;
        wrapNear?: boolean;
    }): Promise<PerkAggregator>;
    static fetchTokenRouteSegments(provider: Provider): Promise<[TokenRouteSegments, string[]]>;
    static getIntermediateTokens(): string[];
    setUserPublicKey(user: string): void;
    private loadAndSavePlatformFeeTokenData;
    private getPlatformFeeBpsForToken;
    computeRoutes({ inputMint, outputMint, amount, slippage, forceFetch, swapMode, simpleRoutesOnly, }: {
        inputMint: string;
        outputMint: string;
        amount: JSBI;
        slippage?: number;
        forceFetch?: boolean;
        swapMode?: SwapMode;
        simpleRoutesOnly?: boolean;
    }): Promise<{
        routesInfos: SwapRoute[];
        cached: boolean;
    }>;
    buildTransactions({ route }: {
        route: SwapRoute;
    }): Promise<{
        transactions: Transaction[];
        transactionsBySteps: Transaction[][];
    }>;
    exchange({ route, }: {
        route: SwapRoute;
    }): Promise<FinalExecutionOutcome[]>;
}
export { PerkAggregator };
