import { Connection, PublicKey } from "@solana/web3.js";
import { ExtensionType } from "@solana/spl-token";
export interface ExtensionInfo {
    type: number;
    name: string;
    present: boolean;
}
export declare const EXTENSION_TYPES: {
    TransferFeeConfig: number;
    TransferFeeAmount: number;
    MintCloseAuthority: number;
    ConfidentialTransferMint: number;
    ConfidentialTransferAccount: number;
    DefaultAccountState: number;
    ImmutableOwner: number;
    MemoTransfer: number;
    NonTransferable: number;
    InterestBearingConfig: number;
    CpiGuard: number;
    PermanentDelegate: number;
    NonTransferableAccount: number;
    TransferHook: number;
    MetadataPointer: number;
    TokenMetadata: number;
};
export declare const ExtensionTypeByte: {
    TransferFeeConfig: number;
    TransferFeeAmount: number;
    MintCloseAuthority: number;
    ConfidentialTransferMint: number;
    ConfidentialTransferAccount: number;
    DefaultAccountState: number;
    ImmutableOwner: number;
    MemoTransfer: number;
    NonTransferable: number;
    InterestBearingConfig: number;
    CpiGuard: number;
    PermanentDelegate: number;
    NonTransferableAccount: number;
    TransferHook: number;
    MetadataPointer: number;
    TokenMetadata: number;
    GroupPointer: number;
    MemberPointer: number;
};
export declare const ExtensionTypeString: {
    0: string;
    1: string;
    2: string;
    3: string;
    4: string;
    5: string;
    6: string;
    7: string;
    8: string;
    9: string;
    10: string;
    11: string;
    12: string;
    13: string;
    14: string;
    15: string;
    20: string;
    21: string;
};
export declare function getExtensionName(type: number): string;
export declare function isToken2022(connection: Connection, mint: PublicKey): Promise<boolean>;
export declare function getTokenInfo(connection: Connection, mint: PublicKey): Promise<{
    isProgramToken2022: boolean;
    extensions: ExtensionInfo[];
}>;
/**
 * Find the optimal initialization order for extensions
 * Some extensions must be initialized before the mint, others must be after.
 *
 * @param extensionTypes - Array of extension types to sort
 * @returns Sorted array in optimal order
 */
export declare function getOptimalInitializationOrder(extensionTypes: ExtensionType[]): ExtensionType[];
