add sources

This commit is contained in:
Othman H. Suseno
2026-01-15 17:39:32 +07:00
parent 1d9406c93a
commit 70b7841d1a
10 changed files with 1266 additions and 1 deletions

View File

@@ -0,0 +1,83 @@
import apiClient from './client'
export interface BaculaCapabilityHistory {
backup_types: string[]
source: string
requested_by?: string
requested_at: string
notes?: string
}
export interface BaculaClient {
id: string
hostname: string
ip_address: string
agent_version: string
status: string
backup_types: string[]
pending_backup_types?: string[]
pending_requested_by?: string
pending_requested_at?: string
pending_notes?: string
metadata?: Record<string, unknown>
registered_by: string
last_seen?: string
created_at: string
updated_at: string
capability_history?: BaculaCapabilityHistory[]
}
export interface RegisterBaculaClientRequest {
hostname: string
ip_address: string
agent_version?: string
backup_types: string[]
status?: string
metadata?: Record<string, string>
}
export interface UpdateCapabilitiesRequest {
backup_types: string[]
notes?: string
}
export interface PendingBaculaUpdate {
backup_types: string[]
requested_by?: string
requested_at: string
notes?: string
}
export const baculaApi = {
listClients: async (): Promise<BaculaClient[]> => {
const response = await apiClient.get<BaculaClient[]>('/bacula/clients')
return response.data
},
getClient: async (id: string): Promise<BaculaClient> => {
const response = await apiClient.get<BaculaClient>(`/bacula/clients/${id}`)
return response.data
},
registerClient: async (payload: RegisterBaculaClientRequest): Promise<BaculaClient> => {
const response = await apiClient.post<BaculaClient>('/bacula/clients/register', payload)
return response.data
},
updateCapabilities: async (id: string, payload: UpdateCapabilitiesRequest): Promise<PendingBaculaUpdate> => {
const response = await apiClient.post<PendingBaculaUpdate>(`/bacula/clients/${id}/capabilities`, payload)
return response.data
},
getPendingUpdate: async (id: string): Promise<PendingBaculaUpdate | null> => {
const response = await apiClient.get<PendingBaculaUpdate>(`/bacula/clients/${id}/pending-update`)
if (response.status === 204) {
return null
}
return response.data
},
ping: async (id: string, status?: string): Promise<void> => {
await apiClient.post(`/bacula/clients/${id}/ping`, { status })
},
}