| |
| |
| |
|
|
| import { getBackendBaseURL } from "../config"; |
|
|
| export interface UploadedFileInfo { |
| filename: string; |
| size: number; |
| path: string; |
| virtual_path: string; |
| artifact_url: string; |
| extension?: string; |
| modified?: number; |
| markdown_file?: string; |
| markdown_path?: string; |
| markdown_virtual_path?: string; |
| markdown_artifact_url?: string; |
| } |
|
|
| export interface UploadResponse { |
| success: boolean; |
| files: UploadedFileInfo[]; |
| message: string; |
| } |
|
|
| export interface ListFilesResponse { |
| files: UploadedFileInfo[]; |
| count: number; |
| } |
|
|
| |
| |
| |
| export async function uploadFiles( |
| threadId: string, |
| files: File[], |
| ): Promise<UploadResponse> { |
| const formData = new FormData(); |
|
|
| files.forEach((file) => { |
| formData.append("files", file); |
| }); |
|
|
| const response = await fetch( |
| `${getBackendBaseURL()}/api/threads/${threadId}/uploads`, |
| { |
| method: "POST", |
| body: formData, |
| }, |
| ); |
|
|
| if (!response.ok) { |
| const error = await response |
| .json() |
| .catch(() => ({ detail: "Upload failed" })); |
| throw new Error(error.detail ?? "Upload failed"); |
| } |
|
|
| return response.json(); |
| } |
|
|
| |
| |
| |
| export async function listUploadedFiles( |
| threadId: string, |
| ): Promise<ListFilesResponse> { |
| const response = await fetch( |
| `${getBackendBaseURL()}/api/threads/${threadId}/uploads/list`, |
| ); |
|
|
| if (!response.ok) { |
| throw new Error("Failed to list uploaded files"); |
| } |
|
|
| return response.json(); |
| } |
|
|
| |
| |
| |
| export async function deleteUploadedFile( |
| threadId: string, |
| filename: string, |
| ): Promise<{ success: boolean; message: string }> { |
| const response = await fetch( |
| `${getBackendBaseURL()}/api/threads/${threadId}/uploads/${filename}`, |
| { |
| method: "DELETE", |
| }, |
| ); |
|
|
| if (!response.ok) { |
| throw new Error("Failed to delete file"); |
| } |
|
|
| return response.json(); |
| } |
|
|