fix(google): guard veo video downloads

This commit is contained in:
Peter Steinberger
2026-04-25 11:12:40 +01:00
parent 978f869fcd
commit b5a1b7d44d
2 changed files with 24 additions and 15 deletions

View File

@@ -180,7 +180,9 @@ describe("google video generation provider", () => {
durationSeconds: 3,
});
expect(fetchMock).toHaveBeenCalledWith(
expect(fetchMock).toHaveBeenCalledTimes(1);
const [[downloadUrl]] = fetchMock.mock.calls as unknown as [[string, RequestInit?]];
expect(downloadUrl).toBe(
"https://generativelanguage.googleapis.com/v1beta/files/generated-video:download?alt=media&key=google-key",
);
expect(downloadMock).not.toHaveBeenCalled();

View File

@@ -6,6 +6,7 @@ import {
resolveProviderOperationTimeoutMs,
waitProviderOperationPollInterval,
} from "openclaw/plugin-sdk/provider-http";
import { fetchWithSsrFGuard } from "openclaw/plugin-sdk/ssrf-runtime";
import { resolvePreferredOpenClawTmpDir } from "openclaw/plugin-sdk/temp-path";
import { normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
import type {
@@ -223,21 +224,27 @@ async function downloadGeneratedVideoFromUri(params: {
if (!downloadUrl) {
return undefined;
}
const response = await fetch(downloadUrl);
if (!response.ok) {
throw new Error(
`Failed to download Google generated video: ${response.status} ${response.statusText}`,
);
const { response, release } = await fetchWithSsrFGuard({
url: downloadUrl,
});
try {
if (!response.ok) {
throw new Error(
`Failed to download Google generated video: ${response.status} ${response.statusText}`,
);
}
const buffer = Buffer.from(await response.arrayBuffer());
return {
buffer,
mimeType:
normalizeOptionalString(response.headers.get("content-type")) ||
normalizeOptionalString(params.mimeType) ||
"video/mp4",
fileName: `video-${params.index + 1}.mp4`,
};
} finally {
await release();
}
const buffer = Buffer.from(await response.arrayBuffer());
return {
buffer,
mimeType:
normalizeOptionalString(response.headers.get("content-type")) ||
normalizeOptionalString(params.mimeType) ||
"video/mp4",
fileName: `video-${params.index + 1}.mp4`,
};
}
function extractGoogleApiErrorCode(error: unknown): number | undefined {