feat: moved prepare request logic to electron

This commit is contained in:
Anoop M D
2023-01-24 19:34:06 +05:30
parent 1ec24d1138
commit 3d63db806d
6 changed files with 111 additions and 104 deletions

View File

@@ -1,13 +1,8 @@
import get from 'lodash/get';
import each from 'lodash/each';
import filter from 'lodash/filter';
import qs from 'qs';
export const sendNetworkRequest = async (item, options, onRequestSent) => {
export const sendNetworkRequest = async (item, collectionUid) => {
return new Promise((resolve, reject) => {
if (['http-request', 'graphql-request'].includes(item.type)) {
const timeStart = Date.now();
sendHttpRequest(item.draft ? item.draft.request : item.request, options, onRequestSent)
sendHttpRequest(item, collectionUid)
.then((response) => {
const timeEnd = Date.now();
resolve({
@@ -25,76 +20,12 @@ export const sendNetworkRequest = async (item, options, onRequestSent) => {
});
};
const sendHttpRequest = async (request, options, onRequestSent) => {
const sendHttpRequest = async (item, collectionUid) => {
return new Promise((resolve, reject) => {
const { ipcRenderer } = window;
const headers = {};
each(request.headers, (h) => {
if (h.enabled) {
headers[h.name] = h.value;
}
});
let axiosRequest = {
method: request.method,
url: request.url,
headers: headers
};
if (request.body.mode === 'json') {
axiosRequest.headers['content-type'] = 'application/json';
try {
axiosRequest.data = JSON.parse(request.body.json);
} catch (ex) {
axiosRequest.data = request.body.json;
}
}
if (request.body.mode === 'text') {
axiosRequest.headers['content-type'] = 'text/plain';
axiosRequest.data = request.body.text;
}
if (request.body.mode === 'xml') {
axiosRequest.headers['content-type'] = 'text/xml';
axiosRequest.data = request.body.xml;
}
if (request.body.mode === 'formUrlEncoded') {
axiosRequest.headers['content-type'] = 'application/x-www-form-urlencoded';
const params = {};
const enabledParams = filter(request.body.formUrlEncoded, (p) => p.enabled);
each(enabledParams, (p) => (params[p.name] = p.value));
axiosRequest.data = qs.stringify(params);
}
if (request.body.mode === 'multipartForm') {
const params = {};
const enabledParams = filter(request.body.multipartForm, (p) => p.enabled);
each(enabledParams, (p) => (params[p.name] = p.value));
axiosRequest.headers['content-type'] = 'multipart/form-data';
axiosRequest.data = params;
}
if (request.body.mode === 'graphql') {
const graphqlQuery = {
query: get(request, 'body.graphql.query'),
variables: JSON.parse(get(request, 'body.graphql.variables') || '{}')
};
axiosRequest.headers['content-type'] = 'application/json';
axiosRequest.data = graphqlQuery;
}
if (request.script && request.script.length) {
axiosRequest.script = request.script;
}
console.log(axiosRequest);
onRequestSent(axiosRequest);
ipcRenderer
.invoke('send-http-request', axiosRequest, options)
.invoke('send-http-request', item, collectionUid)
.then(resolve)
.catch(reject);
});