supercell-coc
Version:
This is an API for Supercell's game [Clash of Clans](https://clashofclans.com) implemented into Node.JS by z3db0y.
841 lines (818 loc) • 44.5 kB
JavaScript
const Models = require('./models');
const fetch = require('./simple-fetch');
const endpoint = 'https://api.clashofclans.com/v1';
function getSearchParams(obj) {
for(var k in obj) {
if(obj[k] === undefined) delete obj[k];
}
let params = new URLSearchParams(obj);
if(params.toString()) return '?' + params.toString();
return '';
}
module.exports = function(apiKey) {
Object.freeze(apiKey);
let api = {
// DONE ✅
/**
* @description Access clan specific information.
*/
Clans: class {
/**
* @description Retrieve information about clan's current clan war league group.
*/
static async getCurrentWarLeagueGroup(clanTag) {
let response = await fetch(`${endpoint}/clans/${encodeURIComponent(clanTag)}/currentwar/leaguegroup`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) { return new Models.ClientError(json.reason, json.message, json.type, json.detail); }
else {
return new Models.ClanWarLeagueGroup(
json.tag,
json.state,
json.season,
json.clans ? new Models.ClanWarLeagueClanList(...json.clans.map(x => new Models.ClanWarLeagueClan(x.tag, x.clanLevel, x.name, x.members.map(y => new Models.ClanWarLeagueClanMember(y.tag, y.townHallLevel, y.name)), x.badgeUrls))) : new Models.ClanWarLeagueClanList(),
json.rounds ? new Models.ClanWarLeagueRoundList(...json.rounds.map(x => new Models.ClanWarLeagueRound(x.warTags))) : new Models.ClanWarLeagueRoundList()
);
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Retrieve information about individual clan war league war.
*/
static async getClanWarLeagueWar(warTag) {
let response = await fetch(`${endpoint}/clanwarleagues/wars/${encodeURIComponent(warTag)}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) { return new Models.ClientError(json.reason, json.message, json.type, json.detail); }
else {
return new Models.ClanWarLeagueGroup(
json.tag,
json.state,
json.season,
json.clans ? new Models.ClanWarLeagueClanList(...json.clans.map(x => new Models.ClanWarLeagueClan(x.tag, x.clanLevel, x.name, x.members.map(y => new Models.ClanWarLeagueClanMember(y.tag, y.townHallLevel, y.name)), x.badgeUrls))) : new Models.ClanWarLeagueClanList(),
json.rounds ? new Models.ClanWarLeagueRoundList(...json.rounds.map(x => new Models.ClanWarLeagueRound(x.warTags))) : new Models.ClanWarLeagueRoundList()
);
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Retrieve a clan's clan war log.
*/
static async getClanWarLog(clanTag, limit, after, before) {
let response = await fetch(`${endpoint}/clans/${encodeURIComponent(clanTag)}/warlog${getSearchParams({ limit, after, before })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) { return new Models.ClientError(json.reason, json.message, json.type, json.detail); }
else {
return json.items ? new Models.ClanWarLog(
...json.items.map(x =>
new Models.ClanWarLogEntry(
new Models.WarClan(
x.clan.destructionPercentage,
x.clan.tag,
x.clan.name,
x.clan.badgeUrls,
x.clan.clanLevel,
x.clan.attacks,
x.clan.stars,
x.clan.expEarned
),
x.teamSize,
x.attacksPerMember,
new Models.WarClan(
x.opponent.destructionPercentage,
x.opponent.tag,
x.opponent.name,
x.opponent.badgeUrls,
x.opponent.clanLevel,
x.opponent.attacks,
x.opponent.stars,
x.opponent.expEarned
),
x.endTime,
x.result
)
)
) : new Models.ClanWarLog()
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Search all clans by name and/or filtering the results using various criteria.
*/
static async search(name = '', warFrequency = '', locationId = '', minMembers = '', maxMembers = '', minClanPoints = '', minClanLevel = '', limit = '', before = '', after = '', labelIds = '') {
let opts = {
name,
warFrequency,
locationId,
minMembers,
maxMembers,
minClanPoints,
minClanLevel,
limit,
after,
before,
labelIds
};
Object.keys(opts).forEach(x => opts[x] === '' && delete opts[x]);
let response = await fetch(`${endpoint}/clans?` + new URLSearchParams(opts).toString(), {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return json.items ? new Models.ClanList(
...json.items.map(x =>
new Models.Clan(
null,
new Models.WarLeague(
x.warLeague.name,
x.warLeague.id
),
x.tag,
x.warWinStreak,
x.clanVersusPoints,
x.requiredTrophies,
x.requiredVersusTrophies,
x.requiredTownhallLevel,
x.isWarLogPublic,
x.warWins,
x.clanLevel,
x.warFrequency,
x.warTies,
x.warLosses,
x.clanPoints,
x.chatLanguage ? new Models.Language(x.chatLanguage.name, x.chatLanguage.id, x.chatLanguage.languageCode) : new Models.Language(),
new Models.LabelList(...x.labels.map(y =>
new Models.Label(y.name, y.id, y.iconUrls)
)),
x.name,
new Models.Location(x.location.localizedName, x.location.id, x.location.name, x.location.isCountry, x.location.countryCode),
x.type,
x.members,
x.description,
x.badgeUrls
)
)
) : new Models.ClanList()
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Retrieve information about clan's current clan war.
*/
static async getCurrentWar(clanTag) {
let response = await fetch(`${endpoint}/clans/${encodeURIComponent(clanTag)}/currentwar`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.ClanWar(
new Models.WarClan(
json.clan.destructionPercentage,
json.clan.tag,
json.clan.name,
json.clan.badgeUrls,
json.clan.clanLevel,
json.clan.attacks,
json.clan.stars,
json.clan.expEarned
),
json.teamSize,
json.attacksPerMember,
new Models.WarClan(
json.opponent.destructionPercentage,
json.opponent.tag,
json.opponent.name,
json.opponent.badgeUrls,
json.opponent.clanLevel,
json.opponent.attacks,
json.opponent.stars,
json.opponent.expEarned
),
json.startTime,
json.state,
json.endTime,
json.preparationStartTime
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get information about a single clan by clan tag.
*/
static async get(clanTag) {
let response = await fetch(`${endpoint}/clans/${encodeURIComponent(clanTag)}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.Clan(
new Models.ClanMemberList(
...json.memberList.map(x =>
new Models.ClanMember(
new Models.League(
x.league.name,
x.league.id,
x.league.iconUrls
),
x.tag,
x.name,
x.role,
x.expLevel,
x.clanRank,
x.previousClanRank,
x.donations,
x.donationsReceived,
x.trophies,
x.versusTrophies
)
)
),
new Models.WarLeague(json.warLeague.name, json.warLeague.id),
json.tag,
json.warWinStreak,
json.clanVersusPoints,
json.requiredTrophies,
json.requiredVersusTrophies,
json.requiredTownhallLevel,
json.isWarLogPublic,
json.warWins,
json.clanLevel,
json.warFrequency,
json.warTies,
json.warLosses,
json.clanPoints,
json.chatLanguage ? new Models.Language(json.chatLanguage.name, json.chatLanguage.id, json.chatLanguage.languageCode) : new Models.Language(),
new Models.LabelList(...json.labels.map(y =>
new Models.Label(y.name, y.id, y.iconUrls)
)),
json.name,
new Models.Location(json.location.localizedName, json.location.id, json.location.name, json.location.isCountry, json.location.countryCode),
json.type,
json.members,
json.description,
json.badgeUrls
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description List clan members.
*/
static async getMembers(clanTag) {
let response = await fetch(`${endpoint}/clans/${encodeURIComponent(clanTag)}/members`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.ClanMemberList(
...json.items.map(x =>
new Models.ClanMember(
new Models.League(
x.league.name,
x.league.id,
x.league.iconUrls
),
x.tag,
x.name,
x.role,
x.expLevel,
x.clanRank,
x.previousClanRank,
x.donations,
x.donationsReceived,
x.trophies,
x.versusTrophies
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
},
// DONE ✅
/**
* @description Access player specific information.
*/
Players: class {
/**
* @description Get information about a single player by player tag.
*/
static async get(playerTag) {
let response = await fetch(`${endpoint}/players/${encodeURIComponent(playerTag)}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.Player(
json.clan ? new Models.PlayerClan(json.clan.tag, json.clan.clanLevel, json.clan.name, json.clan.badgeUrls) : null,
json.league ? new Models.League(json.league.name, json.league.id, json.league.iconUrls) : null,
json.townHallLevel,
json.townHallWeaponLevel,
json.versusBattleWins,
json.legendStatistics ? new Models.PlayerLegendStatistics(json.legendStatistics.bestSeason, json.legendStatistics.currentSeason, json.legendStatistics.previousSeason, json.legendStatistics.previousVersusSeason, json.legendStatistics.bestVersusSeason, json.legendStatistics.legendTrophies) : new Models.PlayerLegendStatistics(),
json.troops ? new Models.PlayerItemLevelList(...json.troops.map(x => new Models.PlayerItemLevel(x.level, x.name, x.maxLevel, x.village, x.superTroopIsActive || false))) : new Models.PlayerItemLevelList(),
json.heroes ? new Models.PlayerItemLevelList(...json.heroes.map(x => new Models.PlayerItemLevel(x.level, x.name, x.maxLevel, x.village, x.superTroopIsActive || false))) : new Models.PlayerItemLevelList(),
json.spells ? new Models.PlayerItemLevelList(...json.spells.map(x => new Models.PlayerItemLevel(x.level, x.name, x.maxLevel, x.village, x.superTroopIsActive || false))) : new Models.PlayerItemLevelList(),
json.role,
json.warPreference,
json.attackWins,
json.defenseWins,
json.labels ? new Models.LabelList(...json.labels.map(x => new Models.Label(x.name, x.id, x.iconUrls))) : null,
json.tag,
json.name,
json.expLevel,
json.trophies,
json.bestTrophies,
json.donations,
json.donationsReceived,
json.builderHallLevel,
json.versusTrophies,
json.bestVersusTrophies,
json.warStars,
json.achievements ? new Models.PlayerAchievementProgressList(...json.achievements.map(x => new Models.PlayerAchievementProgress(x.stars, x.value, x.name, x.target, x.info, x.completionInfo, x.village))) : null,
json.versusBattleWinCount
);
}
} catch(err) { console.log(err); return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Verify player API token that can be found from the game settings.
*/
static async verifyToken(playerTag, token) {
let response = await fetch(`${endpoint}/players/${encodeURIComponent(playerTag)}/verifytoken`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({ token })
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.VerifyTokenResponse(json.tag, json.token, json.status);
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
},
// DONE ✅
/**
* @description Access league information.
*/
Leagues: class {
/**
* @description List leagues.
*/
static async list(limit, before, after) {
let response = await fetch(`${endpoint}/leagues${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.LeagueList(
...json.items.map(x =>
new Models.League(
x.name,
x.id,
x.iconUrls
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get league season rankings. Note that league season information is available only for Legend League.
*/
static async getSeasonRankings(leagueId, season, limit, before, after) {
let response = await fetch(`${endpoint}/leagues/${encodeURIComponent(leagueId)}/seasons/${encodeURIComponent(season)}${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.PlayerRankingList(
...json.items.map(x =>
new Models.PlayerRanking(
x.clan,
null,
x.defenseWins,
x.attackWins,
x.tag,
x.name,
x.expLevel,
x.rank,
x.previousRank,
x.trophies
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get league by id.
*/
static async get(leagueId) {
let response = await fetch(`${endpoint}/leagues/${encodeURIComponent(leagueId)}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.League(
json.name,
json.id,
json.iconUrls
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get league seasons. Note that league season information is available only for Legend League.
*/
static async getSeasonInfo(leagueId, limit, before, after) {
let response = await fetch(`${endpoint}/leagues/${encodeURIComponent(leagueId)}/seasons${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.LeagueSeasonList(
...json.items.map(x =>
new Models.LeagueSeason(
x.id
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get war league information.
*/
static async getWarLeague(leagueId) {
let response = await fetch(`${endpoint}/warleagues/${encodeURIComponent(leagueId)}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.WarLeague(
json.name,
json.id
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description List was leagues.
*/
static async listWarLeagues(limit, before, after) {
let response = await fetch(`${endpoint}/warleagues${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.WarLeagueList(
...json.items.map(x =>
new Models.WarLeague(
x.name,
x.id
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
},
// DONE ✅
/**
* @description Access global and local rankings.
*/
Locations: class {
/**
* @description List locations.
*/
static async list(limit, before, after) {
let response = await fetch(`${endpoint}/locations${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.LocationList(
...json.items.map(x =>
new Models.Location(
x.localizedName,
x.id,
x.name,
x.isCountry,
x.countryCode
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get location by id.
*/
static async get(locationId) {
let response = await fetch(`${endpoint}/locations/${encodeURIComponent(locationId)}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.Location(
json.localizedName,
json.id,
json.name,
json.isCountry,
json.countryCode
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get player rankings for a specific location.
*/
static async getPlayerRankings(locationId, limit, before, after) {
let response = await fetch(`${endpoint}/locations/${encodeURIComponent(locationId)}/rankings/players${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.PlayerRankingList(
...json.items.map(x =>
new Models.PlayerRanking(
x.clan,
null,
x.defenseWins,
x.attackWins,
x.tag,
x.name,
x.expLevel,
x.rank,
x.previousRank,
x.trophies
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get player versus rankings for a specific location.
*/
static async getPlayerVersusRankings(locationId, limit, before, after) {
let response = await fetch(`${endpoint}/locations/${encodeURIComponent(locationId)}/rankings/players-versus${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.PlayerVersusRankingList(
...json.items.map(x =>
new Models.PlayerVersusRanking(
x.clan ? new Models.PlayerRankingClan(
x.clan.tag,
x.clan.name,
x.clan.badgeUrls
) : null,
x.versusBattleWins,
x.tag,
x.name,
x.expLevel,
x.rank,
x.previousRank,
x.versusTrophies
)
)
)
}
} catch(err) { console.log(err); return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get clan rankings for a specific location.
*/
static async getClanRankings(locationId, limit, before, after) {
let response = await fetch(`${endpoint}/locations/${encodeURIComponent(locationId)}/rankings/clans${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.ClanRankingList(
...json.items.map(x =>
new Models.ClanRanking(
x.clanPoints,
x.clanLevel,
new Models.Location(x.location.localizedName, x.location.id, x.location.name, x.location.isCountry, x.location.countryCode),
x.members,
x.tag,
x.name,
x.rank,
x.previousRank,
x.badgeUrls
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description Get clan versus rankings for a specific location.
*/
static async getClanVersusRankings(locationId, limit, before, after) {
let response = await fetch(`${endpoint}/locations/${encodeURIComponent(locationId)}/rankings/clans-versus${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.ClanVersusRankingList(
...json.items.map(x =>
new Models.ClanVersusRanking(
x.tag,
x.name,
new Models.Location(x.location.localizedName, x.location.id, x.location.name, x.location.isCountry, x.location.countryCode),
x.badgeUrls,
x.clanLevel,
x.members,
x.rank,
x.previousRank,
x.clanVersusPoints
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
},
// DONE ✅
/**
* @description Access information about gold pass.
*/
GoldPass: class {
/**
* @description Get information about the current gold pass season.
*/
static async get() {
let response = await fetch(`${endpoint}/goldpass/seasons/current`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.GoldPassSeason(
json.startTime,
json.endTime
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
},
// DONE ✅
/**
* Esports related APIs.
*/
E_Sports: class {
// No API endpoints for this one.
},
// DONE ✅
Labels: class {
/**
* @description List player labels.
*/
static async listPlayerLabels(limit, before, after) {
let response = await fetch(`${endpoint}/labels/players${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.LabelList(
...json.items.map(x =>
new Models.Label(
x.name,
x.id,
x.iconUrls
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
/**
* @description List clan labels.
*/
static async listClanLabels(limit, before, after) {
let response = await fetch(`${endpoint}/labels/clans${getSearchParams({ limit, before, after })}`, {
headers: {
'Authorization': `Bearer ${apiKey}`
}
}).catch(_ => { return new Models.ClientError('unknown', 'An unknown error occured', 500); });
try {
let json = JSON.parse(response.body);
if(response.code !== 200) return new Models.ClientError(json.reason, json.message, json.type, json.detail);
else {
return new Models.LabelList(
...json.items.map(x =>
new Models.Label(
x.name,
x.id,
x.iconUrls
)
)
)
}
} catch(err) { return new Models.ClientError('unknown', 'An unknown error occured', response.code); }
}
},
Enums: require('./enums')
}
for(var k in api) {
Object.freeze(api[k]);
}
return api;
}