Import source: cshare-app/src/lib/api

Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
arsam
2026-09-18 23:14:33 +03:30
parent 4e3449b7f2
commit c6353b5426
+97
View File
@@ -0,0 +1,97 @@
const API_BASE = (
import.meta.env.VITE_API_BASE_URL ||
(import.meta.env.DEV ? 'http://localhost:4001' : window.location.origin)
).replace(/\/$/, '');
async function request(path, options = {}) {
const response = await fetch(`${API_BASE}${path}`, {
credentials: 'include',
headers: {
...(options.body instanceof FormData ? {} : { 'Content-Type': 'application/json' }),
...options.headers,
},
...options,
});
if (!response.ok) {
const payload = await response.json().catch(() => ({}));
throw new Error(payload.error || `Request failed with ${response.status}`);
}
if (response.status === 204) return null;
return response.json();
}
export function uploadFile(file, { onProgress } = {}) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
const form = new FormData();
form.append('file', file);
xhr.open('POST', `${API_BASE}/api/v1/files/upload`);
xhr.withCredentials = true;
xhr.upload.onprogress = (event) => {
if (event.lengthComputable && onProgress) {
onProgress(Math.round((event.loaded / event.total) * 100));
}
};
xhr.onload = () => {
if (xhr.status >= 200 && xhr.status < 300) {
resolve(JSON.parse(xhr.responseText));
return;
}
try {
reject(new Error(JSON.parse(xhr.responseText).error || 'Upload failed'));
} catch {
reject(new Error('Upload failed'));
}
};
xhr.onerror = () => reject(new Error('Could not reach upload service'));
xhr.send(form);
});
}
export async function listFiles() {
const payload = await request('/api/v1/files');
return payload.data;
}
export async function deleteFile(id) {
await request(`/api/v1/files/${id}`, { method: 'DELETE' });
}
export async function getDashboardStats() {
const payload = await request('/api/v1/dashboard/stats');
return payload.data;
}
export async function getDashboardActivity() {
const payload = await request('/api/v1/dashboard/activity');
return payload.data;
}
export async function getDashboardStorage() {
const payload = await request('/api/v1/dashboard/storage');
return payload.data;
}
export async function getFileAnalytics(fileId) {
const payload = await request(`/api/v1/files/${fileId}/analytics`);
return payload.data;
}
export async function resolveLink(linkId) {
const payload = await request(`/api/v1/links/${linkId}`);
return payload.data;
}
export function downloadUrl(linkId) {
return `${API_BASE}/api/v1/links/${linkId}/download`;
}
export function previewUrl(linkId) {
return `${API_BASE}/api/v1/links/${linkId}/preview`;
}