mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-03-27 19:19:25 +01:00
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import axios from "axios";
|
|
import { ListRemoteZimFilesResponse, ListZimFilesResponse, RemoteZimFileEntry } from "../../types/zim";
|
|
|
|
class API {
|
|
private client;
|
|
|
|
constructor() {
|
|
this.client = axios.create({
|
|
baseURL: "/api",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
}
|
|
|
|
async listDocs() {
|
|
try {
|
|
const response = await this.client.get<{ articles: Array<{ title: string; slug: string }> }>("/docs/list");
|
|
return response.data.articles;
|
|
} catch (error) {
|
|
console.error("Error listing docs:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
|
|
async installService(service_name: string) {
|
|
try {
|
|
const response = await this.client.post<{ success: boolean; message: string }>("/system/services/install", { service_name });
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error("Error installing service:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async listZimFiles() {
|
|
return await this.client.get<ListZimFilesResponse>("/zim/list");
|
|
}
|
|
|
|
async listRemoteZimFiles({ start = 0, count = 12 }: { start?: number; count?: number }) {
|
|
return await this.client.get<ListRemoteZimFilesResponse>("/zim/list-remote", {
|
|
params: {
|
|
start,
|
|
count
|
|
}
|
|
});
|
|
}
|
|
|
|
async downloadRemoteZimFile(url: string) {
|
|
try {
|
|
const response = await this.client.post("/zim/download-remote", { url });
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error("Error downloading remote ZIM file:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async deleteZimFile(key: string) {
|
|
try {
|
|
const response = await this.client.delete(`/zim/${key}`);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error("Error deleting ZIM file:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
}
|
|
|
|
export default new API(); |