UNPKG

@globalart/warface-api

Version:
117 lines (116 loc) 4.62 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserProvider = void 0; const core_1 = require("../../core"); const axios_1 = __importDefault(require("axios")); class UserProvider { async stat(nickname, server = null) { return new Promise(async (resolve, reject) => { if (!nickname) { reject('nickname_not_specified'); } let servers = []; if (server) { servers.push(server); } else { servers = [core_1.Server.Ru, core_1.Server.Int]; } for (const server of servers) { const endpoint = core_1.WFClient.getEndpoint(server); try { const [playerRes, achievements] = await Promise.all([ axios_1.default.get(`${encodeURI(`${endpoint}/user/stat?name=${nickname}`)}`), this.achievements(nickname, server), ]); const player = playerRes.data; if (player.user_id) { return resolve(this.formatPlayerStructure({ player, server, achievements, })); } } catch (err) { const response = err.response.data; if (response.message === 'Ошибка: invalid response status') { return reject('maintenance'); } else if (response.message === 'Персонаж неактивен') { return reject('inactive'); } else if (response.message === 'Игрок скрыл свою статистику') { return reject('hidden'); } else if (server === servers[servers.length - 1] && response.message === 'Пользователь не найден') { return reject('not_found'); } } } }); } async achievements(nickname, server) { return new Promise(async (resolve, reject) => { let endpoint; if (!nickname) { return reject(new Error('nickname_not_specified')); } let servers = []; if (server) { servers.push(server); endpoint = core_1.WFClient.getEndpoint(server); } else { servers = [core_1.Server.Ru, core_1.Server.Int]; endpoint = core_1.WFClient.getEndpoint(server); } try { const achievements = await axios_1.default.get(encodeURI(`${endpoint}/user/achievements?name=${nickname}`)); return resolve(achievements.data); } catch (err) { const { data } = err.response; if (data.message === 'Ошибка: invalid response status') { return reject('maintenance'); } else if (data.message === 'Персонаж неактивен') { return reject('inactive'); } else if (data.message === 'Игрок скрыл свою статистику') { return reject('hidden'); } else if (data.message === 'Пользователь не найден') { return reject('not_found'); } } }); } getMatch(el, regexp) { return el.match(regexp)[0].trim(); } parseFullResponse(fullResponse) { return fullResponse.split(/<Sum>/).reduce((acc, el) => { if (!el) return acc; const key = this.getMatch(el, /.*(?=\=)/); acc[key] = +this.getMatch(el, /(?<=\=).*/); return acc; }, {}); } formatPlayerStructure(playerData) { const { server, player, achievements } = playerData; const full_player = this.parseFullResponse(player['full_response']); delete player['full_response']; return { server, player, full_player, achievements, }; } } exports.UserProvider = UserProvider;