import { Address, ReadonlyUint8Array, TransactionSigner } from '@solana/kit';
import type { ProgramDeps } from '../../../types.js';
import * as programClient from '@nosana/merkle-distributor-program';
import { ConvertTypesForDb } from '../../../utils/index.js';
/**
 * Claim target enum for merkle distributor.
 * Determines which address receives the claimed tokens.
 * @group @nosana/kit
 */
export declare enum ClaimTarget {
    YES = "YES",
    NO = "NO"
}
/**
 * Allowed addresses for receiving claimed tokens from merkle distributor.
 * The `to` account must be the ATA of one of these addresses.
 */
export declare const ALLOWED_RECEIVE_ADDRESSES: {
    readonly YES: Address<"YessuvqUauj9yW4B3eERcyRLWmQtWpFc2ERKmaedmCE">;
    readonly NO: Address<"NopXntmRdXhYNkoZaNTMUMShJ3aVG5RvwpiyPdd4bMh">;
};
export type MerkleDistributor = ConvertTypesForDb<programClient.MerkleDistributorArgs> & {
    address: Address;
};
export type ClaimStatus = ConvertTypesForDb<programClient.ClaimStatusArgs> & {
    address: Address;
};
/**
 * Error thrown when a claim status account is not found
 * @group @nosana/kit
 */
export declare class ClaimStatusNotFoundError extends Error {
    constructor(address: Address);
}
/**
 * Merkle distributor program interface
 * @group @nosana/kit
 */
export interface MerkleDistributorProgram {
    /**
     * Derive the ClaimStatus PDA address for a given distributor and optional claimant.
     */
    getClaimStatusPda(distributor: Address, claimant?: Address): Promise<Address>;
    /**
     * Fetch a merkle distributor account by address
     */
    get(addr: Address): Promise<MerkleDistributor>;
    /**
     * Fetch all merkle distributor accounts
     */
    all(): Promise<MerkleDistributor[]>;
    /**
     * Fetch a claim status account by address
     */
    getClaimStatus(addr: Address): Promise<ClaimStatus>;
    /**
     * Fetch claim status for a specific distributor and optional claimant.
     */
    getClaimStatusForDistributor(distributor: Address, claimant?: Address): Promise<ClaimStatus | null>;
    /**
     * Fetch all claim status accounts
     */
    allClaimStatus(): Promise<ClaimStatus[]>;
    /**
     * Claim tokens from a merkle distributor.
     */
    claim(params: {
        distributor: Address;
        amountUnlocked: number | bigint;
        amountLocked: number | bigint;
        proof: Array<ReadonlyUint8Array>;
        target: ClaimTarget;
        claimant?: TransactionSigner;
    }): Promise<ReturnType<typeof programClient.getNewClaimInstruction>>;
    /**
     * Clawback tokens from a merkle distributor.
     */
    clawback(params: {
        distributor: Address;
        claimant?: TransactionSigner;
    }): Promise<ReturnType<typeof programClient.getClawbackInstruction>>;
}
/**
 * Creates a new MerkleDistributorProgram instance.
 *
 * @param deps - Program dependencies (config, logger, solana service, wallet getter)
 * @returns A MerkleDistributorProgram instance with methods to interact with the merkle distributor program
 *
 * @example
 * ```ts
 * import { createMerkleDistributorProgram } from '@nosana/kit';
 *
 * const merkleDistributor = createMerkleDistributorProgram({
 *   config,
 *   logger,
 *   solana,
 *   getWallet,
 * });
 *
 * const distributor = await merkleDistributor.get('distributor-address');
 * ```
 */
import type { ProgramConfig } from '../../../config/types.js';
export declare function createMerkleDistributorProgram(deps: ProgramDeps, config: ProgramConfig): MerkleDistributorProgram;
//# sourceMappingURL=MerkleDistributorProgram.d.ts.map