/** * Admin Accounts API endpoints * Handles AI platform account management for administrators */ import { apiClient } from '../client'; import type { Account, CreateAccountRequest, UpdateAccountRequest, PaginatedResponse, AccountUsageInfo, WindowStats, } from '@/types'; /** * List all accounts with pagination * @param page - Page number (default: 1) * @param pageSize - Items per page (default: 20) * @param filters - Optional filters * @returns Paginated list of accounts */ export async function list( page: number = 1, pageSize: number = 20, filters?: { platform?: string; type?: string; status?: string; search?: string; } ): Promise> { const { data } = await apiClient.get>('/admin/accounts', { params: { page, page_size: pageSize, ...filters, }, }); return data; } /** * Get account by ID * @param id - Account ID * @returns Account details */ export async function getById(id: number): Promise { const { data } = await apiClient.get(`/admin/accounts/${id}`); return data; } /** * Create new account * @param accountData - Account data * @returns Created account */ export async function create(accountData: CreateAccountRequest): Promise { const { data } = await apiClient.post('/admin/accounts', accountData); return data; } /** * Update account * @param id - Account ID * @param updates - Fields to update * @returns Updated account */ export async function update(id: number, updates: UpdateAccountRequest): Promise { const { data } = await apiClient.put(`/admin/accounts/${id}`, updates); return data; } /** * Delete account * @param id - Account ID * @returns Success confirmation */ export async function deleteAccount(id: number): Promise<{ message: string }> { const { data } = await apiClient.delete<{ message: string }>(`/admin/accounts/${id}`); return data; } /** * Toggle account status * @param id - Account ID * @param status - New status * @returns Updated account */ export async function toggleStatus( id: number, status: 'active' | 'inactive' ): Promise { return update(id, { status }); } /** * Test account connectivity * @param id - Account ID * @returns Test result */ export async function testAccount(id: number): Promise<{ success: boolean; message: string; latency_ms?: number; }> { const { data } = await apiClient.post<{ success: boolean; message: string; latency_ms?: number; }>(`/admin/accounts/${id}/test`); return data; } /** * Refresh account credentials * @param id - Account ID * @returns Updated account */ export async function refreshCredentials(id: number): Promise { const { data } = await apiClient.post(`/admin/accounts/${id}/refresh`); return data; } /** * Get account usage statistics * @param id - Account ID * @param period - Time period * @returns Account usage statistics */ export async function getStats( id: number, period: string = 'month' ): Promise<{ total_requests: number; successful_requests: number; failed_requests: number; total_tokens: number; average_response_time: number; }> { const { data } = await apiClient.get<{ total_requests: number; successful_requests: number; failed_requests: number; total_tokens: number; average_response_time: number; }>(`/admin/accounts/${id}/stats`, { params: { period }, }); return data; } /** * Clear account error * @param id - Account ID * @returns Updated account */ export async function clearError(id: number): Promise { const { data } = await apiClient.post(`/admin/accounts/${id}/clear-error`); return data; } /** * Get account usage information (5h/7d window) * @param id - Account ID * @returns Account usage info */ export async function getUsage(id: number): Promise { const { data } = await apiClient.get(`/admin/accounts/${id}/usage`); return data; } /** * Clear account rate limit status * @param id - Account ID * @returns Success confirmation */ export async function clearRateLimit(id: number): Promise<{ message: string }> { const { data } = await apiClient.post<{ message: string }>(`/admin/accounts/${id}/clear-rate-limit`); return data; } /** * Generate OAuth authorization URL * @param endpoint - API endpoint path * @param config - Proxy configuration * @returns Auth URL and session ID */ export async function generateAuthUrl( endpoint: string, config: { proxy_id?: number } ): Promise<{ auth_url: string; session_id: string }> { const { data } = await apiClient.post<{ auth_url: string; session_id: string }>(endpoint, config); return data; } /** * Exchange authorization code for tokens * @param endpoint - API endpoint path * @param exchangeData - Session ID, code, and optional proxy config * @returns Token information */ export async function exchangeCode( endpoint: string, exchangeData: { session_id: string; code: string; proxy_id?: number } ): Promise> { const { data } = await apiClient.post>(endpoint, exchangeData); return data; } /** * Batch create accounts * @param accounts - Array of account data * @returns Results of batch creation */ export async function batchCreate(accounts: CreateAccountRequest[]): Promise<{ success: number; failed: number; results: Array<{ success: boolean; account?: Account; error?: string }>; }> { const { data } = await apiClient.post<{ success: number; failed: number; results: Array<{ success: boolean; account?: Account; error?: string }>; }>('/admin/accounts/batch', { accounts }); return data; } /** * Get account today statistics * @param id - Account ID * @returns Today's stats (requests, tokens, cost) */ export async function getTodayStats(id: number): Promise { const { data } = await apiClient.get(`/admin/accounts/${id}/today-stats`); return data; } /** * Set account schedulable status * @param id - Account ID * @param schedulable - Whether the account should participate in scheduling * @returns Updated account */ export async function setSchedulable(id: number, schedulable: boolean): Promise { const { data } = await apiClient.post(`/admin/accounts/${id}/schedulable`, { schedulable }); return data; } export const accountsAPI = { list, getById, create, update, delete: deleteAccount, toggleStatus, testAccount, refreshCredentials, getStats, clearError, getUsage, getTodayStats, clearRateLimit, setSchedulable, generateAuthUrl, exchangeCode, batchCreate, }; export default accountsAPI;