73 lines
3.5 KiB
TypeScript
73 lines
3.5 KiB
TypeScript
import { api } from './client'
|
|
|
|
export interface AIProvider {
|
|
id: string; name: string; model: string; endpoint: string
|
|
is_active: boolean; has_key: boolean
|
|
}
|
|
export interface AIRoleConfig { provider_id: string; model: string }
|
|
export interface AIRoles { summary: AIRoleConfig; report: AIRoleConfig; filter: AIRoleConfig }
|
|
export interface OllamaModelInfo {
|
|
name: string; size: number; modified_at: string
|
|
details: { parameter_size: string; quantization_level: string; family: string }
|
|
}
|
|
export interface Source { id: string; name: string; type: string; enabled: boolean }
|
|
export interface ScrapeJob {
|
|
id: string; source_id: string; source_name: string; status: string
|
|
started_at: { Time: string; Valid: boolean } | null
|
|
finished_at: { Time: string; Valid: boolean } | null
|
|
articles_found: number; error_msg: string; created_at: string
|
|
}
|
|
export interface Setting { key: string; value: string }
|
|
export interface ScheduleSlot { id?: string; day_of_week: number; hour: number; minute: number }
|
|
export interface AdminUser { id: string; email: string; role: string; created_at: string }
|
|
export interface Credential { source_id: string; source_name: string; username: string; has_password: boolean }
|
|
|
|
export const adminApi = {
|
|
// Credentials
|
|
getCredentials: () => api.get<Credential[]>('/admin/credentials'),
|
|
updateCredentials: (data: { source_id: string; username: string; password?: string }) =>
|
|
api.put<void>('/admin/credentials', data),
|
|
|
|
// AI Providers
|
|
listProviders: () => api.get<AIProvider[]>('/admin/ai-providers'),
|
|
createProvider: (data: { name: string; api_key?: string; model?: string; endpoint?: string }) =>
|
|
api.post<AIProvider>('/admin/ai-providers', data),
|
|
updateProvider: (id: string, data: { name: string; api_key?: string; model?: string; endpoint?: string }) =>
|
|
api.put<void>(`/admin/ai-providers/${id}`, data),
|
|
activateProvider: (id: string) => api.post<void>(`/admin/ai-providers/${id}/activate`),
|
|
deleteProvider: (id: string) => api.delete<void>(`/admin/ai-providers/${id}`),
|
|
listModels: (id: string) => api.get<string[]>(`/admin/ai-providers/${id}/models`),
|
|
|
|
// AI Roles
|
|
getRoles: () => api.get<AIRoles>('/admin/ai-roles'),
|
|
updateRole: (role: string, data: AIRoleConfig) => api.put<void>(`/admin/ai-roles/${role}`, data),
|
|
|
|
// Ollama model management
|
|
listOllamaModels: () => api.get<OllamaModelInfo[]>('/admin/ollama/models'),
|
|
pullOllamaModel: (name: string) => api.post<void>('/admin/ollama/pull', { name }),
|
|
deleteOllamaModel: (name: string) => api.delete<void>(`/admin/ollama/models/${encodeURIComponent(name)}`),
|
|
|
|
// Sources
|
|
listSources: () => api.get<Source[]>('/admin/sources'),
|
|
updateSource: (id: string, enabled: boolean) => api.put<void>(`/admin/sources/${id}`, { enabled }),
|
|
|
|
// Jobs
|
|
listJobs: () => api.get<ScrapeJob[]>('/admin/scrape-jobs'),
|
|
triggerJob: (source_id: string) => api.post<void>('/admin/scrape-jobs/trigger', { source_id }),
|
|
|
|
// Settings
|
|
listSettings: () => api.get<Setting[]>('/admin/settings'),
|
|
updateSettings: (settings: Setting[]) => api.put<void>('/admin/settings', { settings }),
|
|
getDefaultPrompt: () => api.get<{ prompt: string }>('/admin/settings/default-prompt'),
|
|
|
|
// Schedule
|
|
getSchedule: () => api.get<ScheduleSlot[]>('/admin/schedule'),
|
|
updateSchedule: (slots: ScheduleSlot[]) => api.put<void>('/admin/schedule', { slots }),
|
|
|
|
// Users
|
|
listUsers: () => api.get<AdminUser[]>('/admin/users'),
|
|
updateUser: (id: string, email: string, role: string) =>
|
|
api.put<AdminUser>(`/admin/users/${id}`, { email, role }),
|
|
deleteUser: (id: string) => api.delete<void>(`/admin/users/${id}`),
|
|
}
|