add: skin viewer, refatoring to api
This commit is contained in:
127
src/renderer/api.ts
Normal file
127
src/renderer/api.ts
Normal file
@ -0,0 +1,127 @@
|
||||
export const API_BASE_URL = 'http://147.78.65.214:8000';
|
||||
|
||||
export interface Player {
|
||||
uuid: string;
|
||||
username: string;
|
||||
skin_url: string;
|
||||
cloak_url: string;
|
||||
coins: number;
|
||||
is_active: boolean;
|
||||
created_at: string;
|
||||
}
|
||||
|
||||
export interface CoinsResponse {
|
||||
username: string;
|
||||
coins: number;
|
||||
total_time_played: {
|
||||
seconds: number;
|
||||
formatted: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ApiError {
|
||||
message: string;
|
||||
details?: string;
|
||||
}
|
||||
|
||||
// Получение информации о игроке
|
||||
export async function fetchPlayer(uuid: string): Promise<Player> {
|
||||
try {
|
||||
const response = await fetch(`${API_BASE_URL}/users/${uuid}`);
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData.message || 'Ошибка получения данных игрока');
|
||||
}
|
||||
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.error('API ошибка:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchCoins(username: string): Promise<CoinsResponse> {
|
||||
try {
|
||||
const response = await fetch(`${API_BASE_URL}/users/${username}/coins`);
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData.message || 'Ошибка получения данных игрока');
|
||||
}
|
||||
return await response.json();
|
||||
} catch (error) {
|
||||
console.error('API ошибка:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// Загрузка скина
|
||||
export async function uploadSkin(
|
||||
username: string,
|
||||
skinFile: File,
|
||||
skinModel: string,
|
||||
): Promise<void> {
|
||||
const savedConfig = localStorage.getItem('launcher_config');
|
||||
let accessToken = '';
|
||||
let clientToken = '';
|
||||
|
||||
if (savedConfig) {
|
||||
const config = JSON.parse(savedConfig);
|
||||
accessToken = config.accessToken || '';
|
||||
clientToken = config.clientToken || '';
|
||||
}
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('skin_file', skinFile);
|
||||
formData.append('skin_model', skinModel);
|
||||
formData.append('accessToken', accessToken);
|
||||
formData.append('clientToken', clientToken);
|
||||
|
||||
const response = await fetch(`${API_BASE_URL}/user/${username}/skin`, {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData.message || 'Не удалось загрузить скин');
|
||||
}
|
||||
}
|
||||
|
||||
// Получение токенов из локального хранилища
|
||||
export function getAuthTokens(): { accessToken: string; clientToken: string } {
|
||||
const savedConfig = localStorage.getItem('launcher_config');
|
||||
let accessToken = '';
|
||||
let clientToken = '';
|
||||
|
||||
if (savedConfig) {
|
||||
const config = JSON.parse(savedConfig);
|
||||
accessToken = config.accessToken || '';
|
||||
clientToken = config.clientToken || '';
|
||||
}
|
||||
|
||||
return { accessToken, clientToken };
|
||||
}
|
||||
|
||||
// Загрузка плаща
|
||||
export async function uploadCape(
|
||||
username: string,
|
||||
capeFile: File,
|
||||
): Promise<void> {
|
||||
const { accessToken, clientToken } = getAuthTokens();
|
||||
|
||||
const formData = new FormData();
|
||||
formData.append('cape_file', capeFile);
|
||||
formData.append('accessToken', accessToken);
|
||||
formData.append('clientToken', clientToken);
|
||||
|
||||
const response = await fetch(`${API_BASE_URL}/user/${username}/cape`, {
|
||||
method: 'POST',
|
||||
body: formData,
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData.message || 'Не удалось загрузить плащ');
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user