






















@@ -3,6 +3,7 @@ import {
33isDebugProxyGlobalFetchPatchInstalled,
44} from "openclaw/plugin-sdk/proxy-capture";
55import { extractProviderErrorDetail, trimToUndefined } from "openclaw/plugin-sdk/speech";
6+import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
6778export const DEFAULT_OPENAI_BASE_URL = "https://api.openai.com/v1";
89@@ -106,40 +107,49 @@ export async function openaiTTS(params: {
106107 ...(speed != null && { speed }),
107108 ...(effectiveInstructions != null && { instructions: effectiveInstructions }),
108109});
109-const response = await fetch(`${baseUrl}/audio/speech`, {
110-method: "POST",
111-headers: requestHeaders,
112-body: requestBody,
113-signal: controller.signal,
114-});
115-if (!isDebugProxyGlobalFetchPatchInstalled()) {
116-captureHttpExchange({
117-url: `${baseUrl}/audio/speech`,
110+const requestUrl = `${baseUrl}/audio/speech`;
111+const { response, release } = await fetchWithSsrFGuard({
112+url: requestUrl,
113+init: {
118114method: "POST",
119- requestHeaders,
120- requestBody,
121- response,
122-transport: "http",
123-meta: {
124-provider: "openai",
125-capability: "tts",
126-},
127-});
128-}
129-130-if (!response.ok) {
131-const detail = await extractOpenAiErrorDetail(response);
132-const requestId =
133-trimToUndefined(response.headers.get("x-request-id")) ??
134-trimToUndefined(response.headers.get("request-id"));
135-throw new Error(
136-`OpenAI TTS API error (${response.status})` +
137-(detail ? `: ${detail}` : "") +
138-(requestId ? ` [request_id=${requestId}]` : ""),
139-);
115+headers: requestHeaders,
116+body: requestBody,
117+signal: controller.signal,
118+},
119+auditContext: "openai-tts",
120+});
121+try {
122+if (!isDebugProxyGlobalFetchPatchInstalled()) {
123+captureHttpExchange({
124+url: requestUrl,
125+method: "POST",
126+ requestHeaders,
127+ requestBody,
128+ response,
129+transport: "http",
130+meta: {
131+provider: "openai",
132+capability: "tts",
133+},
134+});
135+}
136+137+if (!response.ok) {
138+const detail = await extractOpenAiErrorDetail(response);
139+const requestId =
140+trimToUndefined(response.headers.get("x-request-id")) ??
141+trimToUndefined(response.headers.get("request-id"));
142+throw new Error(
143+`OpenAI TTS API error (${response.status})` +
144+(detail ? `: ${detail}` : "") +
145+(requestId ? ` [request_id=${requestId}]` : ""),
146+);
147+}
148+149+return Buffer.from(await response.arrayBuffer());
150+} finally {
151+await release();
140152}
141-142-return Buffer.from(await response.arrayBuffer());
143153} finally {
144154clearTimeout(timeout);
145155}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。