| 74 | } |
| 75 | |
| 76 | private sendRequest<T>(socket: WebSocket, method: string, params?: unknown): Promise<T> { |
| 77 | const id = this.nextId++ |
| 78 | const message = params === undefined ? { id, method } : { id, method, params } |
| 79 | |
| 80 | return new Promise<T>((resolve, reject) => { |
| 81 | this.pending.set(id, { |
| 82 | resolve: (value) => resolve(value as T), |
| 83 | reject, |
| 84 | }) |
| 85 | try { |
| 86 | socket.send(JSON.stringify(message)) |
| 87 | } catch (error) { |
| 88 | this.pending.delete(id) |
| 89 | reject(error instanceof Error ? error : new Error("Runtime socket send failed")) |
| 90 | } |
| 91 | }) |
| 92 | } |
| 93 | |
| 94 | subscribe(listener: NotificationListener): () => void { |
| 95 | this.listeners.add(listener) |