import { BigNumber } from "ethers";
export interface PoolTokenMetadata {
    token: string;
    decimals: number;
    symbol: string;
    name: string;
}
export interface FeeData {
    gamma: BigNumber;
    minFee: number;
    maxFee: number;
}
export interface CryptoPoolData {
    gamma: BigNumber;
    invariantLast: BigNumber;
    priceScale: BigNumber;
    futureParamsTime: BigNumber;
    virtualPrice: BigNumber;
    totalSupply: BigNumber;
}
export interface GraphRangePoolDayData {
    id: string;
    date: number;
    feesUSD: string;
    volumeUSD: string;
    tvlUSD: string;
    token0Price: string;
    token1Price: string;
    tick: string;
    sqrtPrice: string;
    liquidity: string;
}
export interface RangePoolDayData {
    dailyStats: GraphRangePoolDayData[];
    lastUpdate: number;
}
export interface IRangePosition {
    tokenId: BigNumber;
    token0: string;
    token1: string;
    tickSpacing: number;
    tickLower: number;
    tickUpper: number;
    liquidity: BigNumber;
    feeGrowthInside0LastX128: BigNumber;
    feeGrowthInside1LastX128: BigNumber;
    tokensOwed0: BigNumber;
    tokensOwed1: BigNumber;
    tickLowerFeeGrowthOutside0X128: BigNumber;
    tickLowerFeeGrowthOutside1X128: BigNumber;
    tickUpperFeeGrowthOutside0X128: BigNumber;
    tickUpperFeeGrowthOutside1X128: BigNumber;
    pool: string;
    reserve0: BigNumber;
    reserve1: BigNumber;
    tickCurrent: number;
    protocolFee: number;
    swapFee01: number;
    swapFee10: number;
    sqrtPriceX96: BigNumber;
    poolLiquidity: BigNumber;
    poolStakedLiquidity: BigNumber;
    feeGrowthGlobal0X128: BigNumber;
    feeGrowthGlobal1X128: BigNumber;
    apr?: number;
    feesHours?: number;
    token0Amount: BigNumber;
    token0Value: BigNumber;
    token1Amount: BigNumber;
    token1Value: BigNumber;
    token0ValueUSD?: BigNumber | null;
    token1ValueUSD?: BigNumber | null;
}
export interface PoolData {
    isV2: boolean;
    isV3: boolean;
    isUniswap: boolean;
    deprecated: boolean;
    pool: string;
    poolType: number;
    swapFee01: FeeData;
    swapFee10: FeeData;
    protocolFee: number;
    token0: PoolTokenMetadata;
    token1: PoolTokenMetadata;
    reserve0: BigNumber;
    reserve1: BigNumber;
    totalSupply: BigNumber;
    accountBalance: BigNumber;
    routerAllowance: BigNumber;
    token0Value: BigNumber;
    token1Value: BigNumber;
    feesCurrentEpoch: BigNumber;
    feesLastEpoch: BigNumber;
    feeStartTime: BigNumber;
    totalFeeValue: BigNumber;
    volume0: BigNumber;
    volume1: BigNumber;
    a: BigNumber;
    cryptoPoolData: CryptoPoolData[];
    uniswapV3PoolData?: UniswapV3PoolData[];
    feesData?: RangePoolDayData[];
    rangePositions?: IRangePosition[];
}
export interface UniswapV3PoolData {
    tickSpacing: number;
    sqrtPriceX96: BigNumber;
    tick: number;
    liquidity: BigNumber;
}
export interface RoutePoolData {
    isV2: boolean;
    isV3: boolean;
    isUniswap: boolean;
    pool: string;
    tokenA: string;
    tokenB: string;
    poolType: number;
    reserveA: BigNumber;
    reserveB: BigNumber;
    swapFeeAB: FeeData;
    swapFeeBA: FeeData;
    a: BigNumber;
    cryptoPoolData: CryptoPoolData[];
    rangePoolData: UniswapV3PoolData[];
}
export interface RoutePoolsRawData {
    poolsDirect: RoutePoolData[];
    poolsA: RoutePoolData[];
    poolsB: RoutePoolData[];
    poolsBase: RoutePoolData[];
}
export interface RouteInput {
    tokenIn: string;
    tokenOut: string;
    direction: RouteDirection;
    amount: BigNumber;
}
export interface QuoteAmount {
    amount: BigNumber;
    quote: BigNumber;
    fee: BigNumber;
}
export interface PSMRoute {
    type: RouteType;
    amount: QuoteAmount;
}
export declare enum RouteType {
    WETH_WRAP = "WETH_WRAP",
    WETH_UNWRAP = "WETH_UNWRAP",
    TOKEN_WRAP = "TOKEN_WRAP",
    TOKEN_UNWRAP = "TOKEN_UNWRAP",
    PSM_SWAP = "PSM_SWAP",
    PSM_MINT = "PSM_MINT",
    PSM_BURN = "PSM_BURN",
    AMM_SWAP = "AMM_SWAP"
}
export interface BaseRoute {
    type: RouteType;
    amountIn: BigNumber;
    amountOut: BigNumber;
    amountQuote: BigNumber;
    gas: BigNumber;
    gasEstimate: BigNumber;
}
export interface WrappedRoute {
    success: boolean;
    type: RouteType;
    amountIn: BigNumber;
    amountOut: BigNumber;
    quote: BigNumber;
    route: SwapRoute | PSMRoute | BaseRoute;
    direction: RouteDirection;
    priceImpact: BigNumber;
    gas: BigNumber;
    gasEstimate: BigNumber;
    network?: string;
}
export interface RoutePools {
    tokenA: string;
    tokenB: string;
    routeTokens: string[];
    directPoolOptimal: RoutePoolData | null;
    pools: RoutePoolsRawData;
}
export declare enum PoolTypes {
    CLASSIC = 1,
    STABLE = 2,
    AQUA = 3,
    UNISWAP_V3 = 4
}
export interface GetAmountParams {
    poolType: PoolTypes;
    swap0For1: boolean;
    tokenIn: string;
    tokenOut: string;
    amount: BigNumber;
    reserveIn: BigNumber;
    reserveOut: BigNumber;
    reserve0: BigNumber;
    reserve1: BigNumber;
    swapFee: FeeData;
    tokenInPrecisionMultiplier?: BigNumber;
    tokenOutPrecisionMultiplier?: BigNumber;
    a?: BigNumber;
    gamma?: BigNumber;
    priceScale?: BigNumber;
    futureParamsTime?: BigNumber;
    invariantLast?: BigNumber;
    virtualPrice?: BigNumber;
    totalSupply?: BigNumber;
    tickSpacing?: number;
    sqrtPriceX96?: BigNumber;
    tick?: number;
    liquidity?: BigNumber;
}
export interface SwapRoute {
    tokenIn: string;
    tokenOut: string;
    found: boolean;
    amountIn: BigNumber;
    amountOut: BigNumber;
    quote: BigNumber;
    paths: PathWithAmounts[];
    priceImpact: BigNumber;
    gas: BigNumber;
    network?: string;
}
export interface StepData {
    pool: RoutePoolData;
    tokenIn: string;
}
export interface CryptoPoolData {
    gamma: BigNumber;
    invariantLast: BigNumber;
    priceScale: BigNumber;
    futureParamsTime: BigNumber;
    virtualPrice: BigNumber;
    totalSupply: BigNumber;
}
export interface Step {
    pool: RoutePoolData;
    swapFee: FeeData;
    tokenIn: string;
    tokenOut: string;
    zeroForOne: boolean;
}
export type Path = Step[];
export interface StepWithAmount extends Step {
    amountIn: BigNumber;
    updatedStep: Step | null;
    sqrtPriceLimitX96: BigNumber | null;
    tokenOut: string;
    zeroForOne: boolean;
}
export declare enum RouteDirection {
    EXACT_IN = 0,
    EXACT_OUT = 1
}
export interface PathWithAmounts {
    direction: RouteDirection;
    stepsWithAmount: StepWithAmount[];
    amountIn: BigNumber;
    amountOut: BigNumber;
    quote: BigNumber;
}
export type BestPathsWithAmounts = {
    found: boolean;
    direction: RouteDirection;
    pathsWithAmounts: PathWithAmounts[];
    amountIn: BigNumber;
    amountOut: BigNumber;
    quote: BigNumber;
    bestPriceImpact: BigNumber | null;
    gas: BigNumber;
};
export interface PermitSignature {
    signature: string;
    data: {
        token: string;
        owner: string;
        spender: string;
        amount: BigNumber;
        nonce: BigNumber;
        deadline: BigNumber;
    };
}
export interface ISplitPermitParams {
    token: string;
    approveAmount: BigNumber;
    deadline: BigNumber;
    v: number;
    r: string;
    s: string;
}
export interface SwapStepData {
    pool: string;
    data: string;
    callback: string;
    callbackData: string;
    useVault: boolean;
}
export interface SwapPathData {
    steps: SwapStepData[];
    tokenIn: string;
    amountIn: BigNumber;
}
//# sourceMappingURL=types.d.ts.map