import type { PeerId, SyncMessage, SyncMessageHandler, SyncTransport } from './types.js'; type WebSocketState = 0 | 1 | 2 | 3; interface WebSocketLike { readyState: WebSocketState; onopen: (() => void) | null; onmessage: ((event: { data: unknown; }) => void | Promise) | null; onclose: (() => void) | null; onerror: ((event: unknown) => void) | null; send(data: string): void; close(): void; } type WebSocketCtor = new (url: string) => WebSocketLike; export interface PartyKitReconnectOptions { /** Max reconnect attempts (0 = unlimited). Default: unlimited. */ maxAttempts?: number; /** Initial backoff in ms. Default: 500. */ baseDelayMs?: number; /** Max backoff in ms. Default: 30_000. */ maxDelayMs?: number; } export interface PartyKitRoomTransportOptions { /** Local client/peer identity. */ peerId: string; /** Full PartyKit room WebSocket URL. */ roomUrl: string; /** Optional auth token appended as `?token=` on the WebSocket URL. */ auth?: string; /** Logical room peer ID used by SyncEngine calls. Default: `room`. */ roomId?: string; /** Human-readable room name. */ roomName?: string; /** Test hook or non-browser WebSocket implementation. */ WebSocketImpl?: WebSocketCtor; /** * Reconnect with exponential backoff after unexpected close. * Default: enabled. */ reconnect?: boolean | PartyKitReconnectOptions; /** Called after a successful reconnect (e.g. to re-sync). */ onReconnect?: () => void | Promise; /** Called when the connection drops. */ onDisconnect?: (reason?: string) => void; } /** * SyncTransport for a PartyKit-style room relay. * * The server side should implement the same room semantics as SyncRoomCore: * canonical catch-up log, full-op catch-up, and broadcast of newly accepted ops. */ export declare class PartyKitRoomTransport implements SyncTransport { private peerId; private room; private roomUrl; private WebSocketImpl; private ws; private messageHandler; private intentionalClose; private reconnectEnabled; private reconnectOpts; private reconnectAttempt; private reconnectTimer?; private connectPromise; private onReconnect?; private onDisconnect?; constructor(opts: PartyKitRoomTransportOptions); connect(): Promise; send(peerId: string, message: SyncMessage): Promise; onMessage(handler: SyncMessageHandler): void; peers(): PeerId[]; close(): void; getPeerId(): string; getRoomPeer(): PeerId; /** Whether the WebSocket is open. */ isConnected(): boolean; private openSocket; private scheduleReconnect; private tryReconnect; private static withAuth; private parseMessage; } export {}; //# sourceMappingURL=partykit-transport.d.ts.map