import { IBaseBridgeConfig, IBaseBridgeConfigOptions } from '../../core/types';
import { ISendTokenInput, IStargateBusDriveSettings, IStargateOFTQuote, IStargateQuoteOFT, IStargateTokenValidateParams } from './types';
import { Hash } from 'viem';

export * from './types';
export declare function stargateConfig(options: IBaseBridgeConfigOptions): IBaseBridgeConfig;
export declare class Stargate {
    private client?;
    constructor(config: IBaseBridgeConfig);
    getBusQueueTime({ fromEndpointId, toEndpointId, }: {
        fromEndpointId: string;
        toEndpointId: string;
    }): Promise<IStargateBusDriveSettings>;
    getQuoteOFT({ publicClient, bridgeAddress, endPointId, receiver, amount, }: IStargateQuoteOFT): Promise<readonly [{
        minAmountLD: bigint;
        maxAmountLD: bigint;
    }, readonly {
        feeAmountLD: bigint;
        description: string;
    }[], {
        amountSentLD: bigint;
        amountReceivedLD: bigint;
    }]>;
    getQuoteSend({ publicClient, bridgeAddress, endPointId, receiver, amount, minAmount, }: IStargateOFTQuote): Promise<{
        nativeFee: bigint;
        lzTokenFee: bigint;
    }>;
    /**
     * Send token through Stargate bridge
     * @param {WalletClient} walletClient Wallet client
     * @param {PublicClient} publicClient Public client
     * @param {Address} bridgeAddress Bridge address
     * @param {Address} tokenAddress ERC-20 token address
     * @param {Number} endPointId Stargate end point ID
     * @param {Address} receiver Receiver address
     * @param {BigInt} amount Send amount
     * @returns {Hash} transaction hash
     */
    sendToken({ walletClient, publicClient, bridgeAddress, tokenAddress, endPointId, receiver, amount, }: ISendTokenInput): Promise<Hash>;
    /**
     * Validate token information
     * @param {fromBridgeAddress} from chain bridge contract address
     * @param {fromTokenAddress}  from token address
     * @param {fromTokenSymbol}   from token symbol
     * @param {fromChainId}       from chain id
     * @param {toTokenAddress}    to token address
     * @param {toTokenSymbol}     to token symbol
     * @param {toChainId}         to chain id
     * @param {toBridgeAddress}   to chain bridge contract address
     * @param {amount}            send token amount
     * @param {toPublicClient}    to chain public client
     * @param {fromPublicClient}  from chain public client
     * @param {dstEndpointId}     Stargate destination endpoint id
     * @param {stargateEndpoint}  Stargate API endpoint
     * @returns {boolean}         is token information valid or not
     */
    validateStargateToken({ fromBridgeAddress, fromTokenAddress, fromTokenDecimals, fromTokenSymbol, fromChainId, toTokenAddress, toTokenSymbol, toTokenDecimals, toChainId, toBridgeAddress, amount, toPublicClient, fromPublicClient, dstEndpointId, stargateEndpoint, }: IStargateTokenValidateParams): Promise<boolean>;
}
