mineplex-api
Version:
Low level Mineplex API. You might be looking for mineplex-api-wrapper for a higher level API, unless you're making a higher level one with this.
87 lines (70 loc) • 3.06 kB
JavaScript
const request = require('request');
const config = require('./../config/config');
class MineplexAPI{
constructor(apikey){
this._key = apikey;
this._url = config.base_url;
this.defaultHandler = (callback, err, res, body)=>{
if(err) return callback(err);
if(res.statusCode != 200) return callback(res.statusCode);
if(body.error) return callback(body.error);
return callback(null, body);
};
this.sendRequest = (callback, route, extra)=>{
request({url: this.getRequestUrl(route, extra), json: true}, (err, res, body)=>{
this.defaultHandler(callback, err, res, body);
});
};
this.get = {
//server: (callback)=>{this.sendRequest(callback, `server`);},
player: {
info: (username, callback)=>{this.sendRequest(callback, `player`, username);},
status: (username, callback)=>{this.sendRequest(callback, `player.status`, `${username}/status`);},
friends: (username, callback)=>{this.sendRequest(callback, `player.friends`, `${username}/friends`);}
},
amplifier: {
groups : (callback)=>{this.sendRequest(callback, `amplifierGroup`);},
all : (callback)=>{this.sendRequest(callback, `amplifier`)},
specific: (group, callback)=>{this.sendRequest(callback, `amplifier.specific`, group)}
},
fountain: (callback)=>{this.sendRequest(callback, `fountain`);},
network:{
status: (callback)=>{this.sendRequest(callback, 'network')},
us: {
status: (callback)=>{this.sendRequest(callback, 'network.us')},
server: (server, callback)=>{this.sendRequest(callback, `network.us.server`, server)}
},
eu: {
status: (callback)=>{this.sendRequest(callback, 'network.eu')},
server: (server, callback)=>{this.sendRequest(callback, `network.eu.server`, server)}
}
}
}
}
getApiKey(){
return this._key;
}
getBaseUrl(){
return this._url;
}
getRequestUrl(route, extra){
extra = extra || ``;
route = config.routes[route];
return `${this.getBaseUrl()}${route.url}${extra}?apiKey=${this.getApiKey()}`;
}
addEndpoint(endpointName, url, getRoute, process){
config.routes[endpointName] = {
url: url
};
let route = getRoute.split('.');
let apiObj = this.get;
for(let i = 0; i < route.length; i++){
if(!apiObj[route[i]]) apiObj[route[i]] = {};
if(i == route.length-1){
apiObj[route[i]] = process;
break;
}else apiObj = apiObj[route[i]];
}
}
}
module.exports = MineplexAPI;