import { YggdrasilClient, YggrasilAuthentication } from '@xmcl/user'; import { v4 as uuidv4 } from 'uuid'; import { API_BASE_URL } from '../renderer/api'; // Ely.by сервер const ELY_BY_AUTH_SERVER = API_BASE_URL; export class AuthService { private client: YggdrasilClient; constructor() { this.client = new YggdrasilClient(ELY_BY_AUTH_SERVER); } async login( username: string, password: string, ): Promise { try { // Генерируем уникальный clientToken const clientToken = uuidv4(); // Выполняем запрос напрямую к правильному URL const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/authenticate`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username, password, clientToken, requestUser: true, }), }); if (!response.ok) { let detail = ''; try { const data = await response.json(); // FastAPI: { detail: "..." } detail = data?.detail || ''; } catch { detail = await response.text(); } throw new Error(detail || `HTTP ${response.status}`); } const auth = await response.json(); console.log(`Аутентификация успешна для ${auth.selectedProfile?.name}`); return auth; } catch (error) { console.error('Ошибка при авторизации:', error); throw error; } } async validate(accessToken: string, clientToken: string): Promise { try { console.log(accessToken, clientToken); const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/validate`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ accessToken, clientToken }), }); return response.ok; } catch (error) { console.error('Ошибка при валидации токена:', error); return false; } } async refresh( accessToken: string, clientToken: string, ): Promise { try { const response = await fetch(`${ELY_BY_AUTH_SERVER}/auth/refresh`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ accessToken, clientToken }), }); if (!response.ok) { return null; } return await response.json(); } catch (error) { console.error('Ошибка при обновлении токена:', error); return null; } } }