import type { TrackResponse } from '../model/types'; const API_BASE = (import.meta.env.VITE_API_URL || '/snp-api').replace(/\/$/, ''); export async function fetchVesselTrack( mmsi: number, minutes: number, signal?: AbortSignal, ): Promise { const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), 15_000); const combinedSignal = signal ?? controller.signal; try { const url = `${API_BASE}/api/ais-target/${mmsi}/track?minutes=${minutes}`; const res = await fetch(url, { signal: combinedSignal, headers: { accept: 'application/json' }, }); if (!res.ok) { const text = await res.text().catch(() => ''); throw new Error(`Track API error ${res.status}: ${text.slice(0, 200)}`); } const json = (await res.json()) as TrackResponse; return json; } finally { clearTimeout(timeout); } }