export type HostPortParts = {
    host: string;
    port: number;
    isIpv6: boolean;
};
export type RelayRole = "server" | "client";
export type RelayProtocolVersion = "1" | "2";
export declare const CURRENT_RELAY_PROTOCOL_VERSION: RelayProtocolVersion;
export declare function normalizeRelayProtocolVersion(value: unknown, fallback?: RelayProtocolVersion): RelayProtocolVersion;
export declare function parseHostPort(input: string): HostPortParts;
export declare function normalizeHostPort(input: string): string;
export declare function normalizeLoopbackToLocalhost(endpoint: string): string;
export declare function deriveLabelFromEndpoint(endpoint: string): string;
export declare function buildDaemonWebSocketUrl(endpoint: string): string;
export declare function buildRelayWebSocketUrl(params: {
    endpoint: string;
    serverId: string;
    role: RelayRole;
    /**
     * Per-connection routing identifier used by the daemon to open server data sockets.
     * Clients should NOT provide this — the relay assigns a routing ID on connect.
     */
    connectionId?: string;
    version?: RelayProtocolVersion | 1 | 2;
}): string;
export declare function extractHostPortFromWebSocketUrl(wsUrl: string): string;
export declare function isRelayClientWebSocketUrl(url: string): boolean;
//# sourceMappingURL=daemon-endpoints.d.ts.map