/** * Admin Proxies API endpoints * Handles proxy server management for administrators */ import { apiClient } from '../client' import type { Proxy, CreateProxyRequest, UpdateProxyRequest, PaginatedResponse } from '@/types' /** * List all proxies with pagination * @param page - Page number (default: 1) * @param pageSize - Items per page (default: 20) * @param filters - Optional filters * @returns Paginated list of proxies */ export async function list( page: number = 1, pageSize: number = 20, filters?: { protocol?: string status?: 'active' | 'inactive' search?: string }, options?: { signal?: AbortSignal } ): Promise> { const { data } = await apiClient.get>('/admin/proxies', { params: { page, page_size: pageSize, ...filters }, signal: options?.signal }) return data } /** * Get all active proxies (without pagination) * @returns List of all active proxies */ export async function getAll(): Promise { const { data } = await apiClient.get('/admin/proxies/all') return data } /** * Get all active proxies with account count (sorted by creation time desc) * @returns List of all active proxies with account count */ export async function getAllWithCount(): Promise { const { data } = await apiClient.get('/admin/proxies/all', { params: { with_count: 'true' } }) return data } /** * Get proxy by ID * @param id - Proxy ID * @returns Proxy details */ export async function getById(id: number): Promise { const { data } = await apiClient.get(`/admin/proxies/${id}`) return data } /** * Create new proxy * @param proxyData - Proxy data * @returns Created proxy */ export async function create(proxyData: CreateProxyRequest): Promise { const { data } = await apiClient.post('/admin/proxies', proxyData) return data } /** * Update proxy * @param id - Proxy ID * @param updates - Fields to update * @returns Updated proxy */ export async function update(id: number, updates: UpdateProxyRequest): Promise { const { data } = await apiClient.put(`/admin/proxies/${id}`, updates) return data } /** * Delete proxy * @param id - Proxy ID * @returns Success confirmation */ export async function deleteProxy(id: number): Promise<{ message: string }> { const { data } = await apiClient.delete<{ message: string }>(`/admin/proxies/${id}`) return data } /** * Toggle proxy status * @param id - Proxy ID * @param status - New status * @returns Updated proxy */ export async function toggleStatus(id: number, status: 'active' | 'inactive'): Promise { return update(id, { status }) } /** * Test proxy connectivity * @param id - Proxy ID * @returns Test result with IP info */ export async function testProxy(id: number): Promise<{ success: boolean message: string latency_ms?: number ip_address?: string city?: string region?: string country?: string }> { const { data } = await apiClient.post<{ success: boolean message: string latency_ms?: number ip_address?: string city?: string region?: string country?: string }>(`/admin/proxies/${id}/test`) return data } /** * Get proxy usage statistics * @param id - Proxy ID * @returns Proxy usage statistics */ export async function getStats(id: number): Promise<{ total_accounts: number active_accounts: number total_requests: number success_rate: number average_latency: number }> { const { data } = await apiClient.get<{ total_accounts: number active_accounts: number total_requests: number success_rate: number average_latency: number }>(`/admin/proxies/${id}/stats`) return data } /** * Get accounts using a proxy * @param id - Proxy ID * @returns List of accounts using the proxy */ export async function getProxyAccounts(id: number): Promise> { const { data } = await apiClient.get>(`/admin/proxies/${id}/accounts`) return data } /** * Batch create proxies * @param proxies - Array of proxy data to create * @returns Creation result with count of created and skipped */ export async function batchCreate( proxies: Array<{ protocol: string host: string port: number username?: string password?: string }> ): Promise<{ created: number skipped: number }> { const { data } = await apiClient.post<{ created: number skipped: number }>('/admin/proxies/batch', { proxies }) return data } export const proxiesAPI = { list, getAll, getAllWithCount, getById, create, update, delete: deleteProxy, toggleStatus, testProxy, getStats, getProxyAccounts, batchCreate } export default proxiesAPI