Spaces:
Running
Running
| const API_BASE = import.meta.env.VITE_API_BASE_URL || ""; | |
| function authHeaders() { | |
| const token = localStorage.getItem("kyr_access_token"); | |
| return token ? { Authorization: `Bearer ${token}` } : {}; | |
| } | |
| async function request(path, options = {}) { | |
| const response = await fetch(`${API_BASE}${path}`, { | |
| ...options, | |
| headers: { | |
| ...(options.body instanceof FormData ? {} : { "Content-Type": "application/json" }), | |
| ...authHeaders(), | |
| ...(options.headers || {}), | |
| }, | |
| }); | |
| const contentType = response.headers.get("content-type") || ""; | |
| const data = contentType.includes("application/json") ? await response.json() : await response.text(); | |
| if (!response.ok) { | |
| const detail = typeof data === "object" ? data.detail || data.message : data; | |
| throw new Error(detail || `Request failed with status ${response.status}`); | |
| } | |
| return data; | |
| } | |
| export const api = { | |
| config: () => request("/api/config"), | |
| status: (sessionId) => request(`/api/status?session_id=${encodeURIComponent(sessionId)}`), | |
| signIn: (email, password) => | |
| request("/api/auth/sign-in", { | |
| method: "POST", | |
| body: JSON.stringify({ email, password }), | |
| }), | |
| signUp: (email, password, redirectTo) => | |
| request("/api/auth/sign-up", { | |
| method: "POST", | |
| body: JSON.stringify({ email, password, redirect_to: redirectTo }), | |
| }), | |
| me: () => request("/api/auth/me"), | |
| signOut: () => request("/api/auth/sign-out", { method: "POST" }), | |
| estimateSource: (sourceUrl) => | |
| request("/api/sources/estimate", { | |
| method: "POST", | |
| body: JSON.stringify({ source_url: sourceUrl }), | |
| }), | |
| ingestSource: (sourceUrl, sessionId) => | |
| request("/api/ingest/source", { | |
| method: "POST", | |
| body: JSON.stringify({ source_url: sourceUrl, session_id: sessionId }), | |
| }), | |
| uploadFiles: (files, sessionId) => { | |
| const formData = new FormData(); | |
| formData.append("session_id", sessionId); | |
| Array.from(files).forEach((file) => formData.append("files", file)); | |
| return request("/api/ingest/upload", { | |
| method: "POST", | |
| body: formData, | |
| }); | |
| }, | |
| job: (jobId, sessionId) => request(`/api/jobs/${encodeURIComponent(jobId)}?session_id=${encodeURIComponent(sessionId)}`), | |
| search: ({ query, sessionId, topK, similarityThreshold }) => | |
| request("/api/search", { | |
| method: "POST", | |
| body: JSON.stringify({ | |
| query, | |
| session_id: sessionId, | |
| top_k: topK, | |
| similarity_threshold: similarityThreshold, | |
| }), | |
| }), | |
| chat: (question, chunks) => | |
| request("/api/chat", { | |
| method: "POST", | |
| body: JSON.stringify({ question, chunks }), | |
| }), | |
| }; | |