import { BehaviorSubject, Observable, Subject } from 'rxjs'; import type { DiscoveryTransporter, MdnsMessage, NodeRef, PubsubTransporter, RpcRequestPacket, RpcResponsePacket, RpcTransporter, ServiceDirectory, SpiderMeshNode } from '@spider-mesh/core'; export type WebsocketTransporterOptions = { heartbeatIntervalMs?: number; reconnectIntervalMs?: number; unsubscribeDelayMs?: number; }; export type WebSocketLike = { readyState: number; binaryType?: BinaryType; close(): void; send(data: Uint8Array, options?: { binary?: boolean; }): void; ping?(): void; terminate?(): void; }; export type WebsocketConnectionStatus = 'connecting' | 'connected' | 'error' | 'not_connected'; export declare abstract class BaseWebsocketTransporter extends Subject implements RpcTransporter, DiscoveryTransporter, PubsubTransporter, ServiceDirectory { #private; protected options: WebsocketTransporterOptions; readonly status$: BehaviorSubject>; constructor(options?: WebsocketTransporterOptions); connect(url: string): void; close(url: string): void; send(packet: RpcRequestPacket | RpcResponsePacket): Promise<{ cancel: () => void; }>; broadcast(data: MdnsMessage): Promise; publish(topic: string, data: T): Promise; listen(topic: string): Observable; protected abstract createSocket(url: string): Promise | WebSocketLike; private on_rpc; private on_hello; private on_offline; watchService(service: string): Observable; listNodes(service: string): NodeRef[]; canRoute(service: string, node_id?: string): boolean; private on_publish; }