mirror of
https://github.com/fawney19/Aether.git
synced 2026-01-03 00:02:28 +08:00
- Add 'enabled' field to ProxyConfig for preserving config when disabled - Mask proxy password in API responses (return '***' instead of actual password) - Preserve existing password on update when new password not provided - Add URL encoding for proxy credentials (handle special chars like @, :, /) - Enhanced URL validation: block SOCKS4, require valid host, forbid embedded auth - UI improvements: use Switch component, dynamic password placeholder - Add confirmation dialog for orphaned credentials (URL empty but has username/password) - Prevent browser password autofill with randomized IDs and CSS text-security - Unify ProxyConfig type definition in types.ts
81 lines
2.1 KiB
TypeScript
81 lines
2.1 KiB
TypeScript
import client from '../client'
|
|
import type { ProviderEndpoint, ProxyConfig } from './types'
|
|
|
|
/**
|
|
* 获取指定 Provider 的所有 Endpoints
|
|
*/
|
|
export async function getProviderEndpoints(providerId: string): Promise<ProviderEndpoint[]> {
|
|
const response = await client.get(`/api/admin/endpoints/providers/${providerId}/endpoints`)
|
|
return response.data
|
|
}
|
|
|
|
/**
|
|
* 获取 Endpoint 详情
|
|
*/
|
|
export async function getEndpoint(endpointId: string): Promise<ProviderEndpoint> {
|
|
const response = await client.get(`/api/admin/endpoints/${endpointId}`)
|
|
return response.data
|
|
}
|
|
|
|
/**
|
|
* 为 Provider 创建新的 Endpoint
|
|
*/
|
|
export async function createEndpoint(
|
|
providerId: string,
|
|
data: {
|
|
provider_id: string
|
|
api_format: string
|
|
base_url: string
|
|
custom_path?: string
|
|
auth_type?: string
|
|
auth_header?: string
|
|
headers?: Record<string, string>
|
|
timeout?: number
|
|
max_retries?: number
|
|
priority?: number
|
|
weight?: number
|
|
max_concurrent?: number
|
|
rate_limit?: number
|
|
is_active?: boolean
|
|
config?: Record<string, any>
|
|
proxy?: ProxyConfig | null
|
|
}
|
|
): Promise<ProviderEndpoint> {
|
|
const response = await client.post(`/api/admin/endpoints/providers/${providerId}/endpoints`, data)
|
|
return response.data
|
|
}
|
|
|
|
/**
|
|
* 更新 Endpoint
|
|
*/
|
|
export async function updateEndpoint(
|
|
endpointId: string,
|
|
data: Partial<{
|
|
base_url: string
|
|
custom_path: string
|
|
auth_type: string
|
|
auth_header: string
|
|
headers: Record<string, string>
|
|
timeout: number
|
|
max_retries: number
|
|
priority: number
|
|
weight: number
|
|
max_concurrent: number
|
|
rate_limit: number
|
|
is_active: boolean
|
|
config: Record<string, any>
|
|
proxy: ProxyConfig | null
|
|
}>
|
|
): Promise<ProviderEndpoint> {
|
|
const response = await client.put(`/api/admin/endpoints/${endpointId}`, data)
|
|
return response.data
|
|
}
|
|
|
|
/**
|
|
* 删除 Endpoint
|
|
*/
|
|
export async function deleteEndpoint(endpointId: string): Promise<{ message: string; deleted_keys_count: number }> {
|
|
const response = await client.delete(`/api/admin/endpoints/${endpointId}`)
|
|
return response.data
|
|
}
|