import type { Clock } from "../../domain/port/Clock.js"; import type { IdGenerator } from "../../domain/port/IdGenerator.js"; import type { PendingUploadRepository } from "../../domain/port/PendingUploadRepository.js"; import type { MediaStorage } from "../../domain/port/MediaStorage.js"; import type { SiteConfigRepository } from "../../domain/port/SiteConfigRepository.js"; import type { CreateMediaUploadRequest, CreateMediaUploadResponse } from "../dto/media/index.js"; /** * Issue PUT upload capabilities for every variant the agent * declares for one logical media asset (#272). The asset's `id` is * minted here and surfaces as `uploadGroupId` in the response — the * caller passes it back to `commit_media_upload`. * * Optimization runs agent-side in the MCP client's runtime. This * use case enforces policy only — never transforms bytes: * - purpose must be declared in `siteDefaults.media.purposes` * - variants must cover every required mime for that purpose * - each variant's byteSize ≤ `policy.maxBytes[mime]` * - mime allowlist (still gates per variant; SVG opt-in via ctor) * - "suspicious shape" heuristic: modern formats (avif / webp) MUST * NOT be larger than the fallback (jpeg) — uploader skipped * optimization → hard fail rather than emit a `` slower * than the bare ``. */ export declare class CreateMediaUploadUseCase { private readonly storage; private readonly pendingUploads; private readonly clock; private readonly idgen; private readonly siteConfig; private readonly opts; constructor(storage: MediaStorage, pendingUploads: PendingUploadRepository, clock: Clock, idgen: IdGenerator, siteConfig: SiteConfigRepository, opts?: { readonly allowSvg: boolean; }); execute(request: CreateMediaUploadRequest): Promise; private assertVariantsCoverPolicy; /** Enforce per-mime byte caps from the purpose policy BEFORE the * adapter issues PUT URLs. Mantle docs / ADR-0017 * promise this gate at create time — without it, oversized * variants only fail after R2 has accepted the bytes (wasted * upload + potential bill). * * Also gates on positive-integer byteSize. JSON-RPC and HTTP * validation only narrow to `typeof === "number"`, so 0, -1, or * 0.5 can reach here and produce upload URLs against a maxBytes * comparison that accepts them. */ private assertVariantSizesUnderCap; private assertEachVariantAccepted; private assertNoSuspiciousSizing; } //# sourceMappingURL=CreateMediaUploadUseCase.d.ts.map