From d07eb0727ac4c24112c4377dd8ca3c83fd705d41 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sat, 7 Feb 2026 20:49:27 +0100 Subject: [PATCH 1/3] fix cors proxy getting binary data (e.g. png, webp) --- js/server_functions.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/js/server_functions.js b/js/server_functions.js index 85e674d816..4170500382 100644 --- a/js/server_functions.js +++ b/js/server_functions.js @@ -46,8 +46,14 @@ async function cors (req, res) { const headerValue = response.headers.get(header); if (header) res.set(header, headerValue); } - const data = await response.text(); - res.send(data); + try { + const arrayBuffer = await response.arrayBuffer(); + const buffer = Buffer.from(arrayBuffer); + res.send(buffer); + } catch (error) { + const data = await response.text(); + res.send(data); + } } else { throw new Error(`Response status: ${response.status}`); } From 0cbfe5835d6fb5487b5badf6b036ee9f9aadb093 Mon Sep 17 00:00:00 2001 From: Karsten Hassel Date: Sun, 8 Feb 2026 00:26:58 +0100 Subject: [PATCH 2/3] oneline as suggested by @KristjanESPERANTO --- js/server_functions.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/js/server_functions.js b/js/server_functions.js index 4170500382..e0f3646003 100644 --- a/js/server_functions.js +++ b/js/server_functions.js @@ -48,8 +48,7 @@ async function cors (req, res) { } try { const arrayBuffer = await response.arrayBuffer(); - const buffer = Buffer.from(arrayBuffer); - res.send(buffer); + res.send(Buffer.from(arrayBuffer)); } catch (error) { const data = await response.text(); res.send(data); From 6563e70b2dd0c00bb23fab0b633d406cdb825163 Mon Sep 17 00:00:00 2001 From: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com> Date: Sun, 8 Feb 2026 09:12:26 +0100 Subject: [PATCH 3/3] refactor(cors): simplify binary data handling and update tests --- js/server_functions.js | 9 ++------- tests/unit/functions/server_functions_spec.js | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/js/server_functions.js b/js/server_functions.js index e0f3646003..a2f0ea0557 100644 --- a/js/server_functions.js +++ b/js/server_functions.js @@ -46,13 +46,8 @@ async function cors (req, res) { const headerValue = response.headers.get(header); if (header) res.set(header, headerValue); } - try { - const arrayBuffer = await response.arrayBuffer(); - res.send(Buffer.from(arrayBuffer)); - } catch (error) { - const data = await response.text(); - res.send(data); - } + const arrayBuffer = await response.arrayBuffer(); + res.send(Buffer.from(arrayBuffer)); } else { throw new Error(`Response status: ${response.status}`); } diff --git a/tests/unit/functions/server_functions_spec.js b/tests/unit/functions/server_functions_spec.js index 5383500ae6..7596577309 100644 --- a/tests/unit/functions/server_functions_spec.js +++ b/tests/unit/functions/server_functions_spec.js @@ -4,19 +4,19 @@ describe("server_functions tests", () => { describe("The cors method", () => { let fetchResponse; let fetchResponseHeadersGet; - let fetchResponseHeadersText; + let fetchResponseArrayBuffer; let corsResponse; let request; let fetchMock; beforeEach(() => { fetchResponseHeadersGet = vi.fn(() => {}); - fetchResponseHeadersText = vi.fn(() => {}); + fetchResponseArrayBuffer = vi.fn(() => {}); fetchResponse = { headers: { get: fetchResponseHeadersGet }, - text: fetchResponseHeadersText, + arrayBuffer: fetchResponseArrayBuffer, ok: true }; @@ -78,7 +78,9 @@ describe("server_functions tests", () => { it("Sends correct data from response", async () => { const responseData = "some data"; - fetchResponseHeadersText.mockImplementation(() => responseData); + const encoder = new TextEncoder(); + const arrayBuffer = encoder.encode(responseData).buffer; + fetchResponseArrayBuffer.mockImplementation(() => arrayBuffer); let sentData; corsResponse.send = vi.fn((input) => { @@ -87,19 +89,19 @@ describe("server_functions tests", () => { await cors(request, corsResponse); - expect(fetchResponseHeadersText.mock.calls).toHaveLength(1); - expect(sentData).toBe(responseData); + expect(fetchResponseArrayBuffer.mock.calls).toHaveLength(1); + expect(sentData).toEqual(Buffer.from(arrayBuffer)); }); it("Sends error data from response", async () => { const error = new Error("error data"); - fetchResponseHeadersText.mockImplementation(() => { + fetchResponseArrayBuffer.mockImplementation(() => { throw error; }); await cors(request, corsResponse); - expect(fetchResponseHeadersText.mock.calls).toHaveLength(1); + expect(fetchResponseArrayBuffer.mock.calls).toHaveLength(1); expect(corsResponse.status).toHaveBeenCalledWith(500); expect(corsResponse.json).toHaveBeenCalledWith({ error: error.message }); });