import client from "./client"; import type { Evidence, TeamSide } from "../types/models"; // ── Response type (with download URL) ────────────────────────────── export interface EvidenceOut extends Evidence { download_url: string; } // ── Upload ───────────────────────────────────────────────────────── /** Upload an evidence file for the given test. * * The ``team`` field is sent as form data alongside the file so the * backend can enforce Red/Blue access control. */ export async function uploadEvidence( testId: string, file: File, team: TeamSide, notes?: string, ): Promise { const formData = new FormData(); formData.append("file", file); formData.append("team", team); if (notes) { formData.append("notes", notes); } const { data } = await client.post( `/tests/${testId}/evidence`, formData, { headers: { "Content-Type": "multipart/form-data", }, }, ); return data; } // ── List ─────────────────────────────────────────────────────────── /** List evidences for a test, optionally filtered by team. */ export async function getTestEvidences( testId: string, team?: TeamSide, ): Promise { const params = new URLSearchParams(); if (team) params.append("team", team); const { data } = await client.get( `/tests/${testId}/evidence${params.toString() ? `?${params}` : ""}`, ); return data; } // ── Detail ───────────────────────────────────────────────────────── /** Get evidence metadata with presigned download URL. */ export async function getEvidence(evidenceId: string): Promise { const { data } = await client.get(`/evidence/${evidenceId}`); return data; } // ── Delete ───────────────────────────────────────────────────────── /** Delete an evidence record (only in editable states). */ export async function deleteEvidence( evidenceId: string, ): Promise<{ detail: string }> { const { data } = await client.delete<{ detail: string }>( `/evidence/${evidenceId}`, ); return data; }