import { Connection, PublicKey, Keypair, TransactionInstruction } from '@solana/web3.js';
export declare const GroupPointerExtensionType = 20;
export declare const TokenGroupExtensionType = 23;
export declare const TokenGroupMemberExtensionType = 24;
/**
 * Token Group Member Status Flags
 */
export declare enum TokenGroupMemberStatus {
    NONE = 0,
    ACTIVE = 1,
    FROZEN = 2
}
/**
 * Create instruction to initialize group pointer for a token
 * @param mint - Mint address
 * @param groupMint - Mint address of the token group
 * @param programId - Token Extension Program ID
 * @returns Instruction to initialize group pointer
 */
export declare function createInitializeGroupPointerInstruction(mint: PublicKey, groupMint: PublicKey, programId?: PublicKey): any;
/**
 * Create instruction to initialize a mint as a token group
 * @param mint - Public key of the mint account
 * @param payer - Public key of the payer
 * @param groupAuthority - Public key of the authority for managing group
 * @param updateAuthority - (Optional) Public key of the authority for updating metadata
 * @param name - Group name (max 32 bytes)
 * @param symbol - Group symbol (max 10 bytes)
 * @param programId - SPL Token program ID
 * @returns TransactionInstruction
 */
export declare function createInitializeTokenGroupInstruction(mint: PublicKey, payer: PublicKey, groupAuthority: PublicKey, updateAuthority: (PublicKey | null) | undefined, name: string, symbol: string, programId?: PublicKey): TransactionInstruction;
/**
 * Create instruction to update a token group
 * @param mint - Public key of the mint account
 * @param updateAuthority - Public key of the update authority
 * @param name - New group name (max 32 bytes)
 * @param symbol - New group symbol (max 10 bytes)
 * @param programId - SPL Token program ID
 * @returns TransactionInstruction
 */
export declare function createUpdateTokenGroupInstruction(mint: PublicKey, updateAuthority: PublicKey, name: string, symbol: string, programId?: PublicKey): TransactionInstruction;
/**
 * Create instruction to initialize a mint as a token group member
 * @param memberMint - Public key of the member mint account
 * @param groupMint - Public key of the group mint account
 * @param payer - Public key of the payer
 * @param memberAuthority - Public key of the authority for managing member status
 * @param programId - SPL Token program ID
 * @returns TransactionInstruction
 */
export declare function createInitializeTokenGroupMemberInstruction(memberMint: PublicKey, groupMint: PublicKey, payer: PublicKey, memberAuthority: PublicKey, programId?: PublicKey): TransactionInstruction;
/**
 * Create instruction to update a token group member's status
 * @param memberMint - Public key of the member mint account
 * @param memberAuthority - Public key of the member authority
 * @param status - New status for the member
 * @param programId - SPL Token program ID
 * @returns TransactionInstruction
 */
export declare function createUpdateTokenGroupMemberInstruction(memberMint: PublicKey, memberAuthority: PublicKey, status: TokenGroupMemberStatus, programId?: PublicKey): TransactionInstruction;
/**
 * Class for managing token groups
 */
export declare class TokenGroupExtension {
    private connection;
    private mint;
    /**
     * Create a new TokenGroupExtension instance
     * @param connection - Connection to Solana cluster
     * @param mint - Public key of the token group mint
     */
    constructor(connection: Connection, mint: PublicKey);
    /**
     * Get token group information
     * @returns Promise resolving to token group information
     */
    getTokenGroupInfo(): Promise<{
        name: string;
        symbol: string;
        maxSize?: number;
        memberCount?: number;
        groupAuthority: PublicKey | null;
        updateAuthority: PublicKey | null;
    }>;
    /**
     * Check if a mint is a member of this token group
     * @param memberMint - Public key of the potential member mint
     * @returns Promise resolving to boolean indicating membership
     */
    isMember(memberMint: PublicKey): Promise<boolean>;
    /**
     * Get member status
     * @param memberMint - Public key of the member mint
     * @returns Promise resolving to member status
     */
    getMemberStatus(memberMint: PublicKey): Promise<TokenGroupMemberStatus>;
    /**
     * Create instructions to create a new token group
     * @param connection - Connection to Solana cluster
     * @param payer - Public key of the fee payer
     * @param mintAuthority - Mint authority
     * @param groupAuthority - Group authority
     * @param updateAuthority - (Optional) Update authority
     * @param name - Group name
     * @param symbol - Group symbol
     * @param decimals - Number of decimals
     * @returns Instructions, signers, and mint address
     */
    static createTokenGroupInstructions(connection: Connection, payer: PublicKey, mintAuthority: PublicKey, groupAuthority: PublicKey, updateAuthority: PublicKey | null, name: string, symbol: string, decimals?: number): Promise<{
        instructions: TransactionInstruction[];
        signers: Keypair[];
        mint: PublicKey;
    }>;
    /**
     * Create instructions to create a new token group member
     * @param connection - Connection to Solana cluster
     * @param payer - Public key of the fee payer
     * @param mintAuthority - Mint authority
     * @param memberAuthority - Member authority
     * @param decimals - Number of decimals
     * @returns Instructions, signers, and mint address
     */
    createTokenGroupMemberInstructions(payer: PublicKey, mintAuthority: PublicKey, memberAuthority: PublicKey, decimals?: number): Promise<{
        instructions: TransactionInstruction[];
        signers: Keypair[];
        mint: PublicKey;
    }>;
    /**
     * Create instruction to update token group information
     * @param updateAuthority - Public key of the update authority
     * @param name - New group name
     * @param symbol - New group symbol
     * @returns Instruction to update token group
     */
    createUpdateTokenGroupInstruction(updateAuthority: PublicKey, name: string, symbol: string): TransactionInstruction;
    /**
     * Create instruction to update a member's status
     * @param memberMint - Public key of the member mint
     * @param memberAuthority - Public key of the member authority
     * @param status - New status for the member
     * @returns Instruction to update member status
     */
    createUpdateMemberStatusInstruction(memberMint: PublicKey, memberAuthority: PublicKey, status: TokenGroupMemberStatus): TransactionInstruction;
    /**
     * List all members of this token group
     * @returns Promise resolving to array of member mints
     */
    listMembers(): Promise<PublicKey[]>;
}
