/**
 * Listen to real-time reserve changes via WebSocket.
 *
 * Returns raw {@link Reserve} (not KaminoReserve) — KaminoReserve needs
 * oracle prices and an RPC connection that aren't available from the WS
 * notification alone. The consumer hydrates using its 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';
import type { SubscriptionHandle } from './subscriptionHandle';
import type { UpdateScheduler } from './wsUpdateScheduler';
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;
    /** Defaults to 'confirmed' — reserves update every slot, throttling
     *  prevents excessive re-renders. */
    commitment?: Commitment;
    throttleMs?: number;
    /** Requires `throttleMs`. */
    scheduler?: UpdateScheduler;
}
export declare function buildReserveFilters(marketAddress: Address): ProgramFilter[];
export declare function listenToReserveChanges(params: ReserveListenerParams): SubscriptionHandle;
//# sourceMappingURL=reserveListener.d.ts.map