Files
sub2api/frontend/src/api/keys.ts
2025-12-18 13:50:39 +08:00

101 lines
2.3 KiB
TypeScript

/**
* API Keys management endpoints
* Handles CRUD operations for user API keys
*/
import { apiClient } from './client';
import type {
ApiKey,
CreateApiKeyRequest,
UpdateApiKeyRequest,
PaginatedResponse,
} from '@/types';
/**
* List all API keys for current user
* @param page - Page number (default: 1)
* @param pageSize - Items per page (default: 10)
* @returns Paginated list of API keys
*/
export async function list(page: number = 1, pageSize: number = 10): Promise<PaginatedResponse<ApiKey>> {
const { data } = await apiClient.get<PaginatedResponse<ApiKey>>('/keys', {
params: { page, page_size: pageSize },
});
return data;
}
/**
* Get API key by ID
* @param id - API key ID
* @returns API key details
*/
export async function getById(id: number): Promise<ApiKey> {
const { data } = await apiClient.get<ApiKey>(`/keys/${id}`);
return data;
}
/**
* Create new API key
* @param name - Key name
* @param groupId - Optional group ID
* @param customKey - Optional custom key value
* @returns Created API key
*/
export async function create(name: string, groupId?: number | null, customKey?: string): Promise<ApiKey> {
const payload: CreateApiKeyRequest = { name };
if (groupId !== undefined) {
payload.group_id = groupId;
}
if (customKey) {
payload.custom_key = customKey;
}
const { data } = await apiClient.post<ApiKey>('/keys', payload);
return data;
}
/**
* Update API key
* @param id - API key ID
* @param updates - Fields to update
* @returns Updated API key
*/
export async function update(id: number, updates: UpdateApiKeyRequest): Promise<ApiKey> {
const { data } = await apiClient.put<ApiKey>(`/keys/${id}`, updates);
return data;
}
/**
* Delete API key
* @param id - API key ID
* @returns Success confirmation
*/
export async function deleteKey(id: number): Promise<{ message: string }> {
const { data } = await apiClient.delete<{ message: string }>(`/keys/${id}`);
return data;
}
/**
* Toggle API key status (active/inactive)
* @param id - API key ID
* @param status - New status
* @returns Updated API key
*/
export async function toggleStatus(
id: number,
status: 'active' | 'inactive'
): Promise<ApiKey> {
return update(id, { status });
}
export const keysAPI = {
list,
getById,
create,
update,
delete: deleteKey,
toggleStatus,
};
export default keysAPI;