import { AdminSnapshotMessage, AdminActionResultMessage, AdminLogEntry } from './protocol.js'; type AdminPhase = "idle" | "connecting" | "ready" | "rejected" | "disconnected"; interface AdminState { phase: AdminPhase; snapshot: AdminSnapshotMessage | null; reason: string | null; lastAction: AdminActionResultMessage | null; /** * Activity log, oldest → newest. Seeded with recent history on connect, then * appended live as the server streams events. Capped client-side (newest kept). */ logs: AdminLogEntry[]; } type AdminPasswordSource = string | (() => string | Promise); interface ReactorQueueAdminClientOptions { host: string; room?: string; party?: string; /** How the client authenticates. You supply the secret (env, input, hardcoded, etc.). */ password: AdminPasswordSource; autoConnect?: boolean; /** * Poll a fresh snapshot every N ms once authenticated. The server also pushes * on every room change; polling keeps the `msLeft` countdowns live. 0 disables. */ refreshIntervalMs?: number; } type Listener = (state: AdminState) => void; /** * WebSocket client for queue admin mode. Does not join the FIFO queue; after * auth it receives {@link AdminSnapshotMessage} updates and can kick members or * close sessions. */ declare class ReactorQueueAdminClient { private readonly opts; private socket; private destroyed; private state; private listeners; private refreshTimer; constructor(options: ReactorQueueAdminClientOptions); getState(): AdminState; subscribe(listener: Listener): () => void; private setState; connect(): void; disconnect(): void; destroy(): void; refresh(): void; kickMember(connId: string): void; kickQueued(connId: string): void; closeSession(sessionId: string): void; private authenticate; private handleMessage; private send; private startRefreshTimer; private clearRefreshTimer; private teardownSocket; } export { type AdminPasswordSource as A, ReactorQueueAdminClient as R, type AdminPhase as a, type AdminState as b, type ReactorQueueAdminClientOptions as c };