diff --git a/.gitignore b/.gitignore index 31605bb..ce3e92c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ \node_modules -\dist \ No newline at end of file +\dist +package-lock.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..ded53e3 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# mcss-api-js diff --git a/package.json b/package.json index 2397c1a..2e5691f 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "Simple package to interact with MCSS' API", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build": "npx tsc src/index.ts", + "test": "node ./test/blob.js", + "build": "npx tsc ./src/index.ts", "prepare": "npm run build", "dev": "pnpm exec swc src --config-file .swcrc -d dist/ && node dist/index.js", "start": "node dist/index.js" @@ -16,7 +16,8 @@ "typescript": "^4.6.4" }, "dependencies": { + "axois": "^0.0.1-security", "jest": "^28.1.3", "pnpm": "^7.6.0" } -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..dea14f1 --- /dev/null +++ b/src/index.js @@ -0,0 +1,246 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var axios_1 = require("axios"); +var https_1 = require("https"); +module.exports = /** @class */ (function () { + function MCSS(_ip, _port, _key) { + if (!_ip || !_port || !_key) + throw new Error("Must Provide a valid Info"); + this.instance = axios_1["default"].create({ + httpsAgent: new https_1.Agent({ rejectUnauthorized: false }), + validateStatus: function () { return true; }, + headers: { + apikey: _key + } + }); + this.ip = _ip; + this.port = _port; + this.apiKey = _key; + this.server = new Server(this); + } + MCSS.prototype.getURL = function () { + return "http://".concat(this.ip, ":").concat(this.port, "/api/v1/"); + }; + MCSS.prototype.generateResponse = function (code, data) { + switch (code) { + case 200: + return { status: 200, data: data }; + case 401: + return { status: 401, error: { message: 'Incorrect API key' } }; + case 404: + return { status: 404, error: { message: 'Server not found' } }; + default: + return { status: code, error: { message: 'An unexpected error occured' } }; + } + }; + MCSS.prototype.getServers = function () { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.instance.get(this.getURL() + "servers")]; + case 1: + response = _a.sent(); + return [2 /*return*/, this.generateResponse(response.status, response.data)]; + } + }); + }); + }; + MCSS.prototype.getServerCount = function () { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.instance.get(this.getURL() + "servers/count")]; + case 1: + response = _a.sent(); + return [2 /*return*/, this.generateResponse(response.status, response.data)]; + } + }); + }); + }; + return MCSS; +}()); +var Server = /** @class */ (function () { + function Server(client) { + this.client = client; + } + Server.prototype.getURL = function () { + return "http://".concat(this.client.ip, ":").concat(this.client.port, "/api/v1/servers/"); + }; + Server.prototype.get = function (_id) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client.instance.get(this.getURL() + _id)]; + case 1: + response = _a.sent(); + this.server = _id; + return [2 /*return*/, this.client.generateResponse(response.status, response.data)]; + } + }); + }); + }; + Server.prototype.getStats = function (_id) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client.instance.get(this.getURL() + _id + "/stats")]; + case 1: + response = _a.sent(); + return [2 /*return*/, this.client.generateResponse(response.status, response.data)]; + } + }); + }); + }; + Server.prototype.getIcon = function (_id) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client.instance.get(this.getURL() + _id + "/icon")]; + case 1: + response = _a.sent(); + return [2 /*return*/, this.client.generateResponse(response.status, response.data)]; + } + }); + }); + }; + Server.prototype.edit = function (_id, server) { + return __awaiter(this, void 0, void 0, function () { + var response; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.client.instance.put(this.getURL() + _id, server)]; + case 1: + response = _a.sent(); + return [2 /*return*/, this.client.generateResponse(response.status, response.data)]; + } + }); + }); + }; + Server.prototype.execute = function (_id) { + var action = []; + for (var _i = 1; _i < arguments.length; _i++) { + action[_i - 1] = arguments[_i]; + } + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!(action.length == 1)) return [3 /*break*/, 14]; + _a = action[0]; + switch (_a) { + case 0: return [3 /*break*/, 1]; + case 1: return [3 /*break*/, 3]; + case 2: return [3 /*break*/, 5]; + case 3: return [3 /*break*/, 7]; + case 4: return [3 /*break*/, 9]; + } + return [3 /*break*/, 11]; + case 1: return [4 /*yield*/, this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 0 })]; + case 2: + _b.sent(); + return [3 /*break*/, 13]; + case 3: return [4 /*yield*/, this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 1 })]; + case 4: + _b.sent(); + return [3 /*break*/, 13]; + case 5: return [4 /*yield*/, this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 2 })]; + case 6: + _b.sent(); + return [3 /*break*/, 13]; + case 7: return [4 /*yield*/, this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 3 })]; + case 8: + _b.sent(); + return [3 /*break*/, 13]; + case 9: return [4 /*yield*/, this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 4 })]; + case 10: + _b.sent(); + return [3 /*break*/, 13]; + case 11: return [4 /*yield*/, this.client.instance.post(this.getURL() + _id + "/execute/command", { command: action[0] })]; + case 12: + _b.sent(); + return [3 /*break*/, 13]; + case 13: return [3 /*break*/, 16]; + case 14: return [4 /*yield*/, this.client.instance.post(this.getURL() + _id + "/execute/commands", { commands: action })]; + case 15: + _b.sent(); + _b.label = 16; + case 16: return [2 /*return*/]; + } + }); + }); + }; + return Server; +}()); +var ServerEditor = /** @class */ (function () { + function ServerEditor() { + this.name; + this.description; + this.autoStartWithMcss; + this.forceSaveOnStop; + this.allocatedMemoryInMegabytes; + } + ServerEditor.prototype.setName = function (name) { + this.name = name; + return this; + }; + ServerEditor.prototype.setDescription = function (description) { + this.description = description; + return this; + }; + ServerEditor.prototype.setAutoStartWithMcss = function (condition) { + this.autoStartWithMcss = condition; + return this; + }; + ServerEditor.prototype.setForceSaveOnStop = function (condition) { + this.forceSaveOnStop = condition; + return this; + }; + ServerEditor.prototype.setAllocatedMemoryInMegabytes = function (amount) { + this.allocatedMemoryInMegabytes = amount; + return this; + }; + return ServerEditor; +}()); +module.exports.ServerEditor = ServerEditor; diff --git a/src/index.ts b/src/index.ts index f82ae77..abc5847 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,6 @@ -import axios, { AxiosResponse } from 'axios' +import axios from 'axios' import { Agent } from 'https' -enum getServersFilter { None = 0, Minimal = 1, Status = 2 } -enum getServerCountFilter { None = 0, Online = 1, Offline = 2, ByServerType = 3 } -enum executeServerActionFilter { InvalidOrEmpty = 0, Stop = 1, Start = 2, Kill = 3, Restart = 4 } -enum getTaskListFilter { None = 0, FixedTime = 1, Interval = 2, Timeless = 3 } - interface AppResponse { status: number, data?: any, @@ -14,24 +9,33 @@ interface AppResponse { } } -const instance = axios.create({ - httpsAgent: new Agent({rejectUnauthorized: false}), - validateStatus: () => true -}); -export default class MCSS { +module.exports = class MCSS { ip: string; port: number|string; apiKey: string; - headers: { headers: { ApiKey: string } } + instance: any; + server: Server; + constructor(_ip: string, _port: string|number, _key: string) { + if(!_ip || !_port || !_key) throw new Error("Must Provide a valid Info"); - constructor(ip: string, port: string|number, apiKey: string) { - this.ip = ip - this.port = port - this.apiKey = apiKey - this.headers = { headers: { ApiKey: this.apiKey } } - } + this.instance = axios.create({ + httpsAgent: new Agent({ rejectUnauthorized: false }), + validateStatus: () => true, + headers: { + apikey : _key + } + }); + + this.ip = _ip; + this.port = _port; + this.apiKey = _key; + this.server = new Server(this); + } + private getURL(): string { + return `http://${this.ip}:${this.port}/api/v1/` + } private generateResponse(code: number, data?: any): AppResponse { switch(code) { case 200: @@ -44,152 +48,103 @@ export default class MCSS { return { status: code, error: { message: 'An unexpected error occured' } } } } - - public async getServers( filter?: getServersFilter): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers` - - if (filter) response = await instance.get(url, { params: { filter }, headers: { ApiKey: this.apiKey } }) - else response = await instance.get(url, this.headers) - return this.generateResponse(response.status, response.data!) - // if( response.status === 200 ) return { status: response.status, data: response.data } - // if( response.status === 401 ) return { status: response.status, error: { message: 'Incorrect Apikey' } } - // return { status: response.status, error: { message: 'A unexpected error occured' } } + public async getServers(): Promise { + let response = await this.instance.get(this.getURL() + "servers"); + return this.generateResponse(response.status, response.data); } - - public async getServerCount( filter?: getServerCountFilter): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers/count` - - if (filter) response = await instance.get(url, { params: { filter }, headers: this.headers.headers }) - else response = await instance.get(url, this.headers) - if(response.status === 200) return { status: response.status, data: response.data } - if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - return { status: response.status, error: { message: 'A unexpected error occured' } } + public async getServerCount(): Promise { + let response = await this.instance.get(this.getURL() + "servers/count"); + return this.generateResponse(response.status, response.data); } +} - public async getServerDetails( serverGuid: string, filter?: getServersFilter ): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}` - - if(filter) response = await instance.get(url, { params: { filter }, headers: this.headers.headers }) - else response = await instance.get(url, this.headers) - - if(response.status === 200) return { status: response.status, data: response.data } - if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - return { status: response.status, error: { message: 'A unexpected error occured' } } +class Server { + client: any; + previous: any; + server: any; + constructor(client) { + this.client = client; } - - public async getServerStats( serverGuid: string ): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/stats` - - response = await instance.get(url, this.headers) - if(response.status === 200) return { status: response.status, data: response.data } - if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - return { status: response.status, error: { message: 'A unexpected error occured' } } + private getURL(): string { + return `http://${this.client.ip}:${this.client.port}/api/v1/servers/` } - - public async getServerIcon( serverGuid: string ): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/icon` - - response = await instance.get(url, this.headers) - if(response.status === 200) return { status: response.status, data: response.data } - if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - return { status: response.status, error: { message: 'A unexpected error occured' } } + public async get(_id) { + let response = await this.client.instance.get(this.getURL() + _id); + this.server = _id; + return this.client.generateResponse(response.status, response.data); } - - public async executeServerAction( serverGuid: string, action: executeServerActionFilter ): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/execute/action` - - response = await instance.post(url, { action }, this.headers) - if(response.status === 200) return { status: response.status, data: response.data } - if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - return { status: response.status, error: { message: 'A unexpected error occured' } } + public async getStats(_id) { + let response = await this.client.instance.get(this.getURL() + _id + "/stats"); + return this.client.generateResponse(response.status, response.data); } - - public async executeServerCommand( serverGuid: string, command: string ): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/execute/command` - - response = await instance.post(url, { command }, this.headers) - if(response.status === 200) return { status: response.status, data: response.data } - if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - return { status: response.status, error: { message: 'A unexpected error occured' } } + public async getIcon(_id) { + let response = await this.client.instance.get(this.getURL() + _id + "/icon"); + return this.client.generateResponse(response.status, response.data); } - - public async executeServerCommands( serverGuid: string, commands: string[] ): Promise { - let response: AxiosResponse - const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/execute/commands` - - response = await instance.post(url, { commands }, this.headers) - if(response.status === 200) return { status: response.status, data: response.data } - if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - return { status: response.status, error: { message: 'A unexpected error occured' } } + public async edit(_id: string, server: ServerEditor) { + let response = await this.client.instance.put(this.getURL() + _id, server); + return this.client.generateResponse(response.status, response.data); + } + public async execute(_id: string, ...action: any): Promise { + if(action.length == 1) { + switch(action[0]) { + case 0: + await this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 0 }); + break; + case 1: + await this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 1 }); + break; + case 2: + await this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 2 }); + break; + case 3: + await this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 3 }); + break; + case 4: + await this.client.instance.post(this.getURL() + _id + "/execute/action", { action: 4 }); + break; + default: + await this.client.instance.post(this.getURL() + _id + "/execute/command", { command: action[0] }); + break; + } + } else { + await this.client.instance.post(this.getURL() + _id + "/execute/commands", { commands: action }); + } } - - // public async getServerConsole( serverGuid: string ):Promise<{status:number, data?:any, error?:{message:string}}> { - // let response: AxiosResponse - // const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/console` - - // response = await instance.get(url, this.headers) - // if(response.status === 200) return { status: response.status, data: response.data } - // if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - // if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - // return { status: response.status, error: { message: 'A unexpected error occured' } } - // } - - // public async isConsoleOutdated( serverGuid: string ): Promise { - - // } - - // public async getSchedulerDetails( serverGuid: string ):Promise<{status:number, data?:any, error?:{message:string}}> { - // let response: AxiosResponse - // const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/scheduler` - - // response = await instance.get(url, this.headers) - // if(response.status === 200) return { status: response.status, data: response.data } - // if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - // if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - // return { status: response.status, error: { message: 'A unexpected error occured' } } - // } - - // public async getSchedulerTaskList( serverGuid: string, filter?:getTaskListFilter ):Promise<{status:number, data?:any, error?:{message:string}}>{ - // let response: AxiosResponse - // const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/scheduler/tasks` - - // if(filter) response = await instance.get(url, { ...this.headers, params: filter }) - // else response = await instance.get(url, this.headers) - // if(response.status === 200) return { status: response.status, data: response.data } - // if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } - // if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } - // return { status: response.status, error: { message: 'A unexpected error occured' } } - // } - - // public async createTask() - - } -const mcss = new MCSS('192.168.0.24', 25560, 'rWx2ReZYc2tA2ShzIVcYqSl2XS7PvrLOwg36IGlOJNkO2HuQZE9J0sXn48C16PNDROuVqWYUMrrJ4TmLualtxVeBLxPfwAjxUPGxohASNwOKR2cgMC464Z8x') -async function tester() { - let count = await mcss.getServerCount() - let servers = await mcss.getServers() - let server = await mcss.getServerStats('a06c56c4-6eeb-406c-8038-0bd913f03723') - let details = await mcss.getServerDetails('a06c56c4-6eeb-406c-8038-0bd913f03723') - console.log( `Server count: `, count.data.count ) - console.log( `Servers: `, servers.data ) - console.log( `Server: `, server.data ) - console.log( `Server details: `, details.data ) +class ServerEditor { + name: string; + description: string; + autoStartWithMcss: boolean; + forceSaveOnStop: boolean; + allocatedMemoryInMegabytes: number; + constructor() { + this.name; + this.description; + this.autoStartWithMcss; + this.forceSaveOnStop; + this.allocatedMemoryInMegabytes; + } + setName(name: string) { + this.name = name; + return this; + } + setDescription(description: string) { + this.description = description; + return this; + } + setAutoStartWithMcss(condition: boolean) { + this.autoStartWithMcss = condition; + return this; + } + setForceSaveOnStop(condition: boolean) { + this.forceSaveOnStop = condition; + return this; + } + setAllocatedMemoryInMegabytes(amount: number) { + this.allocatedMemoryInMegabytes = amount; + return this; + } } - -tester() - +module.exports.ServerEditor = ServerEditor; \ No newline at end of file diff --git a/src/legacy.ts b/src/legacy.ts new file mode 100644 index 0000000..ff7dc4c --- /dev/null +++ b/src/legacy.ts @@ -0,0 +1,194 @@ +import axios, { AxiosResponse } from 'axios' +import { Agent } from 'https' + +enum getServersFilter { None = 0, Minimal = 1, Status = 2 } +enum getServerCountFilter { None = 0, Online = 1, Offline = 2, ByServerType = 3 } +enum executeServerActionFilter { InvalidOrEmpty = 0, Stop = 1, Start = 2, Kill = 3, Restart = 4 } +enum getTaskListFilter { None = 0, FixedTime = 1, Interval = 2, Timeless = 3 } + +interface AppResponse { + status: number, + data?: any, + error?: { + message: string, + } +} + +const instance = axios.create({ + httpsAgent: new Agent({ rejectUnauthorized: false}), + validateStatus: () => true +}); + +export default class MCSS { + ip: string; + port: number|string; + apiKey: string; + headers: { headers: { ApiKey: string } } + + + constructor(ip: string, port: string|number, apiKey: string) { + this.ip = ip + this.port = port + this.apiKey = apiKey + this.headers = { headers: { ApiKey: this.apiKey } } + } + + private generateResponse(code: number, data?: any): AppResponse { + switch(code) { + case 200: + return { status: 200, data }; + case 401: + return { status: 401, error: { message: 'Incorrect API key' } } + case 404: + return { status: 404, error: { message: 'Server not found' } } + default: + return { status: code, error: { message: 'An unexpected error occured' } } + } + } + + public async getServers( filter?: getServersFilter): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers` + + if (filter) response = await instance.get(url, { params: { filter }, headers: { ApiKey: this.apiKey } }) + else response = await instance.get(url, this.headers) + return this.generateResponse(response.status, response.data!) + // if( response.status === 200 ) return { status: response.status, data: response.data } + // if( response.status === 401 ) return { status: response.status, error: { message: 'Incorrect Apikey' } } + // return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + public async getServerCount( filter?: getServerCountFilter): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers/count` + + if (filter) response = await instance.get(url, { params: { filter }, headers: this.headers.headers }) + else response = await instance.get(url, this.headers) + if(response.status === 200) return { status: response.status, data: response.data } + if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + public async getServerDetails( serverGuid: string, filter?: getServersFilter ): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}` + + if(filter) response = await instance.get(url, { params: { filter }, headers: this.headers.headers }) + else response = await instance.get(url, this.headers) + + if(response.status === 200) return { status: response.status, data: response.data } + if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + public async getServerStats( serverGuid: string ): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/stats` + + response = await instance.get(url, this.headers) + if(response.status === 200) return { status: response.status, data: response.data } + if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + public async getServerIcon( serverGuid: string ): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/icon` + + response = await instance.get(url, this.headers) + if(response.status === 200) return { status: response.status, data: response.data } + if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + public async executeServerAction( serverGuid: string, action: executeServerActionFilter ): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/execute/action` + + response = await instance.post(url, { action }, this.headers) + if(response.status === 200) return { status: response.status, data: response.data } + if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + public async executeServerCommand( serverGuid: string, command: string ): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/execute/command` + + response = await instance.post(url, { command }, this.headers) + if(response.status === 200) return { status: response.status, data: response.data } + if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + public async executeServerCommands( serverGuid: string, commands: string[] ): Promise { + let response: AxiosResponse + const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/execute/commands` + + response = await instance.post(url, { commands }, this.headers) + if(response.status === 200) return { status: response.status, data: response.data } + if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + return { status: response.status, error: { message: 'A unexpected error occured' } } + } + + // public async getServerConsole( serverGuid: string ):Promise<{status:number, data?:any, error?:{message:string}}> { + // let response: AxiosResponse + // const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/console` + + // response = await instance.get(url, this.headers) + // if(response.status === 200) return { status: response.status, data: response.data } + // if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + // if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + // return { status: response.status, error: { message: 'A unexpected error occured' } } + // } + + // public async isConsoleOutdated( serverGuid: string ): Promise { + + // } + + // public async getSchedulerDetails( serverGuid: string ):Promise<{status:number, data?:any, error?:{message:string}}> { + // let response: AxiosResponse + // const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/scheduler` + + // response = await instance.get(url, this.headers) + // if(response.status === 200) return { status: response.status, data: response.data } + // if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + // if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + // return { status: response.status, error: { message: 'A unexpected error occured' } } + // } + + // public async getSchedulerTaskList( serverGuid: string, filter?:getTaskListFilter ):Promise<{status:number, data?:any, error?:{message:string}}>{ + // let response: AxiosResponse + // const url = `https://${this.ip}:${this.port}/api/v1/servers/${serverGuid}/scheduler/tasks` + + // if(filter) response = await instance.get(url, { ...this.headers, params: filter }) + // else response = await instance.get(url, this.headers) + // if(response.status === 200) return { status: response.status, data: response.data } + // if(response.status === 401) return { status: response.status, error: { message: 'Incorrect Apikey' } } + // if(response.status === 404) return { status: response.status, error: { message: 'Server not found' } } + // return { status: response.status, error: { message: 'A unexpected error occured' } } + // } + + // public async createTask() + + +} + +// DtY6HWI2csbnQ3JjeXaBtT5eudKVGDQxHzCPJ1aOznzo70OwgiRsXXv0VaDZQoUmGwyPPjbN5OFKPwainjKgU7xsSH9rfuKsFHo5u6SSqegwARHQzQQIygDp +const mcss = new MCSS('192.168.0.24', 25560, 'rWx2ReZYc2tA2ShzIVcYqSl2XS7PvrLOwg36IGlOJNkO2HuQZE9J0sXn48C16PNDROuVqWYUMrrJ4TmLualtxVeBLxPfwAjxUPGxohASNwOKR2cgMC464Z8x') + +async function tester() { + let count = await mcss.getServerCount() + let servers = await mcss.getServers() + console.log( `Server count: `, count.data.count ) + console.log( `Servers: `, servers.data ) +} + +tester() + diff --git a/test/blob.js b/test/blob.js new file mode 100644 index 0000000..96dfabb --- /dev/null +++ b/test/blob.js @@ -0,0 +1,43 @@ +const mcss = require('../src/index.js'); + +const client = new mcss("192.168.1.198", 8050, "DtY6HWI2csbnQ3JjeXaBtT5eudKVGDQxHzCPJ1aOznzo70OwgiRsXXv0VaDZQoUmGwyPPjbN5OFKPwainjKgU7xsSH9rfuKsFHo5u6SSqegwARHQzQQIygDp"); + +(async() => { + // GETS SERVERS + let servers = await client.getServers(); + // GETS SERVERS COUNT + let serverCount = await client.getServerCount(); + + // Get Server Details + let server = await client.server.get("996ed93b-07df-450f-a25c-296f667338df"); + + // Gets Server Stats + let serverStats = await client.server.getStats("996ed93b-07df-450f-a25c-296f667338df"); + + // Gets Server Icon + await client.server.getIcon("996ed93b-07df-450f-a25c-296f667338df"); + + // Executes Server Command + await client.server.execute("996ed93b-07df-450f-a25c-296f667338df", "say Hoi"); + + // Builder for Editing Server Properties + let serverEdit = new mcss.ServerEditor() + .setName("SkyWarriors") + .setDescription("Kool SkyWars Server") + .setAutoStartWithMcss(false) + .setForceSaveOnStop(true) + .setAllocatedMemoryInMegabytes(2048); + + // Edits Server Properties + let edits = await client.server.edit("db5a2c63-145e-4e2b-b832-476bf3695fbd", serverEdit); + + console.log(servers); + console.log(serverCount); + + console.log(server); + console.log(serverStats); + + console.log(serverEdit); + console.log(edits); + +})();