From b87a02beb365184398a3bc8e7de6c1674219fb59 Mon Sep 17 00:00:00 2001 From: Pragadesh-45 Date: Thu, 4 Dec 2025 14:30:50 +0545 Subject: [PATCH] feat: Streamline gRPC requests to use right context --- .../src/ipc/network/cert-utils.js | 7 +++++++ .../src/ipc/network/grpc-event-handlers.js | 21 ++++++++++++++++--- .../bruno-electron/src/ipc/network/index.js | 3 ++- .../src/ipc/network/interpolate-string.js | 17 ++++++++++++++- 4 files changed, 43 insertions(+), 5 deletions(-) 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 030937b96..ac5cd0707 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: {