From d1c62420bfc0ccff2eaba7e3948fe675eb6e2508 Mon Sep 17 00:00:00 2001 From: jack Date: Thu, 12 Mar 2026 16:59:10 +0000 Subject: [PATCH 1/2] fix(api-bridge): make proxy timeout configurable via env --- .env.example | 2 ++ src/lib/apiBridgeServer.ts | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index f136792e69..55d3ddc770 100644 --- a/.env.example +++ b/.env.example @@ -166,6 +166,8 @@ GEMINI_CLI_USER_AGENT=google-api-nodejs-client/9.15.1 # Timeout settings # FETCH_TIMEOUT_MS=120000 # STREAM_IDLE_TIMEOUT_MS=60000 +# API bridge timeout for /v1 proxy requests (default: 30000) +# API_BRIDGE_PROXY_TIMEOUT_MS=120000 # CORS configuration (default: * allows all origins) # CORS_ORIGINS=* diff --git a/src/lib/apiBridgeServer.ts b/src/lib/apiBridgeServer.ts index b8786ab081..8a00b1cd86 100644 --- a/src/lib/apiBridgeServer.ts +++ b/src/lib/apiBridgeServer.ts @@ -2,7 +2,7 @@ import http from "node:http"; import type { IncomingMessage, ServerResponse } from "node:http"; import { getRuntimePorts } from "@/lib/runtime/ports"; -const PROXY_TIMEOUT_MS = 30_000; // 30s timeout to prevent resource exhaustion +const PROXY_TIMEOUT_MS = Number(process.env.API_BRIDGE_PROXY_TIMEOUT_MS || "30000"); const OPENAI_COMPAT_PATHS = [ /^\/v1(?:\/|$)/, From 7f9ec724aea9ee9da8b73dc4e046e208c65214aa Mon Sep 17 00:00:00 2001 From: jack Date: Thu, 12 Mar 2026 17:02:30 +0000 Subject: [PATCH 2/2] fix(api-bridge): validate configured proxy timeout value --- src/lib/apiBridgeServer.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/lib/apiBridgeServer.ts b/src/lib/apiBridgeServer.ts index 8a00b1cd86..44e40591bb 100644 --- a/src/lib/apiBridgeServer.ts +++ b/src/lib/apiBridgeServer.ts @@ -2,7 +2,23 @@ import http from "node:http"; import type { IncomingMessage, ServerResponse } from "node:http"; import { getRuntimePorts } from "@/lib/runtime/ports"; -const PROXY_TIMEOUT_MS = Number(process.env.API_BRIDGE_PROXY_TIMEOUT_MS || "30000"); +const DEFAULT_PROXY_TIMEOUT_MS = 30_000; + +function parseProxyTimeoutMs(raw: string | undefined): number { + if (raw == null || raw.trim() === "") return DEFAULT_PROXY_TIMEOUT_MS; + const parsed = Number(raw); + + if (!Number.isFinite(parsed) || parsed <= 0) { + console.warn( + `[API Bridge] Invalid API_BRIDGE_PROXY_TIMEOUT_MS=\"${raw}\". Using default ${DEFAULT_PROXY_TIMEOUT_MS}ms.` + ); + return DEFAULT_PROXY_TIMEOUT_MS; + } + + return Math.floor(parsed); +} + +const PROXY_TIMEOUT_MS = parseProxyTimeoutMs(process.env.API_BRIDGE_PROXY_TIMEOUT_MS); const OPENAI_COMPAT_PATHS = [ /^\/v1(?:\/|$)/,