import { L as LendingAdapter, a as LendingRates, b as AdapterPositions, A as AdapterCapability, H as HealthInfo, c as AdapterTxResult, P as PendingReward } from '../descriptors-BnbL3xN8.js';
export { d as ProtocolDescriptor, e as allDescriptors, n as naviDescriptor } from '../descriptors-BnbL3xN8.js';
import { b as MaxWithdrawResult, M as MaxBorrowResult } from '../types-epj9U13o.js';
import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
import { Transaction, TransactionObjectArgument } from '@mysten/sui/transactions';
import '@cetusprotocol/aggregator-sdk';

declare class ProtocolRegistry {
    private lending;
    registerLending(adapter: LendingAdapter): void;
    bestSaveRate(asset: string): Promise<{
        adapter: LendingAdapter;
        rate: LendingRates;
    }>;
    bestBorrowRate(asset: string, opts?: {
        requireSameAssetBorrow?: boolean;
    }): Promise<{
        adapter: LendingAdapter;
        rate: LendingRates;
    }>;
    bestSaveRateAcrossAssets(): Promise<{
        adapter: LendingAdapter;
        rate: LendingRates;
        asset: string;
    }>;
    allRatesAcrossAssets(): Promise<Array<{
        protocol: string;
        protocolId: string;
        asset: string;
        rates: LendingRates;
    }>>;
    allRates(asset: string): Promise<Array<{
        protocol: string;
        protocolId: string;
        rates: LendingRates;
    }>>;
    allPositions(address: string): Promise<Array<{
        protocol: string;
        protocolId: string;
        positions: AdapterPositions;
    }>>;
    getLending(id: string): LendingAdapter | undefined;
    listLending(): LendingAdapter[];
}

declare class NaviAdapter implements LendingAdapter {
    readonly id = "navi";
    readonly name = "NAVI Protocol";
    readonly version = "1.0.0";
    readonly capabilities: readonly AdapterCapability[];
    readonly supportedAssets: readonly string[];
    readonly supportsSameAssetBorrow = true;
    private client;
    init(client: SuiJsonRpcClient): Promise<void>;
    initSync(client: SuiJsonRpcClient): void;
    getRates(asset: string): Promise<LendingRates>;
    getPositions(address: string): Promise<AdapterPositions>;
    getHealth(address: string): Promise<HealthInfo>;
    buildSaveTx(address: string, amount: number, asset: string): Promise<AdapterTxResult>;
    buildWithdrawTx(address: string, amount: number, asset: string, options?: {
        skipPythUpdate?: boolean;
    }): Promise<AdapterTxResult & {
        effectiveAmount: number;
    }>;
    buildBorrowTx(address: string, amount: number, asset: string, options?: {
        skipPythUpdate?: boolean;
    }): Promise<AdapterTxResult>;
    buildRepayTx(address: string, amount: number, asset: string, options?: {
        skipOracle?: boolean;
        skipPythUpdate?: boolean;
    }): Promise<AdapterTxResult>;
    maxWithdraw(address: string, _asset: string): Promise<MaxWithdrawResult>;
    maxBorrow(address: string, _asset: string): Promise<MaxBorrowResult>;
    addWithdrawToTx(tx: Transaction, address: string, amount: number, asset: string, options?: {
        skipPythUpdate?: boolean;
    }): Promise<{
        coin: TransactionObjectArgument;
        effectiveAmount: number;
    }>;
    addSaveToTx(tx: Transaction, address: string, coin: TransactionObjectArgument, asset: string): Promise<void>;
    addBorrowToTx(tx: Transaction, address: string, amount: number, asset: string, options?: {
        skipPythUpdate?: boolean;
    }): Promise<TransactionObjectArgument>;
    addRepayToTx(tx: Transaction, address: string, coin: TransactionObjectArgument, asset: string, options?: {
        skipPythUpdate?: boolean;
    }): Promise<void>;
    getPendingRewards(address: string): Promise<PendingReward[]>;
    addClaimRewardsToTx(tx: Transaction, address: string): Promise<PendingReward[]>;
}

export { AdapterCapability, AdapterPositions, AdapterTxResult, HealthInfo, LendingAdapter, LendingRates, NaviAdapter, ProtocolRegistry };
