Skip to content

Commit

Permalink
fix(ws,uWebSockets,@fastify/websocket): Handle internal errors that a…
Browse files Browse the repository at this point in the history
…re not instances of `Error` (enisdenjo#442)

Closes enisdenjo#441
  • Loading branch information
enisdenjo committed Feb 1, 2023
1 parent 016d701 commit 9884889
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 7 deletions.
21 changes: 21 additions & 0 deletions src/__tests__/use.ts
Expand Up @@ -504,6 +504,27 @@ for (const { tServer, skipUWS, startTServer } of tServers) {
});
});

it('should handle and limit internal server errors that are not instances of `Error`', async () => {
const { url } = await startTServer({
onConnect: () => {
throw 'i am exactly 124 characters long i am exactly 124 characters long i am exactly 124 characters long i am exactly 124 characte';
},
});

const client = await createTClient(url);
client.ws.send(
stringifyMessage<MessageType.ConnectionInit>({
type: MessageType.ConnectionInit,
}),
);

await client.waitForClose((event) => {
expect(event.code).toBe(CloseCode.InternalServerError);
expect(event.reason).toBe('Internal server error');
expect(event.wasClean).toBeTruthy(); // because the server reported the error
});
});

describe('Keep-Alive', () => {
it('should dispatch pings after the timeout has passed', async (done) => {
const { url } = await startTServer(undefined, 50);
Expand Down
15 changes: 12 additions & 3 deletions src/use/@fastify/websocket.ts
Expand Up @@ -79,7 +79,10 @@ export function makeHandler<
CloseCode.InternalServerError,
isProd
? 'Internal server error'
: limitCloseReason(err.message, 'Internal server error'),
: limitCloseReason(
err instanceof Error ? err.message : String(err),
'Internal server error',
),
);
} catch (err) {
firstErr = firstErr ?? err;
Expand All @@ -104,7 +107,10 @@ export function makeHandler<
CloseCode.InternalServerError,
isProd
? 'Internal server error'
: limitCloseReason(err.message, 'Internal server error'),
: limitCloseReason(
err instanceof Error ? err.message : String(err),
'Internal server error',
),
);
}

Expand Down Expand Up @@ -161,7 +167,10 @@ export function makeHandler<
CloseCode.InternalServerError,
isProd
? 'Internal server error'
: limitCloseReason(err.message, 'Internal server error'),
: limitCloseReason(
err instanceof Error ? err.message : String(err),
'Internal server error',
),
);
}
}),
Expand Down
5 changes: 4 additions & 1 deletion src/use/uWebSockets.ts
Expand Up @@ -205,7 +205,10 @@ export function makeBehavior<
CloseCode.InternalServerError,
isProd
? 'Internal server error'
: limitCloseReason(err.message, 'Internal server error'),
: limitCloseReason(
err instanceof Error ? err.message : String(err),
'Internal server error',
),
);
}
},
Expand Down
15 changes: 12 additions & 3 deletions src/use/ws.ts
Expand Up @@ -73,7 +73,10 @@ export function useServer<
CloseCode.InternalServerError,
isProd
? 'Internal server error'
: limitCloseReason(err.message, 'Internal server error'),
: limitCloseReason(
err instanceof Error ? err.message : String(err),
'Internal server error',
),
);
} catch (err) {
firstErr = firstErr ?? err;
Expand All @@ -94,7 +97,10 @@ export function useServer<
CloseCode.InternalServerError,
isProd
? 'Internal server error'
: limitCloseReason(err.message, 'Internal server error'),
: limitCloseReason(
err instanceof Error ? err.message : String(err),
'Internal server error',
),
);
});

Expand Down Expand Up @@ -146,7 +152,10 @@ export function useServer<
CloseCode.InternalServerError,
isProd
? 'Internal server error'
: limitCloseReason(err.message, 'Internal server error'),
: limitCloseReason(
err instanceof Error ? err.message : String(err),
'Internal server error',
),
);
}
}),
Expand Down

0 comments on commit 9884889

Please sign in to comment.