import type { ConfigKey } from '../config/schema.js';
import type { ArtifactAttachment, ArtifactCreateInput, ArtifactDescriptor, ArtifactRecord, ArtifactReference, ArtifactStreamCreateInput } from './types.js';
export interface ArtifactStoreConfig {
    readonly rootDir?: string | undefined;
    readonly configManager?: {
        getControlPlaneConfigDir?: (() => string) | undefined;
        get?: ((key: ConfigKey) => unknown) | undefined;
    };
    readonly maxBytes?: number | undefined;
    readonly defaultRetentionMs?: number | undefined;
    readonly maxRetentionMs?: number | undefined;
    readonly trustedHosts?: readonly string[] | undefined;
    readonly blockedHosts?: readonly string[] | undefined;
    readonly allowPrivateHostFetches?: boolean | undefined;
}
export declare class ArtifactStore {
    private readonly rootDir;
    private readonly records;
    private readonly maxBytes;
    private readonly defaultRetentionMs;
    private readonly maxRetentionMs;
    private readonly trustedHosts;
    private readonly blockedHosts;
    private readonly allowPrivateHostFetches;
    constructor(config: ArtifactStoreConfig);
    get storagePath(): string;
    getMaxBytes(): number;
    list(limit?: number): ArtifactDescriptor[];
    get(id: string): ArtifactDescriptor | null;
    getRecord(id: string): ArtifactRecord | null;
    delete(id: string): boolean;
    deleteMany(ids: Iterable<string>): number;
    readContent(id: string): Promise<{
        record: ArtifactRecord;
        buffer: Buffer;
    }>;
    create(input: ArtifactCreateInput): Promise<ArtifactDescriptor>;
    createFromStream(input: ArtifactStreamCreateInput): Promise<ArtifactDescriptor>;
    private writeResolvedArtifact;
    private writeStreamContent;
    toAttachment(reference: ArtifactReference, options?: {
        readonly contentUrl?: string | undefined;
        readonly includeBase64IfSmallerThan?: number | undefined;
    }): Promise<ArtifactAttachment>;
    private toDescriptor;
    private loadExisting;
    private pruneExpired;
    private removeRecordFiles;
    private resolveInput;
    private resolveRemoteInput;
    private filenameFromContentDisposition;
    private assertRemoteHostAllowed;
}
//# sourceMappingURL=store.d.ts.map