Skip to content

Commit

Permalink
chore: remove handleData, refactor data flow
Browse files Browse the repository at this point in the history
Signed-off-by: Elijah Conners <business@elijahpepe.com>
  • Loading branch information
ElijahPepe committed Sep 3, 2022
1 parent 3c5bbcd commit 31efdc9
Show file tree
Hide file tree
Showing 12 changed files with 170 additions and 189 deletions.
47 changes: 21 additions & 26 deletions src/client/Client.js
Expand Up @@ -11,7 +11,6 @@ const ProfileManager = require('../managers/ProfileManager');
const QuestManager = require('../managers/QuestManager');
const RESTManager = require('../managers/RESTManager');
const { apiKey, userAgent } = require('../util/Constants.js');
const { handleData } = require('../util/Data');
const Events = require('../util/Events');
const Routes = require('../util/Routes');

Expand Down Expand Up @@ -192,31 +191,27 @@ class Client extends EventEmitter {
* @example
* client.info('steamTicket');
*/
info(steamTicket) {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async (resolve, reject) => {
if (!steamTicket && !this.steamTicket) {
throw new Error('A Steam ticket must be provided.');
}
const data = await this.rest.post(
Routes.access(),
JSON.stringify({
auth: { fail_on_missing: true, steam: this.steamTicket ? this.steamTicket : steamTicket },
options: [
'configuration',
'achievements',
'account',
'profile',
'notifications',
'maintenance',
'wb_network',
],
}),
);
handleData(data, resolve, reject);
this.user = data;
return this.user;
});
async info(steamTicket) {
if (!steamTicket && !this.steamTicket) {
throw new Error('A Steam ticket must be provided.');
}
const data = await this.rest.post(
Routes.access(),
JSON.stringify({
auth: { fail_on_missing: true, steam: this.steamTicket ? this.steamTicket : steamTicket },
options: [
'configuration',
'achievements',
'account',
'profile',
'notifications',
'maintenance',
'wb_network',
],
}),
);
this.user = data;
return this.user;
}
}

Expand Down
11 changes: 11 additions & 0 deletions src/errors/MultiVersusAPIError.js
@@ -0,0 +1,11 @@
class MultiVersusAPIError extends Error {
constructor(rawError) {
super(MultiVersusAPIError.getMessage(rawError));
}

static getMessage(error) {
return error.msg;
}
}

module.exports = MultiVersusAPIError;
8 changes: 7 additions & 1 deletion src/index.js
Expand Up @@ -4,8 +4,8 @@ exports.Client = require('./client/Client');
// Utilities
exports.CharacterData = require('./util/CharacterData');
exports.Constants = require('./util/Constants');
exports.Data = require('./util/Data');
exports.Events = require('./util/Events');
exports.Routes = require('./util/Routes');

// Managers
exports.AccountManager = require('./managers/AccountManager');
Expand All @@ -15,3 +15,9 @@ exports.LeaderboardManager = require('./managers/LeaderboardManager');
exports.MatchManager = require('./managers/MatchManager');
exports.ProfileManager = require('./managers/ProfileManager');
exports.QuestManager = require('./managers/QuestManager');
exports.RESTManager = require('./managers/RESTManager');

// Structures
exports.Base = require('./structures/Base');
exports.Profile = require('./structures/Profile');
exports.Search = require('./structures/Search');
16 changes: 6 additions & 10 deletions src/managers/AccountManager.js
@@ -1,6 +1,4 @@
/* eslint-disable no-async-promise-executor */
const BaseManager = require('./BaseManager');
const { handleData } = require('../util/Data.js');
const Routes = require('../util/Routes');

/**
Expand All @@ -13,14 +11,12 @@ class AccountManager extends BaseManager {
* @param {string} id The ID of the user to fetch
* @returns {Promise<Object>}
*/
fetch(id) {
return new Promise(async (resolve, reject) => {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.user(id));
handleData(data, resolve, reject);
});
async fetch(id) {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.user(id));
return data;
}
}

Expand Down
16 changes: 6 additions & 10 deletions src/managers/BattlepassManager.js
@@ -1,6 +1,4 @@
/* eslint-disable no-async-promise-executor */
const BaseManager = require('./BaseManager');
const { handleData } = require('../util/Data.js');
const Routes = require('../util/Routes');

