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:
committed by
Facebook GitHub Bot
parent
04235e6086
commit
9c5d1a32c5
@@ -14,6 +14,11 @@ type GenericWebSocketMessage<E = string, T = unknown> = {
|
|||||||
payload: T;
|
payload: T;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type GenericWebSocketError = GenericWebSocketMessage<
|
||||||
|
'error',
|
||||||
|
{message: string}
|
||||||
|
>;
|
||||||
|
|
||||||
export type ExecWebSocketMessage = GenericWebSocketMessage<
|
export type ExecWebSocketMessage = GenericWebSocketMessage<
|
||||||
'exec',
|
'exec',
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import {
|
|||||||
ExecResponseWebSocketMessage,
|
ExecResponseWebSocketMessage,
|
||||||
ExecResponseErrorWebSocketMessage,
|
ExecResponseErrorWebSocketMessage,
|
||||||
ServerEventWebSocketMessage,
|
ServerEventWebSocketMessage,
|
||||||
|
GenericWebSocketError,
|
||||||
} from 'flipper-common';
|
} from 'flipper-common';
|
||||||
import {FlipperServerImpl} from 'flipper-server-core';
|
import {FlipperServerImpl} from 'flipper-server-core';
|
||||||
import {WebSocketServer} from 'ws';
|
import {WebSocketServer} from 'ws';
|
||||||
@@ -42,9 +43,23 @@ export function startSocketServer(
|
|||||||
flipperServer.onAny(onServerEvent);
|
flipperServer.onAny(onServerEvent);
|
||||||
|
|
||||||
client.on('message', (data) => {
|
client.on('message', (data) => {
|
||||||
const {event, payload} = JSON.parse(
|
let [event, payload]: [event: string | null, payload: any | null] = [
|
||||||
data.toString(),
|
null,
|
||||||
) as ClientWebSocketMessage;
|
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) {
|
switch (event) {
|
||||||
case 'exec': {
|
case 'exec': {
|
||||||
|
|||||||
Reference in New Issue
Block a user