223 lines
4.6 KiB
TypeScript
223 lines
4.6 KiB
TypeScript
'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<ChunkResponse> {
|
|
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
|
|
}
|
|
} |