import type { Signer } from "../cryptography/index.js";
import { Experimental_BaseClient } from "../experimental/client.js";
import type { Experimental_WowClientTypes } from "../experimental/types.js";
import type { Transaction } from "../transactions/Transaction.js";
import type { JsonRpcTransport } from "./http-transport.js";
import type { AddressMetrics, AllEpochsAddressMetrics, Checkpoint, CheckpointPage, CoinBalance, CoinMetadata, CoinSupply, CommitteeInfo, DelegatedStake, DevInspectResults, DevInspectTransactionBlockParams, DryRunTransactionBlockParams, DryRunTransactionBlockResponse, DynamicFieldPage, EpochInfo, EpochMetricsPage, EpochPage, ExecuteTransactionBlockParams, GetAllBalancesParams, GetAllCoinsParams, GetBalanceParams, GetCheckpointParams, GetCheckpointsParams, GetCoinMetadataParams, GetCoinsParams, GetCommitteeInfoParams, GetDynamicFieldObjectParams, GetDynamicFieldsParams, GetLatestCheckpointSequenceNumberParams, GetLatestWowSystemStateParams, ObjectRead, GetMoveFunctionArgTypesParams, GetNormalizedMoveFunctionParams, GetNormalizedMoveModuleParams, GetNormalizedMoveModulesByPackageParams, GetNormalizedMoveStructParams, GetObjectParams, GetOwnedObjectsParams, GetProtocolConfigParams, GetReferenceGasPriceParams, GetStakesByIdsParams, GetStakesParams, GetTotalSupplyParams, GetTransactionBlockParams, MoveCallMetrics, MultiGetObjectsParams, MultiGetTransactionBlocksParams, NetworkMetrics, Order, PaginatedCoins, PaginatedEvents, PaginatedObjectsResponse, PaginatedTransactionResponse, ProtocolConfig, QueryEventsParams, QueryTransactionBlocksParams, SubscribeEventParams, SubscribeTransactionParams, WowEvent, WowMoveFunctionArgType, WowMoveNormalizedFunction, WowMoveNormalizedModule, WowMoveNormalizedModules, WowMoveNormalizedStruct, WowObjectResponse, WowSystemStateSummary, WowTransactionBlockResponse, TransactionEffects, TryGetPastObjectParams, Unsubscribe, ValidatorsApy } from "./types/index.js";
import { JSONRpcCoreClient } from "./core.js";
export interface PaginationArguments<Cursor> {
    cursor?: Cursor;
    limit?: number | null;
}
export interface OrderArguments {
    order?: Order | null;
}
export type WowJsonRpcClientOptions = NetworkOrTransport & {
    network?: Experimental_WowClientTypes.Network;
};
type NetworkOrTransport = {
    url: string;
    transport?: never;
} | {
    transport: JsonRpcTransport;
    url?: never;
};
declare const WOW_CLIENT_BRAND: never;
export declare function isWowJsonRpcClient(client: unknown): client is WowJsonRpcClient;
export declare class WowJsonRpcClient extends Experimental_BaseClient {
    [WOW_CLIENT_BRAND]: boolean;
    core: JSONRpcCoreClient;
    jsonRpc: this;
    protected transport: JsonRpcTransport;
    constructor(options: WowJsonRpcClientOptions);
    getRpcApiVersion({ signal }?: {
        signal?: AbortSignal;
    }): Promise<string | undefined>;
    getCoins({ coinType, owner, cursor, limit, signal, }: GetCoinsParams): Promise<PaginatedCoins>;
    getAllCoins(input: GetAllCoinsParams): Promise<PaginatedCoins>;
    getBalance({ owner, coinType, signal, }: GetBalanceParams): Promise<CoinBalance>;
    getAllBalances(input: GetAllBalancesParams): Promise<CoinBalance[]>;
    getCoinMetadata({ coinType, signal, }: GetCoinMetadataParams): Promise<CoinMetadata | null>;
    getTotalSupply({ coinType, signal, }: GetTotalSupplyParams): Promise<CoinSupply>;
    call<T = unknown>(method: string, params: unknown[], { signal }?: {
        signal?: AbortSignal;
    }): Promise<T>;
    getMoveFunctionArgTypes({ package: pkg, module, function: fn, signal, }: GetMoveFunctionArgTypesParams): Promise<WowMoveFunctionArgType[]>;
    getNormalizedMoveModulesByPackage({ package: pkg, signal, }: GetNormalizedMoveModulesByPackageParams): Promise<WowMoveNormalizedModules>;
    getNormalizedMoveModule({ package: pkg, module, signal, }: GetNormalizedMoveModuleParams): Promise<WowMoveNormalizedModule>;
    getNormalizedMoveFunction({ package: pkg, module, function: fn, signal, }: GetNormalizedMoveFunctionParams): Promise<WowMoveNormalizedFunction>;
    getNormalizedMoveStruct({ package: pkg, module, struct, signal, }: GetNormalizedMoveStructParams): Promise<WowMoveNormalizedStruct>;
    getOwnedObjects(input: GetOwnedObjectsParams): Promise<PaginatedObjectsResponse>;
    getObject(input: GetObjectParams): Promise<WowObjectResponse>;
    tryGetPastObject(input: TryGetPastObjectParams): Promise<ObjectRead>;
    multiGetObjects(input: MultiGetObjectsParams): Promise<WowObjectResponse[]>;
    queryTransactionBlocks({ filter, options, cursor, limit, order, signal, }: QueryTransactionBlocksParams): Promise<PaginatedTransactionResponse>;
    getTransactionBlock(input: GetTransactionBlockParams): Promise<WowTransactionBlockResponse>;
    multiGetTransactionBlocks(input: MultiGetTransactionBlocksParams): Promise<WowTransactionBlockResponse[]>;
    executeTransactionBlock({ transactionBlock, signature, options, requestType, signal, }: ExecuteTransactionBlockParams): Promise<WowTransactionBlockResponse>;
    signAndExecuteTransaction({ transaction, signer, ...input }: {
        transaction: Uint8Array | Transaction;
        signer: Signer;
    } & Omit<ExecuteTransactionBlockParams, "transactionBlock" | "signature">): Promise<WowTransactionBlockResponse>;
    getTotalTransactionBlocks({ signal, }?: {
        signal?: AbortSignal;
    }): Promise<bigint>;
    getReferenceGasPrice({ signal, }?: GetReferenceGasPriceParams): Promise<bigint>;
    getStakes(input: GetStakesParams): Promise<DelegatedStake[]>;
    getStakesByIds(input: GetStakesByIdsParams): Promise<DelegatedStake[]>;
    getLatestWowSystemState({ signal, }?: GetLatestWowSystemStateParams): Promise<WowSystemStateSummary>;
    queryEvents({ query, cursor, limit, order, signal, }: QueryEventsParams): Promise<PaginatedEvents>;
    subscribeEvent(input: SubscribeEventParams & {
        onMessage: (event: WowEvent) => void;
    }): Promise<Unsubscribe>;
    subscribeTransaction(input: SubscribeTransactionParams & {
        onMessage: (event: TransactionEffects) => void;
    }): Promise<Unsubscribe>;
    devInspectTransactionBlock(input: DevInspectTransactionBlockParams): Promise<DevInspectResults>;
    dryRunTransactionBlock(input: DryRunTransactionBlockParams): Promise<DryRunTransactionBlockResponse>;
    getDynamicFields(input: GetDynamicFieldsParams): Promise<DynamicFieldPage>;
    getDynamicFieldObject(input: GetDynamicFieldObjectParams): Promise<WowObjectResponse>;
    getLatestCheckpointSequenceNumber({ signal, }?: GetLatestCheckpointSequenceNumberParams): Promise<string>;
    getCheckpoint(input: GetCheckpointParams): Promise<Checkpoint>;
    getCheckpoints(input: PaginationArguments<CheckpointPage["nextCursor"]> & GetCheckpointsParams): Promise<CheckpointPage>;
    getCommitteeInfo(input?: GetCommitteeInfoParams): Promise<CommitteeInfo>;
    getNetworkMetrics({ signal, }?: {
        signal?: AbortSignal;
    }): Promise<NetworkMetrics>;
    getAddressMetrics({ signal, }?: {
        signal?: AbortSignal;
    }): Promise<AddressMetrics>;
    getEpochMetrics(input?: {
        descendingOrder?: boolean;
        signal?: AbortSignal;
    } & PaginationArguments<EpochMetricsPage["nextCursor"]>): Promise<EpochMetricsPage>;
    getAllEpochAddressMetrics(input?: {
        descendingOrder?: boolean;
        signal?: AbortSignal;
    }): Promise<AllEpochsAddressMetrics>;
    getEpochs(input?: {
        descendingOrder?: boolean;
        signal?: AbortSignal;
    } & PaginationArguments<EpochPage["nextCursor"]>): Promise<EpochPage>;
    getMoveCallMetrics({ signal, }?: {
        signal?: AbortSignal;
    }): Promise<MoveCallMetrics>;
    getCurrentEpoch({ signal, }?: {
        signal?: AbortSignal;
    }): Promise<EpochInfo>;
    getValidatorsApy({ signal, }?: {
        signal?: AbortSignal;
    }): Promise<ValidatorsApy>;
    getChainIdentifier({ signal, }?: {
        signal?: AbortSignal;
    }): Promise<string>;
    getProtocolConfig(input?: GetProtocolConfigParams): Promise<ProtocolConfig>;
    waitForTransaction({ signal, timeout, pollInterval, ...input }: {
        signal?: AbortSignal;
        timeout?: number;
        pollInterval?: number;
    } & Parameters<WowJsonRpcClient["getTransactionBlock"]>[0]): Promise<WowTransactionBlockResponse>;
}
export {};
