openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
59 lines (58 loc) • 3.08 kB
JavaScript
//#region src/media/load-options.ts
/** Normalizes empty root lists while preserving the explicit all-roots opt-in sentinel. */
function resolveOutboundMediaLocalRoots(mediaLocalRoots) {
if (mediaLocalRoots === "any") return mediaLocalRoots;
return mediaLocalRoots && mediaLocalRoots.length > 0 ? mediaLocalRoots : void 0;
}
/** Collapses legacy read/root parameters into the current host media access shape. */
function resolveOutboundMediaAccess(params = {}) {
const resolvedLocalRoots = resolveOutboundMediaLocalRoots(params.mediaAccess?.localRoots ?? params.mediaLocalRoots);
const localRoots = resolvedLocalRoots === "any" ? void 0 : resolvedLocalRoots;
const readFile = params.mediaAccess?.readFile ?? params.mediaReadFile;
const workspaceDir = params.mediaAccess?.workspaceDir;
if (!localRoots && !readFile && !workspaceDir) return;
return {
...localRoots ? { localRoots } : {},
...readFile ? { readFile } : {},
...workspaceDir ? { workspaceDir } : {}
};
}
/** Builds the canonical media load options shared by outbound attachment paths. */
function buildOutboundMediaLoadOptions(params = {}) {
const explicitLocalRoots = resolveOutboundMediaLocalRoots(params.mediaLocalRoots);
const mediaAccess = resolveOutboundMediaAccess({
mediaAccess: params.mediaAccess,
mediaLocalRoots: explicitLocalRoots === "any" ? void 0 : explicitLocalRoots,
mediaReadFile: params.mediaAccess?.readFile ? void 0 : params.mediaReadFile
});
const workspaceDir = mediaAccess?.workspaceDir ?? params.workspaceDir;
const readFile = mediaAccess?.readFile ?? params.mediaReadFile;
const localRoots = mediaAccess?.localRoots ?? explicitLocalRoots;
if (readFile) {
if (!localRoots) throw new Error("Host media read requires explicit localRoots. Pass mediaAccess.localRoots or opt in with localRoots: \"any\".");
return {
...params.maxBytes !== void 0 ? { maxBytes: params.maxBytes } : {},
localRoots,
readFile,
...params.fetchImpl ? { fetchImpl: params.fetchImpl } : {},
...params.proxyUrl ? { proxyUrl: params.proxyUrl } : {},
...params.requestInit ? { requestInit: params.requestInit } : {},
...params.trustExplicitProxyDns !== void 0 ? { trustExplicitProxyDns: params.trustExplicitProxyDns } : {},
hostReadCapability: true,
...params.optimizeImages !== void 0 ? { optimizeImages: params.optimizeImages } : {},
...workspaceDir ? { workspaceDir } : {}
};
}
return {
...params.maxBytes !== void 0 ? { maxBytes: params.maxBytes } : {},
...localRoots ? { localRoots } : {},
...params.proxyUrl ? { proxyUrl: params.proxyUrl } : {},
...params.fetchImpl ? { fetchImpl: params.fetchImpl } : {},
...params.requestInit ? { requestInit: params.requestInit } : {},
...params.trustExplicitProxyDns !== void 0 ? { trustExplicitProxyDns: params.trustExplicitProxyDns } : {},
...params.optimizeImages !== void 0 ? { optimizeImages: params.optimizeImages } : {},
...workspaceDir ? { workspaceDir } : {}
};
}
//#endregion
export { resolveOutboundMediaAccess as n, resolveOutboundMediaLocalRoots as r, buildOutboundMediaLoadOptions as t };