mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 08:20:43 +00:00
fix(google): guard veo video downloads
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user