mirror of
https://github.com/usebruno/bruno.git
synced 2025-06-25 14:31:44 +02:00
chore: consolidate prerequest-related code
This commit is contained in:
parent
f8f38802a9
commit
c2bdddaa59
@ -189,13 +189,6 @@ const parseDataFromResponse = (response) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const registerNetworkIpc = (mainWindow) => {
|
const registerNetworkIpc = (mainWindow) => {
|
||||||
// handler for sending http request
|
|
||||||
ipcMain.handle('send-http-request', async (event, item, collection, environment, collectionVariables) => {
|
|
||||||
const collectionUid = collection.uid;
|
|
||||||
const collectionPath = collection.pathname;
|
|
||||||
const cancelTokenUid = uuid();
|
|
||||||
const requestUid = uuid();
|
|
||||||
|
|
||||||
const onConsoleLog = (type, args) => {
|
const onConsoleLog = (type, args) => {
|
||||||
console[type](...args);
|
console[type](...args);
|
||||||
|
|
||||||
@ -205,38 +198,17 @@ const registerNetworkIpc = (mainWindow) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
mainWindow.webContents.send('main:run-request-event', {
|
const runPreRequest = async (
|
||||||
type: 'request-queued',
|
request,
|
||||||
requestUid,
|
requestUid,
|
||||||
|
envVars,
|
||||||
|
collectionPath,
|
||||||
|
collectionRoot,
|
||||||
collectionUid,
|
collectionUid,
|
||||||
itemUid: item.uid,
|
collectionVariables,
|
||||||
cancelTokenUid
|
processEnvVars,
|
||||||
});
|
scriptingConfig
|
||||||
|
) => {
|
||||||
const collectionRoot = get(collection, 'root', {});
|
|
||||||
const _request = item.draft ? item.draft.request : item.request;
|
|
||||||
const request = prepareRequest(_request, collectionRoot);
|
|
||||||
const envVars = getEnvVars(environment);
|
|
||||||
const processEnvVars = getProcessEnvVars(collectionUid);
|
|
||||||
const brunoConfig = getBrunoConfig(collectionUid);
|
|
||||||
const scriptingConfig = get(brunoConfig, 'scripts', {});
|
|
||||||
|
|
||||||
try {
|
|
||||||
// make axios work in node using form data
|
|
||||||
// reference: https://github.com/axios/axios/issues/1006#issuecomment-320165427
|
|
||||||
if (request.headers && request.headers['content-type'] === 'multipart/form-data') {
|
|
||||||
const form = new FormData();
|
|
||||||
forOwn(request.data, (value, key) => {
|
|
||||||
form.append(key, value);
|
|
||||||
});
|
|
||||||
extend(request.headers, form.getHeaders());
|
|
||||||
request.data = form;
|
|
||||||
}
|
|
||||||
|
|
||||||
const cancelToken = axios.CancelToken.source();
|
|
||||||
request.cancelToken = cancelToken.token;
|
|
||||||
saveCancelToken(cancelTokenUid, cancelToken);
|
|
||||||
|
|
||||||
// run pre-request vars
|
// run pre-request vars
|
||||||
const preRequestVars = get(request, 'vars.req', []);
|
const preRequestVars = get(request, 'vars.req', []);
|
||||||
if (preRequestVars?.length) {
|
if (preRequestVars?.length) {
|
||||||
@ -261,9 +233,7 @@ const registerNetworkIpc = (mainWindow) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// run pre-request script
|
// run pre-request script
|
||||||
const requestScript = compact([get(collectionRoot, 'request.script.req'), get(request, 'script.req')]).join(
|
const requestScript = compact([get(collectionRoot, 'request.script.req'), get(request, 'script.req')]).join(os.EOL);
|
||||||
os.EOL
|
|
||||||
);
|
|
||||||
if (requestScript?.length) {
|
if (requestScript?.length) {
|
||||||
const scriptRuntime = new ScriptRuntime();
|
const scriptRuntime = new ScriptRuntime();
|
||||||
const result = await scriptRuntime.runRequestScript(
|
const result = await scriptRuntime.runRequestScript(
|
||||||
@ -285,12 +255,54 @@ const registerNetworkIpc = (mainWindow) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// interpolate variables inside request
|
||||||
interpolateVars(request, envVars, collectionVariables, processEnvVars);
|
interpolateVars(request, envVars, collectionVariables, processEnvVars);
|
||||||
|
|
||||||
// stringify the request url encoded params
|
// stringify the request url encoded params
|
||||||
if (request.headers['content-type'] === 'application/x-www-form-urlencoded') {
|
if (request.headers['content-type'] === 'application/x-www-form-urlencoded') {
|
||||||
request.data = qs.stringify(request.data);
|
request.data = qs.stringify(request.data);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// handler for sending http request
|
||||||
|
ipcMain.handle('send-http-request', async (event, item, collection, environment, collectionVariables) => {
|
||||||
|
const collectionUid = collection.uid;
|
||||||
|
const collectionPath = collection.pathname;
|
||||||
|
const cancelTokenUid = uuid();
|
||||||
|
const requestUid = uuid();
|
||||||
|
|
||||||
|
mainWindow.webContents.send('main:run-request-event', {
|
||||||
|
type: 'request-queued',
|
||||||
|
requestUid,
|
||||||
|
collectionUid,
|
||||||
|
itemUid: item.uid,
|
||||||
|
cancelTokenUid
|
||||||
|
});
|
||||||
|
|
||||||
|
const collectionRoot = get(collection, 'root', {});
|
||||||
|
const _request = item.draft ? item.draft.request : item.request;
|
||||||
|
const request = prepareRequest(_request, collectionRoot);
|
||||||
|
const envVars = getEnvVars(environment);
|
||||||
|
const processEnvVars = getProcessEnvVars(collectionUid);
|
||||||
|
const brunoConfig = getBrunoConfig(collectionUid);
|
||||||
|
const scriptingConfig = get(brunoConfig, 'scripts', {});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const cancelToken = axios.CancelToken.source();
|
||||||
|
request.cancelToken = cancelToken.token;
|
||||||
|
saveCancelToken(cancelTokenUid, cancelToken);
|
||||||
|
|
||||||
|
await runPreRequest(
|
||||||
|
request,
|
||||||
|
requestUid,
|
||||||
|
envVars,
|
||||||
|
collectionPath,
|
||||||
|
collectionRoot,
|
||||||
|
collectionUid,
|
||||||
|
collectionVariables,
|
||||||
|
processEnvVars,
|
||||||
|
scriptingConfig
|
||||||
|
);
|
||||||
|
|
||||||
// todo:
|
// todo:
|
||||||
// i have no clue why electron can't send the request object
|
// i have no clue why electron can't send the request object
|
||||||
@ -544,15 +556,6 @@ const registerNetworkIpc = (mainWindow) => {
|
|||||||
const scriptingConfig = get(brunoConfig, 'scripts', {});
|
const scriptingConfig = get(brunoConfig, 'scripts', {});
|
||||||
const collectionRoot = get(collection, 'root', {});
|
const collectionRoot = get(collection, 'root', {});
|
||||||
|
|
||||||
const onConsoleLog = (type, args) => {
|
|
||||||
console[type](...args);
|
|
||||||
|
|
||||||
mainWindow.webContents.send('main:console-log', {
|
|
||||||
type,
|
|
||||||
args
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!folder) {
|
if (!folder) {
|
||||||
folder = collection;
|
folder = collection;
|
||||||
}
|
}
|
||||||
@ -602,68 +605,22 @@ const registerNetworkIpc = (mainWindow) => {
|
|||||||
|
|
||||||
const _request = item.draft ? item.draft.request : item.request;
|
const _request = item.draft ? item.draft.request : item.request;
|
||||||
const request = prepareRequest(_request, collectionRoot);
|
const request = prepareRequest(_request, collectionRoot);
|
||||||
|
const requestUid = uuid();
|
||||||
const processEnvVars = getProcessEnvVars(collectionUid);
|
const processEnvVars = getProcessEnvVars(collectionUid);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// make axios work in node using form data
|
await runPreRequest(
|
||||||
// reference: https://github.com/axios/axios/issues/1006#issuecomment-320165427
|
|
||||||
if (request.headers && request.headers['content-type'] === 'multipart/form-data') {
|
|
||||||
const form = new FormData();
|
|
||||||
forOwn(request.data, (value, key) => {
|
|
||||||
form.append(key, value);
|
|
||||||
});
|
|
||||||
extend(request.headers, form.getHeaders());
|
|
||||||
request.data = form;
|
|
||||||
}
|
|
||||||
|
|
||||||
// run pre-request vars
|
|
||||||
const preRequestVars = get(request, 'vars.req', []);
|
|
||||||
if (preRequestVars && preRequestVars.length) {
|
|
||||||
const varsRuntime = new VarsRuntime();
|
|
||||||
const result = varsRuntime.runPreRequestVars(
|
|
||||||
preRequestVars,
|
|
||||||
request,
|
request,
|
||||||
|
requestUid,
|
||||||
envVars,
|
envVars,
|
||||||
collectionVariables,
|
|
||||||
collectionPath
|
|
||||||
);
|
|
||||||
|
|
||||||
if (result) {
|
|
||||||
mainWindow.webContents.send('main:script-environment-update', {
|
|
||||||
envVariables: result.envVariables,
|
|
||||||
collectionVariables: result.collectionVariables,
|
|
||||||
collectionUid
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// run pre-request script
|
|
||||||
const requestScript = compact([get(collectionRoot, 'request.script.req'), get(request, 'script.req')]).join(
|
|
||||||
os.EOL
|
|
||||||
);
|
|
||||||
if (requestScript?.length) {
|
|
||||||
const scriptRuntime = new ScriptRuntime();
|
|
||||||
const result = await scriptRuntime.runRequestScript(
|
|
||||||
decomment(requestScript),
|
|
||||||
request,
|
|
||||||
envVars,
|
|
||||||
collectionVariables,
|
|
||||||
collectionPath,
|
collectionPath,
|
||||||
onConsoleLog,
|
collectionRoot,
|
||||||
|
collectionUid,
|
||||||
|
collectionVariables,
|
||||||
processEnvVars,
|
processEnvVars,
|
||||||
scriptingConfig
|
scriptingConfig
|
||||||
);
|
);
|
||||||
|
|
||||||
mainWindow.webContents.send('main:script-environment-update', {
|
|
||||||
envVariables: result.envVariables,
|
|
||||||
collectionVariables: result.collectionVariables,
|
|
||||||
collectionUid
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// interpolate variables inside request
|
|
||||||
interpolateVars(request, envVars, collectionVariables, processEnvVars);
|
|
||||||
|
|
||||||
// todo:
|
// todo:
|
||||||
// i have no clue why electron can't send the request object
|
// i have no clue why electron can't send the request object
|
||||||
// without safeParseJSON(safeStringifyJSON(request.data))
|
// without safeParseJSON(safeStringifyJSON(request.data))
|
||||||
|
@ -137,6 +137,15 @@ const prepareRequest = (request, collectionRoot) => {
|
|||||||
each(enabledParams, (p) => (params[p.name] = p.value));
|
each(enabledParams, (p) => (params[p.name] = p.value));
|
||||||
axiosRequest.headers['content-type'] = 'multipart/form-data';
|
axiosRequest.headers['content-type'] = 'multipart/form-data';
|
||||||
axiosRequest.data = params;
|
axiosRequest.data = params;
|
||||||
|
|
||||||
|
// make axios work in node using form data
|
||||||
|
// reference: https://github.com/axios/axios/issues/1006#issuecomment-320165427
|
||||||
|
const form = new FormData();
|
||||||
|
forOwn(axiosRequest.data, (value, key) => {
|
||||||
|
form.append(key, value);
|
||||||
|
});
|
||||||
|
extend(axiosRequest.headers, form.getHeaders());
|
||||||
|
axiosRequest.data = form;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.body.mode === 'graphql') {
|
if (request.body.mode === 'graphql') {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user