/**
 * Batch signed-URL types (D0033 / W0052 M3).
 *
 * Contract shared between the API Gateway and Studio for the two batch
 * endpoints that amortise signing over many artifacts in a single round-trip:
 *
 *   POST /v1/runs/:runId/artifacts/batch/read-urls
 *   POST /v1/runs/:runId/artifacts/batch/upload-urls
 *
 * The batch shape is intentionally symmetric: request carries the set of
 * artifact types and (for per-entry layouts) the entry keys; response carries
 * signed URLs keyed by type and entry key. For bulk layouts the response key
 * is the empty string, since bulk artifacts have no entry dimension.
 *
 * Validation is all-or-nothing per AC 4 — a single malformed entry key, an
 * unknown artifact type, or a missing keys list for a per-entry type causes
 * the whole request to 400 with zero signed URLs emitted.
 *
 * @see docs/design-docs/unified-run-artifacts.md § M3
 * @see docs/decisions/D0033-unified-run-anchored-artifact-capture.md
 */
import type { ArtifactType } from "./artifact-registry.js";
/** The empty entry-key sentinel used for bulk responses. */
export declare const BULK_ENTRY_KEY: "";
/**
 * Batch request body.
 *
 * - `types` — the artifact types to sign. Must be non-empty. Unknown types
 *   cause a 400.
 * - `keys` — per-type arrays of entry keys. Required for per-entry layouts;
 *   omitted (or an empty array) for bulk layouts. Extra keys for a bulk type
 *   are rejected; missing keys for a per-entry type are rejected.
 */
export interface BatchSignRequest {
    readonly types: readonly ArtifactType[];
    readonly keys?: Partial<Record<ArtifactType, readonly string[]>>;
}
/** One signed read URL in a batch read response. */
export interface BatchSignedReadUrl {
    readonly url: string;
    readonly path: string;
    readonly expiresIn: number;
}
/** One signed upload URL in a batch upload response. */
export interface BatchSignedUploadUrl {
    readonly url: string;
    readonly method: "PUT";
    readonly path: string;
    readonly expiresIn: number;
    readonly requiredHeaders: Readonly<Record<string, string>>;
}
/**
 * Batch response. Outer map is keyed by artifact type; inner map is keyed by
 * entry key (empty string for bulk layouts). All types requested in the
 * request body are present in the response, even when `keys[type]` was empty.
 */
export interface BatchSignReadResponse {
    readonly bucket: string;
    readonly urls: Partial<Record<ArtifactType, Readonly<Record<string, BatchSignedReadUrl>>>>;
}
export interface BatchSignUploadResponse {
    readonly bucket: string;
    readonly urls: Partial<Record<ArtifactType, Readonly<Record<string, BatchSignedUploadUrl>>>>;
}
