From 95c193879acae8d3916a438a35a1b8ecec47939a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 22 Aug 2026 04:17:02 -0700 Subject: [PATCH] perf(mattermost): decode inbound websocket frames once (#127870) Co-authored-by: Amp --- .../src/mattermost/monitor-websocket.test.ts | 10 +++++++--- .../mattermost/src/mattermost/monitor-websocket.ts | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/extensions/mattermost/src/mattermost/monitor-websocket.test.ts b/extensions/mattermost/src/mattermost/monitor-websocket.test.ts index 2e9275ba270a..f8f24096fe6a 100644 --- a/extensions/mattermost/src/mattermost/monitor-websocket.test.ts +++ b/extensions/mattermost/src/mattermost/monitor-websocket.test.ts @@ -377,7 +377,7 @@ describe("mattermost websocket monitor", () => { }); }); - it("hands posted envelopes to ingress raw and keeps post_edited out", async () => { + it("hands posted envelopes to ingress raw without duplicate decoding", async () => { const socket = new FakeWebSocket(); const onPosted = vi.fn(async () => {}); const connectOnce = createMattermostConnectOnce({ @@ -398,6 +398,9 @@ describe("mattermost websocket monitor", () => { }), }, }; + const raw = JSON.stringify(posted); + const frame = Buffer.from(raw); + const decode = vi.spyOn(frame, "toString"); const connected = connectOnce(); socket.emitOpen(); @@ -413,14 +416,15 @@ describe("mattermost websocket monitor", () => { queueMicrotask(resolve); }); expect(onPosted).not.toHaveBeenCalled(); - socket.emitMessage(Buffer.from(JSON.stringify(posted))); + socket.emitMessage(frame); await vi.waitFor(() => { expect(onPosted).toHaveBeenCalledTimes(1); }); socket.emitClose(1000); await connected; - expect(onPosted).toHaveBeenCalledWith(JSON.stringify(posted)); + expect(onPosted).toHaveBeenCalledWith(raw); + expect(decode.mock.calls.length).toBeLessThanOrEqual(1); }); it("terminates when bot update_at changes (disable/enable cycle)", async () => { diff --git a/extensions/mattermost/src/mattermost/monitor-websocket.ts b/extensions/mattermost/src/mattermost/monitor-websocket.ts index ac0dd86fd9be..c857fdd98a7b 100644 --- a/extensions/mattermost/src/mattermost/monitor-websocket.ts +++ b/extensions/mattermost/src/mattermost/monitor-websocket.ts @@ -336,15 +336,15 @@ export function createMattermostConnectOnce( }); ws.on("message", async (data) => { + const raw = rawDataToString(data); captureWsEvent({ url: opts.wsUrl, direction: "inbound", kind: "ws-frame", flowId, - payload: Buffer.from(rawDataToString(data)), + payload: Buffer.from(raw), meta: { subsystem: "mattermost-websocket" }, }); - const raw = rawDataToString(data); const payload = parseMattermostEventPayload(raw); if (!payload) { return;