const BASE_URL = import.meta.env.VITE_API_URL ?? ''; export interface TenantReleaseResult { subdomain: string; containerName: string; success: boolean; error?: string; } export interface ReleaseRecord { id: string; environment: string; imageName: string; status: 'Running' | 'Succeeded' | 'PartialFailure' | 'Failed'; startedAt: string; finishedAt?: string; tenants: TenantReleaseResult[]; opcNumbers: string[]; } export async function getReleaseHistory(): Promise { const res = await fetch(`${BASE_URL}/api/release/history`); if (!res.ok) throw new Error(`Failed to get release history: ${res.statusText}`); return res.json(); } export function triggerRelease( env: string, onLine: (line: string) => void, onDone: (record: ReleaseRecord) => void, onError: (err: Event) => void, ): EventSource { const source = new EventSource(`${BASE_URL}/api/release/${env}`); source.onmessage = (e) => { try { const msg = JSON.parse(e.data); if (msg.done && msg.release) { onDone(msg.release as ReleaseRecord); source.close(); } else if (typeof msg.line === 'string') onLine(msg.line); } catch { /* ignore */ } }; source.onerror = (e) => { onError(e); }; return source; }