export type ReadOnlyRemoteScrollDirection = 'up' | 'down'; export interface ReadOnlyRemoteScrollPayload { readonly direction: ReadOnlyRemoteScrollDirection; readonly eventCount: number; } export declare function parseReadOnlyRemoteScrollPayload(data: string): ReadOnlyRemoteScrollPayload | null; export declare const READ_ONLY_REMOTE_SCROLL_SESSION_BUDGET = 12; export declare const READ_ONLY_REMOTE_SCROLL_WINDOW_MS = 1000; export interface ReadOnlyRemoteScrollLimiterOptions { readonly budget: number; readonly windowMs: number; } /** * Session-scoped fixed-window limiter for read-only remote scroll events. * One instance is shared by every read-only WebSocket client of a session, * so the budget aggregates across sockets. The window resets on the first * consumption after it expires; excess events are dropped, never queued. */ export declare class ReadOnlyRemoteScrollLimiter { private readonly options; private readonly nowMs; private usedEvents; private windowStartMs; constructor(options: ReadOnlyRemoteScrollLimiterOptions, nowMs?: () => number); tryConsume(eventCount: number): boolean; } //# sourceMappingURL=web-terminal-scroll.d.ts.map