diff --git a/src/server.ts b/src/server.ts index 175e0df3..e9863054 100644 --- a/src/server.ts +++ b/src/server.ts @@ -586,7 +586,16 @@ export function makeServer(options: ServerOptions): Server { return; } case MessageType.Ping: { - await socket.send(stringifyMessage({ type: MessageType.Pong })); + await socket.send( + stringifyMessage( + message.payload + ? { type: MessageType.Pong, payload: message.payload } + : { + type: MessageType.Pong, + // payload is completely absent if not provided + }, + ), + ); return; } case MessageType.Pong: diff --git a/src/tests/server.ts b/src/tests/server.ts index d676a868..dd57dd64 100644 --- a/src/tests/server.ts +++ b/src/tests/server.ts @@ -662,6 +662,26 @@ describe('Ping/Pong', () => { }); }); + it("should return ping's payload through the pong", async () => { + const { url } = await startTServer(); + + const client = await createTClient(url); + + client.ws.send( + stringifyMessage({ + type: MessageType.Ping, + payload: { iCome: 'back' }, + }), + ); + + await client.waitForMessage(({ data }) => { + expect(parseMessage(data)).toEqual({ + type: MessageType.Pong, + payload: { iCome: 'back' }, + }); + }); + }); + it('should not react to a pong', async () => { const { url } = await startTServer();