From 276321de667a5262bb11c1dba9195bd8bc40140f Mon Sep 17 00:00:00 2001 From: notsapinho <52896767+notsapinho@users.noreply.github.com> Date: Fri, 21 Nov 2025 16:55:38 -0300 Subject: [PATCH] feat: support "http_proxy" channel option --- packages/grpc-js/src/channel-options.ts | 1 + packages/grpc-js/src/http_proxy.ts | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/grpc-js/src/channel-options.ts b/packages/grpc-js/src/channel-options.ts index 41bd26d4..f632d8f4 100644 --- a/packages/grpc-js/src/channel-options.ts +++ b/packages/grpc-js/src/channel-options.ts @@ -36,6 +36,7 @@ export interface ChannelOptions { 'grpc.max_send_message_length'?: number; 'grpc.max_receive_message_length'?: number; 'grpc.enable_http_proxy'?: number; + 'grpc.http_proxy'?: string; /* http_connect_target and http_connect_creds are used for passing data * around internally, and should not be documented as public-facing options */ diff --git a/packages/grpc-js/src/http_proxy.ts b/packages/grpc-js/src/http_proxy.ts index c40d207a..37c8cc2a 100644 --- a/packages/grpc-js/src/http_proxy.ts +++ b/packages/grpc-js/src/http_proxy.ts @@ -41,7 +41,7 @@ interface ProxyInfo { creds?: string; } -function getProxyInfo(): ProxyInfo { +function getProxyInfo(proxy?: string): ProxyInfo { let proxyEnv = ''; let envVar = ''; /* Prefer using 'grpc_proxy'. Fallback on 'http_proxy' if it is not set. @@ -57,6 +57,9 @@ function getProxyInfo(): ProxyInfo { } else if (process.env.http_proxy) { envVar = 'http_proxy'; proxyEnv = process.env.http_proxy; + } else if(proxy) { + envVar = 'proxy'; + proxyEnv = proxy } else { return {}; } @@ -190,7 +193,7 @@ export function mapProxyName( if (target.scheme === 'unix') { return noProxyResult; } - const proxyInfo = getProxyInfo(); + const proxyInfo = getProxyInfo(options['grpc.http_proxy']); if (!proxyInfo.address) { return noProxyResult; }