import type { Requests, Responses, UploadFile } from '@/dto'; import { get_token, post_token, post_token_form, isErrorResponse } from './base'; export const get_root = ( token: string ): Promise => get_token('/api/fs/root', token); export const get_node = ( token: string, node: number ): Promise => get_token(`/api/fs/node/${node}`, token); export const get_path = ( token: string, node: number ): Promise => get_token(`/api/fs/path/${node}`, token); export const create_folder = ( token: string, parent: number, name: string ): Promise< Responses.CreateFolder | Responses.CreateFolderExists | Responses.Error > => post_token( '/api/fs/createFolder', { parent: parent, name: name }, token ); export const create_file = ( token: string, parent: number, name: string ): Promise< Responses.CreateFolder | Responses.CreateFolderExists | Responses.Error > => post_token( '/api/fs/createFile', { parent: parent, name: name }, token ); export const create_zip = ( token: string, nodes: number[] ): Promise => post_token( '/api/fs/create_zip', { nodes: nodes }, token ); export const download_preview = ( token: string, node: number ): Promise => get_token(`/api/fs/download_preview/${node}`, token); export const get_type = ( token: string, node: number ): Promise => get_token(`/api/fs/get_type/${node}`, token); export async function upload_file( token: string, file: UploadFile, onProgress: (progressEvent: ProgressEvent) => void ): Promise { const node = await create_file(token, file.parent, file.file.name); if (isErrorResponse(node)) return node; if ('exists' in node && !node.isFile) return { statusCode: 400, message: 'File exists as folder' }; const form = new FormData(); form.set('file', file.file); return post_token_form( `/api/fs/upload/${node.id}`, form, token, onProgress ); } export function download_file(token: string, id: number) { const form = document.createElement('form'); form.method = 'post'; form.target = '_blank'; form.action = '/api/fs/download'; form.innerHTML = ``; document.body.appendChild(form); form.submit(); document.body.removeChild(form); } export function download_multi_file(token: string, ids: number[]) { const form = document.createElement('form'); form.method = 'post'; form.target = '_blank'; form.action = '/api/fs/download_multi'; form.innerHTML = ``; document.body.appendChild(form); form.submit(); document.body.removeChild(form); }