/**
Expand All @@ -13,14 +11,12 @@ class BattlepassManager extends BaseManager {
* @param {string} id The ID of the user to fetch
* @returns {Promise<Object>}
*/
fetch(id) {
return new Promise(async (resolve, reject) => {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.battlepass(id));
handleData(data, resolve, reject);
});
async fetch(id) {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.battlepass(id));
return data;
}
}

Expand Down
16 changes: 6 additions & 10 deletions src/managers/ClanManager.js
@@ -1,6 +1,4 @@
/* eslint-disable no-async-promise-executor */
const BaseManager = require('./BaseManager');
const { handleData } = require('../util/Data.js');
const Routes = require('../util/Routes');

/**
Expand All @@ -16,14 +14,12 @@ class ClanManager extends BaseManager {
* @param {number?} count The number of entries
* @returns {Promise<Object>}
*/
fetch(id, page = 1, count = 25) {
return new Promise(async (resolve, reject) => {
if (!id) {
return reject(new Error('A user ID must be provided.'));
}
const data = await this.client.rest.get(Routes.clan(id, page, count));
handleData(data, resolve, reject);
});
async fetch(id, page = 1, count = 25) {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.clan(id, page, count));
return data;
}
}

Expand Down
82 changes: 36 additions & 46 deletions src/managers/LeaderboardManager.js
@@ -1,6 +1,4 @@
/* eslint-disable no-async-promise-executor */
const BaseManager = require('./BaseManager');
const { handleData } = require('../util/Data.js');
const Routes = require('../util/Routes');

