Recover from malformed JSON

Summary: Following up on D34787674 (f85def32fb).

Reviewed By: aigoncharov

Differential Revision: D34930249

fbshipit-source-id: f209a638c1281957fd2b03b6fc50389bd98bc5f6
This commit is contained in:
Pascal Hartig
2022-03-16 16:39:23 -07:00
committed by Facebook GitHub Bot
parent 04235e6086
commit 9c5d1a32c5
2 changed files with 23 additions and 3 deletions

View File

@@ -14,6 +14,11 @@ type GenericWebSocketMessage<E = string, T = unknown> = {
payload: T;
};
export type GenericWebSocketError = GenericWebSocketMessage<
'error',
{message: string}
>;
export type ExecWebSocketMessage = GenericWebSocketMessage<
'exec',
{

View File

@@ -13,6 +13,7 @@ import {
ExecResponseWebSocketMessage,
ExecResponseErrorWebSocketMessage,
ServerEventWebSocketMessage,
GenericWebSocketError,
} from 'flipper-common';
import {FlipperServerImpl} from 'flipper-server-core';
import {WebSocketServer} from 'ws';
@@ -42,9 +43,23 @@ export function startSocketServer(
flipperServer.onAny(onServerEvent);
client.on('message', (data) => {
const {event, payload} = JSON.parse(
data.toString(),
) as ClientWebSocketMessage;
let [event, payload]: [event: string | null, payload: any | null] = [
null,
null,
];
try {
({event, payload} = JSON.parse(
data.toString(),
) as ClientWebSocketMessage);
} catch (err) {
console.warn('flipperServer -> onMessage: failed to parse JSON', err);
const response: GenericWebSocketError = {
event: 'error',
payload: {message: `Failed to parse JSON request: ${err}`},
};
client.send(JSON.stringify(response));
return;
}
switch (event) {
case 'exec': {