Feat: Support multipart/mixed (#7155)

* feat(): support multipart mixed

fix: support vars interpolation on mixed multi-part

Update packages/bruno-electron/src/ipc/network/interpolate-vars.js

Co-authored-by: Timon <39559178+Its-treason@users.noreply.github.com>

refactor: use startsWith

feat: best effort for other multipart/* contentypes

* feat: enhance variable interpolation for multipart requests

- Updated `interpolateVars` function to support interpolation in multipart/form-data and multipart/mixed requests.
- Added handling for empty multipart arrays and parts with missing or undefined values.
- Improved type checks for content types to ensure proper interpolation behavior.

Includes new tests to validate the interpolation functionality for multipart requests.

* fix: normalize error handling in sendRequest and improve test reliability

---------

Co-authored-by: Alfonso Presa <alfonso-presa@users.noreply.github.com>
This commit is contained in:
Pragadesh-45
2026-02-26 17:43:37 +05:30
committed by GitHub
parent 234d0df449
commit b0d0e4aabc
8 changed files with 180 additions and 18 deletions

View File

@@ -96,7 +96,7 @@ const interpolateVars = (request, envVariables = {}, runtimeVariables = {}, proc
value: _interpolate(d?.value)
}));
}
} else if (contentType === 'multipart/form-data') {
} else if (contentType.startsWith('multipart/')) {
if (Array.isArray(request?.data) && !isFormData(request.data)) {
try {
request.data = request?.data?.map((d) => ({

View File

@@ -540,12 +540,23 @@ const runSingleRequest = async function (
// if `data` is of string type - return as-is (assumes already encoded)
}
if (contentTypeHeader && request.headers[contentTypeHeader] === 'multipart/form-data') {
if (contentTypeHeader && contentTypeHeader.startsWith('multipart/')) {
if (!isFormData(request?.data)) {
request._originalMultipartData = request.data;
request.collectionPath = collectionPath;
let form = createFormData(request.data, collectionPath);
request.data = form;
if (request?.headers?.['content-type'] !== 'multipart/form-data') {
// Patch: Axios leverages getHeaders method to get the headers so FormData should be monkey patched
const formHeaders = form.getHeaders();
const ct = request.headers['content-type'];
formHeaders['content-type'] = `${ct}; boundary=${form.getBoundary()}`;
form.getHeaders = function () {
return formHeaders;
};
}
extend(request.headers, form.getHeaders());
}
}