export type { MatchSearchState } from './Lifecycle.js'; import { type MatchSearchState, type MatchQueueState } from './Lifecycle.js'; import type { ControlTransport, MatchmakingStatus } from './types.js'; import type { RoomClient } from './RoomClient.js'; export interface FindMatchOptions { queue?: string; players?: number; realtime?: boolean; timeoutMs?: number; signal?: AbortSignal; } type Listener = (status: MatchmakingStatus) => void; export declare class MatchmakingQueue { private readonly transport; readonly gameId?: string | undefined; private readonly roomFactory?; private queueLifecycle; private legacyController?; private leaving?; private legacyJoinWrite?; private legacyLeaveWrite?; get queueState(): MatchQueueState; get queueHistory(): { from: MatchQueueState; event: import("./Lifecycle.js").MatchQueueEvent; to: MatchQueueState; }[]; get legacyJoinHistory(): { from: import("./Lifecycle.js").IdempotentWriteState; event: import("./Lifecycle.js").IdempotentWriteEvent; to: import("./Lifecycle.js").IdempotentWriteState; }[]; get legacyLeaveHistory(): { from: import("./Lifecycle.js").IdempotentWriteState; event: import("./Lifecycle.js").IdempotentWriteEvent; to: import("./Lifecycle.js").IdempotentWriteState; }[]; get isDisposed(): boolean; private requireActive; private searchLifecycle; /** Detailed findMatch lifecycle; status retains the compatible UI state. */ get searchState(): MatchSearchState; private active?; private statusValue; private listeners; private requestId; private unsubscribe?; constructor(transport: ControlTransport, gameId?: string | undefined, roomFactory?: ((roomId: string) => RoomClient) | undefined); /** Resolves only after all assigned users have synchronized and confirmed entry. */ findMatch({ queue, players, realtime, timeoutMs, signal }?: FindMatchOptions): Promise; /** Cancels only the pending search; a returned room is owned by its caller. */ cancel(): Promise; get status(): MatchmakingStatus; onChange(listener: Listener): () => void; private set; private apply; /** @deprecated Enqueue-only custom transports; use findMatch for end-to-end matching. */ joinQueue(queue: string, options?: Record): Promise; join(queue: string, options?: Record): Promise; private remoteLeave; leaveQueue(): Promise; leave(): Promise; dispose(): void; }