import { Connection, PublicKey, Transaction, Commitment } from '@solana/web3.js';
import { Program, AnchorProvider } from '@project-serum/anchor';
import { EventEmitter } from 'events';
import { Settlement, SettlementEvent } from './types';
export declare class SDKError extends Error {
    code: string;
    details?: any | undefined;
    constructor(message: string, code: string, details?: any | undefined);
}
export interface SplitwiseSettlementSDK {
    program: Program;
    connection: Connection;
    provider: AnchorProvider;
}
export interface InitializeSettlementParams {
    splitwiseId: string;
    amount: number;
    debtorWallet: PublicKey;
    creditorWallet: PublicKey;
    tokenMint: PublicKey;
    expiryTimestamp: number;
    minPaymentAmount?: number;
}
export interface MakePaymentParams {
    settlementAccount: PublicKey;
    amount: number;
}
export interface SettlementEventData {
    settlementAccount: PublicKey;
    eventType: SettlementEvent['eventType'];
    data: any;
}
export declare class SplitwiseSettlement extends EventEmitter {
    private sdk;
    private oracleEndpoint;
    private oracleApiKey;
    private commitment;
    private subscriptions;
    constructor(sdk: SplitwiseSettlementSDK, oracleEndpoint: string | undefined, oracleApiKey: string, commitment?: Commitment);
    /**
     * Initialize a new settlement for a Splitwise debt
     */
    initializeSettlement(params: InitializeSettlementParams): Promise<{
        transaction: Transaction;
        signature: string;
        settlementAccount: PublicKey;
        nonce: Uint8Array<ArrayBuffer>;
    }>;
    /**
     * Make a payment towards a settlement
     */
    makePayment(params: MakePaymentParams): Promise<{
        transaction: Transaction;
        signature: string;
    }>;
    /**
     * Cancel a settlement
     */
    cancelSettlement(settlementAccount: PublicKey): Promise<{
        transaction: Transaction;
        signature: string;
    }>;
    /**
     * Get settlement details
     */
    getSettlement(settlementAccount: PublicKey): Promise<Settlement>;
    /**
     * Get all settlements for a user
     */
    getUserSettlements(userWallet: PublicKey): Promise<{
        publicKey: PublicKey;
        account: Settlement;
    }[]>;
    /**
     * Monitor a settlement for changes
     */
    private monitorSettlement;
    private getEventType;
    /**
     * Stop monitoring a settlement
     */
    stopMonitoring(settlementAccount: PublicKey): Promise<void>;
    /**
     * Get or create associated token account
     */
    private getOrCreateAssociatedTokenAccount;
    /**
     * Find settlement PDA address
     */
    private findSettlementAddress;
    /**
     * Send and confirm transaction with retry
     */
    private sendAndConfirmTransaction;
    /**
     * Validate settlement for payment
     */
    private validateSettlementForPayment;
    /**
     * Validate token accounts
     */
    private validateTokenAccounts;
    /**
     * Check if error is retryable
     */
    private isRetryableError;
    /**
     * Handle and standardize errors
     */
    private handleError;
    private sleep;
    private isValidAmount;
    /**
     * Get oracle verification data
     */
    private getOracleVerification;
    /**
     * Compute commitment hash for front-running protection
     */
    private computeCommitmentHash;
}