/**
Expand All @@ -20,14 +18,12 @@ class LeaderboardManager extends BaseManager {
* @param {LeaderboardTypes} type The type of leaderboard to fetch
* @returns {Promise<Object>}
*/
fetch(type) {
return new Promise(async (resolve, reject) => {
if (type !== '2v2' && type !== '1v1') {
return reject(new Error('Leaderboard type must be 1v1 or 2v2.'));
}
const data = await this.client.rest.get(Routes.leaderboard(type));
handleData(data, resolve, reject);
});
async fetch(type) {
if (type !== '2v2' && type !== '1v1') {
throw new Error('Leaderboard type must be 1v1 or 2v2.');
}
const data = await this.client.rest.get(Routes.leaderboard(type));
return data;
}

/**
Expand All @@ -36,17 +32,15 @@ class LeaderboardManager extends BaseManager {
* @param {string} character The character leaderboard to fetch
* @returns {Promise<Object>}
*/
fetchCharacter(type, character) {
return new Promise(async (resolve, reject) => {
if (type !== '2v2' && type !== '1v1') {
return reject(new Error('Leaderboard type must be 1v1 or 2v2.'));
}
if (!character) {
return reject(new Error('A character must be provided.'));
}
const data = await this.client.rest.get(Routes.leaderboardCharacter(type, character));
handleData(data, resolve, reject);
});
async fetchCharacter(type, character) {
if (type !== '2v2' && type !== '1v1') {
throw new Error('Leaderboard type must be 1v1 or 2v2.');
}
if (!character) {
throw new Error('A character must be provided.');
}
const data = await this.client.rest.get(Routes.leaderboardCharacter(type, character));
return data;
}

/**
Expand All @@ -55,17 +49,15 @@ class LeaderboardManager extends BaseManager {
* @param {LeaderboardTypes} type The type of leaderboard to fetch
* @returns {Promise<Object>}
*/
fetchProfile(id, type) {
return new Promise(async (resolve, reject) => {
if (type !== '2v2' && type !== '1v1') {
return reject(new Error('Leaderboard type must be 1v1 or 2v2.'));
}
if (!id) {
return reject(new Error('A user ID must be provided.'));
}
const data = await this.client.rest.get(Routes.leaderboardProfile(id, type));
handleData(data, resolve, reject);
});
async fetchProfile(id, type) {
if (type !== '2v2' && type !== '1v1') {
throw new Error('Leaderboard type must be 1v1 or 2v2.');
}
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.leaderboardProfile(id, type));
return data;
}

/**
Expand All @@ -75,20 +67,18 @@ class LeaderboardManager extends BaseManager {
* @param {string} character The character leaderboard to fetch
* @returns {Promise<Object>}
*/
fetchProfileCharacter(id, type, character) {
return new Promise(async (resolve, reject) => {
if (type !== '2v2' && type !== '1v1') {
return reject(new Error('Leaderboard type must be 1v1 or 2v2.'));
}
if (!id) {
return reject(new Error('A user ID must be provided.'));
}
if (!character) {
return reject(new Error('A character must be provided.'));
}
const data = await this.client.rest.get(Routes.leaderboardProfileCharacter(id, type, character));
handleData(data, resolve, reject);
});
async fetchProfileCharacter(id, type, character) {
if (type !== '2v2' && type !== '1v1') {
throw new Error('Leaderboard type must be 1v1 or 2v2.');
}
if (!id) {
throw new Error('A user ID must be provided.');
}
if (!character) {
throw new Error('A character must be provided.');
}
const data = await this.client.rest.get(Routes.leaderboardProfileCharacter(id, type, character));
return data;
}
}

Expand Down
30 changes: 12 additions & 18 deletions src/managers/MatchManager.js
@@ -1,6 +1,4 @@
/* eslint-disable no-async-promise-executor */
const BaseManager = require('./BaseManager');
const { handleData } = require('../util/Data.js');
const Routes = require('../util/Routes');

/**
Expand All @@ -13,14 +11,12 @@ class MatchManager extends BaseManager {
* @param {string} id The ID of the natch to fetch
* @returns {Promise<Object>}
*/
fetch(id) {
return new Promise(async (resolve, reject) => {
if (!id) {
throw new Error('A match ID must be provided.');
}
const data = await this.client.rest.get(Routes.match(id));
handleData(data, resolve, reject);
});
async fetch(id) {
if (!id) {
throw new Error('A match ID must be provided.');
}
const data = await this.client.rest.get(Routes.match(id));
return data;
}

/**
Expand All @@ -29,14 +25,12 @@ class MatchManager extends BaseManager {
* @param {number?} page The page
* @returns {Promise<Object>}
*/
fetchAll(id, page = 1) {
return new Promise(async (resolve, reject) => {
if (!id) {
return reject(new Error('A user ID must be provided.'));
}
const data = await this.client.rest.get(Routes.matchAll(id, page));
handleData(data, resolve, reject);
});
async fetchAll(id, page = 1) {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.matchAll(id, page));
return data;
}
}

Expand Down
38 changes: 12 additions & 26 deletions src/managers/ProfileManager.js
@@ -1,8 +1,6 @@
/* eslint-disable no-async-promise-executor */
const BaseManager = require('./BaseManager');
const Profile = require('../structures/Profile');
const Search = require('../structures/Search');
const { handleData } = require('../util/Data.js');
const Routes = require('../util/Routes');

/**
Expand All @@ -17,37 +15,25 @@ class ProfileManager extends BaseManager {
* @param {string?} cursor The cursor
* @returns {Promise<Search>}
*/
search(username, limit = 25, cursor = null) {
return new Promise(async (resolve, reject) => {
if (!username) {
throw new Error('A query must be provided.');
}
const data = await this.client.rest.get(Routes.profileSearch(username, limit, cursor));
if (data.msg) {
return reject(new Error(data.msg));
} else {
handleData(new Search(this.client, data), resolve, reject);
}
});
async search(username, limit = 25, cursor = null) {
if (!username) {
throw new Error('A query must be provided.');
}
const data = await this.client.rest.get(Routes.profileSearch(username, limit, cursor));
return new Search(this.client, data);
}

/**
* Obtains a user from MultiVersus
* @param {string} id The ID of the user to fetch
* @returns {Promise<Profile>}
*/
fetch(id) {
return new Promise(async (resolve, reject) => {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.profile(id));
if (data.msg) {
return reject(new Error(data.msg));
} else {
handleData(new Profile(this.client, data), resolve, reject);
}
});
async fetch(id) {
if (!id) {
throw new Error('A user ID must be provided.');
}
const data = await this.client.rest.get(Routes.profile(id));
return new Profile(this.client, data);
}
}

Expand Down

0 comments on commit 31efdc9

Please sign in to comment.