import client from "./client"; // ── Types ──────────────────────────────────────────────────────────── export interface HeatmapMetadata { name: string; value: string; } export interface HeatmapTechnique { techniqueID: string; tactic: string; color: string; score: number; comment: string; enabled: boolean; metadata: HeatmapMetadata[]; } export interface HeatmapLayer { name: string; versions: { attack: string; navigator: string; layer: string; }; domain: string; description: string; filters: { platforms: string[]; }; gradient: { colors: string[]; minValue: number; maxValue: number; }; techniques: HeatmapTechnique[]; } export interface HeatmapFilters { platforms?: string; tactics?: string; min_score?: number; } // ── API Functions ──────────────────────────────────────────────────── /** Fetch the coverage heatmap layer. */ export async function getHeatmapCoverage(filters?: HeatmapFilters): Promise { const { data } = await client.get("/heatmap/coverage", { params: filters }); return data; } /** Fetch the threat actor heatmap layer. */ export async function getHeatmapThreatActor( actorId: string, filters?: HeatmapFilters, ): Promise { const { data } = await client.get(`/heatmap/threat-actor/${actorId}`, { params: filters, }); return data; } /** Fetch the detection rules heatmap layer. */ export async function getHeatmapDetectionRules(filters?: HeatmapFilters): Promise { const { data } = await client.get("/heatmap/detection-rules", { params: filters }); return data; } /** Fetch the campaign heatmap layer. */ export async function getHeatmapCampaign( campaignId: string, filters?: HeatmapFilters, ): Promise { const { data } = await client.get(`/heatmap/campaign/${campaignId}`, { params: filters, }); return data; } /** Export a heatmap layer as a Navigator JSON file (returns blob URL). */ export async function exportNavigatorJSON( layerType: string, layerId?: string, filters?: HeatmapFilters, ): Promise { const params: Record = { layer: layerType, layer_id: layerId, ...filters, }; const { data } = await client.get("/heatmap/export-navigator", { params, responseType: "blob", }); return data; }