/// <reference types="node" />
import { AddressLookupTableAccount, TransactionInstruction, type ConnectionConfig } from '@solana/web3.js';
import { z } from 'zod';
import type { LoggerService } from '../../Logger';
import { type SolanaWalletAdapter } from '../types';
export type SolanaClientConfigInternal = {
    /** Connection to interact with the Solana RPC */
    rpcEndpoints: string[];
    /** Configuration to use for the RPC connection. */
    rpcConfig?: ConnectionConfig;
    logger: LoggerService;
};
export type SolanaClientConfig = Partial<SolanaClientConfigInternal> & {
    solanaWalletAdapter: SolanaWalletAdapter;
};
export declare const PrioritySchema: z.ZodEnum<["MIN", "LOW", "MEDIUM", "HIGH", "VERY_HIGH", "UNSAFE_MAX"]>;
export declare const BuildTransactionSchema: z.ZodObject<{
    instructions: z.ZodArray<z.ZodEffects<z.ZodObject<{
        data: z.ZodType<Buffer, z.ZodTypeDef, Buffer>;
        keys: z.ZodArray<z.ZodObject<{
            pubkey: z.ZodUnion<[z.ZodEffects<z.ZodString, import("@solana/web3.js").PublicKey, string>, z.ZodType<import("@solana/web3.js").PublicKey, z.ZodTypeDef, import("@solana/web3.js").PublicKey>]>;
            isSigner: z.ZodBoolean;
            isWritable: z.ZodBoolean;
        }, "strip", z.ZodTypeAny, {
            pubkey: import("@solana/web3.js").PublicKey;
            isSigner: boolean;
            isWritable: boolean;
        }, {
            pubkey: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
            isSigner: boolean;
            isWritable: boolean;
        }>, "many">;
        programId: z.ZodUnion<[z.ZodEffects<z.ZodString, import("@solana/web3.js").PublicKey, string>, z.ZodType<import("@solana/web3.js").PublicKey, z.ZodTypeDef, import("@solana/web3.js").PublicKey>]>;
    }, "strip", z.ZodTypeAny, {
        keys: {
            pubkey: import("@solana/web3.js").PublicKey;
            isSigner: boolean;
            isWritable: boolean;
        }[];
        data: Buffer;
        programId: import("@solana/web3.js").PublicKey;
    }, {
        keys: {
            pubkey: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
            isSigner: boolean;
            isWritable: boolean;
        }[];
        data: Buffer;
        programId: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
    }>, TransactionInstruction, {
        keys: {
            pubkey: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
            isSigner: boolean;
            isWritable: boolean;
        }[];
        data: Buffer;
        programId: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
    }>, "many">;
    recentBlockhash: z.ZodOptional<z.ZodString>;
    feePayer: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, import("@solana/web3.js").PublicKey, string>, z.ZodType<import("@solana/web3.js").PublicKey, z.ZodTypeDef, import("@solana/web3.js").PublicKey>]>>;
    /**
     * Either the public keys or actual account data for related address lookup tables.
     */
    addressLookupTables: z.ZodOptional<z.ZodUnion<[z.ZodDefault<z.ZodArray<z.ZodUnion<[z.ZodEffects<z.ZodString, import("@solana/web3.js").PublicKey, string>, z.ZodType<import("@solana/web3.js").PublicKey, z.ZodTypeDef, import("@solana/web3.js").PublicKey>]>, "many">>, z.ZodDefault<z.ZodArray<z.ZodEffects<z.ZodObject<{
        key: z.ZodUnion<[z.ZodEffects<z.ZodString, import("@solana/web3.js").PublicKey, string>, z.ZodType<import("@solana/web3.js").PublicKey, z.ZodTypeDef, import("@solana/web3.js").PublicKey>]>;
        state: z.ZodObject<{
            addresses: z.ZodArray<z.ZodUnion<[z.ZodEffects<z.ZodString, import("@solana/web3.js").PublicKey, string>, z.ZodType<import("@solana/web3.js").PublicKey, z.ZodTypeDef, import("@solana/web3.js").PublicKey>]>, "many">;
            authority: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, import("@solana/web3.js").PublicKey, string>, z.ZodType<import("@solana/web3.js").PublicKey, z.ZodTypeDef, import("@solana/web3.js").PublicKey>]>>;
            deactivationSlot: z.ZodBigInt;
            lastExtendedSlot: z.ZodNumber;
            lastExtendedSlotStartIndex: z.ZodNumber;
        }, "strip", z.ZodTypeAny, {
            addresses: import("@solana/web3.js").PublicKey[];
            deactivationSlot: bigint;
            lastExtendedSlot: number;
            lastExtendedSlotStartIndex: number;
            authority?: import("@solana/web3.js").PublicKey | undefined;
        }, {
            addresses: (string | import("@solana/web3.js").PublicKey)[];
            deactivationSlot: bigint;
            lastExtendedSlot: number;
            lastExtendedSlotStartIndex: number;
            authority?: string | import("@solana/web3.js").PublicKey | undefined;
        }>;
    }, "strip", z.ZodTypeAny, {
        key: import("@solana/web3.js").PublicKey;
        state: {
            addresses: import("@solana/web3.js").PublicKey[];
            deactivationSlot: bigint;
            lastExtendedSlot: number;
            lastExtendedSlotStartIndex: number;
            authority?: import("@solana/web3.js").PublicKey | undefined;
        };
    }, {
        key: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
        state: {
            addresses: (string | import("@solana/web3.js").PublicKey)[];
            deactivationSlot: bigint;
            lastExtendedSlot: number;
            lastExtendedSlotStartIndex: number;
            authority?: string | import("@solana/web3.js").PublicKey | undefined;
        };
    }>, AddressLookupTableAccount, {
        key: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
        state: {
            addresses: (string | import("@solana/web3.js").PublicKey)[];
            deactivationSlot: bigint;
            lastExtendedSlot: number;
            lastExtendedSlotStartIndex: number;
            authority?: string | import("@solana/web3.js").PublicKey | undefined;
        };
    }>, "many">>]>>;
    /**
     * Adds a ComputeBudget instruction to set the compute unit price for the
     * transaction. Can specify a percentile or percentile enum to use recent
     * prioritization fees to programatically set the price.
     */
    priorityFee: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodObject<{
        /**
         * The exact amount of microLamports to add per compute unit.
         */
        microLamports: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        microLamports: number;
    }, {
        microLamports: number;
    }>, z.ZodObject<{
        /**
         * Specify the precise percentile (0-100) of recent priority fees
         * to use as this transaction's base priority fee per compute unit.
         */
        percentile: z.ZodNumber;
        /**
         * Multiply the base priority fee per compute unit by some factor.
         * For example a multiplier of 2 and percentile of 50 will set the
         * priority fee to twice the median.
         */
        multiplier: z.ZodOptional<z.ZodNumber>;
        /**
         * The minimum microLamports to use as the priority fee per compute
         * unit, regardless of the percentiles.
         */
        minimumMicroLamports: z.ZodOptional<z.ZodNumber>;
        /**
         * The maximum microLamports to use as the priority fee per compute
         * unit, regardless of the percentiles.
         */
        maximumMicroLamports: z.ZodOptional<z.ZodNumber>;
    }, "strip", z.ZodTypeAny, {
        percentile: number;
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    }, {
        percentile: number;
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    }>, z.ZodObject<{
        /**
         * Specify an enum-based percentile of recent priority fees to use as
         * this transactions priority fee per compute unit.
         */
        priority: z.ZodEnum<["MIN", "LOW", "MEDIUM", "HIGH", "VERY_HIGH", "UNSAFE_MAX"]>;
        /**
         * Multiply the base priority fee per compute unit by some factor.
         * For example a multiplier of 2 and percentile of 50 will set the
         * priority fee to twice the median.
         */
        multiplier: z.ZodOptional<z.ZodNumber>;
        /**
         * The minimum microLamports to use as the priority fee per compute
         * unit, regardless of the percentiles.
         */
        minimumMicroLamports: z.ZodOptional<z.ZodNumber>;
        /**
         * The maximum microLamports to use as the priority fee per compute
         * unit, regardless of the percentiles.
         */
        maximumMicroLamports: z.ZodOptional<z.ZodNumber>;
    }, "strip", z.ZodTypeAny, {
        priority: "MIN" | "LOW" | "MEDIUM" | "HIGH" | "VERY_HIGH" | "UNSAFE_MAX";
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    }, {
        priority: "MIN" | "LOW" | "MEDIUM" | "HIGH" | "VERY_HIGH" | "UNSAFE_MAX";
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    }>]>>>;
    computeLimit: z.ZodOptional<z.ZodNullable<z.ZodUnion<[z.ZodObject<{
        /**
         * Set hard limit on the compute units used.
         */
        units: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        units: number;
    }, {
        units: number;
    }>, z.ZodObject<{
        /**
         * Simulate the transaction and multiply the simulated unitsConsumed
         * by this number to find the budget limit.
         */
        simulationMultiplier: z.ZodNumber;
    }, "strip", z.ZodTypeAny, {
        simulationMultiplier: number;
    }, {
        simulationMultiplier: number;
    }>]>>>;
}, "strict", z.ZodTypeAny, {
    instructions: TransactionInstruction[];
    recentBlockhash?: string | undefined;
    feePayer?: import("@solana/web3.js").PublicKey | undefined;
    addressLookupTables?: import("@solana/web3.js").PublicKey[] | AddressLookupTableAccount[] | undefined;
    priorityFee?: {
        microLamports: number;
    } | {
        percentile: number;
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    } | {
        priority: "MIN" | "LOW" | "MEDIUM" | "HIGH" | "VERY_HIGH" | "UNSAFE_MAX";
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    } | null | undefined;
    computeLimit?: {
        units: number;
    } | {
        simulationMultiplier: number;
    } | null | undefined;
}, {
    instructions: {
        keys: {
            pubkey: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
            isSigner: boolean;
            isWritable: boolean;
        }[];
        data: Buffer;
        programId: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
    }[];
    recentBlockhash?: string | undefined;
    feePayer?: string | import("@solana/web3.js").PublicKey | undefined;
    addressLookupTables?: (string | import("@solana/web3.js").PublicKey)[] | {
        key: (string | import("@solana/web3.js").PublicKey) & (string | import("@solana/web3.js").PublicKey | undefined);
        state: {
            addresses: (string | import("@solana/web3.js").PublicKey)[];
            deactivationSlot: bigint;
            lastExtendedSlot: number;
            lastExtendedSlotStartIndex: number;
            authority?: string | import("@solana/web3.js").PublicKey | undefined;
        };
    }[] | undefined;
    priorityFee?: {
        microLamports: number;
    } | {
        percentile: number;
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    } | {
        priority: "MIN" | "LOW" | "MEDIUM" | "HIGH" | "VERY_HIGH" | "UNSAFE_MAX";
        multiplier?: number | undefined;
        minimumMicroLamports?: number | undefined;
        maximumMicroLamports?: number | undefined;
    } | null | undefined;
    computeLimit?: {
        units: number;
    } | {
        simulationMultiplier: number;
    } | null | undefined;
}>;
export type BuildTransactionRequest = z.infer<typeof BuildTransactionSchema>;
