import type { Network, PendingTransaction, TransactionEnvelope } from "@saberhq/solana-contrib";
import type { ConfirmOptions, Finality } from "@solana/web3.js";
import type { OperationOptions } from "retry";
import type { UseAccounts } from "..";
import { SailError } from "../errors";
/**
 * Response when transactions are handled.
 */
export interface HandleTXResponse {
    success: boolean;
    pending: PendingTransaction | null;
    errors?: readonly SailError[];
}
export interface HandleTXsResponse {
    success: boolean;
    pending: readonly PendingTransaction[];
    errors?: readonly SailError[];
}
export interface UseHandleTXsArgs extends Pick<UseAccounts, "refetchMany"> {
    /**
     * Delay for the writable accounts to be refetched into the cache after a transaction.
     */
    txRefetchDelayMs?: number;
    /**
     * Called right before a {@link TransactionEnvelope} is sent.
     */
    onBeforeTxSend?: (args: {
        /**
         * Unique identifier for the bundle of transactions.
         */
        bundleID: string;
        /**
         * The {@link Network} this transaction is taking place on.
         */
        network: Network;
        /**
         * The {@link TransactionEnvelope}s about to be sent.
         */
        txs: readonly TransactionEnvelope[];
        /**
         * Message identifying the transaction.
         */
        message?: string;
    }) => void;
    /**
     * Called whenever a {@link TransactionEnvelope} is sent.
     */
    onTxSend?: (args: {
        /**
         * Unique identifier for the bundle of transactions.
         */
        bundleID: string;
        /**
         * The {@link Network} this transaction is taking place on.
         */
        network: Network;
        /**
         * The {@link TransactionEnvelope}s that were sent.
         */
        txs: readonly TransactionEnvelope[];
        /**
         * Pending transactions.
         */
        pending: readonly PendingTransaction[];
        /**
         * Message identifying the transaction.
         */
        message?: string;
    }) => void;
    /**
     * Called whenever an error occurs.
     */
    onError: (err: SailError) => void;
    /**
     * If true, waits for a confirmation before proceeding to the next transaction.
     */
    waitForConfirmation?: boolean;
}
export interface HandleTXOptions extends ConfirmOptions {
    /**
     * Options to pass in after a refetch has occured.
     */
    refetchAfterTX?: OperationOptions & {
        /**
         * Commitment of the confirmed transaction to fetch.
         */
        commitment?: Finality;
        /**
         * Delay for the writable accounts to be refetched into the cache after a transaction.
         */
        refetchDelayMs?: number;
        /**
         * Whether or not to use websockets for awaiting confirmation. Defaults to `false`.
         */
        useWebsocket?: boolean;
    };
    /**
     * Whether or not to handle the TX envelope in debug mode.
     */
    debugMode?: boolean;
}
/**
 * Function which signs and sends a {@link TransactionEnvelope}.
 */
export declare type HandleTX = (txEnv: TransactionEnvelope, msg?: string, options?: HandleTXOptions) => Promise<HandleTXResponse>;
/**
 * Function which signs and sends a set of {@link TransactionEnvelope}.
 */
export declare type HandleTXs = (txEnv: readonly TransactionEnvelope[], msg?: string, options?: HandleTXOptions) => Promise<HandleTXsResponse>;
export interface UseHandleTXs {
    /**
     * Signs and sends a transaction using the provider on the {@link TransactionEnvelope}.
     */
    handleTX: HandleTX;
    /**
     * Signs and sends multiple transactions using the provider on the first {@link TransactionEnvelope}.
     * These transactions are only sent if all of them are signed.
     */
    handleTXs: HandleTXs;
}
export declare const useHandleTXsInternal: ({ refetchMany, onBeforeTxSend, onTxSend, onError, txRefetchDelayMs, waitForConfirmation, }: UseHandleTXsArgs) => UseHandleTXs;
//# sourceMappingURL=useHandleTXs.d.ts.map