/**
 * This code was AUTOGENERATED using the codama library.
 * Please DO NOT EDIT THIS FILE, instead use visitors
 * to add features, then rerun codama to update it.
 *
 * @see https://github.com/codama-idl/codama
 */
import { type Address, type Codec, type Decoder, type Encoder, type IAccountMeta, type IAccountSignerMeta, type IInstruction, type IInstructionWithAccounts, type IInstructionWithData, type ReadonlyAccount, type TransactionSigner, type WritableAccount, type WritableSignerAccount } from '@solana/kit';
import { ASSOCIATED_TOKEN_PROGRAM_ADDRESS } from '../programs';
export declare const RECOVER_NESTED_ASSOCIATED_TOKEN_DISCRIMINATOR = 2;
export declare function getRecoverNestedAssociatedTokenDiscriminatorBytes(): import("@solana/kit").ReadonlyUint8Array;
export type RecoverNestedAssociatedTokenInstruction<TProgram extends string = typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS, TAccountNestedAssociatedAccountAddress extends string | IAccountMeta<string> = string, TAccountNestedTokenMintAddress extends string | IAccountMeta<string> = string, TAccountDestinationAssociatedAccountAddress extends string | IAccountMeta<string> = string, TAccountOwnerAssociatedAccountAddress extends string | IAccountMeta<string> = string, TAccountOwnerTokenMintAddress extends string | IAccountMeta<string> = string, TAccountWalletAddress extends string | IAccountMeta<string> = string, TAccountTokenProgram extends string | IAccountMeta<string> = 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb', TRemainingAccounts extends readonly IAccountMeta<string>[] = []> = IInstruction<TProgram> & IInstructionWithData<Uint8Array> & IInstructionWithAccounts<[
    TAccountNestedAssociatedAccountAddress extends string ? WritableAccount<TAccountNestedAssociatedAccountAddress> : TAccountNestedAssociatedAccountAddress,
    TAccountNestedTokenMintAddress extends string ? ReadonlyAccount<TAccountNestedTokenMintAddress> : TAccountNestedTokenMintAddress,
    TAccountDestinationAssociatedAccountAddress extends string ? WritableAccount<TAccountDestinationAssociatedAccountAddress> : TAccountDestinationAssociatedAccountAddress,
    TAccountOwnerAssociatedAccountAddress extends string ? ReadonlyAccount<TAccountOwnerAssociatedAccountAddress> : TAccountOwnerAssociatedAccountAddress,
    TAccountOwnerTokenMintAddress extends string ? ReadonlyAccount<TAccountOwnerTokenMintAddress> : TAccountOwnerTokenMintAddress,
    TAccountWalletAddress extends string ? WritableSignerAccount<TAccountWalletAddress> & IAccountSignerMeta<TAccountWalletAddress> : TAccountWalletAddress,
    TAccountTokenProgram extends string ? ReadonlyAccount<TAccountTokenProgram> : TAccountTokenProgram,
    ...TRemainingAccounts
]>;
export type RecoverNestedAssociatedTokenInstructionData = {
    discriminator: number;
};
export type RecoverNestedAssociatedTokenInstructionDataArgs = {};
export declare function getRecoverNestedAssociatedTokenInstructionDataEncoder(): Encoder<RecoverNestedAssociatedTokenInstructionDataArgs>;
export declare function getRecoverNestedAssociatedTokenInstructionDataDecoder(): Decoder<RecoverNestedAssociatedTokenInstructionData>;
export declare function getRecoverNestedAssociatedTokenInstructionDataCodec(): Codec<RecoverNestedAssociatedTokenInstructionDataArgs, RecoverNestedAssociatedTokenInstructionData>;
export type RecoverNestedAssociatedTokenAsyncInput<TAccountNestedAssociatedAccountAddress extends string = string, TAccountNestedTokenMintAddress extends string = string, TAccountDestinationAssociatedAccountAddress extends string = string, TAccountOwnerAssociatedAccountAddress extends string = string, TAccountOwnerTokenMintAddress extends string = string, TAccountWalletAddress extends string = string, TAccountTokenProgram extends string = string> = {
    /** Nested associated token account, must be owned by `ownerAssociatedAccountAddress`. */
    nestedAssociatedAccountAddress?: Address<TAccountNestedAssociatedAccountAddress>;
    /** Token mint for the nested associated token account. */
    nestedTokenMintAddress: Address<TAccountNestedTokenMintAddress>;
    /** Wallet's associated token account. */
    destinationAssociatedAccountAddress?: Address<TAccountDestinationAssociatedAccountAddress>;
    /** Owner associated token account address, must be owned by `walletAddress`. */
    ownerAssociatedAccountAddress?: Address<TAccountOwnerAssociatedAccountAddress>;
    /** Token mint for the owner associated token account. */
    ownerTokenMintAddress: Address<TAccountOwnerTokenMintAddress>;
    /** Wallet address for the owner associated token account. */
    walletAddress: TransactionSigner<TAccountWalletAddress>;
    /** SPL Token program. */
    tokenProgram?: Address<TAccountTokenProgram>;
};
export declare function getRecoverNestedAssociatedTokenInstructionAsync<TAccountNestedAssociatedAccountAddress extends string, TAccountNestedTokenMintAddress extends string, TAccountDestinationAssociatedAccountAddress extends string, TAccountOwnerAssociatedAccountAddress extends string, TAccountOwnerTokenMintAddress extends string, TAccountWalletAddress extends string, TAccountTokenProgram extends string, TProgramAddress extends Address = typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS>(input: RecoverNestedAssociatedTokenAsyncInput<TAccountNestedAssociatedAccountAddress, TAccountNestedTokenMintAddress, TAccountDestinationAssociatedAccountAddress, TAccountOwnerAssociatedAccountAddress, TAccountOwnerTokenMintAddress, TAccountWalletAddress, TAccountTokenProgram>, config?: {
    programAddress?: TProgramAddress;
}): Promise<RecoverNestedAssociatedTokenInstruction<TProgramAddress, TAccountNestedAssociatedAccountAddress, TAccountNestedTokenMintAddress, TAccountDestinationAssociatedAccountAddress, TAccountOwnerAssociatedAccountAddress, TAccountOwnerTokenMintAddress, TAccountWalletAddress, TAccountTokenProgram>>;
export type RecoverNestedAssociatedTokenInput<TAccountNestedAssociatedAccountAddress extends string = string, TAccountNestedTokenMintAddress extends string = string, TAccountDestinationAssociatedAccountAddress extends string = string, TAccountOwnerAssociatedAccountAddress extends string = string, TAccountOwnerTokenMintAddress extends string = string, TAccountWalletAddress extends string = string, TAccountTokenProgram extends string = string> = {
    /** Nested associated token account, must be owned by `ownerAssociatedAccountAddress`. */
    nestedAssociatedAccountAddress: Address<TAccountNestedAssociatedAccountAddress>;
    /** Token mint for the nested associated token account. */
    nestedTokenMintAddress: Address<TAccountNestedTokenMintAddress>;
    /** Wallet's associated token account. */
    destinationAssociatedAccountAddress: Address<TAccountDestinationAssociatedAccountAddress>;
    /** Owner associated token account address, must be owned by `walletAddress`. */
    ownerAssociatedAccountAddress: Address<TAccountOwnerAssociatedAccountAddress>;
    /** Token mint for the owner associated token account. */
    ownerTokenMintAddress: Address<TAccountOwnerTokenMintAddress>;
    /** Wallet address for the owner associated token account. */
    walletAddress: TransactionSigner<TAccountWalletAddress>;
    /** SPL Token program. */
    tokenProgram?: Address<TAccountTokenProgram>;
};
export declare function getRecoverNestedAssociatedTokenInstruction<TAccountNestedAssociatedAccountAddress extends string, TAccountNestedTokenMintAddress extends string, TAccountDestinationAssociatedAccountAddress extends string, TAccountOwnerAssociatedAccountAddress extends string, TAccountOwnerTokenMintAddress extends string, TAccountWalletAddress extends string, TAccountTokenProgram extends string, TProgramAddress extends Address = typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS>(input: RecoverNestedAssociatedTokenInput<TAccountNestedAssociatedAccountAddress, TAccountNestedTokenMintAddress, TAccountDestinationAssociatedAccountAddress, TAccountOwnerAssociatedAccountAddress, TAccountOwnerTokenMintAddress, TAccountWalletAddress, TAccountTokenProgram>, config?: {
    programAddress?: TProgramAddress;
}): RecoverNestedAssociatedTokenInstruction<TProgramAddress, TAccountNestedAssociatedAccountAddress, TAccountNestedTokenMintAddress, TAccountDestinationAssociatedAccountAddress, TAccountOwnerAssociatedAccountAddress, TAccountOwnerTokenMintAddress, TAccountWalletAddress, TAccountTokenProgram>;
export type ParsedRecoverNestedAssociatedTokenInstruction<TProgram extends string = typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS, TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[]> = {
    programAddress: Address<TProgram>;
    accounts: {
        /** Nested associated token account, must be owned by `ownerAssociatedAccountAddress`. */
        nestedAssociatedAccountAddress: TAccountMetas[0];
        /** Token mint for the nested associated token account. */
        nestedTokenMintAddress: TAccountMetas[1];
        /** Wallet's associated token account. */
        destinationAssociatedAccountAddress: TAccountMetas[2];
        /** Owner associated token account address, must be owned by `walletAddress`. */
        ownerAssociatedAccountAddress: TAccountMetas[3];
        /** Token mint for the owner associated token account. */
        ownerTokenMintAddress: TAccountMetas[4];
        /** Wallet address for the owner associated token account. */
        walletAddress: TAccountMetas[5];
        /** SPL Token program. */
        tokenProgram: TAccountMetas[6];
    };
    data: RecoverNestedAssociatedTokenInstructionData;
};
export declare function parseRecoverNestedAssociatedTokenInstruction<TProgram extends string, TAccountMetas extends readonly IAccountMeta[]>(instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>): ParsedRecoverNestedAssociatedTokenInstruction<TProgram, TAccountMetas>;
//# sourceMappingURL=recoverNestedAssociatedToken.d.ts.map