diff --git a/packages/bruno-app/src/pages/_app.js b/packages/bruno-app/src/pages/_app.js
index ab2692529..676129049 100644
--- a/packages/bruno-app/src/pages/_app.js
+++ b/packages/bruno-app/src/pages/_app.js
@@ -15,6 +15,7 @@ import 'tailwindcss/dist/tailwind.min.css';
import 'codemirror/lib/codemirror.css';
import 'graphiql/graphiql.min.css';
import 'react-tooltip/dist/react-tooltip.css';
+import '@usebruno/graphql-docs/dist/esm/index.css';
function SafeHydrate({ children }) {
return
{typeof window === 'undefined' ? null : children}
;
diff --git a/packages/bruno-cli/package.json b/packages/bruno-cli/package.json
index 4ba6edbd7..c5e213509 100644
--- a/packages/bruno-cli/package.json
+++ b/packages/bruno-cli/package.json
@@ -33,6 +33,8 @@
"form-data": "^4.0.0",
"fs-extra": "^10.1.0",
"handlebars": "^4.7.8",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.2",
"inquirer": "^9.1.4",
"lodash": "^4.17.21",
"mustache": "^4.2.0",
diff --git a/packages/bruno-cli/src/runner/run-single-request.js b/packages/bruno-cli/src/runner/run-single-request.js
index 457d3cff8..7497a53c4 100644
--- a/packages/bruno-cli/src/runner/run-single-request.js
+++ b/packages/bruno-cli/src/runner/run-single-request.js
@@ -4,13 +4,14 @@ const decomment = require('decomment');
const fs = require('fs');
const { forOwn, each, extend, get } = require('lodash');
const FormData = require('form-data');
-const axios = require('axios');
-const https = require('https');
const prepareRequest = require('./prepare-request');
const interpolateVars = require('./interpolate-vars');
const { ScriptRuntime, TestRuntime, VarsRuntime, AssertRuntime } = require('@usebruno/js');
const { stripExtension } = require('../utils/filesystem');
const { getOptions } = require('../utils/bru');
+const https = require('https');
+const { HttpsProxyAgent } = require('https-proxy-agent');
+const { HttpProxyAgent } = require('http-proxy-agent');
const { makeAxiosInstance } = require('../utils/axios-instance');
const runSingleRequest = async function (
@@ -67,31 +68,6 @@ const runSingleRequest = async function (
);
}
- // set proxy if enabled
- const proxyEnabled = get(brunoConfig, 'proxy.enabled', false);
- if (proxyEnabled) {
- const proxyProtocol = get(brunoConfig, 'proxy.protocol');
- const proxyHostname = get(brunoConfig, 'proxy.hostname');
- const proxyPort = get(brunoConfig, 'proxy.port');
- const proxyAuthEnabled = get(brunoConfig, 'proxy.auth.enabled', false);
-
- const proxyConfig = {
- protocol: proxyProtocol,
- hostname: proxyHostname,
- port: proxyPort
- };
- if (proxyAuthEnabled) {
- const proxyAuthUsername = get(brunoConfig, 'proxy.auth.username');
- const proxyAuthPassword = get(brunoConfig, 'proxy.auth.password');
- proxyConfig.auth = {
- username: proxyAuthUsername,
- password: proxyAuthPassword
- };
- }
-
- request.proxy = proxyConfig;
- }
-
// interpolate variables inside request
interpolateVars(request, envVariables, collectionVariables, processEnvVars);
@@ -113,7 +89,32 @@ const runSingleRequest = async function (
}
}
- if (Object.keys(httpsAgentRequestFields).length > 0) {
+ // set proxy if enabled
+ const proxyEnabled = get(brunoConfig, 'proxy.enabled', false);
+ if (proxyEnabled) {
+ const proxyProtocol = get(brunoConfig, 'proxy.protocol');
+ const proxyHostname = get(brunoConfig, 'proxy.hostname');
+ const proxyPort = get(brunoConfig, 'proxy.port');
+ const proxyAuthEnabled = get(brunoConfig, 'proxy.auth.enabled', false);
+
+ let proxy;
+
+ if (proxyAuthEnabled) {
+ const proxyAuthUsername = get(brunoConfig, 'proxy.auth.username');
+ const proxyAuthPassword = get(brunoConfig, 'proxy.auth.password');
+
+ proxy = `${proxyProtocol}://${proxyAuthUsername}:${proxyAuthPassword}@${proxyHostname}:${proxyPort}`;
+ } else {
+ proxy = `${proxyProtocol}://${proxyHostname}:${proxyPort}`;
+ }
+
+ request.httpsAgent = new HttpsProxyAgent(
+ proxy,
+ Object.keys(httpsAgentRequestFields).length > 0 ? { ...httpsAgentRequestFields } : undefined
+ );
+
+ request.httpAgent = new HttpProxyAgent(proxy);
+ } else if (Object.keys(httpsAgentRequestFields).length > 0) {
request.httpsAgent = new https.Agent({
...httpsAgentRequestFields
});
@@ -165,7 +166,10 @@ const runSingleRequest = async function (
}
}
- console.log(chalk.green(stripExtension(filename)) + chalk.dim(` (${response.status} ${response.statusText}) - ${responseTime} ms`));
+ console.log(
+ chalk.green(stripExtension(filename)) +
+ chalk.dim(` (${response.status} ${response.statusText}) - ${responseTime} ms`)
+ );
// run post-response vars
const postResponseVars = get(bruJson, 'request.vars.res');
diff --git a/packages/bruno-electron/package.json b/packages/bruno-electron/package.json
index f25fc7f7d..050e294bc 100644
--- a/packages/bruno-electron/package.json
+++ b/packages/bruno-electron/package.json
@@ -33,6 +33,7 @@
"fs-extra": "^10.1.0",
"graphql": "^16.6.0",
"handlebars": "^4.7.8",
+ "http-proxy-agent": "^7.0.0",
"https-proxy-agent": "^7.0.2",
"is-valid-path": "^0.1.1",
"lodash": "^4.17.21",
diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js
index 233f1550c..882776866 100644
--- a/packages/bruno-electron/src/ipc/network/index.js
+++ b/packages/bruno-electron/src/ipc/network/index.js
@@ -16,6 +16,8 @@ const { sortFolder, getAllRequestsInFolderRecursively } = require('./helper');
const { getPreferences } = require('../../store/preferences');
const { getProcessEnvVars } = require('../../store/process-env');
const { getBrunoConfig } = require('../../store/bruno-config');
+const { HttpsProxyAgent } = require('https-proxy-agent');
+const { HttpProxyAgent } = require('http-proxy-agent');
const { makeAxiosInstance } = require('./axios-instance');
const { addAwsV4Interceptor, resolveCredentials } = require('./awsv4auth-helper');
@@ -171,31 +173,6 @@ const registerNetworkIpc = (mainWindow) => {
});
}
- // proxy configuration
- const proxyEnabled = get(brunoConfig, 'proxy.enabled', false);
- if (proxyEnabled) {
- const proxyProtocol = get(brunoConfig, 'proxy.protocol');
- const proxyHostname = get(brunoConfig, 'proxy.hostname');
- const proxyPort = get(brunoConfig, 'proxy.port');
- const proxyAuthEnabled = get(brunoConfig, 'proxy.auth.enabled', false);
-
- const proxyConfig = {
- protocol: proxyProtocol,
- hostname: proxyHostname,
- port: proxyPort
- };
- if (proxyAuthEnabled) {
- const proxyAuthUsername = get(brunoConfig, 'proxy.auth.username');
- const proxyAuthPassword = get(brunoConfig, 'proxy.auth.password');
- proxyConfig.auth = {
- username: proxyAuthUsername,
- password: proxyAuthPassword
- };
- }
-
- request.proxy = proxyConfig;
- }
-
interpolateVars(request, envVars, collectionVariables, processEnvVars);
// stringify the request url encoded params
@@ -239,7 +216,33 @@ const registerNetworkIpc = (mainWindow) => {
}
}
- if (Object.keys(httpsAgentRequestFields).length > 0) {
+ // proxy configuration
+ const brunoConfig = getBrunoConfig(collectionUid);
+ const proxyEnabled = get(brunoConfig, 'proxy.enabled', false);
+ if (proxyEnabled) {
+ const proxyProtocol = get(brunoConfig, 'proxy.protocol');
+ const proxyHostname = get(brunoConfig, 'proxy.hostname');
+ const proxyPort = get(brunoConfig, 'proxy.port');
+ const proxyAuthEnabled = get(brunoConfig, 'proxy.auth.enabled', false);
+
+ let proxy;
+
+ if (proxyAuthEnabled) {
+ const proxyAuthUsername = get(brunoConfig, 'proxy.auth.username');
+ const proxyAuthPassword = get(brunoConfig, 'proxy.auth.password');
+
+ proxy = `${proxyProtocol}://${proxyAuthUsername}:${proxyAuthPassword}@${proxyHostname}:${proxyPort}`;
+ } else {
+ proxy = `${proxyProtocol}://${proxyHostname}:${proxyPort}`;
+ }
+
+ request.httpsAgent = new HttpsProxyAgent(
+ proxy,
+ Object.keys(httpsAgentRequestFields).length > 0 ? { ...httpsAgentRequestFields } : undefined
+ );
+
+ request.httpAgent = new HttpProxyAgent(proxy);
+ } else if (Object.keys(httpsAgentRequestFields).length > 0) {
request.httpsAgent = new https.Agent({
...httpsAgentRequestFields
});
@@ -628,31 +631,6 @@ const registerNetworkIpc = (mainWindow) => {
});
}
- // proxy configuration
- const proxyEnabled = get(brunoConfig, 'proxy.enabled', false);
- if (proxyEnabled) {
- const proxyProtocol = get(brunoConfig, 'proxy.protocol');
- const proxyHostname = get(brunoConfig, 'proxy.hostname');
- const proxyPort = get(brunoConfig, 'proxy.port');
- const proxyAuthEnabled = get(brunoConfig, 'proxy.auth.enabled', false);
-
- const proxyConfig = {
- protocol: proxyProtocol,
- hostname: proxyHostname,
- port: proxyPort
- };
- if (proxyAuthEnabled) {
- const proxyAuthUsername = get(brunoConfig, 'proxy.auth.username');
- const proxyAuthPassword = get(brunoConfig, 'proxy.auth.password');
- proxyConfig.auth = {
- username: proxyAuthUsername,
- password: proxyAuthPassword
- };
- }
-
- request.proxy = proxyConfig;
- }
-
// interpolate variables inside request
interpolateVars(request, envVars, collectionVariables, processEnvVars);
@@ -673,7 +651,32 @@ const registerNetworkIpc = (mainWindow) => {
const preferences = getPreferences();
const sslVerification = get(preferences, 'request.sslVerification', true);
- if (!sslVerification) {
+ // proxy configuration
+ const brunoConfig = getBrunoConfig(collectionUid);
+ const proxyEnabled = get(brunoConfig, 'proxy.enabled', false);
+ if (proxyEnabled) {
+ const proxyProtocol = get(brunoConfig, 'proxy.protocol');
+ const proxyHostname = get(brunoConfig, 'proxy.hostname');
+ const proxyPort = get(brunoConfig, 'proxy.port');
+ const proxyAuthEnabled = get(brunoConfig, 'proxy.auth.enabled', false);
+
+ let proxy;
+
+ if (proxyAuthEnabled) {
+ const proxyAuthUsername = get(brunoConfig, 'proxy.auth.username');
+ const proxyAuthPassword = get(brunoConfig, 'proxy.auth.password');
+
+ proxy = `${proxyProtocol}://${proxyAuthUsername}:${proxyAuthPassword}@${proxyHostname}:${proxyPort}`;
+ } else {
+ proxy = `${proxyProtocol}://${proxyHostname}:${proxyPort}`;
+ }
+
+ request.httpsAgent = new HttpsProxyAgent(proxy, {
+ rejectUnauthorized: sslVerification
+ });
+
+ request.httpAgent = new HttpProxyAgent(proxy);
+ } else if (!sslVerification) {
request.httpsAgent = new https.Agent({
rejectUnauthorized: false
});