import { AptosConfig } from './aptosConfig.mjs';
import { LedgerInfo, AnyNumber, Block, MoveValue, LedgerVersionArg } from '../types/index.mjs';
import { ProcessorType } from '../utils/const.mjs';
import { InputViewFunctionData } from '../transactions/types.mjs';
import { GetChainTopUserTransactionsResponse, GraphqlQuery, GetProcessorStatusResponse } from '../types/indexer.mjs';
import '../utils/apiEndpoints.mjs';
import '../types/generated/operations.mjs';
import '../types/generated/types.mjs';
import '../bcs/serializable/moveStructs.mjs';
import '../bcs/serializable/movePrimitives.mjs';
import '../bcs/deserializer.mjs';
import '../bcs/serializer.mjs';
import '../core/hex.mjs';
import '../core/common.mjs';
import '../transactions/instances/transactionArgument.mjs';
import '../bcs/serializable/fixedBytes.mjs';
import '../core/accountAddress.mjs';
import '../publicKey-B3XRNhHO.mjs';
import '../core/crypto/signature.mjs';
import '../transactions/instances/rawTransaction.mjs';
import '../transactions/instances/chainId.mjs';
import '../transactions/instances/transactionPayload.mjs';
import '../transactions/instances/identifier.mjs';
import '../transactions/instances/moduleId.mjs';
import '../transactions/typeTag/index.mjs';
import '../transactions/authenticator/account.mjs';
import '../core/crypto/ed25519.mjs';
import '../core/crypto/privateKey.mjs';
import '../core/crypto/multiEd25519.mjs';
import '../core/crypto/multiKey.mjs';
import '../core/crypto/singleKey.mjs';
import '../transactions/instances/simpleTransaction.mjs';
import '../transactions/instances/multiAgentTransaction.mjs';

/**
 * A class to query all `General` Aptos related queries
 */
declare class General {
    readonly config: AptosConfig;
    constructor(config: AptosConfig);
    /**
     * Queries for the Aptos ledger info
     *
     * @returns Aptos Ledger Info
     *
     * @example
     * const ledgerInfo = await aptos.getLedgerInfo()
     * // an example of the returned data
     * ```
     * {
     * "chain_id": 4,
     * "epoch": "8",
     * "ledger_version": "714",
     * "oldest_ledger_version": "0",
     * "ledger_timestamp": "1694695496521775",
     * "node_role": "validator",
     * "oldest_block_height": "0",
     * "block_height": "359",
     * "git_hash": "c82193f36f4e185fed9f68c4ad21f6c6dd390c6e"
     * }
     * ```
     */
    getLedgerInfo(): Promise<LedgerInfo>;
    /**
     * Queries for the chain id
     *
     * @example
     * const chainId = await aptos.getChainId()
     *
     * @returns The chain id
     */
    getChainId(): Promise<number>;
    /**
     * Queries for block by transaction version
     *
     * @example
     * const block = await aptos.getBlockByVersion({ledgerVersion:5})
     *
     * @param args.ledgerVersion Ledger version to lookup block information for
     * @param args.options.withTransactions If set to true, include all transactions in the block
     *
     * @returns Block information with optional transactions
     */
    getBlockByVersion(args: {
        ledgerVersion: AnyNumber;
        options?: {
            withTransactions?: boolean;
        };
    }): Promise<Block>;
    /**
     * Get block by block height
     *
     * @example
     * const block = await aptos.getBlockByVersion({blockHeight:5})
     *
     * @param args.blockHeight Block height to lookup.  Starts at 0
     * @param args.options.withTransactions If set to true, include all transactions in the block
     *
     * @returns Block with optional transactions
     */
    getBlockByHeight(args: {
        blockHeight: AnyNumber;
        options?: {
            withTransactions?: boolean;
        };
    }): Promise<Block>;
    /**
     * Queries for a Move view function
     * @param args.payload Payload for the view function
     * @param args.options.ledgerVersion The ledger version to query, if not provided it will get the latest version
     *
     * @example
     * const data = await aptos.view({
     *  payload: {
     *   function: "0x1::coin::balance",
     *   typeArguments: ["0x1::aptos_coin::AptosCoin"],
     *   functionArguments: [accountAddress],
     *  }
     * })
     *
     * @returns an array of Move values
     */
    view<T extends Array<MoveValue>>(args: {
        payload: InputViewFunctionData;
        options?: LedgerVersionArg;
    }): Promise<T>;
    /**
     * Queries top user transactions
     *
     * @example
     * const topUserTransactions = await aptos.getChainTopUserTransactions({limit:5})
     *
     * @param args.limit The number of transactions to return
     * @returns GetChainTopUserTransactionsResponse
     */
    getChainTopUserTransactions(args: {
        limit: number;
    }): Promise<GetChainTopUserTransactionsResponse>;
    /**
     * A generic function for retrieving data from Aptos Indexer.
     * For more detailed queries specification see
     * {@link https://cloud.hasura.io/public/graphiql?endpoint=https://api.mainnet.aptoslabs.com/v1/graphql}
     *
     * @example
     * const topUserTransactions = await aptos.queryIndexer({
     *  query: `query MyQuery {
     *   ledger_infos {
     *     chain_id
     *   }}`;
     * })
     *
     * @param args.query.query A GraphQL query
     * @param args.query.variables The variables for the query
     *
     * @return The provided T type
     */
    queryIndexer<T extends {}>(args: {
        query: GraphqlQuery;
    }): Promise<T>;
    /**
     * Queries for the last successful indexer version
     *
     * This is useful to tell what ledger version the indexer is updated to, as it can be behind the full nodes.
     *
     * @example
     * const version = await aptos.getIndexerLastSuccessVersion()
     */
    getIndexerLastSuccessVersion(): Promise<bigint>;
    /**
     * Query the processor status for a specific processor type.
     *
     * @example
     * const status = await aptos.getProcessorStatus({processorType:"account_transactions_processor"})
     *
     * @param processorType The processor type to query
     * @returns
     */
    getProcessorStatus(processorType: ProcessorType): Promise<GetProcessorStatusResponse[0]>;
}

export { General };
