refactor: centralize delivery/path/media/version lifecycle

This commit is contained in:
Peter Steinberger
2026-03-02 04:04:02 +00:00
parent f4f094fc3b
commit c0bf42f2a8
19 changed files with 616 additions and 152 deletions

View File

@@ -234,6 +234,8 @@ export {
sendMediaWithLeadingCaption,
} from "./reply-payload.js";
export type { OutboundReplyPayload } from "./reply-payload.js";
export type { OutboundMediaLoadOptions } from "./outbound-media.js";
export { loadOutboundMediaFromUrl } from "./outbound-media.js";
export { resolveChannelAccountConfigBasePath } from "./config-paths.js";
export { buildMediaPayload } from "../channels/plugins/media-payload.js";
export type { MediaPayload, MediaPayloadInput } from "../channels/plugins/media-payload.js";

View File

@@ -0,0 +1,43 @@
import { describe, expect, it, vi } from "vitest";
import { loadOutboundMediaFromUrl } from "./outbound-media.js";
const loadWebMediaMock = vi.hoisted(() => vi.fn());
vi.mock("../web/media.js", () => ({
loadWebMedia: loadWebMediaMock,
}));
describe("loadOutboundMediaFromUrl", () => {
it("forwards maxBytes and mediaLocalRoots to loadWebMedia", async () => {
loadWebMediaMock.mockResolvedValueOnce({
buffer: Buffer.from("x"),
kind: "image",
contentType: "image/png",
});
await loadOutboundMediaFromUrl("file:///tmp/image.png", {
maxBytes: 1024,
mediaLocalRoots: ["/tmp/workspace-agent"],
});
expect(loadWebMediaMock).toHaveBeenCalledWith("file:///tmp/image.png", {
maxBytes: 1024,
localRoots: ["/tmp/workspace-agent"],
});
});
it("keeps options optional", async () => {
loadWebMediaMock.mockResolvedValueOnce({
buffer: Buffer.from("x"),
kind: "image",
contentType: "image/png",
});
await loadOutboundMediaFromUrl("https://example.com/image.png");
expect(loadWebMediaMock).toHaveBeenCalledWith("https://example.com/image.png", {
maxBytes: undefined,
localRoots: undefined,
});
});
});

View File

@@ -0,0 +1,16 @@
import { loadWebMedia } from "../web/media.js";
export type OutboundMediaLoadOptions = {
maxBytes?: number;
mediaLocalRoots?: readonly string[];
};
export async function loadOutboundMediaFromUrl(
mediaUrl: string,
options: OutboundMediaLoadOptions = {},
) {
return await loadWebMedia(mediaUrl, {
maxBytes: options.maxBytes,
localRoots: options.mediaLocalRoots,
});
}