fix: improve handling of Buffer responses and set default charset to utf-8

This commit is contained in:
sanjai0py
2025-02-06 19:16:59 +05:30
committed by Anoop M D
parent 5c096cff7b
commit d8a2e6f405

View File

@@ -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 };
};