From ee890bc304fca77a75666f7e8643e2b73bc6171e Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 7 Feb 2026 20:29:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=84=B1=E6=95=8F=E7=8E=AF=E7=A7=91Gemini?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=B8=AD=E7=9A=84API=E5=AF=86=E9=92=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ai/providers/huanke-gemini.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/ai/providers/huanke-gemini.ts b/lib/ai/providers/huanke-gemini.ts index 5696a68..185a7a0 100644 --- a/lib/ai/providers/huanke-gemini.ts +++ b/lib/ai/providers/huanke-gemini.ts @@ -7,6 +7,17 @@ interface HuankeGeminiConfig { baseURL: string; } +function redactSecrets(text: string, secrets: string[] = []) { + let output = text; + for (const secret of secrets) { + if (!secret) continue; + output = output.split(secret).join("***"); + } + output = output.replace(/([?&]key=)[^&\s"']+/gi, "$1***"); + output = output.replace(/("apiKey"\s*:\s*")[^"]+(")/gi, "$1***$2"); + return output; +} + /** * 压缩图片生成缩略图(使用 sharp) */ @@ -379,7 +390,7 @@ async function sendHuankeGeminiRequest( // 例如: https://api.example.com/v1beta/models/gemini-3-pro-image-preview-4k:generateContent const url = `${baseURL}/v1beta/models/${modelId}:generateContent?key=${apiKey}`; - console.log("[Huanke Gemini] Sending request to:", url.replace(apiKey, "***")); + console.log("[Huanke Gemini] Sending request to:", redactSecrets(url, [apiKey])); console.log("[Huanke Gemini] Using model:", modelId); console.log("[Huanke Gemini] Image params:", imageParams); @@ -525,7 +536,7 @@ async function sendHuankeGeminiRequest( clearTimeout(timeoutId); if (!response.ok) { - const errorText = await response.text(); + const errorText = redactSecrets(await response.text(), [apiKey]); console.error("[Huanke Gemini] Request failed:", response.status, errorText); throw new Error( `Huanke Gemini API error: ${response.status} ${response.statusText} - ${errorText}`