/** Workspace API client. */ import { apiClient } from "./client"; import type { Workspace, CreateWorkspaceRequest, SyncResult, } from "../types/workspace"; function workspaceUrl(projectId: string, repoId: string, workspaceId?: string) { const base = `/projects/${projectId}/repositories/${repoId}/workspaces`; return workspaceId ? `${base}/${workspaceId}` : `${base}/`; } export async function listWorkspaces( projectId: string, repoId: string, ): Promise { const response = await apiClient.get( workspaceUrl(projectId, repoId), ); return response.data; } export async function listAllWorkspaces(): Promise { const response = await apiClient.get("/workspaces/"); return response.data; } export async function createWorkspace( projectId: string, repoId: string, data: CreateWorkspaceRequest, ): Promise { const response = await apiClient.post( workspaceUrl(projectId, repoId), data, ); return response.data; } export async function createWorkspaceTopLevel( data: CreateWorkspaceRequest & { repo_id: string }, ): Promise { const response = await apiClient.post("/workspaces/", data); return response.data; } export async function getWorkspace( projectId: string, repoId: string, workspaceId: string, ): Promise { const response = await apiClient.get( workspaceUrl(projectId, repoId, workspaceId), ); return response.data; } export async function updateWorkspace( projectId: string, repoId: string, workspaceId: string, data: Partial, ): Promise { const response = await apiClient.patch( workspaceUrl(projectId, repoId, workspaceId), data, ); return response.data; } export async function deleteWorkspace( workspaceId: string, force = false, ): Promise<{ status: string }> { const response = await apiClient.delete<{ status: string }>( `/workspaces/${workspaceId}?force=${force}`, ); return response.data; } export async function syncWorkspace( projectId: string, repoId: string, workspaceId: string, ): Promise { const response = await apiClient.post( `${workspaceUrl(projectId, repoId, workspaceId)}/sync`, ); return response.data; }