nayab zahoor
Deploy: Full-Stack App without large binary images
9f26583
Raw
History Blame Contribute Delete
1.5 kB
// src/lib/api.js
const BACKEND_URL = 'http://127.0.0.1:8000';
export async function scanApk(file) {
const formData = new FormData();
formData.append('apk', file);
const response = await fetch(`${BACKEND_URL}/scan`, {
method: 'POST',
body: formData,
});
if (!response.ok) {
let message = 'Scan failed';
try {
const data = await response.json();
message = data.detail || message;
} catch {}
throw new Error(message);
}
const result = await response.json();
if (result.grayscale_image_url?.startsWith('/')) {
result.grayscale_image_url = `${BACKEND_URL}${result.grayscale_image_url}`;
}
return result;
}
export async function saveScanHistory(result) {
const token = localStorage.getItem('token');
if (!token) return;
await fetch(`${BACKEND_URL}/history/save`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
body: JSON.stringify(result),
});
}
export async function fetchHistory({ search = '', threatType = '', skip = 0, limit = 50 } = {}) {
const token = localStorage.getItem('token');
if (!token) return [];
let url = `${BACKEND_URL}/history/?skip=${skip}&limit=${limit}`;
if (search) url += `&search=${encodeURIComponent(search)}`;
if (threatType) url += `&threat_type=${threatType}`;
const response = await fetch(url, {
headers: { Authorization: `Bearer ${token}` },
});
if (!response.ok) return [];
return response.json();
}