api.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import type { JourneyView, RunSummary } from "@/lib/types";
  2. const API_BASE = process.env.NEXT_PUBLIC_API_BASE ?? "http://127.0.0.1:8788";
  3. async function getJson<T>(path: string, signal?: AbortSignal): Promise<T> {
  4. const response = await fetch(`${API_BASE}${path}`, {
  5. cache: "no-store",
  6. credentials: "include",
  7. signal,
  8. });
  9. if (!response.ok) {
  10. const payload = await response.json().catch(() => null);
  11. const detail = typeof payload?.detail === "string" ? payload.detail : `HTTP ${response.status}`;
  12. throw new Error(detail);
  13. }
  14. return response.json() as Promise<T>;
  15. }
  16. export function fetchRuns(signal?: AbortSignal) {
  17. return getJson<RunSummary[]>("/api/runs", signal);
  18. }
  19. export function fetchJourney(scriptBuildId: number, signal?: AbortSignal) {
  20. return getJson<JourneyView>(`/api/runs/${scriptBuildId}/journey`, signal);
  21. }
  22. export function fetchArtifact(scriptBuildId: number, artifactVersionId: number, signal?: AbortSignal) {
  23. return getJson<Record<string, unknown>>(
  24. `/api/runs/${scriptBuildId}/artifacts/${artifactVersionId}`,
  25. signal,
  26. );
  27. }