minecraft-core-master
Version:
Núcleo avanzado para launchers de Minecraft. Descarga, instala y ejecuta versiones de Minecraft, assets, librerías, Java y loaders de forma automática y eficiente.
89 lines (88 loc) • 3.24 kB
JavaScript
import { Buffer } from 'node:buffer';
export default class AZauth {
url;
skinAPI;
constructor(url) {
this.url = new URL('/api/auth', url).toString();
this.skinAPI = new URL('/api/skin-api/skins', url).toString();
}
async login(username, password, A2F = null) {
const response = await fetch(`${this.url}/authenticate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: username, password, code: A2F })
});
const data = (await response.json());
// 2FA requerido
if (data.status === 'pending' && data.reason === '2fa')
return { A2F: true };
// Error en login
if (data.status === 'error')
return { error: true, reason: data.reason, message: data.message };
// Login correcto
const id = data.id;
return {
access_token: data.access_token,
client_token: data.uuid,
uuid: data.uuid,
name: data.username,
user_properties: '{}',
user_info: {
id,
banned: data.banned,
money: data.money,
role: data.role,
verified: data.email_verified
},
meta: { online: false, type: 'AZauth' },
profile: { skins: id ? [await this.skin(id)] : [] }
};
}
async verify(user) {
const response = await fetch(`${this.url}/verify`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ access_token: user.access_token })
});
const data = (await response.json());
if (data.status === 'error')
return { error: true, reason: data.reason, message: data.message };
const id = data.id;
return {
access_token: data.access_token,
client_token: data.uuid,
uuid: data.uuid,
name: data.username,
user_properties: '{}',
user_info: {
id,
banned: data.banned,
money: data.money,
role: data.role,
verified: data.email_verified
},
meta: { online: false, type: 'AZauth' },
profile: { skins: id ? [await this.skin(id)] : [] }
};
}
async signout(user) {
const response = await fetch(`${this.url}/logout`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ access_token: user.access_token })
});
const data = (await response.json());
return !data.error;
}
async skin(uuid) {
const response = await fetch(`${this.skinAPI}/${uuid}`, { method: 'GET' });
// Sin skin → devolver URL directa
if (response.status === 404)
return { url: `${this.skinAPI}/${uuid}` };
const buffer = Buffer.from(await response.arrayBuffer());
return {
url: `${this.skinAPI}/${uuid}`,
base64: `data:image/png;base64,${buffer.toString('base64')}`
};
}
}