/** * Contrato de subida directa a S3 vía POST presignado (ADR-087). El consumer * nunca arma este objeto a mano — lo recibe tal cual del backend * (`RequestVideoUploadResponse`) y se lo pasa a `VideoUploadService.upload()`. */ export interface S3PostUploadIntent { uploadUrl: string; uploadFields: Record; } /** * Los dos pasos que SÍ dependen del dominio (receta, contenido, animal en * adopción...) y que la lib no puede conocer: cómo pedir el intent de subida * y cómo avisar que terminó. Todo lo demás (armar el FormData, el POST a S3, * el orden intent→S3→finalize) lo resuelve `VideoUploadService`. */ export interface VideoUploadHandlers { requestIntent: (file: File) => Promise; finalize: () => Promise; } export type VideoUploadStatus = 'uploading' | 'processing'; export interface VideoUploadProgress { status: VideoUploadStatus; }