/** * Admin Settings API endpoints * Handles system settings management for administrators */ import { apiClient } from '../client' /** * System settings interface */ export interface SystemSettings { // Registration settings registration_enabled: boolean email_verify_enabled: boolean // Default settings default_balance: number default_concurrency: number // OEM settings site_name: string site_logo: string site_subtitle: string api_base_url: string contact_info: string doc_url: string // SMTP settings smtp_host: string smtp_port: number smtp_username: string smtp_password_configured: boolean smtp_from_email: string smtp_from_name: string smtp_use_tls: boolean // Cloudflare Turnstile settings turnstile_enabled: boolean turnstile_site_key: string turnstile_secret_key_configured: boolean } export interface UpdateSettingsRequest { registration_enabled?: boolean email_verify_enabled?: boolean default_balance?: number default_concurrency?: number site_name?: string site_logo?: string site_subtitle?: string api_base_url?: string contact_info?: string doc_url?: string smtp_host?: string smtp_port?: number smtp_username?: string smtp_password?: string smtp_from_email?: string smtp_from_name?: string smtp_use_tls?: boolean turnstile_enabled?: boolean turnstile_site_key?: string turnstile_secret_key?: string } /** * Get all system settings * @returns System settings */ export async function getSettings(): Promise { const { data } = await apiClient.get('/admin/settings') return data } /** * Update system settings * @param settings - Partial settings to update * @returns Updated settings */ export async function updateSettings(settings: UpdateSettingsRequest): Promise { const { data } = await apiClient.put('/admin/settings', settings) return data } /** * Test SMTP connection request */ export interface TestSmtpRequest { smtp_host: string smtp_port: number smtp_username: string smtp_password: string smtp_use_tls: boolean } /** * Test SMTP connection with provided config * @param config - SMTP configuration to test * @returns Test result message */ export async function testSmtpConnection(config: TestSmtpRequest): Promise<{ message: string }> { const { data } = await apiClient.post<{ message: string }>('/admin/settings/test-smtp', config) return data } /** * Send test email request */ export interface SendTestEmailRequest { email: string smtp_host: string smtp_port: number smtp_username: string smtp_password: string smtp_from_email: string smtp_from_name: string smtp_use_tls: boolean } /** * Send test email with provided SMTP config * @param request - Email address and SMTP config * @returns Test result message */ export async function sendTestEmail(request: SendTestEmailRequest): Promise<{ message: string }> { const { data } = await apiClient.post<{ message: string }>( '/admin/settings/send-test-email', request ) return data } /** * Admin API Key status response */ export interface AdminApiKeyStatus { exists: boolean masked_key: string } /** * Get admin API key status * @returns Status indicating if key exists and masked version */ export async function getAdminApiKey(): Promise { const { data } = await apiClient.get('/admin/settings/admin-api-key') return data } /** * Regenerate admin API key * @returns The new full API key (only shown once) */ export async function regenerateAdminApiKey(): Promise<{ key: string }> { const { data } = await apiClient.post<{ key: string }>('/admin/settings/admin-api-key/regenerate') return data } /** * Delete admin API key * @returns Success message */ export async function deleteAdminApiKey(): Promise<{ message: string }> { const { data } = await apiClient.delete<{ message: string }>('/admin/settings/admin-api-key') return data } export const settingsAPI = { getSettings, updateSettings, testSmtpConnection, sendTestEmail, getAdminApiKey, regenerateAdminApiKey, deleteAdminApiKey } export default settingsAPI