import { Contract } from '@ethersproject/contracts';
import { Client, Hbar } from '@hashgraph/sdk';
import { ChainId, CurrencyAmount, Token } from '@envanik/sdk';
import { AxiosInstance, AxiosRequestConfig } from 'axios';
import { HashConnector } from 'src/connectors';
export declare const TRANSACTION_MAX_FEES: {
    APPROVE_HTS: number;
    APPROVE_ERC20: number;
    PROVIDE_LIQUIDITY: number;
    CREATE_POOL: number;
    REMOVE_NATIVE_LIQUIDITY: number;
    REMOVE_LIQUIDITY: number;
    BASE_SWAP: number;
    EXTRA_SWAP: number;
    TOKEN_OUT_EXACT_SWAP: number;
    WRAP_HBAR: number;
    UNWRAP_WHBAR: number;
    TRANSFER_ERC20: number;
    STAKE_LP_TOKEN: number;
    COLLECT_REWARDS: number;
    WITHDRAW: number;
    COMPOUND: number;
    NFT_MINT: number;
    CAST_VOTE: number;
};
export interface HederaTokenMetadata {
    id: string;
    name: string;
    symbol: string;
    decimals: number;
    icon: string;
    type: string;
    totalSupply: string;
}
export interface HederaAssociateTokensData {
    tokenId: string;
    decimals: number;
    balance: string;
}
export declare type TokenBalanceResponse = {
    balances: Array<{
        account: string;
        balance: any;
    }>;
};
export interface AccountBalanceResponse {
    balances: Array<{
        account: string;
        balance: any;
        tokens: Array<{
            token_id: string;
            balance: any;
        }>;
    }>;
}
export interface TokenResponse {
    decimals: string;
    deleted: boolean;
    name: string;
    symbol: string;
    token_id: string;
    total_supply: string;
    type: string;
}
export interface TransactionResponse {
    nodeId: string;
    transactionHash: string;
    transactionId: string;
    consensusTimestamp: string;
}
export interface APITransactionResponse {
    transactions: Array<{
        entity_id: string;
        consensus_timestamp: string;
        name: string;
        node: string;
        nonce: number;
        result: string;
        scheduled: boolean;
        transaction_hash: string;
        transaction_id: string;
        transfers: Array<{
            account: string;
            amount: number;
            is_approval: boolean;
        }>;
        valid_duration_seconds: string;
        valid_start_timestamp: string;
    }>;
}
export interface APIBlockResponse {
    blocks: Array<{
        count: number;
        hapi_version: string;
        hash: string;
        name: string;
        number: number;
        previous_hash: string;
        size: number;
        timestamp: {
            from: string;
            to: string;
        };
        gas_used: number;
        logs_bloom: string;
    }>;
}
export interface NFTInfoResponse {
    nfts: {
        account_id: string;
        create_timestamp: string;
        delegating_spender: any;
        delegated: boolean;
        metadata: string;
        modified_timestamp: string;
        serial_number: number;
        spender: any;
        token_id: string;
    }[];
    links: {
        next: string | null;
    };
}
export declare type NFTResponse = NFTInfoResponse['nfts'];
interface BaseExchangeRate {
    cent_equivalent: number;
    expiration_time: number;
    hbar_equivalent: number;
}
export interface ExchangeRateResponse {
    current_rate: BaseExchangeRate;
    next_rate: BaseExchangeRate;
    timestamp: string;
}
export interface AddLiquidityData {
    tokenA: Token | undefined;
    tokenB: Token | undefined;
    tokenAAmount: string;
    tokenBAmount: string;
    tokenAAmountMin: string;
    tokenBAmountMin: string;
    account: string;
    poolExists: boolean;
    deadline: number;
    chainId: ChainId;
}
export interface AddNativeLiquidityData {
    token: Token | undefined;
    tokenAmount: string;
    HBARAmount: string;
    tokenAmountMin: string;
    HBARAmountMin: string;
    account: string;
    poolExists: boolean;
    deadline: number;
    chainId: ChainId;
}
export interface SendingApprovalData {
    tokenAddress: string;
    amount: string;
    spender?: string;
    account?: string | null;
}
export interface ContractData {
    admin_key: {
        _type: string;
        key: string;
    };
    auto_renew_account: string;
    auto_renew_period: number;
    contract_id: string;
    created_timestamp: string;
    deleted: boolean;
    evm_address: string;
    expiration_timestamp: string;
    file_id: string;
    max_automatic_token_associations: number;
    memo: string;
    obtainer_id: string;
    permanent_removal: boolean;
    proxy_account_id: string;
    timestamp: {
        from: string;
        to: string;
    };
    bytecode: string;
}
export interface SwapData {
    methodName: string;
    account: string;
    recipient: string;
    tokenInAmount: string;
    tokenOutAmount: string;
    HBARAmount: string | undefined;
    path: string[];
    exactAmountIn: boolean;
    chainId: ChainId;
    deadline: number;
}
export interface RemoveNativeLiquidityData {
    token: Token | undefined;
    liquidityAmount: string;
    tokenAmountMin: string;
    HBARAmountMin: string;
    account: string;
    deadline: number;
    chainId: ChainId;
}
export interface RemoveLiquidityData {
    tokenA: Token | undefined;
    tokenB: Token | undefined;
    liquidityAmount: string;
    tokenAAmountMin: string;
    tokenBAmountMin: string;
    account: string;
    deadline: number;
    chainId: ChainId;
}
export interface StakeOrWithdrawData {
    account: string;
    amount: string;
    poolId: string;
    chainId: ChainId;
    methodName: 'stake' | 'withdraw';
}
export interface ClaimRewardData {
    account: string;
    methodName: string;
    poolId: string;
    chainId: ChainId;
}
export interface SarBaseData {
    positionId: string;
    account: string;
    chainId: ChainId;
    rent: string;
}
export interface SarStakeData extends Omit<SarBaseData, 'positionId'> {
    amount: string;
    positionId?: string;
    methodName: 'mint' | 'stake';
}
export interface CompoundData {
    slippage: {
        minPairAmount: string;
        maxPairAmount: string;
    };
    poolId: string;
    methodName: 'compound' | 'compoundTo';
    account: string;
    chainId: ChainId;
    contract: Contract;
}
export interface CastVoteData {
    proposalId: string | undefined;
    support: boolean;
    nftId: string;
    chainId: ChainId;
    account: string;
}
export interface ClaimAirdropData {
    address: string;
    account: string;
    amount: string;
    proof: string[];
}
export declare type SarUnstakeData = Omit<SarStakeData, 'methodName' | 'positionId'> & {
    positionId: string;
};
export declare class Hedera {
    axios: AxiosInstance;
    private hashConnect;
    constructor(connector: HashConnector);
    get client(): Client;
    get HEDERA_API_BASE_URL(): string;
    call<T>(config: AxiosRequestConfig): Promise<T>;
    static isHederaChain: (chainId: ChainId) => boolean;
    isHederaIdValid: (hederaId: string) => string | false;
    static isAddressValid: (address: string) => string | false;
    hederaId: (address: string) => string;
    idToAddress: (tokenId: string) => string;
    tokenToContractId: (id: string) => string;
    contractToTokenId: (id: string) => string;
    getAccountBalance(account: string): Promise<any>;
    getMetadata(tokenAddress: string): Promise<HederaTokenMetadata | undefined>;
    getTokenBalance(tokenAddress: string, account?: string): Promise<any>;
    getAccountAssociatedTokens(account: string): Promise<Array<HederaAssociateTokensData> | undefined>;
    getExchangeRate(): Promise<ExchangeRateResponse>;
    getNftInfo(address: string | undefined, account: string | null | undefined): Promise<{
        account_id: string;
        create_timestamp: string;
        delegating_spender: any;
        delegated: boolean;
        metadata: string;
        modified_timestamp: string;
        serial_number: number;
        spender: any;
        token_id: string;
    }[]>;
    tokenAssociate(tokenAddress: string, account: string): Promise<{
        hash: string;
    } | null>;
    depositAction(amount: CurrencyAmount, account: string, chainId: ChainId): Promise<{
        hash: string;
    } | null>;
    withdrawAction(amount: CurrencyAmount, account: string, chainId: ChainId): Promise<{
        hash: string;
    } | null>;
    getTransactionById(transactionId: string): Promise<{
        transactionId: string;
        transactionHash: string;
        status: number;
        from: string;
        consensusTimestamp: string;
    } | null>;
    getTransactionBlock(timestamp: string): Promise<{
        count: number;
        hapi_version: string;
        hash: string;
        name: string;
        number: number;
        previous_hash: string;
        size: number;
        timestamp: {
            from: string;
            to: string;
        };
        gas_used: number;
        logs_bloom: string;
    }>;
    getTransactionLatestBlock(): Promise<number>;
    createPair(data: {
        chainId: ChainId;
        tokenA: Token;
        tokenB: Token;
        account: string;
    }): void | Promise<{
        hash: string;
    } | null>;
    addNativeLiquidity(addNativeLiquidityData: AddNativeLiquidityData): Promise<{
        hash: string;
    } | null>;
    addLiquidity(addLiquidityData: AddLiquidityData): Promise<{
        hash: string;
    } | null>;
    removeNativeLiquidity(removeNativeLiquidityData: RemoveNativeLiquidityData): Promise<{
        hash: string;
    } | null>;
    removeLiquidity(removeLiquidityData: RemoveLiquidityData): Promise<{
        hash: string;
    } | null>;
    spendingApproval(approvalData: SendingApprovalData): Promise<{
        hash: string;
    } | null>;
    getContractData(address: string): Promise<{
        contractId: string;
        evmAddress: string;
    }>;
    swap(swapData: SwapData): Promise<{
        hash: string;
    } | null>;
    sarStake(stakeData: SarStakeData): Promise<{
        hash: string;
    } | null>;
    sarUnstake(unstakeData: SarUnstakeData): Promise<{
        hash: string;
    } | null>;
    sarHarvestOrCompound(baseData: SarBaseData, methodName: 'harvest' | 'compound'): Promise<{
        hash: string;
    } | null>;
    createPangoChefUserStorageContract(chainId: ChainId, account: string): Promise<{
        hash: string;
    } | null>;
    convertHBarToTinyBars(value: string | number): string;
    convertTinyBarToHbar(value: string | number): Hbar;
    tinyCentsToTinyBars(tinyCents: string, exchangeRate: {
        cent_equivalent: number;
        hbar_equivalent: number;
    }): string;
    stakeOrWithdraw(stakeOrWithdrawData: StakeOrWithdrawData): Promise<{
        hash: string;
    } | null>;
    claimReward(claimRewardData: ClaimRewardData): Promise<{
        hash: string;
    } | null>;
    compound(compoundData: CompoundData): Promise<{
        hash: string;
    } | null>;
    castVote(castVoteData: CastVoteData): Promise<{
        hash: string;
    } | null>;
    claimAirdrop(claimData: ClaimAirdropData): Promise<{
        hash: string;
    } | null>;
}
export declare const hederaFn: Hedera;
export {};
