From d8a2e6f4058c88d7bb555e7427534537d4b094f6 Mon Sep 17 00:00:00 2001 From: sanjai0py Date: Thu, 6 Feb 2025 19:16:59 +0530 Subject: [PATCH] fix: improve handling of Buffer responses and set default charset to utf-8 --- .../bruno-electron/src/ipc/network/index.js | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js index 2271a3d33..4dd043daf 100644 --- a/packages/bruno-electron/src/ipc/network/index.js +++ b/packages/bruno-electron/src/ipc/network/index.js @@ -384,8 +384,8 @@ const parseDataFromResponse = (response, disableParsingResponseJson = false) => // Parse the charset from content type: https://stackoverflow.com/a/33192813 const charsetMatch = /charset=([^()<>@,;:"/[\]?.=\s]*)/i.exec(response.headers['content-type'] || ''); // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec#using_exec_with_regexp_literals - const charsetValue = charsetMatch?.[1]; - const dataBuffer = Buffer.from(response.data); + const charsetValue = charsetMatch?.[1] || 'utf-8'; + const dataBuffer = Buffer.isBuffer(response.data) ? response.data : Buffer.from(response.data); // Overwrite the original data for backwards compatibility let data; if (iconv.encodingExists(charsetValue)) { @@ -407,6 +407,23 @@ const parseDataFromResponse = (response, disableParsingResponseJson = false) => console.log('Failed to parse response data as JSON'); } + // Handle Buffer responses that contain JSON + if (Buffer.isBuffer(response.data)) { + try { + const decodedString = response.data.toString('utf-8'); + const parsedData = JSON.parse(decodedString); + + if (parsedData && parsedData.type === "Buffer" && Array.isArray(parsedData.data)) { + data = Buffer.from(parsedData.data).toString('utf-8'); + data = JSON.parse(data); + } else { + data = parsedData; + } + } catch { + console.error('Failed to parse Buffer data as JSON'); + } + } + return { data, dataBuffer }; };