@globalart/warface-api
Version:
Warface API library for nodeJs
117 lines (116 loc) • 4.62 kB
JavaScript
;
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;