UNPKG

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
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;