UNPKG

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
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')}` }; } }