import type { PublicKey } from '@solana/web3.js';
import { z } from 'zod';
import type { Prettify } from '../../../../utils/prettify';
import type { AudiusWalletClient } from '../../../AudiusWalletClient';
import type { LoggerService } from '../../../Logger';
import { TokenName } from '../../types';
import type { SolanaClient } from '../SolanaClient';
export type ClaimableTokensConfigInternal = {
    /** The program ID of the ClaimableTokensProgram instance. */
    programId: PublicKey;
    /** Map from token mint name to public key address. */
    mints: Record<TokenName, PublicKey>;
    logger: LoggerService;
};
export type ClaimableTokensConfig = Prettify<Partial<Omit<ClaimableTokensConfigInternal, 'mints'>> & {
    audiusWalletClient: AudiusWalletClient;
    solanaClient: SolanaClient;
    mints?: Prettify<Partial<Record<TokenName, PublicKey>>>;
}>;
export declare const GetOrCreateUserBankSchema: z.ZodObject<{
    /** The user's Ethereum wallet. */
    ethWallet: z.ZodOptional<z.ZodString>;
    /** The name of the token mint. */
    mint: z.ZodUnion<[z.ZodEnum<["wAUDIO", "USDC"]>, z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>]>;
    /**
     * The public key of the account that will be paying the
     * account creation and transaction fees.
     */
    feePayer: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>>;
}, "strict", z.ZodTypeAny, {
    mint: (PublicKey | "wAUDIO" | "USDC") & (PublicKey | "wAUDIO" | "USDC" | undefined);
    ethWallet?: string | undefined;
    feePayer?: PublicKey | undefined;
}, {
    mint: (string | PublicKey) & (string | PublicKey | undefined);
    ethWallet?: string | undefined;
    feePayer?: string | PublicKey | undefined;
}>;
export type GetOrCreateUserBankRequest = z.infer<typeof GetOrCreateUserBankSchema>;
export declare const DeriveUserBankSchema: z.ZodObject<{
    /** The sending user's Ethereum wallet. Defaults to the current audiusWalletClient address. */
    ethWallet: z.ZodOptional<z.ZodString>;
    /** The name of the token mint. */
    mint: z.ZodUnion<[z.ZodEnum<["wAUDIO", "USDC"]>, z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>]>;
}, "strict", z.ZodTypeAny, {
    mint: (PublicKey | "wAUDIO" | "USDC") & (PublicKey | "wAUDIO" | "USDC" | undefined);
    ethWallet?: string | undefined;
}, {
    mint: (string | PublicKey) & (string | PublicKey | undefined);
    ethWallet?: string | undefined;
}>;
export type DeriveUserBankRequest = z.infer<typeof DeriveUserBankSchema>;
export declare const CreateTransferSchema: z.ZodObject<{
    /** The public key of the account that will be paying the transaction fees. */
    feePayer: z.ZodOptional<z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>>;
    /** The sending user's Ethereum wallet. Defaults to the current audiusWalletClient address. */
    ethWallet: z.ZodOptional<z.ZodString>;
    /** The name of the token mint. */
    mint: z.ZodUnion<[z.ZodEnum<["wAUDIO", "USDC"]>, z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>]>;
    /** The public key of the destination account. */
    destination: z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>;
}, "strip", z.ZodTypeAny, {
    mint: (PublicKey | "wAUDIO" | "USDC") & (PublicKey | "wAUDIO" | "USDC" | undefined);
    destination: PublicKey;
    feePayer?: PublicKey | undefined;
    ethWallet?: string | undefined;
}, {
    mint: (string | PublicKey) & (string | PublicKey | undefined);
    destination: (string | PublicKey) & (string | PublicKey | undefined);
    feePayer?: string | PublicKey | undefined;
    ethWallet?: string | undefined;
}>;
export type CreateTransferRequest = z.infer<typeof CreateTransferSchema>;
export declare const CreateSecpSchema: z.ZodObject<{
    /** The sending user's Ethereum wallet. Defaults to the current audiusWalletClient address. */
    ethWallet: z.ZodOptional<z.ZodString>;
    /** The public key of the destination account. */
    destination: z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>;
    /** The amount to send, either in "lamports"/"wei" (bigint) or decimal number. */
    amount: z.ZodUnion<[z.ZodBigInt, z.ZodNumber]>;
    /** The name of the token mint. */
    mint: z.ZodUnion<[z.ZodEnum<["wAUDIO", "USDC"]>, z.ZodUnion<[z.ZodEffects<z.ZodString, PublicKey, string>, z.ZodType<PublicKey, z.ZodTypeDef, PublicKey>]>]>;
    /** The index of this instruction within the transaction. */
    instructionIndex: z.ZodOptional<z.ZodNumber>;
}, "strict", z.ZodTypeAny, {
    amount: number | bigint;
    mint: (PublicKey | "wAUDIO" | "USDC") & (PublicKey | "wAUDIO" | "USDC" | undefined);
    destination: PublicKey;
    ethWallet?: string | undefined;
    instructionIndex?: number | undefined;
}, {
    amount: number | bigint;
    mint: (string | PublicKey) & (string | PublicKey | undefined);
    destination: (string | PublicKey) & (string | PublicKey | undefined);
    ethWallet?: string | undefined;
    instructionIndex?: number | undefined;
}>;
export type CreateSecpRequest = z.infer<typeof CreateSecpSchema>;
