import type { WalletAdapterProps } from '@solana/wallet-adapter-base';
import { PublicKey, VersionedTransaction, SendOptions, Transaction } from '@solana/web3.js';
import { z } from 'zod';
import type { Prettify } from '../../utils/prettify';
import { DiscoveryNodeSelectorService } from '../DiscoveryNodeSelector';
import type { SolanaRelay } from './SolanaRelay';
export declare type SolanaWalletAdapter = WalletAdapterProps;
export declare type SolanaConfig = {
    /**
     * Selector that finds a healthy discovery node.
     */
    discoveryNodeSelector: DiscoveryNodeSelectorService;
};
export declare type SolanaRelayService = SolanaRelay;
export declare const MintSchema: z.ZodDefault<z.ZodEnum<["wAUDIO", "USDC"]>>;
export declare type Mint = z.infer<typeof MintSchema>;
export declare const PublicKeySchema: z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>;
export declare const RelaySchema: z.ZodObject<{
    transaction: z.ZodType<VersionedTransaction | Transaction, z.ZodTypeDef, VersionedTransaction | Transaction>;
    /**
     * Confirmation options used when sending the transaction on the server.
     * @see {@link https://solana-labs.github.io/solana-web3.js/classes/Connection.html#confirmTransaction confirmTransaction}
     */
    confirmationOptions: z.ZodOptional<z.ZodObject<{
        /**
         * The confirmation strategy to use when confirming.
         * @see {@link https://solana-labs.github.io/solana-web3.js/types/TransactionConfirmationStrategy.html ConfirmationStrategy}
         * @see {@link https://solana-labs.github.io/solana-web3.js/types/DurableNonceTransactionConfirmationStrategy.html DurableNonceTransactionConfirmationStrategy}
         * @see {@link https://solana-labs.github.io/solana-web3.js/types/BlockheightBasedTransactionConfirmationStrategy.html BlockhashBasedTransactionConfirmationStrategy}
         */
        strategy: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
            blockhash: z.ZodString;
            lastValidBlockHeight: z.ZodNumber;
        }, "strip", z.ZodTypeAny, {
            blockhash: string;
            lastValidBlockHeight: number;
        }, {
            blockhash: string;
            lastValidBlockHeight: number;
        }>, z.ZodObject<{
            minContextSlot: z.ZodNumber;
            nonceAccountPubkey: z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>;
            nonceValue: z.ZodString;
        }, "strip", z.ZodTypeAny, {
            minContextSlot: number;
            nonceAccountPubkey: PublicKey;
            nonceValue: string;
        }, {
            minContextSlot: number;
            nonceAccountPubkey: (string | PublicKey) & (string | PublicKey | undefined);
            nonceValue: string;
        }>]>>;
        /**
         * The commitment the server should confirm before responding.
         * Leave unset to have the server respond immediately after sending.
         * @see {@link https://solana-labs.github.io/solana-web3.js/types/Commitment.html Commitment}
         */
        commitment: z.ZodOptional<z.ZodEnum<["processed", "confirmed", "finalized", "recent", "single", "singleGossip", "root", "max"]>>;
    }, "strip", z.ZodTypeAny, {
        strategy?: {
            blockhash: string;
            lastValidBlockHeight: number;
        } | {
            minContextSlot: number;
            nonceAccountPubkey: PublicKey;
            nonceValue: string;
        } | undefined;
        commitment?: "finalized" | "processed" | "confirmed" | "recent" | "single" | "singleGossip" | "root" | "max" | undefined;
    }, {
        strategy?: {
            blockhash: string;
            lastValidBlockHeight: number;
        } | {
            minContextSlot: number;
            nonceAccountPubkey: (string | PublicKey) & (string | PublicKey | undefined);
            nonceValue: string;
        } | undefined;
        commitment?: "finalized" | "processed" | "confirmed" | "recent" | "single" | "singleGossip" | "root" | "max" | undefined;
    }>>;
    /**
     * Custom send options used when sending the transaction on the relay.
     * @see {@link https://solana-labs.github.io/solana-web3.js/types/SendOptions.html SendOptions}
     */
    sendOptions: z.ZodOptional<z.ZodType<SendOptions, z.ZodTypeDef, SendOptions>>;
}, "strict", z.ZodTypeAny, {
    transaction: (VersionedTransaction | Transaction) & (VersionedTransaction | Transaction | undefined);
    confirmationOptions?: {
        strategy?: {
            blockhash: string;
            lastValidBlockHeight: number;
        } | {
            minContextSlot: number;
            nonceAccountPubkey: PublicKey;
            nonceValue: string;
        } | undefined;
        commitment?: "finalized" | "processed" | "confirmed" | "recent" | "single" | "singleGossip" | "root" | "max" | undefined;
    } | undefined;
    sendOptions?: SendOptions | undefined;
}, {
    transaction: (VersionedTransaction | Transaction) & (VersionedTransaction | Transaction | undefined);
    confirmationOptions?: {
        strategy?: {
            blockhash: string;
            lastValidBlockHeight: number;
        } | {
            minContextSlot: number;
            nonceAccountPubkey: (string | PublicKey) & (string | PublicKey | undefined);
            nonceValue: string;
        } | undefined;
        commitment?: "finalized" | "processed" | "confirmed" | "recent" | "single" | "singleGossip" | "root" | "max" | undefined;
    } | undefined;
    sendOptions?: SendOptions | undefined;
}>;
export declare type RelayRequest = z.infer<typeof RelaySchema>;
export declare type RelayRequestBody = Prettify<Omit<RelayRequest, 'transaction'> & {
    /**
     * Base64 encoded serialized VersionedTransaction object.
     */
    transaction: string;
}>;
