import { EventEmitter } from "node:events"; import { type EndpointMetadata as WireEndpointMetadata } from "../vendor/protocol/outer/index.js"; import type { Ed25519Keypair } from "../pairing/crypto.js"; export type EndpointMetadata = { [Key in keyof WireEndpointMetadata]: Exclude; }; export type HostConnectOptions = { role: "host"; endpointId: string; runtimeInstanceId: string; metadata: EndpointMetadata; authorizedOwnerIds: readonly string[]; }; export type OwnerConnectOptions = { role: "owner"; }; export type ConnectOptions = HostConnectOptions | OwnerConnectOptions; export interface RelayClientEvents { message: [line: string]; close: []; error: [err: Error]; } /** Authenticated WebSocket client for the endpoint relay. */ export declare class RelayClient extends EventEmitter { private readonly url; private readonly keypair; private ws; private lastActivityAt; private livenessTimer; private livenessSocket; private pendingConnection; private pendingMessage; constructor(url: string, keypair: Ed25519Keypair); connect(options?: ConnectOptions): Promise; isOpen(): boolean; send(line: string): void; sendControl(frame: object): boolean; close(): void; private finishConnection; private startLiveness; private stopLiveness; private authenticate; private nextMessage; private isPendingConnection; private assertPendingConnection; private resolvePendingConnection; private abortPendingConnection; private clearConnectTimer; private clearPendingConnectionListeners; private cancelPendingMessage; private reportError; private asError; private rawSend; }