/** * Admin Usage API endpoints * Handles admin-level usage logs and statistics retrieval */ import { apiClient } from '../client' import type { UsageLog, UsageQueryParams, PaginatedResponse } from '@/types' // ==================== Types ==================== export interface AdminUsageStatsResponse { total_requests: number total_input_tokens: number total_output_tokens: number total_cache_tokens: number total_tokens: number total_cost: number total_actual_cost: number average_duration_ms: number } export interface SimpleUser { id: number email: string } export interface SimpleApiKey { id: number name: string user_id: number } export interface AdminUsageQueryParams extends UsageQueryParams { user_id?: number } // ==================== API Functions ==================== /** * List all usage logs with optional filters (admin only) * @param params - Query parameters for filtering and pagination * @returns Paginated list of usage logs */ export async function list( params: AdminUsageQueryParams, options?: { signal?: AbortSignal } ): Promise> { const { data } = await apiClient.get>('/admin/usage', { params, signal: options?.signal }) return data } /** * Get usage statistics with optional filters (admin only) * @param params - Query parameters for filtering * @returns Usage statistics */ export async function getStats(params: { user_id?: number api_key_id?: number account_id?: number group_id?: number model?: string stream?: boolean period?: string start_date?: string end_date?: string timezone?: string }): Promise { const { data } = await apiClient.get('/admin/usage/stats', { params }) return data } /** * Search users by email keyword (admin only) * @param keyword - Email keyword to search * @returns List of matching users (max 30) */ export async function searchUsers(keyword: string): Promise { const { data } = await apiClient.get('/admin/usage/search-users', { params: { q: keyword } }) return data } /** * Search API keys by user ID and/or keyword (admin only) * @param userId - Optional user ID to filter by * @param keyword - Optional keyword to search in key name * @returns List of matching API keys (max 30) */ export async function searchApiKeys(userId?: number, keyword?: string): Promise { const params: Record = {} if (userId !== undefined) { params.user_id = userId } if (keyword) { params.q = keyword } const { data } = await apiClient.get('/admin/usage/search-api-keys', { params }) return data } export const adminUsageAPI = { list, getStats, searchUsers, searchApiKeys } export default adminUsageAPI