'use server' import { API_BASE_URL } from '@/app/actions/definitions'; import { getSessionData } from '@/app/actions/session'; import { FormState } from '@/app/actions/auth'; import { unknown } from 'zod'; interface initMessageBody { file_name: string, file_type: string, extension: string, file_size: number | string, action?: string, token?: string } export async function fileUpload(messageBody: initMessageBody, convertTo?: string | null | undefined) { const token = await getSessionData('token'); if (!token) { return; } const message = messageBody; message.action = 'init'; message.token = token; // нужно будет добавить свойство convertTo в тело запроса он может прийти со значением reject тогда конвертировать не нужно. // console.log(convertTo); try { const response = await fetch(`${API_BASE_URL}/api/v1/data`, { method: 'POST', body: JSON.stringify({ version: 1, msg_id: 20004, message_body: message }), headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }); if (response.ok) { let parsed = await response.json() as { message_desc: string, message_body: { upload_id: string, total_chunks: number, chunk_size: number, status: string }, message_code: string }; if (parsed.message_desc === 'Operation successful') { return parsed.message_body; } else { throw parsed; } } else { throw (`${response.status}`); } } catch (error) { return error; } } export async function cancelUpload(udloadId: string) { try { const response = await fetch(`${API_BASE_URL}/api/v1/data`, { method: 'POST', body: JSON.stringify({ version: 1, msg_id: 20004, message_body: { action: 'cancel', upload_id: udloadId, } }), headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }); if (response.ok) { let parsed = await response.json() as { message_code: string, message_desc: string, message_body: { upload_id: string, message: string } }; if (parsed.message_desc === 'Upload cancelled successfully') { return parsed.message_body; } else { throw parsed; } } else { throw (`${response.status}`); } } catch (error) { return error; } } export type ChunkResponse = { errorMesage: string | null fileId?: string }; export async function chunkUpload(formData: FormData): Promise { try { const response = await fetch(`${API_BASE_URL}/api/v1/files/chunk`, { method: 'POST', body: formData }); if (response.ok) { let parsed = await response.json(); if (parsed.message_code === 0) { return { errorMesage: null, fileId: parsed.message_body.file_id } } else if (parsed.message_desc === 'Duplicate file upload') { throw 'duplicate-file' } else if (parsed.message_desc === 'Failed to upload chunk: Failed to upload chunk: User not have tokens for protect') { throw 'user-not-have-tokens-for-protect' } else { throw 'error' } } else { throw 'error' } } catch (error: unknown) { if (error) { const typedError = error as any; return { errorMesage: typedError }; } else { return { errorMesage: 'error' }; } } } export async function checkChunkStatus(upload_id: string) { try { const response = await fetch(`${API_BASE_URL}/api/v1/data`, { method: 'POST', body: JSON.stringify({ version: 1, msg_id: 20004, message_body: { action: 'chunks', upload_id } }), headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }); if (response.ok) { let parsed = await response.json(); if (parsed.message_desc === 'Upload cancelled successfully') { return parsed.message_body; } else { throw parsed; } } else { throw (`${response.status}`); } } catch (error) { return error } } export async function getAllowedFilesExtensions(type: string) { try { const response = await fetch(`${API_BASE_URL}/api/v1/data`, { method: 'POST', body: JSON.stringify({ version: 1, msg_id: 20004, message_body: { action: 'file_extension', file_type: type } }), headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }); if (response.ok) { let parsed = await response.json(); if (parsed.message_desc === 'Operation successful') { return parsed.message_body; } else { throw parsed; } } else { throw (`${response.status}`); } } catch (error) { return error } }