import { Connection, Keypair, PublicKey, TransactionInstruction } from "@solana/web3.js";
import { AccountState } from "@solana/spl-token";
/**
 * TokenAccountBuilder - Helper class for creating token accounts with extensions
 *
 * ImmutableOwner and other extensions for token accounts
 */
export declare class TokenAccountBuilder {
    private connection;
    private extensions;
    private mint?;
    private owner?;
    private defaultAccountState?;
    /**
     * Initialize builder with connection
     *
     * @param connection - Connection to Solana cluster
     */
    constructor(connection: Connection);
    /**
     * Set basic information for token account
     *
     * @param mint - Mint address of the token
     * @param owner - Owner of the token account
     */
    setTokenAccountInfo(mint: PublicKey, owner: PublicKey): TokenAccountBuilder;
    /**
     * Add ImmutableOwner extension
     * ImmutableOwner prevents changing the owner of the token account
     */
    addImmutableOwner(): TokenAccountBuilder;
    /**
     * Add DefaultAccountState extension
     *
     * @param state - Default state of the account (frozen or unlocked)
     */
    addDefaultAccountState(state: AccountState): TokenAccountBuilder;
    /**
     * Create instructions for standard (non-associated) token account
     *
     * @param payer - Public key of the transaction fee payer
     * @returns Instructions, signers and token account address
     */
    buildStandardAccountInstructions(payer: PublicKey): Promise<{
        instructions: TransactionInstruction[];
        signers: Keypair[];
        tokenAccount: PublicKey;
    }>;
    /**
     * Create standard (non-associated) token account
     *
     * @param payer - Transaction fee payer
     * @returns Information about the created token account
     */
    buildStandardAccount(payer: Keypair): Promise<{
        tokenAccount: PublicKey;
        tokenAccountKeypair: Keypair;
        transactionSignature: string;
    }>;
    /**
     * Create instructions for Associated Token Account with extensions
     *
     * Note: Not all extensions work with ATA
     *
     * @param payer - Public key of the transaction fee payer
     * @returns Instructions and token account address
     */
    buildAssociatedAccountInstructions(payer: PublicKey): {
        instructions: TransactionInstruction[];
        tokenAccount: PublicKey;
    };
    /**
     * Create Associated Token Account with extensions
     *
     * Note: Not all extensions work with ATA
     *
     * @param payer - Transaction fee payer
     * @returns Information about the created token account
     */
    buildAssociatedAccount(payer: Keypair): Promise<{
        tokenAccount: PublicKey;
        transactionSignature: string;
    }>;
}
