import { ClientMethodHandler } from './client-method-handler';
import { ClientOptions, Node, Auth, AccountOutputBuilderParams, BasicOutputBuilderParams, FoundryOutputBuilderParams, NftOutputBuilderParams, AccountOutputQueryParameters, AnchorOutputQueryParameters, BasicOutputQueryParameters, DelegationOutputQueryParameters, FoundryOutputQueryParameters, NftOutputQueryParameters, OutputQueryParameters } from '../types/client';
import { AccountOutput, BasicOutput, FoundryOutput, NftOutput, Output, BlockId, Payload, Block, AccountId, AnchorId, NftId, FoundryId, DelegationId, UnsignedBlock, SlotIndex, SlotCommitmentId, SlotCommitment, EpochIndex, Address } from '../types/block';
import type { NodeInfoResponse } from '../types/client/nodeInfo';
import { UTXOInput, OutputId, ProtocolParameters, u64, TransactionId, Bech32Address } from '../types';
import { BlockMetadataResponse, BlockWithMetadataResponse, InfoResponse, IssuanceBlockHeaderResponse, CommitteeResponse, CongestionResponse, ManaRewardsResponse, NetworkMetricsResponse, OutputMetadataResponse, OutputResponse, OutputsResponse, OutputWithMetadataResponse, RoutesResponse, TransactionMetadataResponse, UtxoChangesFullResponse, UtxoChangesResponse, ValidatorResponse, ValidatorsResponse } from '../types/models/api';
/** The Client to interact with nodes. */
export declare class Client {
    private methodHandler;
    /**
     * @param methodHandler The Rust method handler created in `ClientMethodHandler.create()`.
     */
    constructor(methodHandler: ClientMethodHandler);
    /**
     * @param options The client options.
     */
    static create(options: ClientOptions): Promise<Client>;
    destroy(): Promise<void>;
    /**
     * Returns the health of the node.
     * GET /health
     */
    getHealth(url: string): Promise<boolean>;
    /**
     * Returns the available API route groups of the node.
     * GET /api/routes
     */
    getRoutes(): Promise<RoutesResponse>;
    /**
     * Get the node information together with the url of the used node.
     */
    getNodeInfo(): Promise<NodeInfoResponse>;
    /**
     * Returns general information about the node.
     * GET /api/core/v3/info
     *
     * @param url The URL of the node.
     * @param auth An authentication object (e.g. JWT).
     */
    getInfo(url: string, auth?: Auth): Promise<InfoResponse>;
    /**
     * Get the network metrics.
     */
    getNetworkMetrics(): Promise<NetworkMetricsResponse>;
    /**
     * Checks if the account is ready to issue a block.
     * GET /api/core/v3/accounts/{bech32Address}/congestion
     */
    getAccountCongestion(accountId: AccountId, workScore?: number): Promise<CongestionResponse>;
    /**
     * Returns the total available Mana rewards of an account or delegation output decayed up to `epochEnd` index
     * provided in the response.
     * Note that rewards for an epoch only become available at the beginning of the next epoch. If the end epoch of a
     * staking feature is equal or greater than the current epoch, the rewards response will not include the potential
     * future rewards for those epochs. `epochStart` and `epochEnd` indicates the actual range for which reward value
     * is returned and decayed for.
     * GET /api/core/v3/rewards/{outputId}
     */
    getOutputManaRewards(outputId: OutputId, slotIndex?: SlotIndex): Promise<ManaRewardsResponse>;
    /**
     * Returns information of all registered validators and if they are active, ordered by their holding stake.
     * GET /api/core/v3/validators
     */
    getValidators(pageSize?: number, cursor?: string): Promise<ValidatorsResponse>;
    /**
     * Return information about a staker (registered validator).
     * GET /api/core/v3/validators/{bech32Address}
     */
    getValidator(accountId: AccountId): Promise<ValidatorResponse>;
    /**
     * Returns the information of committee members at the given epoch index. If epoch index is not provided, the
     * current committee members are returned.
     * GET /api/core/v3/committee/?epoch
     */
    getCommittee(epoch?: EpochIndex): Promise<CommitteeResponse>;
    /**
     * Returns information that is ideal for attaching a block in the network.
     * GET /api/core/v3/blocks/issuance
     */
    getIssuance(): Promise<IssuanceBlockHeaderResponse>;
    /**
     * Returns the BlockId of the submitted block.
     * POST /api/core/v3/blocks
     *
     * @param block The block to post.
     * @returns The block ID once the block has been posted.
     */
    postBlock(block: Block): Promise<BlockId>;
    /**
     * Returns the BlockId of the submitted block.
     * POST /api/core/v3/blocks
     *
     * @param blockBytes The block as raw bytes.
     * @returns The ID of the posted block.
     */
    postBlockRaw(blockBytes: Uint8Array): Promise<BlockId>;
    /**
     * Finds a block by its ID and returns it as object.
     * GET /api/core/v3/blocks/{blockId}
     *
     * @param blockId The corresponding block ID of the requested block.
     * @returns The requested block.
     */
    getBlock(blockId: BlockId): Promise<Block>;
    /**
     * Finds a block by its ID and returns it as raw bytes.
     * GET /api/core/v3/blocks/{blockId}
     *
     * @param blockId The block ID of the requested block.
     * @returns The raw bytes of the requested block.
     */
    getBlockRaw(blockId: BlockId): Promise<Uint8Array>;
    /**
     * Returns the metadata of a block.
     * GET /api/core/v3/blocks/{blockId}/metadata
     *
     * @param blockId The corresponding block ID of the requested block metadata.
     * @returns The requested block metadata.
     */
    getBlockMetadata(blockId: BlockId): Promise<BlockMetadataResponse>;
    /**
     * Returns a block with its metadata.
     * GET /api/core/v2/blocks/{blockId}/full
     *
     * @param blockId The corresponding block ID of the requested block.
     * @returns The requested block with its metadata.
     */
    getBlockWithMetadata(blockId: BlockId): Promise<BlockWithMetadataResponse>;
    /**
     * Finds an output by its ID and returns it as object.
     * GET /api/core/v3/outputs/{outputId}
     */
    getOutput(outputId: OutputId): Promise<OutputResponse>;
    /**
     * Finds an output by its ID and returns it as raw bytes.
     * GET /api/core/v3/outputs/{outputId}
     */
    getOutputRaw(outputId: OutputId): Promise<Uint8Array>;
    /**
     * Finds output metadata by output ID.
     * GET /api/core/v3/outputs/{outputId}/metadata
     */
    getOutputMetadata(outputId: OutputId): Promise<OutputMetadataResponse>;
    /**
     * Finds an output with its metadata by output ID.
     * GET /api/core/v3/outputs/{outputId}/full
     */
    getOutputWithMetadata(outputId: OutputId): Promise<OutputWithMetadataResponse>;
    /**
     * Returns the earliest confirmed block containing the transaction with the given ID.
     * GET /api/core/v3/transactions/{transactionId}/included-block
     *
     * @param transactionId The ID of the transaction.
     * @returns The included block that contained the transaction.
     */
    getIncludedBlock(transactionId: TransactionId): Promise<Block>;
    /**
     * Returns the earliest confirmed block containing the transaction with the given ID, as raw bytes.
     * GET /api/core/v3/transactions/{transactionId}/included-block
     *
     * @param transactionId The ID of the transaction.
     * @returns The included block that contained the transaction.
     */
    getIncludedBlockRaw(transactionId: TransactionId): Promise<Uint8Array>;
    /**
     * Returns the metadata of the earliest block containing the tx that was confirmed.
     * GET /api/core/v3/transactions/{transactionId}/included-block/metadata
     *
     * @param transactionId The ID of the transaction.
     * @returns The included block that contained the transaction.
     */
    getIncludedBlockMetadata(transactionId: TransactionId): Promise<BlockMetadataResponse>;
    /**
     * Finds the metadata of a transaction.
     * GET /api/core/v3/transactions/{transactionId}/metadata
     *
     * @param transactionId The ID of the transaction.
     * @returns The transaction metadata.
     */
    getTransactionMetadata(transactionId: TransactionId): Promise<TransactionMetadataResponse>;
    /**
     * Finds a slot commitment by its ID and returns it as object.
     * GET /api/core/v3/commitments/{commitmentId}
     *
     * @param commitmentId Commitment ID of the commitment to look up.
     * @returns The commitment.
     */
    getCommitment(commitmentId: SlotCommitmentId): Promise<SlotCommitment>;
    /**
     * Finds a slot commitment by its ID and returns it as raw bytes.
     * GET /api/core/v3/commitments/{commitmentId}
     *
     * @param commitmentId Commitment ID of the commitment to look up.
     * @returns The commitment as raw bytes.
     */
    getCommitmentRaw(commitmentId: SlotCommitmentId): Promise<Uint8Array>;
    /**
     * Get all UTXO changes of a given slot by slot commitment ID.
     * GET /api/core/v3/commitments/{commitmentId}/utxo-changes
     *
     * @param commitmentId Commitment ID of the commitment to look up.
     * @returns The UTXO changes.
     */
    getUtxoChanges(commitmentId: SlotCommitmentId): Promise<UtxoChangesResponse>;
    /**
     * Get all full UTXO changes of a given slot by slot commitment ID.
     * GET /api/core/v3/commitments/{commitmentId}/utxo-changes/full
     *
     * @param commitmentId Commitment ID of the commitment to look up.
     * @returns The UTXO changes.
     */
    getUtxoChangesFull(commitmentId: SlotCommitmentId): Promise<UtxoChangesFullResponse>;
    /**
     * Finds a slot commitment by slot index and returns it as object.
     * GET /api/core/v3/commitments/by-slot/{slot}
     *
     * @param slot Index of the commitment to look up.
     * @returns The commitment.
     */
    getCommitmentBySlot(slot: SlotIndex): Promise<SlotCommitment>;
    /**
     * Finds a slot commitment by slot index and returns it as raw bytes.
     * GET /api/core/v3/commitments/by-slot/{slot}
     *
     * @param slot Index of the commitment to look up.
     * @returns The commitment as raw bytes.
     */
    getCommitmentBySlotRaw(slot: SlotIndex): Promise<Uint8Array>;
    /**
     * Get all UTXO changes of a given slot by its index.
     * GET /api/core/v3/commitments/by-slot/{slot}/utxo-changes
     *
     * @param slot Index of the commitment to look up.
     * @returns The UTXO changes.
     */
    getUtxoChangesBySlot(slot: SlotIndex): Promise<UtxoChangesResponse>;
    /**
     * Get all full UTXO changes of a given slot by its index.
     * GET /api/core/v3/commitments/by-slot/{slot}/utxo-changes/full
     *
     * @param slot Index of the commitment to look up.
     * @returns The UTXO changes.
     */
    getUtxoChangesFullBySlot(slot: SlotIndex): Promise<UtxoChangesFullResponse>;
    /**
     * Fetch OutputResponse from given output IDs. Requests are sent in parallel.
     */
    getOutputs(outputIds: OutputId[]): Promise<OutputResponse[]>;
    /**
     * Get outputs from provided output IDs (requests are sent
     * in parallel and errors are ignored, can be useful for spent outputs)
     *
     * @param outputIds An array of output IDs.
     * @returns An array of corresponding output responses.
     */
    getOutputsIgnoreNotFound(outputIds: OutputId[]): Promise<OutputResponse[]>;
    /**
     * Find blocks by their IDs.
     *
     * @param blockIds An array of `BlockId`s.
     * @returns An array of corresponding blocks.
     */
    findBlocks(blockIds: BlockId[]): Promise<Block[]>;
    /**
     * Find inputs from addresses for a given amount (useful for offline signing).
     *
     * @param addresses A list of included addresses.
     * @param amount The amount to find inputs for.
     * @returns An array of UTXO inputs.
     */
    findInputs(addresses: string[], amount: u64): Promise<UTXOInput[]>;
    /**
     * Build an unsigned block.
     *
     * @param issuerId The identifier of the block issuer account.
     * @param payload The payload to post.
     * @returns The block ID followed by the block containing the payload.
     */
    buildBasicBlock(issuerId: AccountId, payload?: Payload): Promise<UnsignedBlock>;
    /**
     * Get a node candidate from the healthy node pool.
     */
    getNode(): Promise<Node>;
    /**
     * Get the ID of the network the node is connected to.
     */
    getNetworkId(): Promise<string>;
    /**
     * Get the Bech32 HRP (human readable part) of the network the node is connected to.
     */
    getBech32Hrp(): Promise<string>;
    /**
     * Get the token supply.
     */
    getTokenSupply(): Promise<u64>;
    /**
     * Get the protocol parameters.
     */
    getProtocolParameters(): Promise<ProtocolParameters>;
    /**
     * Converts an address to its bech32 representation
     *
     * @param address An address.
     * @param bech32Hrp The Bech32 HRP (human readable part) to be used.
     * @returns The corresponding Bech32 address.
     */
    addressToBech32(address: Address, bech32Hrp?: string): Promise<Bech32Address>;
    /**
     * Return the unhealthy nodes.
     */
    unhealthyNodes(): Promise<Set<Node>>;
    /**
     * Build a basic output.
     *
     * @param params An instance of `BasicOutputBuilderParams`.
     */
    buildBasicOutput(params: BasicOutputBuilderParams): Promise<BasicOutput>;
    /**
     * Build an account output.
     *
     * @param params An instance of `AccountOutputBuilderParams`.
     */
    buildAccountOutput(params: AccountOutputBuilderParams): Promise<AccountOutput>;
    /**
     * Build a foundry output.
     *
     * @param params An instance of `FoundryOutputBuilderParams`.
     */
    buildFoundryOutput(params: FoundryOutputBuilderParams): Promise<FoundryOutput>;
    /**
     * Build an NFT output.
     *
     * @param params An instance of `NftOutputBuilderParams`.
     */
    buildNftOutput(params: NftOutputBuilderParams): Promise<NftOutput>;
    /**
     * Listen to MQTT events.
     *
     * @param topics An array of MQTT topics to listen to.
     */
    listenMqtt(topics: string[], callback: (error: Error, result: string) => void): Promise<void>;
    /**
     * Stop listening to certain MQTT events.
     *
     * @param topics An array of MQTT topics to stop listening to.
     */
    clearMqttListeners(topics: string[]): Promise<void>;
    /**
     * Calculate the minimum required amount for an output.
     *
     * @param output The output to calculate the minimum amount for.
     * @returns The minimum required amount.
     */
    computeMinimumOutputAmount(output: Output): Promise<number>;
    /**
     * Request funds from a faucet.
     *
     * Example URLs: `https://faucet.testnet.shimmer.network/api/enqueue` or `http://localhost:8091/api/enqueue`.
     *
     * @param url The URL of the faucet.
     * @param address The address to send the funds to.
     * @returns The faucet response.
     */
    requestFundsFromFaucet(url: string, address: Bech32Address): Promise<string>;
    /**
     * Extension method which provides request methods for plugins.
     *
     * @param basePluginPath The base path for the plugin eg indexer/v2/ .
     * @param method The http method.
     * @param endpoint The path for the plugin request.
     * @param queryParams Additional query params for the request.
     * @param request The request object.
     * @returns The response json.
     */
    callPluginRoute(basePluginPath: string, method: 'GET' | 'POST', endpoint: string, queryParams?: string[], request?: string): Promise<string>;
    /**
     * Fetch account/anchor/basic/delegation/NFT/foundry output IDs based on the given query parameters.
     */
    outputIds(queryParameters: OutputQueryParameters): Promise<OutputsResponse>;
    /**
     * Fetch basic output IDs based on the given query parameters.
     */
    basicOutputIds(queryParameters: BasicOutputQueryParameters): Promise<OutputsResponse>;
    /**
     * Get the corresponding output IDs given a list of account query parameters.
     *
     * @param outputQueryParameters `AccountOutputQueryParameters`.
     * @returns A paginated query response of corresponding output IDs.
     */
    accountOutputIds(queryParameters: AccountOutputQueryParameters): Promise<OutputsResponse>;
    /**
     * Get the corresponding output ID from an account ID.
     *
     * @param accountId An account ID.
     * @returns The corresponding output ID.
     */
    accountOutputId(accountId: AccountId): Promise<OutputId>;
    /**
     * Get the corresponding output IDs given a list of anchor query parameters.
     *
     * @param outputQueryParameters `AnchorOutputQueryParameters`.
     * @returns A paginated query response of corresponding output IDs.
     */
    anchorOutputIds(queryParameters: AnchorOutputQueryParameters): Promise<OutputsResponse>;
    /**
     * Get the corresponding output ID from an anchor ID.
     *
     * @param anchorId An anchor ID.
     * @returns The corresponding output ID.
     */
    anchorOutputId(anchorId: AnchorId): Promise<OutputId>;
    /**
     * Get the corresponding output IDs given a list of delegation query parameters.
     *
     * @param outputQueryParameters `DelegationOutputQueryParameters`.
     * @returns A paginated query response of corresponding output IDs.
     */
    delegationOutputIds(queryParameters: DelegationOutputQueryParameters): Promise<OutputsResponse>;
    /**
     * Get the corresponding output ID from an delegation ID.
     *
     * @param delegationId A delegation ID.
     * @returns The corresponding output ID.
     */
    delegationOutputId(delegationId: DelegationId): Promise<OutputId>;
    /**
     * Get the corresponding output IDs given a list of Foundry query parameters.
     *
     * @param outputQueryParameters `FoundryOutputQueryParameters`.
     * @returns A paginated query response of corresponding output IDs.
     */
    foundryOutputIds(queryParameters: FoundryOutputQueryParameters): Promise<OutputsResponse>;
    /**
     * Get the corresponding output ID from a Foundry ID.
     *
     * @param foundryId A Foundry ID.
     * @returns The corresponding output ID.
     */
    foundryOutputId(foundryId: FoundryId): Promise<OutputId>;
    /**
     * Get the corresponding output IDs given a list of NFT query parameters.
     *
     * @param outputQueryParameters `NftOutputQueryParameters`.
     * @returns A paginated query response of corresponding output IDs.
     */
    nftOutputIds(queryParameters: NftOutputQueryParameters): Promise<OutputsResponse>;
    /**
     * Get the corresponding output ID from an NFT ID.
     *
     * @param nftId An NFT ID.
     * @returns The corresponding output ID.
     */
    nftOutputId(nftId: NftId): Promise<OutputId>;
    /**
     * Compute the block ID (Blake2b256 hash of the block bytes) of a block.
     *
     * @param block A block.
     * @returns The corresponding block ID.
     */
    blockId(block: Block): Promise<BlockId>;
}
