diff --git a/src/main/services.ts b/src/main/services.ts index 3fe24a5..1dc46a9 100644 --- a/src/main/services.ts +++ b/src/main/services.ts @@ -8,35 +8,113 @@ export async function checkProviderStatus(provider: Provider): Promise { + // 200-299 为成功,400-499 通常表示 API 可用但请求有问题(如 key 无效) + return status < 500 + } } ) const responseTime = Date.now() - startTime - return { - isOnline: true, - responseTime, - lastChecked: new Date() + // 检查响应状态 + if (response.status >= 200 && response.status < 300) { + return { + isOnline: true, + responseTime, + lastChecked: new Date() + } + } else if (response.status >= 400 && response.status < 500) { + // 客户端错误,API 可用但可能是 key 无效或其他认证问题 + return { + isOnline: true, // API 本身是可用的 + responseTime, + lastChecked: new Date(), + error: `API 可用但认证失败 (${response.status}): ${response.data?.error?.message || '请检查 API Key'}` + } + } else { + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: `服务器错误 (${response.status})` + } } } catch (error) { + const responseTime = Date.now() - startTime + + if (axios.isAxiosError(error)) { + if (error.code === 'ECONNABORTED' || error.code === 'ETIMEDOUT') { + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: '请求超时 - 服务可能不可用' + } + } else if (error.response) { + // 服务器响应了错误状态码 + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: `HTTP ${error.response.status}: ${error.response.data?.error?.message || error.message}` + } + } else if (error.request) { + // 请求发出但没有收到响应 + return { + isOnline: false, + responseTime, + lastChecked: new Date(), + error: '网络连接失败 - 无法访问服务' + } + } + } + return { isOnline: false, - responseTime: -1, + responseTime, lastChecked: new Date(), error: error instanceof Error ? error.message : '未知错误' }