diff --git a/packages/bruno-electron/src/ipc/network/cert-utils.js b/packages/bruno-electron/src/ipc/network/cert-utils.js index 61038334c..e53cfbe8a 100644 --- a/packages/bruno-electron/src/ipc/network/cert-utils.js +++ b/packages/bruno-electron/src/ipc/network/cert-utils.js @@ -42,10 +42,17 @@ const getCertsAndProxyConfig = async ({ httpsAgentRequestFields['ca'] = caCertificates || []; const { promptVariables } = collection; + const collectionVariables = request.collectionVariables || {}; + const folderVariables = request.folderVariables || {}; + const requestVariables = request.requestVariables || {}; + const brunoConfig = getBrunoConfig(collectionUid, collection); const interpolationOptions = { globalEnvironmentVariables, + collectionVariables, envVars, + folderVariables, + requestVariables, runtimeVariables, promptVariables, processEnvVars diff --git a/packages/bruno-electron/src/ipc/network/grpc-event-handlers.js b/packages/bruno-electron/src/ipc/network/grpc-event-handlers.js index 5fc21ed0c..eaade42d1 100644 --- a/packages/bruno-electron/src/ipc/network/grpc-event-handlers.js +++ b/packages/bruno-electron/src/ipc/network/grpc-event-handlers.js @@ -34,14 +34,18 @@ const registerGrpcEventHandlers = (window) => { ipcMain.handle('grpc:start-connection', async (event, { request, collection, environment, runtimeVariables }) => { try { const requestCopy = cloneDeep(request); - const preparedRequest = await prepareGrpcRequest(requestCopy, collection, environment, runtimeVariables, {}); + const protocolRegex = /^([-+\w]{1,25})(:?\/\/|:)/; + if (!protocolRegex.test(preparedRequest.url)) { + preparedRequest.url = `http://${preparedRequest.url}`; + } + // Get certificates and proxy configuration const certsAndProxyConfig = await getCertsAndProxyConfig({ collectionUid: collection.uid, collection, - request: requestCopy.request, + request: preparedRequest, envVars: preparedRequest.envVars, runtimeVariables, processEnvVars: preparedRequest.processEnvVars, @@ -169,11 +173,16 @@ const registerGrpcEventHandlers = (window) => { const requestCopy = cloneDeep(request); const preparedRequest = await prepareGrpcRequest(requestCopy, collection, environment, runtimeVariables); + const protocolRegex = /^([-+\w]{1,25})(:?\/\/|:)/; + if (!protocolRegex.test(preparedRequest.url)) { + preparedRequest.url = `http://${preparedRequest.url}`; + } + // Get certificates and proxy configuration const certsAndProxyConfig = await getCertsAndProxyConfig({ collectionUid: collection.uid, collection, - request: requestCopy.request, + request: preparedRequest, envVars: preparedRequest.envVars, runtimeVariables, processEnvVars: preparedRequest.processEnvVars, @@ -274,6 +283,12 @@ const registerGrpcEventHandlers = (window) => { try { const requestCopy = cloneDeep(request); const preparedRequest = await prepareGrpcRequest(requestCopy, collection, environment, runtimeVariables, {}); + + const protocolRegex = /^([-+\w]{1,25})(:?\/\/|:)/; + if (!protocolRegex.test(preparedRequest.url)) { + preparedRequest.url = `http://${preparedRequest.url}`; + } + const interpolationOptions = { envVars: preparedRequest.envVars, runtimeVariables, diff --git a/packages/bruno-electron/src/ipc/network/index.js b/packages/bruno-electron/src/ipc/network/index.js index dbdb2b48b..72309aa95 100644 --- a/packages/bruno-electron/src/ipc/network/index.js +++ b/packages/bruno-electron/src/ipc/network/index.js @@ -109,7 +109,8 @@ const configureRequest = async ( globalEnvironmentVariables ) => { const protocolRegex = /^([-+\w]{1,25})(:?\/\/|:)/; - if (!protocolRegex.test(request.url)) { + const hasVariables = request.url.startsWith('{{'); + if (!hasVariables && !protocolRegex.test(request.url)) { request.url = `http://${request.url}`; } diff --git a/packages/bruno-electron/src/ipc/network/interpolate-string.js b/packages/bruno-electron/src/ipc/network/interpolate-string.js index 0b19249ef..f79a4e75e 100644 --- a/packages/bruno-electron/src/ipc/network/interpolate-string.js +++ b/packages/bruno-electron/src/ipc/network/interpolate-string.js @@ -1,7 +1,16 @@ const { forOwn, cloneDeep } = require('lodash'); const { interpolate } = require('@usebruno/common'); -const interpolateString = (str, { globalEnvironmentVariables, envVars, runtimeVariables, processEnvVars, promptVariables }) => { +const interpolateString = (str, { + globalEnvironmentVariables, + collectionVariables, + envVars, + folderVariables, + requestVariables, + runtimeVariables, + processEnvVars, + promptVariables +}) => { if (!str || !str.length || typeof str !== 'string') { return str; } @@ -9,6 +18,9 @@ const interpolateString = (str, { globalEnvironmentVariables, envVars, runtimeVa processEnvVars = processEnvVars || {}; runtimeVariables = runtimeVariables || {}; globalEnvironmentVariables = globalEnvironmentVariables || {}; + collectionVariables = collectionVariables || {}; + folderVariables = folderVariables || {}; + requestVariables = requestVariables || {}; promptVariables = promptVariables || {}; // we clone envVars because we don't want to modify the original object @@ -29,7 +41,10 @@ const interpolateString = (str, { globalEnvironmentVariables, envVars, runtimeVa // runtimeVariables take precedence over envVars const combinedVars = { ...globalEnvironmentVariables, + ...collectionVariables, ...envVars, + ...folderVariables, + ...requestVariables, ...runtimeVariables, ...promptVariables, process: {