import type { FeeBreakdownV2 } from '@funkit/api-base';
import { RelayQuoteError } from '@funkit/api-base';
import type { RelayExecute, RelayQuote } from '@funkit/fun-relay';
import type { TFunction } from 'i18next';
import type { ReactNode } from 'react';
export type RelayQuoteMetadata = {
    relayQuote: RelayQuote['metadata']['relayQuote'];
    feeBreakdown?: FeeBreakdownV2;
};
export declare function extractRelayFeeInfo(quoteV2: {
    [x: string]: unknown;
} | undefined): FeeBreakdownV2;
type RelayQuoteDetails = NonNullable<RelayExecute['details']>;
/** Checks if input and output are the same token on the same chain. */
export declare function isRelayQuoteSameChainAndAsset(details: RelayQuoteDetails): boolean;
/** Checks if the quote is a native token wrap (e.g., ETH → WETH). */
export declare function isRelayQuoteWrapOperation(details: RelayQuoteDetails): boolean;
/** Checks if the quote has a 1:1 exchange rate (no price conversion). */
export declare function hasRelayQuoteUnitRate(details: RelayQuoteDetails): boolean;
/**
 * Checks if Relay is acting as a passthrough (no solver, no fees).
 * True when the quote has a 1:1 rate AND is either a same-chain/same-asset
 * transfer or a native token wrap operation.
 */
export declare function isRelayPassthrough(details: RelayQuoteDetails): boolean;
export declare enum RelayExpectedErrorCodes {
    AMOUNT_TOO_LOW = "AMOUNT_TOO_LOW",
    CHAIN_DISABLED = "CHAIN_DISABLED",
    EXTRA_TXS_NOT_SUPPORTED = "EXTRA_TXS_NOT_SUPPORTED",
    FORBIDDEN = "FORBIDDEN",
    INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS",
    INSUFFICIENT_LIQUIDITY = "INSUFFICIENT_LIQUIDITY",
    INVALID_ADDRESS = "INVALID_ADDRESS",
    INVALID_EXTRA_TXS = "INVALID_EXTRA_TXS",
    INVALID_GAS_LIMIT_FOR_DEPOSIT_SPECIFIED_TXS = "INVALID_GAS_LIMIT_FOR_DEPOSIT_SPECIFIED_TXS",
    INVALID_INPUT_CURRENCY = "INVALID_INPUT_CURRENCY",
    INVALID_OUTPUT_CURRENCY = "INVALID_OUTPUT_CURRENCY",
    INVALID_SLIPPAGE_TOLERANCE = "INVALID_SLIPPAGE_TOLERANCE",
    NO_INTERNAL_SWAP_ROUTES_FOUND = "NO_INTERNAL_SWAP_ROUTES_FOUND",
    NO_QUOTES = "NO_QUOTES",
    NO_SWAP_ROUTES_FOUND = "NO_SWAP_ROUTES_FOUND",
    ROUTE_TEMPORARILY_RESTRICTED = "ROUTE_TEMPORARILY_RESTRICTED",
    SANCTIONED_CURRENCY = "SANCTIONED_CURRENCY",
    SANCTIONED_WALLET_ADDRESS = "SANCTIONED_WALLET_ADDRESS",
    SWAP_IMPACT_TOO_HIGH = "SWAP_IMPACT_TOO_HIGH",
    UNAUTHORIZED = "UNAUTHORIZED",
    UNSUPPORTED_CHAIN = "UNSUPPORTED_CHAIN",
    UNSUPPORTED_CURRENCY = "UNSUPPORTED_CURRENCY",
    UNSUPPORTED_EXECUTION_TYPE = "UNSUPPORTED_EXECUTION_TYPE",
    UNSUPPORTED_ROUTE = "UNSUPPORTED_ROUTE",
    USER_RECIPIENT_MISMATCH = "USER_RECIPIENT_MISMATCH"
}
export declare enum RelayUnexpectedErrorCodes {
    DESTINATION_TX_FAILED = "DESTINATION_TX_FAILED",
    ERC20_ROUTER_ADDRESS_NOT_FOUND = "ERC20_ROUTER_ADDRESS_NOT_FOUND",
    UNKNOWN_ERROR = "UNKNOWN_ERROR",
    SWAP_QUOTE_FAILED = "SWAP_QUOTE_FAILED",
    PERMIT_FAILED = "PERMIT_FAILED"
}
export type RelayErrorCodes = RelayExpectedErrorCodes | RelayUnexpectedErrorCodes;
export declare function getRelayErrorMessages(t: TFunction): Partial<Record<RelayErrorCodes, ReactNode>>;
export declare function getRelayQuoteErrorDisplayMessage(error: RelayQuoteError, t: TFunction, fallback: ReactNode): ReactNode;
export {};
