export interface UploadResult { id: string; gcsUri: string; signedUrl: string; filename: string; contentType: string; sizeBytes: number; expiresAt: Date; } export interface UploadServiceOpts { bucket: string; prefix: string; ttlMs: number; maxSizeMb: number; } /** * Handles temporary image uploads to GCS for MCP detection tools. * Files are stored under `{prefix}/{id}/{filename}` with signed URL access. * GCS lifecycle policy auto-deletes after 1 day; in-app TTL is shorter (1 hour default). */ export declare class UploadService { private storage; private bucketName; private prefix; private ttlMs; private maxSizeBytes; constructor(opts: UploadServiceOpts); /** * Upload a file buffer to GCS and return a signed URL. */ upload(buffer: Buffer, filename: string, contentType: string): Promise; /** * Generate a signed URL for an existing upload by ID and filename. */ getSignedUrl(id: string, filename: string): Promise; /** * Delete an upload by ID (best-effort cleanup). */ delete(id: string): Promise; }