(data: RawData)
| 194 | } |
| 195 | |
| 196 | private onMessage(data: RawData): void { |
| 197 | if (this.closed) return; |
| 198 | let parsed: unknown; |
| 199 | try { |
| 200 | parsed = JSON.parse(rawDataToString(data)); |
| 201 | } catch { |
| 202 | this.logger.warn('non-json ws frame; ignoring'); |
| 203 | return; |
| 204 | } |
| 205 | const type = frameType(parsed); |
| 206 | if (type === undefined) { |
| 207 | this.logger.warn('invalid control message type'); |
| 208 | return; |
| 209 | } |
| 210 | const operation = getClientControlOperation(type); |
| 211 | if (operation === undefined) { |
| 212 | this.logger.warn({ type }, 'unknown control message type'); |
| 213 | return; |
| 214 | } |
| 215 | const result = operation.messageSchema.safeParse(parsed); |
| 216 | if (!result.success) { |
| 217 | this.logger.warn({ issues: result.error.issues.length }, 'invalid control message'); |
| 218 | return; |
| 219 | } |
| 220 | const msg = result.data as ClientControlMessage; |
| 221 | switch (msg.type) { |
| 222 | case 'client_hello': |
| 223 | void this.onClientHello(msg).catch((err: unknown) => { |
| 224 | this.logger.warn({ err: String(err) }, 'client_hello handler failed'); |
| 225 | }); |
| 226 | break; |
| 227 | case 'pong': |
| 228 | this.onPong(); |
| 229 | break; |
| 230 | case 'subscribe': |
| 231 | void this.onSubscribe(msg).catch((err: unknown) => { |
| 232 | this.logger.warn({ err: String(err) }, 'subscribe handler failed'); |
| 233 | }); |
| 234 | break; |
| 235 | case 'unsubscribe': |
| 236 | this.onUnsubscribe(msg); |
| 237 | break; |
| 238 | case 'abort': |
| 239 | this.onAbort(msg); |
| 240 | break; |
| 241 | case 'watch_fs_add': |
| 242 | this.onWatchFsAdd(msg); |
| 243 | break; |
| 244 | case 'watch_fs_remove': |
| 245 | this.onWatchFsRemove(msg); |
| 246 | break; |
| 247 | case 'terminal_attach': |
| 248 | this.onTerminalAttach(msg); |
| 249 | break; |
| 250 | case 'terminal_detach': |
| 251 | this.onTerminalDetach(msg); |
| 252 | break; |
| 253 | case 'terminal_input': |
no test coverage detected