import { WebSocket } from "ws"; type ProxyConnectionState = "online" | "offline"; type ClientConnectionState = "registered" | "bound"; type RemoveOfflineProxyResult = "removed" | "not_found" | "online"; interface ClientBinding { proxyId: string; bindingId: string; ws: WebSocket | null; connectionState: ClientConnectionState; } interface ClientConnectionMetadata { clientId?: string; connectedAt: number; userAgent?: string; platform?: string; maxTouchPoints?: number; browserName?: string; osName?: string; deviceKind?: "desktop" | "tablet" | "phone" | "unknown"; remoteAddress?: string; } export declare class RelayRegistry { private proxyStates; private clientBindings; private connectedClients; registerProxy(proxyId: string, ws: WebSocket, version: string, name?: string, osName?: string): "new" | "reconnected"; transitionProxy(proxyId: string, from: ProxyConnectionState, to: ProxyConnectionState): void; getProxyConnectionState(proxyId: string): ProxyConnectionState | undefined; getClientConnectionState(clientId: string): ClientConnectionState | undefined; cleanupProxy(proxyId: string): void; unregisterProxy(proxyId: string): void; removeOfflineProxy(proxyId: string): RemoveOfflineProxyResult; getProxy(proxyId: string): WebSocket | undefined; isProxyOnline(proxyId: string): boolean; hasProxy(proxyId: string): boolean; listProxies(): string[]; listProxiesWithName(): Array<{ proxyId: string; name?: string; osName?: string; version: string; online: boolean; }>; getProxyName(proxyId: string): string | undefined; addSessionToProxy(proxyId: string, sessionId: string): void; setSessionsForProxy(proxyId: string, sessionIds: readonly string[]): void; getProxyForSession(sessionId: string): string | undefined; getSessionsForProxy(proxyId: string): string[]; bindClientById(clientId: string, proxyId: string, ws: WebSocket): string | undefined; restoreClientBinding(clientId: string, ws: WebSocket): { proxyId: string; bindingId: string; } | undefined; unbindClientById(clientId: string): void; unbindClientSocket(clientId: string, ws: WebSocket): boolean; getClientBinding(clientId: string): ClientBinding | undefined; isCurrentClientBinding(clientId: string | undefined, ws: WebSocket, scope: { proxyId: string; bindingId: string; }): boolean; private installClientBinding; private clearSocketBinding; getClientsForProxy(proxyId: string): WebSocket[]; countClients(): number; addClientWs(ws: WebSocket, metadata?: Partial> & { connectedAt?: number; }): void; updateConnectedClientId(ws: WebSocket, clientId: string): void; updateConnectedClientMetadata(ws: WebSocket, metadata: Partial>): void; removeClientWs(ws: WebSocket): void; getAllClientWs(): WebSocket[]; getConnectedClientSockets(clientId: string): WebSocket[]; getProxyDetail(proxyId: string): { proxyId: string; name?: string; online: boolean; connectionState: ProxyConnectionState; sessions: string[]; disconnectedAt: number | null; } | undefined; getClientDetails(): Array<{ clientId: string; proxyId: string; online: boolean; connectionState: ClientConnectionState; }>; getConnectedClientDetails(currentClientId?: string): Array<{ clientId: string; proxyId?: string; connectedAt: number; current?: boolean; userAgent?: string; platform?: string; maxTouchPoints?: number; browserName: string; osName: string; deviceKind: "desktop" | "tablet" | "phone" | "unknown"; remoteAddress?: string; }>; } export {}; //# sourceMappingURL=registry.d.ts.map