/**
 * Listen to real-time reserve changes via WebSocket.
 *
 * Subscribes to all reserve accounts for a given market using
 * programNotifications with dataSize + market memcmp filters.
 *
 * Returns raw Reserve (not KaminoReserve) because constructing a
 * KaminoReserve requires oracle price data and an RPC connection
 * that are not available from the WS notification alone. The consumer
 * should hydrate into KaminoReserve using their market context.
 */
import { type Address, type Commitment, type Slot } from '@solana/kit';
import { Reserve } from '../@codegen/klend/accounts';
import { type AccountSubscriptionManager, type ProgramFilter } from './accountSubscriptionManager';
export interface ReserveChangeEvent {
    reserve: Reserve;
    address: Address;
    slot: Slot;
}
export type ReserveChangeCallback = (event: ReserveChangeEvent) => void;
export interface ReserveListenerParams {
    manager: AccountSubscriptionManager;
    marketAddress: Address;
    onChange: ReserveChangeCallback;
    onError?: (error: unknown) => void;
    programId?: Address;
    commitment?: Commitment;
    /** Throttle notifications to at most once per N ms. Reserves update every
     *  slot (~400ms) — throttling prevents excessive re-renders. */
    throttleMs?: number;
}
export declare function buildReserveFilters(marketAddress: Address): ProgramFilter[];
/**
 * Subscribe to all reserve account changes for a given market.
 * Returns an unsubscribe function.
 */
export declare function listenToReserveChanges(params: ReserveListenerParams): () => void;
//# sourceMappingURL=reserveListener.d.ts.map