import { Account, AccountWithTransactions, App, Block, DispatchRequest, DispatchResponse, GetAppOptions, GetNodesOptions, Node, RawTxRequest, TransactionResponse } from '@pokt-foundation/pocketjs-types';
import { AbstractProvider } from '@pokt-foundation/pocketjs-abstract-provider';
/**
 * An IsomorphicProvider lets you query data from the chain and send relays to the network.
 *  **/
export declare class IsomorphicProvider implements AbstractProvider {
    private rpcUrl;
    private dispatchers;
    private logger;
    constructor({ rpcUrl, dispatchers, }: {
        rpcUrl: string;
        dispatchers?: string[];
    });
    private perform;
    /**
     * Fetches the provided address's balance.
     * @param {string} address - The address to query.
     * @returns {bigint} - The address's balance.
     * */
    getBalance(address: string | Promise<string>): Promise<bigint>;
    /**
     * Fetches the provided address's transaction count.
     * @param {string} address - The address to query.
     * @returns {number} - The address's transaction count.
     * */
    getTransactionCount(address: string | Promise<string>): Promise<number>;
    /**
     * Gets the address's acount type (node, app, or account).
     * @param {string} address - The address to query.
     * @returns {'node' | 'app' | 'account'} - The address's account type.
     * */
    getType(address: string | Promise<string>): Promise<'node' | 'app' | 'account'>;
    /**
     * Sends a signed transaction from this provider.
     * @param {TransactionRequest} transaction - The transaction to sign, formatted as a `TransactionRequest`.
     * @returns {TransactionResponse} - The network's response to the transaction.
     * */
    sendTransaction(transaction: RawTxRequest): Promise<TransactionResponse>;
    /**
     * Gets an specific block specified by its block number.
     * @param {number} blockNumber - the number (height) of the block to query.
     * @returns {Block} - The block requested.
     * */
    getBlock(blockNumber: number): Promise<Block>;
    /**
     * Gets an specific transaction specified by its hash.
     * @param {string} transactionHash - the hash of the transaction to get.
     * @returns {TransactionResponse} - The transaction requested.
     * */
    getTransaction(transactionHash: string): Promise<TransactionResponse>;
    /**
     * Fetches the latest block number.
     * @returns {number} - The latest height as observed by the node the Provider is connected to.
     * */
    getBlockNumber(): Promise<number>;
    /**
     * Fetches nodes active from the network with the options provided.
     * @param {GetNodesOptions} getNodesOptions - the options to pass in to the query.
     * @returns {Node[]} - An array with the nodes requested and their information.
     * */
    getNodes(getNodesOptions: GetNodesOptions): Promise<Node[]>;
    /**
     * Fetches a node from the network with the options provided.
     * @param {string} address - The address corresponding to the node.
     * @param {GetNodesOptions} getNodesOptions - The options to pass in to the query.
     * @returns {Node} - The node requested and its information.
     * */
    getNode(address: string | Promise<string>, GetNodeOptions: any): Promise<Node>;
    /**
     * Fetches apps from the network with the options provided.
     * @param {GetAppOptions} getAppOptions - The options to pass in to the query.
     * @returns {App} - An array with the apps requested and their information.
     * */
    getApps(getAppOption: GetAppOptions): Promise<App[]>;
    /**
     * Fetches an app from the network with the options provided.
     * @param {string} address - The address of the app to fetch.
     * @param {GetAppOptions} getAppOptions - The options to pass in to the query.
     * @returns {App} - The app requested and its information.
     * */
    getApp(address: string | Promise<string>, options: GetAppOptions): Promise<App>;
    /**
     * Fetches an account from the network.
     * @param {string} address - The address of the account to fetch.
     * @returns {Account} - The account requested and its information.
     * */
    getAccount(address: string | Promise<string>): Promise<Account>;
    /**
     * Fetches an account from the network, along with its transactions.
     * @param {string} address - The address of the account to fetch.
     * @returns {AccountWithTransaction} - The account requested and its information, along with its transactions.
     * */
    getAccountWithTransactions(address: string | Promise<string>): Promise<AccountWithTransactions>;
    /**
     * Performs a dispatch request to a random dispatcher from the ones provided. Fails if no dispatcher is found.
     * @param {DispatchRequest} request - The dispatch request.
     * @param {object} options - The options available to tweak the request itself.
     * @param {number} options.retryAttempts - The number of retries to perform if the first call fails.
     * @param {boolean} options.rejectSelfSignedCertificates - Option to reject self signed certificates or not.
     * @param {timeout} options.timeout - Timeout before the call fails. In milliseconds.
     * @returns {DispatchResponse} - The dispatch response from the dispatcher node.
     * */
    dispatch(request: DispatchRequest, options?: {
        retryAttempts?: number;
        rejectSelfSignedCertificates?: boolean;
        timeout?: number;
    }): Promise<DispatchResponse>;
    /**
     * Sends a relay to the network through the main RPC URL provided. Best used through a Relayer.
     * @param {request} request - The relay request.
     * @param {string} rpcUrl - The RPC URL to use, if the main RPC URL is not a suitable node to relay requests.
     * @param {object} options - The options available to tweak the request itself.
     * @param {number} options.retryAttempts - The number of retries to perform if the first call fails.
     * @param {boolean} options.rejectSelfSignedCertificates - Option to reject self signed certificates or not.
     * @param {timeout} options.timeout - Timeout before the call fails. In milliseconds.
     * @returns {any} - A relay response.
     * * */
    relay(request: any, rpcUrl: string, options?: {
        retryAttempts?: number;
        rejectSelfSignedCertificates?: boolean;
        timeout?: number;
    }): Promise<unknown>;
}
//# sourceMappingURL=isomorphic-provider.d.ts.map