Skip to content

Commit af7797b

Browse files
committed
refactor(media): share error normalization helper
1 parent 80805ad commit af7797b

4 files changed

Lines changed: 8 additions & 62 deletions

File tree

src/media-generation/runtime-shared.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
} from "../config/model-input.js";
1616
import type { AgentModelConfig } from "../config/types.agents-shared.js";
1717
import type { OpenClawConfig } from "../config/types.js";
18-
import { formatErrorMessage } from "../infra/errors.js";
18+
import { formatErrorMessage, toErrorObject } from "../infra/errors.js";
1919
import { getProviderEnvVars as getDefaultProviderEnvVars } from "../secrets/provider-env-vars.js";
2020

2121
// Shared media-generation runtime helpers for provider fallback, request
@@ -582,7 +582,7 @@ export function throwCapabilityGenerationFailure(params: {
582582
lastError: unknown;
583583
}): never {
584584
if (params.attempts.length <= 1 && params.lastError) {
585-
throw toLintErrorObject(params.lastError, "Non-Error thrown");
585+
throw toErrorObject(params.lastError, "Non-Error thrown");
586586
}
587587
const summary = formatCapabilityFailureAttempts(params.attempts);
588588
throw new Error(
@@ -663,17 +663,3 @@ export function buildNoCapabilityModelConfiguredMessage(params: {
663663
: "If you want a specific provider, also configure that provider's auth/API key first.",
664664
].join(" ");
665665
}
666-
667-
function toLintErrorObject(value: unknown, fallbackMessage: string): Error {
668-
if (value instanceof Error) {
669-
return value;
670-
}
671-
if (typeof value === "string") {
672-
return new Error(value);
673-
}
674-
const error = new Error(fallbackMessage, { cause: value });
675-
if ((typeof value === "object" && value !== null) || typeof value === "function") {
676-
Object.assign(error, value);
677-
}
678-
return error;
679-
}

src/media/fetch.ts

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
readResponseTextSnippet,
88
readResponseWithLimit,
99
} from "@openclaw/media-core/read-response-with-limit";
10-
import { formatErrorMessage } from "../infra/errors.js";
10+
import { formatErrorMessage, toErrorObject } from "../infra/errors.js";
1111
import {
1212
fetchWithSsrFGuard,
1313
withStrictGuardedFetchMode,
@@ -425,7 +425,7 @@ async function readChunkWithIdleTimeout(
425425
(err: unknown) => {
426426
clear();
427427
if (!timedOut) {
428-
reject(toLintErrorObject(err, "Non-Error rejection"));
428+
reject(toErrorObject(err, "Non-Error rejection"));
429429
}
430430
},
431431
);
@@ -700,17 +700,3 @@ async function readRemoteMediaBufferOnce(options: FetchMediaOptions): Promise<Fe
700700
}
701701
}
702702
}
703-
704-
function toLintErrorObject(value: unknown, fallbackMessage: string): Error {
705-
if (value instanceof Error) {
706-
return value;
707-
}
708-
if (typeof value === "string") {
709-
return new Error(value);
710-
}
711-
const error = new Error(fallbackMessage, { cause: value });
712-
if ((typeof value === "object" && value !== null) || typeof value === "function") {
713-
Object.assign(error, value);
714-
}
715-
return error;
716-
}

src/media/ffmpeg-exec.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { execFile, type ExecFileOptions } from "node:child_process";
33
import { promisify } from "node:util";
44
import { normalizeLowercaseStringOrEmpty } from "@openclaw/normalization-core/string-coerce";
5+
import { toErrorObject } from "../infra/errors.js";
56
import { resolveSystemBin } from "../infra/resolve-system-bin.js";
67
import {
78
MEDIA_FFMPEG_MAX_BUFFER_BYTES,
@@ -64,7 +65,7 @@ export async function runFfprobe(args: string[], options?: MediaExecOptions): Pr
6465
let stdinWriteError: Error | undefined;
6566
const proc = execFile(requireSystemBin("ffprobe"), args, execOptions, (err, stdout) => {
6667
if (err) {
67-
reject(toLintErrorObject(err, "Non-Error rejection"));
68+
reject(toErrorObject(err, "Non-Error rejection"));
6869
return;
6970
}
7071
if (stdinWriteError && !isBrokenPipeError(stdinWriteError)) {
@@ -118,17 +119,3 @@ export function parseFfprobeCodecAndSampleRate(stdout: string): {
118119
sampleRateHz: parseFfprobeSampleRateHz(sampleRateRaw),
119120
};
120121
}
121-
122-
function toLintErrorObject(value: unknown, fallbackMessage: string): Error {
123-
if (value instanceof Error) {
124-
return value;
125-
}
126-
if (typeof value === "string") {
127-
return new Error(value);
128-
}
129-
const error = new Error(fallbackMessage, { cause: value });
130-
if ((typeof value === "object" && value !== null) || typeof value === "function") {
131-
Object.assign(error, value);
132-
}
133-
return error;
134-
}

src/media/store.ts

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
} from "@openclaw/media-core/file-name";
1515
import { detectMime, extensionForMime } from "@openclaw/media-core/mime";
1616
import { normalizeOptionalString } from "@openclaw/normalization-core/string-coerce";
17+
import { toErrorObject } from "../infra/errors.js";
1718
import { fileStore } from "../infra/file-store.js";
1819
import { sanitizeUntrustedFileName } from "../infra/fs-safe-advanced.js";
1920
import { isPathInside } from "../infra/fs-safe.js";
@@ -305,7 +306,7 @@ async function downloadToFile(
305306
})
306307
.catch(async (err: unknown) => {
307308
await fs.rm(dest, { force: true }).catch(() => {});
308-
reject(toLintErrorObject(err, "Non-Error rejection"));
309+
reject(toErrorObject(err, "Non-Error rejection"));
309310
});
310311
});
311312
req.on("error", reject);
@@ -752,17 +753,3 @@ export async function deleteMediaBuffer(id: string, subdir = "inbound"): Promise
752753
const relativePath = resolveMediaRelativePath(id, subdir, "deleteMediaBuffer");
753754
await openMediaStore().remove(relativePath);
754755
}
755-
756-
function toLintErrorObject(value: unknown, fallbackMessage: string): Error {
757-
if (value instanceof Error) {
758-
return value;
759-
}
760-
if (typeof value === "string") {
761-
return new Error(value);
762-
}
763-
const error = new Error(fallbackMessage, { cause: value });
764-
if ((typeof value === "object" && value !== null) || typeof value === "function") {
765-
Object.assign(error, value);
766-
}
767-
return error;
768-
}

0 commit comments

Comments
 (0)