50 |
--------------------------------------------------------------------------------
/Panel/views/ServerOne.hbs:
--------------------------------------------------------------------------------
1 |
28 |
29 |
{{Data.servername}} Statistics.
30 |
31 |
32 |
CPU: {{Data.cpu}} (Cores: {{Data.cpucores}}, Threads: {{Data.cputhreads}})
33 |
34 |
35 |
CPU Load: {{Data.cpuload}}%
36 |
37 |
38 |
RAM (Used/Total) {{Data.memused}} / {{Data.memtotal}}
39 |
40 |
41 |
OS Boot Drive (Used/Total): {{Data.diskused}} / {{Data.disktotal}}
42 |
43 |
44 |
Network: Rx: {{Data.netrx}} Tx: {{Data.nettx}}
45 |
46 |
47 |
Uptime: {{Data.osuptime}}
48 |
49 |
50 |
--------------------------------------------------------------------------------
/Daemon/index.js:
--------------------------------------------------------------------------------
1 | /* _____ __ __ _ _
2 | / ____| | \/ | (_)| |
3 | | (___ ___ _ __ __ __ ___ _ __ | \ / | ___ _ __ _ | |_ ___ _ __
4 | \___ \ / _ \| '__|\ \ / // _ \| '__|| |\/| | / _ \ | '_ \ | || __|/ _ \ | '__|
5 | ____) || __/| | \ V /| __/| | | | | || (_) || | | || || |_| (_) || |
6 | |_____/ \___||_| \_/ \___||_| |_| |_| \___/ |_| |_||_| \__|\___/ |_|
7 | Free Monitoring software made by danielpmc
8 | */
9 |
10 | var PORT = 2001;
11 | var app = require('express')();
12 | var server = require('http').createServer(app);
13 | var request = require("request");
14 | var si = require('systeminformation');
15 | var os = require("os");
16 | var pretty = require('prettysize');
17 | var ping = require('node-http-ping');
18 | var package = require("./package.json");
19 | var config = require("./config.json");
20 |
21 | server.listen(PORT, function () {
22 | console.log(PORT + " listening...");
23 | ping('0.0.0.0', 2001)
24 |
25 | });
26 |
27 | app.get('/', async function (req, res) {
28 |
29 | setInterval(async () => {
30 | //Data using the systeminformation package.
31 | var cpudata = await si.cpu();
32 | var cpu = os.loadavg();
33 | var memdata = await si.mem();
34 | var ramused = pretty(memdata.used);
35 | var ramtotal = pretty(memdata.total);
36 | var diskdata = await si.fsSize();
37 | var diskused = pretty(diskdata[0].used);
38 | var disktotal = pretty(diskdata[0].size);
39 | var netdata = await si.networkStats();
40 | var netrx = pretty(netdata[0].rx_bytes);
41 | var nettx = pretty(netdata[0].tx_bytes);
42 | var osdata = await si.osInfo();
43 | var bios = await si.bios();
44 | var ipadd = await si.networkInterfaces();
45 | var ip = ipadd.ip4
46 |
47 | //OS UPTIME
48 | var uptime = os.uptime();
49 | var d = Math.floor(uptime / (3600*24));
50 | var h = Math.floor(uptime % (3600*24) / 3600);
51 | var m = Math.floor(uptime % 3600 / 60);
52 | var s = Math.floor(uptime % 60);
53 | var dDisplay = d > 0 ? d + (d == 1 ? " day, " : " days, ") : "";
54 | var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
55 | var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
56 | var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
57 |
58 | //Version
59 | var Version = package.version;
60 |
61 | //Fetch time that data was sent. (Used panel sided to check if server has gone offline)
62 | var datatime = Date.now();
63 |
64 | console.log(cpudata)
65 |
66 | console.log(cpudata.brand)
67 | //console.log("http://" + config.panelip + ":" + config.panelport + "/data?servername=" + os.hostname + "&cpuman= " + cpudata.manufacturer + "&cpubrand= " + cpudata.brand + "&cpuload= " + Math.ceil(cpu[1] * 100) / 10 + "&cpuspeed=" + cpudata.speed + "GHz" + "&memused=" + ramused + "&memtotal=" + ramtotal + "&diskused=" + diskused + "&disktotal=" + disktotal + "&netrx=" + netrx + "&nettx=" + nettx + "&osplatform=" + osdata.platform + "&oslogofile=" + osdata.logofile + "&osrelease=" + osdata.release + "&osuptime=" + dDisplay + hDisplay + mDisplay + sDisplay + "&biosvendor=" + bios.vendor + "&biosversion=" + bios.version + "&biosdate=" + bios.releaseDate + "&servermonitorversion=" + Version + "&datatime=" + datatime)
68 | request({
69 | uri: "http://" + config.panelip + ":" + config.panelport + "/data?servername=" + os.hostname + "&cpuman=" + cpudata.manufacturer + "&cpuload=" + Math.ceil(cpu[1] * 100) / 10 + "&cpuspeed=" + cpudata.speed + "GHz" + "&memused=" + ramused + "&memtotal=" + ramtotal + "&diskused=" + diskused + "&disktotal=" + disktotal + "&netrx=" + netrx + "&nettx=" + nettx + "&osplatform=" + osdata.platform + "&oslogofile=" + osdata.logofile + "&osrelease=" + osdata.release + "&osuptime=" + dDisplay + hDisplay + mDisplay + sDisplay + "&biosvendor=" + bios.vendor + "&biosversion=" + bios.version + "&biosdate=" + bios.releaseDate + "&servermonitorversion=" + Version + "&datatime=" + datatime,
70 | method: "GET",
71 | timeout: 10000,
72 | followRedirect: true,
73 | maxRedirects: 10
74 | }, function (error, response, body) {
75 | res.send(body);
76 | console.log(body)
77 | console.log(response)
78 | console.log(error)
79 | });
80 | }, 2500);
81 |
82 | });
83 |
--------------------------------------------------------------------------------
/Panel/index.js:
--------------------------------------------------------------------------------
1 | /* _____ __ __ _ _
2 | / ____| | \/ | (_)| |
3 | | (___ ___ _ __ __ __ ___ _ __ | \ / | ___ _ __ _ | |_ ___ _ __
4 | \___ \ / _ \| '__|\ \ / // _ \| '__|| |\/| | / _ \ | '_ \ | || __|/ _ \ | '__|
5 | ____) || __/| | \ V /| __/| | | | | || (_) || | | || || |_| (_) || |
6 | |_____/ \___||_| \_/ \___||_| |_| |_| \___/ |_| |_||_| \__|\___/ |_|
7 | Free Monitoring software made by danielpmc
8 | */
9 |
10 | var config = require("./config.json");
11 | var PORT = config.ListeningPort;
12 | var express = require('express');
13 | var app = express();
14 | var server = require('http').createServer(app);
15 | var bodyParser = require('body-parser');
16 | var fs = require("fs");
17 | var hbs = require('express-handlebars');
18 | var chalk = require('chalk');
19 |
20 | app.use(bodyParser.json());
21 | app.use(bodyParser.urlencoded({extended: true}));
22 |
23 | server.listen(PORT, function () {
24 | console.log(chalk.green("Listening on port " + PORT));
25 | });
26 |
27 |
28 | app.get('/data', function (req, res) {
29 | console.log(req.query);
30 |
31 | //Write data to JSON file after checking servername.
32 | var data = JSON.stringify(req.query);
33 | fs.writeFileSync('data/' + req.query.servername + '.json', data);
34 |
35 | });
36 |
37 | //View engine setup
38 | app.set('view engine', 'hbs');
39 | app.engine('hbs', hbs({
40 | extname: 'hbs',
41 | defaultView: 'default',
42 | layoutsDir: '/views/pages',
43 | partialsDir: '/views/partials'
44 | }));
45 |
46 | //Config Loading and setting up
47 | if (config.Servers.NumberOfServers == 0) {
48 |
49 | //Errors if config is not setup.
50 | console.log(chalk.red("You have not set up the config file"))
51 | process.exit()
52 |
53 | } else if (config.Servers.NumberOfServers == 1) {
54 | if (config.Servers.One == " ") {
55 |
56 | //Checks if server one field in config has valid data.
57 | console.log(chalk.red("You have not set up Server names. Please fill in `One` in the config with your hostname. Don't know it? Run the daemon and that will tell you the hostname!"));
58 | process.exit();
59 |
60 | } else {
61 |
62 | //Config has valid data for server one. Set up the website!
63 | //Loads the data
64 | var ServerOneData = fs.readFileSync("./data/" + config.Servers.One + ".json", 'utf8');
65 | var ServerOne = JSON.parse(ServerOneData);
66 |
67 | //Gets the website page and is ready to display it.
68 | app.get("/" + config.Servers.One, (req, res) => {
69 | res.render('ServerOne', { layout: false,
70 | Data: ServerOne
71 | });
72 | });
73 |
74 | }
75 | } else if (config.Servers.NumberOfServers == 2) {
76 | if (config.Servers.One == " ") {
77 |
78 | //Checks if server one field in config has valid data.
79 | console.log(chalk.red("You have not set up Server names. Please fill in `One` in the config with your hostname. Don't know it? Run the daemon and that will tell you the hostname!"));
80 | process.exit();
81 |
82 | } else if (config.Servers.Two == " ") {
83 |
84 | //Checks if server two field in config has valid data.
85 | console.log(chalk.red("You have not set up Server names. Please fill in `Two` in the config with your hostname. Don't know it? Run the daemon and that will tell you the hostname!"));
86 | process.exit();
87 |
88 | } else {
89 |
90 | //Config has valid data for server one. Set up the website!
91 |
92 | //Loads the data (SERVER ONE)
93 | var ServerOneData = fs.readFileSync("./data/" + config.Servers.One + ".json", 'utf8');
94 | var ServerOne = JSON.parse(ServerOneData);
95 |
96 | //Gets the website page and is ready to display it. (Server ONE)
97 | app.get("/" + config.Servers.One, (req, res) => {
98 |
99 | //Loads the data (SERVER ONE)
100 | var ServerOneData = fs.readFileSync("./data/" + config.Servers.One + ".json", 'utf8');
101 | var ServerOne = JSON.parse(ServerOneData);
102 |
103 | res.render('ServerOne', { layout: false,
104 | Data: ServerOne
105 | });
106 | });
107 |
108 | //Loads the data (SERVER TWO)
109 | var ServerTwoData = fs.readFileSync("./data/" + config.Servers.Two + ".json", 'utf8');
110 | var ServerTwo = JSON.parse(ServerTwoData);
111 |
112 | //Gets the website page and is ready to display it. (Server ONE)
113 | app.get("/" + config.Servers.Two, (req, res) => {
114 | res.render('ServerTwo', { layout: false,
115 | Data: ServerTwo
116 | });
117 | });
118 |
119 | }
120 | } else if (config.Servers.NumberOfServers == 3) {
121 | if (config.Servers.One == " ") {
122 |
123 | //Checks if server one field in config has valid data.
124 | console.log(chalk.red("You have not set up Server names. Please fill in `One` in the config with your hostname. Don't know it? Run the daemon and that will tell you the hostname!"));
125 | process.exit();
126 |
127 | } else if (config.Servers.Two == " ") {
128 |
129 | //Checks if server two field in config has valid data.
130 | console.log(chalk.red("You have not set up Server names. Please fill in `Two` in the config with your hostname. Don't know it? Run the daemon and that will tell you the hostname!"));
131 | process.exit();
132 |
133 | } else if (config.Servers.Three == " ") {
134 |
135 | //Checks if server two field in config has valid data.
136 | console.log(chalk.red("You have not set up Server names. Please fill in `Three` in the config with your hostname. Don't know it? Run the daemon and that will tell you the hostname!"));
137 | process.exit();
138 |
139 | } else {
140 |
141 | //Config has valid data for server one. Set up the website!
142 |
143 | //Loads the data (SERVER ONE)
144 | var ServerOneData = fs.readFileSync("./data/" + config.Servers.One + ".json", 'utf8');
145 | var ServerOne = JSON.parse(ServerOneData);
146 |
147 | //Gets the website page and is ready to display it. (Server ONE)
148 | app.get("/" + config.Servers.One, (req, res) => {
149 | res.render('ServerOne', { layout: false,
150 | Data: ServerOne
151 | });
152 | });
153 |
154 | //Loads the data (SERVER TWO)
155 | var ServerTwoData = fs.readFileSync("./data/" + config.Servers.Two + ".json", 'utf8');
156 | var ServerTwo = JSON.parse(ServerTwoData);
157 |
158 | //Gets the website page and is ready to display it. (Server TWO)
159 | app.get("/" + config.Servers.Two, (req, res) => {
160 | res.render('ServerTwo', { layout: false,
161 | Data: ServerTwo
162 | });
163 | });
164 |
165 | //Loads the data (SERVER THREE)
166 | var ServerThreeData = fs.readFileSync("./data/" + config.Servers.Three + ".json", 'utf8');
167 | var ServerThree = JSON.parse(ServerThreeData);
168 |
169 | //Gets the website page and is ready to display it. (Server THREE)
170 | app.get("/" + config.Servers.Three, (req, res) => {
171 | res.render('ServerThree', { layout: false,
172 | Data: ServerThree
173 | });
174 | });
175 |
176 | }
177 | }
178 |
179 | //Import data
180 | var data = fs.readFileSync('./data/DESKTOP-4GLHDVM.json', 'utf8');
181 | var data1 = JSON.parse(data);
182 |
183 | //Routes
184 | app.get("/", (req, res) => {
185 | res.render('index', { layout: false,
186 | info: data1
187 | });
188 | });
189 |
190 | //Catch 404 and forward to error handler
191 | app.use(function(req, res, next) {
192 | var err = new Error('Not Found');
193 | err.status = 404;
194 | next(err);
195 | });
--------------------------------------------------------------------------------
/BetaDaemon/index.js:
--------------------------------------------------------------------------------
1 | /* _____ __ __ _ _
2 | / ____| | \/ | (_)| |
3 | | (___ ___ _ __ __ __ ___ _ __ | \ / | ___ _ __ _ | |_ ___ _ __
4 | \___ \ / _ \| '__|\ \ / // _ \| '__|| |\/| | / _ \ | '_ \ | || __|/ _ \ | '__|
5 | ____) || __/| | \ V /| __/| | | | | || (_) || | | || || |_| (_) || |
6 | |_____/ \___||_| \_/ \___||_| |_| |_| \___/ |_| |_||_| \__|\___/ |_|
7 | Free Monitoring software made by danielpmc
8 | */
9 |
10 | var PORT = 2001;
11 | var app = require('express')();
12 | var server = require('http').createServer(app);
13 | var request = require("request");
14 | var si = require('systeminformation');
15 | var os = require("os");
16 | var pretty = require('prettysize');
17 | var ping = require('node-http-ping');
18 | var package = require("./package.json");
19 | var config = require("./config.json");
20 | var { get } = require('superagent')
21 | var chalk = require('chalk');
22 | var moment = require("moment");
23 |
24 | server.listen(PORT, function () {
25 | console.log(chalk.blueBright("The servers hostname is: " + chalk.green(os.hostname) + ", Please put this in the config file"))
26 | console.log(PORT + " listening...");
27 | ping('0.0.0.0', 2001)
28 |
29 | //Config file checking
30 | if (config.panelip == "Your panel ip here") {
31 | //Log that the ip has not been set and process will exit.
32 | console.log(chalk.red("Your panel ip has not been set in config.json. Please set the panel ip."))
33 | process.exit();
34 | } else {
35 | //Panel ip has been set. Ping the panel and see if its alive.
36 | ping(config.panelip, config.panelport)
37 | .then(time => console.log(chalk.green(`Panel is online! Response time: ${time}ms`)))
38 | .catch(() => console.log(chalk.red(`Failed to ping the panel. Please check if the panel is running!`)) + process.exit())
39 | }
40 | });
41 |
42 | if (config.panelping == true) {
43 | //User requested to ping the panel every x ms
44 | setInterval(async () => {
45 | var timestamp = `${moment().format("YYYY-MM-DD HH:mm:ss")}`;
46 | ping(config.panelip, config.panelport)
47 | .then(time => console.log(chalk.white(`[${timestamp}] Panel Pinger: ` + chalk.green(`Response time: ${time}ms`))))
48 | .catch(() => console.log(chalk.white(`[${timestamp}] Panel Pinger: ` + chalk.red(`Failed to ping the panel. Please check if the panel is running! `) + chalk.white("Will continue to ping panel."))))
49 | }, config.panelms)
50 | }
51 |
52 |
53 | app.get('/', async function (req, res) {
54 |
55 | setInterval(async () => {
56 | //Data using the systeminformation package.
57 | var memdata = await si.mem();
58 | var ramused = pretty(memdata.used);
59 | var ramtotal = pretty(memdata.total);
60 | var swapused = pretty(memdata.swapused);
61 | var swaptotal = pretty(memdata.swaptotal);
62 | var diskdata = await si.fsSize();
63 | var diskused = pretty(diskdata[0].used);
64 | var disktotal = pretty(diskdata[0].size);
65 | var netdata = await si.networkStats();
66 | var netrx = pretty(netdata[0].rx_bytes);
67 | var nettx = pretty(netdata[0].tx_bytes);
68 | var osdata = await si.osInfo();
69 | var bios = await si.bios();
70 | var docker = await si.dockerInfo();
71 |
72 | //CPU data.
73 | var cl = await si.currentLoad();
74 | var cpudata = await si.cpu();
75 | var cputhreads = cpudata.cores;
76 | var cpucores = cpudata.physicalCores;
77 | var cpumain = os.cpus().length > 0 ? os.cpus()[0].model : 'Uh oh. You dont have a cpu?';
78 |
79 | //OS UPTIME
80 | var uptime = os.uptime();
81 | var d = Math.floor(uptime / (3600*24));
82 | var h = Math.floor(uptime % (3600*24) / 3600);
83 | var m = Math.floor(uptime % 3600 / 60);
84 | var s = Math.floor(uptime % 60);
85 | var dDisplay = d > 0 ? d + (d == 1 ? " day, " : " days, ") : "";
86 | var hDisplay = h > 0 ? h + (h == 1 ? " hour, " : " hours, ") : "";
87 | var mDisplay = m > 0 ? m + (m == 1 ? " minute, " : " minutes, ") : "";
88 | var sDisplay = s > 0 ? s + (s == 1 ? " second" : " seconds") : "";
89 |
90 | //Version
91 | var Version = package.version;
92 |
93 | //Fetch time that data was sent. (Used panel sided to check if server has gone offline)
94 | var datatime = Date.now();
95 |
96 | //Different errors
97 | function discordchecker() {
98 | if (config.Discord == true) {
99 | if (config.DiscordWebhook == " ") {
100 | console.log(chalk.red("Error: Discord webhooks are enabled but no url is valid. Please enter a valid url or go into the config file and change `Discord: true` to `Discord: false`"));
101 | } else {
102 | //Discord is enabled and webhook has a input. Check for discord webhook link.
103 | var WebhookURL = ["https://discordapp.com/api/webhooks/", "https://canary.discordapp.com/api/webhooks/"]
104 | if (WebhookURL.some(link => config.DiscordWebhook.includes(link))) {
105 | //Webhook config has discord link. Check if link is valid.
106 | get(config.DiscordWebhook).end((response) => {
107 | console.log("Valid link")
108 |
109 | if (response.body.type == "1") {
110 | console.log(chalk.green("Url valid"))
111 | } else {
112 | console.log(chalk.red("URL invalid."))
113 | }
114 | })
115 |
116 | } else {
117 | //Post in console that there is no valid discord link.
118 | console.log(chalk.red("Error: Discord webhooks are enabled but the text entered in the config is not a valid discord link."));
119 | }
120 | }
121 | }
122 | }
123 |
124 | //Find system OS if windows and else linux (No MacOS support yet, Sorry Apple fans)
125 | if (osdata.platform == "win32") {
126 | discordchecker();
127 | if (config.Docker == true) {
128 | if (docker.containers == "undefined") {
129 | //Docker enabled but no docker found.
130 | console.log(chalk.red("You enabled docker in the config but your system does not have docker installed. Please disable this!"));
131 | process.exit();
132 | } else {
133 | request({
134 | uri: "http://" + config.panelip + ":" + config.panelport + "/data?servername=" + os.hostname + //OS hostname for saving data panel sided.
135 | "&cpu=" + cpumain + //CPU make and brand.
136 | "&cpuload=" + cl.currentload.toFixed(2) + //CPU load but doesn't work on windows :(
137 | "&cputhreads=" + cputhreads + //CPU threads.
138 | "&cpucores=" + cpucores + //CPU cores
139 | "&memused=" + ramused + //Ram used (Auto to MB, GB, TB)
140 | "&memtotal=" + ramtotal + //Ram total (Auto to MB, GB, TB)
141 | "&swapused=" + swapused + //Swap used (Auto to MB, GB, TB)
142 | "&swaptotal=" + swaptotal + //Swap total (Auto to MB, GB, TB)
143 | "&diskused=" + diskused + //Disk used (Auto to MB, GB, TB)
144 | "&disktotal=" + disktotal + //Disk total (Auto to MB, GB, TB)
145 | "&netrx=" + netrx + //Network received (Auto to MB, GB, TB)
146 | "&nettx=" + nettx + //Network transmited (Auto to MB, GB, TB)
147 | "&osplatform=" + osdata.platform + //OS platform (win32 or linux)
148 | "&oslogofile=" + osdata.logofile + //OS logofile (Linux example: Debian/Ubuntu | Windows example: Windows)
149 | "&osrelease=" + osdata.release + //OS release (Linux example: 9 | Windows example: 10.0.18362)
150 | "&osuptime=" + dDisplay + hDisplay + mDisplay + sDisplay + //OS uptime (Day/Days, Hours/Hour, Minutes/Minute, Seconds/Second)
151 | "&biosvendor=" + bios.vendor + //Bios vendor (Example: Dell Inc)
152 | "&biosversion=" + bios.version + //Bios version (Example: A22.00)
153 | "&biosdate=" + bios.releaseDate + //Bios release date (Example: 2018-11-29)
154 | "&servermonitorversion=" + Version + //ServerMonitor version (Example: 1.0.1)
155 | "&datatime=" + datatime + //Date and time (Example: 1578594094569)
156 | "&dockercontainers=" + docker.containers + //Number of docker containers
157 | "&dockercontainersrunning=" + docker.containersRunning + //Number of running docker containers
158 | "&dockercontainerspaused=" + docker.containersPaused + //Number of paused docker containers
159 | "&dockercontainersstopped=" + docker.containersStopped, //Number of stopped docker containers
160 | method: "GET",
161 | timeout: 5000,
162 | followRedirect: true,
163 | maxRedirects: 10
164 | }, function (error, response, body) {
165 |
166 | //Send data to panel
167 | res.send(body);
168 |
169 | //Error checking.
170 | if (error == "undefined") {
171 | //No errors = Do nothing :D
172 | } else if (error == "Error: ESOCKETTIMEDOUT") {
173 | //Because Panel doesn't give response to Daemon it thinks it timed out.
174 | //But really it didn't data was still sent.
175 | //So ignore this error.
176 | } else if (error == "Error: read ECONNRESET") {
177 | //Do nothing because panel went down. Program will still continue to try and send data.
178 | //So ignore this error.
179 | } else if (error == "Error: connect ECONNREFUSED " + config.panelip + ":" + config.panelport) {
180 | //Do nothing because panel went down. Program will still continue to try and send data.
181 | //So ignore this error.
182 | }else {
183 | //Log the error in red and exit process
184 | console.log(chalk.red("ERROR! " + error))
185 | process.exit();
186 | }
187 |
188 | });
189 | }
190 | } else {
191 | request({
192 | uri: "http://" + config.panelip + ":" + config.panelport + "/data?servername=" + os.hostname + //OS hostname for saving data panel sided.
193 | "&cpu=" + cpumain + //CPU make and brand.
194 | "&cpuload=" + cl.currentload.toFixed(2) + //CPU load but doesn't work on windows :(
195 | "&cputhreads=" + cputhreads + //CPU threads.
196 | "&cpucores=" + cpucores + //CPU cores
197 | "&memused=" + ramused + //Ram used (Auto to MB, GB, TB)
198 | "&memtotal=" + ramtotal + //Ram total (Auto to MB, GB, TB)
199 | "&swapused=" + swapused + //Swap used (Auto to MB, GB, TB)
200 | "&swaptotal=" + swaptotal + //Swap total (Auto to MB, GB, TB)
201 | "&diskused=" + diskused + //Disk used (Auto to MB, GB, TB)
202 | "&disktotal=" + disktotal + //Disk total (Auto to MB, GB, TB)
203 | "&netrx=" + netrx + //Network received (Auto to MB, GB, TB)
204 | "&nettx=" + nettx + //Network transmited (Auto to MB, GB, TB)
205 | "&osplatform=" + osdata.platform + //OS platform (win32 or linux)
206 | "&oslogofile=" + osdata.logofile + //OS logofile (Linux example: Debian/Ubuntu | Windows example: Windows)
207 | "&osrelease=" + osdata.release + //OS release (Linux example: 9 | Windows example: 10.0.18362)
208 | "&osuptime=" + dDisplay + hDisplay + mDisplay + sDisplay + //OS uptime (Day/Days, Hours/Hour, Minutes/Minute, Seconds/Second)
209 | "&biosvendor=" + bios.vendor + //Bios vendor (Example: Dell Inc)
210 | "&biosversion=" + bios.version + //Bios version (Example: A22.00)
211 | "&biosdate=" + bios.releaseDate + //Bios release date (Example: 2018-11-29)
212 | "&servermonitorversion=" + Version + //ServerMonitor version (Example: 1.0.1)
213 | "&datatime=" + datatime, //Date and time (Example: 1578594094569)
214 | method: "GET",
215 | timeout: 5000,
216 | followRedirect: true,
217 | maxRedirects: 10
218 | }, function (error, response, body) {
219 |
220 | //Send data to panel
221 | res.send(body);
222 |
223 | //Error checking.
224 | if (error == "undefined") {
225 | //No errors = Do nothing :D
226 | } else if (error == "Error: ESOCKETTIMEDOUT") {
227 | //Because Panel doesn't give response to Daemon it thinks it timed out.
228 | //But really it didn't data was still sent.
229 | //So ignore this error.
230 | } else if (error == "Error: read ECONNRESET") {
231 | //Do nothing because panel went down. Program will still continue to try and send data.
232 | //So ignore this error.
233 | } else if (error == "Error: connect ECONNREFUSED " + config.panelip + ":" + config.panelport) {
234 | //Do nothing because panel went down. Program will still continue to try and send data.
235 | //So ignore this error.
236 | }else {
237 | //Log the error in red and exit process
238 | console.log(chalk.red("ERROR! " + error))
239 | process.exit();
240 | }
241 |
242 | });
243 | }
244 | } else if (osdata.platform == "linux") {
245 | discordchecker();
246 | if (config.Docker == true) {
247 | if (docker.containers == "undefined") {
248 | //Docker enabled but no docker found.
249 | console.log(chalk.red("You enabled docker in the config but your system does not have docker installed. Please disable this!"));
250 | process.exit();
251 | } else {
252 | request({
253 | uri: "http://" + config.panelip + ":" + config.panelport + "/data?servername=" + os.hostname + //OS hostname for saving data panel sided.
254 | "&cpu=" + cpudata.manufacturer + " " + cpudata.brand + //CPU make and brand.
255 | "&cpuload=" + cl.currentload.toFixed(2) + //CPU load but doesn't work on windows :(
256 | "&cputhreads=" + cputhreads + //CPU threads.
257 | "&cpucores=" + cpucores + //CPU cores
258 | "&memused=" + ramused + //Ram used (Auto to MB, GB, TB)
259 | "&memtotal=" + ramtotal + //Ram total (Auto to MB, GB, TB)
260 | "&swapused=" + swapused + //Swap used (Auto to MB, GB, TB)
261 | "&swaptotal=" + swaptotal + //Swap total (Auto to MB, GB, TB)
262 | "&diskused=" + diskused + //Disk used (Auto to MB, GB, TB)
263 | "&disktotal=" + disktotal + //Disk total (Auto to MB, GB, TB)
264 | "&netrx=" + netrx + //Network received (Auto to MB, GB, TB)
265 | "&nettx=" + nettx + //Network transmited (Auto to MB, GB, TB)
266 | "&osplatform=" + osdata.platform + //OS platform (win32 or linux)
267 | "&oslogofile=" + osdata.logofile + //OS logofile (Linux example: Debian/Ubuntu | Windows example: Windows)
268 | "&osrelease=" + osdata.release + //OS release (Linux example: 9 | Windows example: 10.0.18362)
269 | "&osuptime=" + dDisplay + hDisplay + mDisplay + sDisplay + //OS uptime (Day/Days, Hours/Hour, Minutes/Minute, Seconds/Second)
270 | "&biosvendor=" + bios.vendor + //Bios vendor (Example: Dell Inc)
271 | "&biosversion=" + bios.version + //Bios version (Example: A22.00)
272 | "&biosdate=" + bios.releaseDate + //Bios release date (Example: 2018-11-29)
273 | "&servermonitorversion=" + Version + //ServerMonitor version (Example: 1.0.1)
274 | "&datatime=" + datatime + //Date and time (Example: 1578594094569)
275 | "&dockercontainers=" + docker.containers + //Number of docker containers
276 | "&dockercontainersrunning=" + docker.containersRunning + //Number of running docker containers
277 | "&dockercontainerspaused=" + docker.containersPaused + //Number of paused docker containers
278 | "&dockercontainersstopped=" + docker.containersStopped, //Number of stopped docker containers
279 | method: "GET",
280 | timeout: 5000,
281 | followRedirect: true,
282 | maxRedirects: 10
283 | }, function (error, response, body) {
284 |
285 | //Send data to panel
286 | res.send(body);
287 |
288 | //Error checking.
289 | if (error == "undefined") {
290 | //No errors = Do nothing :D
291 | } else if (error == "Error: ESOCKETTIMEDOUT") {
292 | //Because Panel doesn't give response to Daemon it thinks it timed out.
293 | //But really it didn't data was still sent.
294 | //So ignore this error.
295 | } else if (error == "Error: read ECONNRESET") {
296 | //Do nothing because panel went down. Program will still continue to try and send data.
297 | //So ignore this error.
298 | } else if (error == "Error: ETIMEDOUT") {
299 | //Do nothing because panel went down. Program will still continue to try and send data.
300 | //So ignore this error.
301 | }else {
302 | //Log the error in red and exit process
303 | console.log(chalk.red("ERROR! " + error))
304 | process.exit();
305 | }
306 |
307 | });
308 | }
309 | } else {
310 | request({
311 | uri: "http://" + config.panelip + ":" + config.panelport + "/data?servername=" + os.hostname + //OS hostname for saving data panel sided.
312 | "&cpu=" + cpudata.manufacturer + " " + cpudata.brand + //CPU make and brand.
313 | "&cpuload=" + cl.currentload.toFixed(2) + //CPU load but doesn't work on windows :(
314 | "&cputhreads=" + cputhreads + //CPU threads.
315 | "&cpucores=" + cpucores + //CPU cores
316 | "&memused=" + ramused + //Ram used (Auto to MB, GB, TB)
317 | "&memtotal=" + ramtotal + //Ram total (Auto to MB, GB, TB)
318 | "&swapused=" + swapused + //Swap used (Auto to MB, GB, TB)
319 | "&swaptotal=" + swaptotal + //Swap total (Auto to MB, GB, TB)
320 | "&diskused=" + diskused + //Disk used (Auto to MB, GB, TB)
321 | "&disktotal=" + disktotal + //Disk total (Auto to MB, GB, TB)
322 | "&netrx=" + netrx + //Network received (Auto to MB, GB, TB)
323 | "&nettx=" + nettx + //Network transmited (Auto to MB, GB, TB)
324 | "&osplatform=" + osdata.platform + //OS platform (win32 or linux)
325 | "&oslogofile=" + osdata.logofile + //OS logofile (Linux example: Debian/Ubuntu | Windows example: Windows)
326 | "&osrelease=" + osdata.release + //OS release (Linux example: 9 | Windows example: 10.0.18362)
327 | "&osuptime=" + dDisplay + hDisplay + mDisplay + sDisplay + //OS uptime (Day/Days, Hours/Hour, Minutes/Minute, Seconds/Second)
328 | "&biosvendor=" + bios.vendor + //Bios vendor (Example: Dell Inc)
329 | "&biosversion=" + bios.version + //Bios version (Example: A22.00)
330 | "&biosdate=" + bios.releaseDate + //Bios release date (Example: 2018-11-29)
331 | "&servermonitorversion=" + Version + //ServerMonitor version (Example: 1.0.1)
332 | "&datatime=" + datatime, //Date and time (Example: 1578594094569)
333 | method: "GET",
334 | timeout: 5000,
335 | followRedirect: true,
336 | maxRedirects: 10
337 | }, function (error, response, body) {
338 |
339 | //Send data to panel
340 | res.send(body);
341 |
342 | //Error checking.
343 | if (error == "undefined") {
344 | //No errors = Do nothing :D
345 | } else if (error == "Error: ESOCKETTIMEDOUT") {
346 | //Because Panel doesn't give response to Daemon it thinks it timed out.
347 | //But really it didn't data was still sent.
348 | //So ignore this error.
349 | } else if (error == "Error: read ECONNRESET") {
350 | //Do nothing because panel went down. Program will still continue to try and send data.
351 | //So ignore this error.
352 | } else if (error == "Error: ETIMEDOUT") {
353 | //Do nothing because panel went down. Program will still continue to try and send data.
354 | //So ignore this error.
355 | }else {
356 | //Log the error in red and exit process
357 | console.log(chalk.red("ERROR! " + error))
358 | process.exit();
359 | }
360 |
361 | });
362 | }
363 |
364 | } else {
365 | console.log("Your running a unsupported OS. :(")
366 | process.exit();
367 | }
368 |
369 | }, 2500);
370 |
371 | });
372 |
--------------------------------------------------------------------------------
/Daemon/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "servermonitor-fetch",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.7",
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
11 | "requires": {
12 | "mime-types": "~2.1.24",
13 | "negotiator": "0.6.2"
14 | }
15 | },
16 | "after": {
17 | "version": "0.8.2",
18 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
19 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
20 | },
21 | "ajv": {
22 | "version": "6.10.2",
23 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
24 | "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
25 | "requires": {
26 | "fast-deep-equal": "^2.0.1",
27 | "fast-json-stable-stringify": "^2.0.0",
28 | "json-schema-traverse": "^0.4.1",
29 | "uri-js": "^4.2.2"
30 | }
31 | },
32 | "array-flatten": {
33 | "version": "1.1.1",
34 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
35 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
36 | },
37 | "arraybuffer.slice": {
38 | "version": "0.0.7",
39 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
40 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
41 | },
42 | "asn1": {
43 | "version": "0.2.4",
44 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
45 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
46 | "requires": {
47 | "safer-buffer": "~2.1.0"
48 | }
49 | },
50 | "assert-plus": {
51 | "version": "1.0.0",
52 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
53 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
54 | },
55 | "async-limiter": {
56 | "version": "1.0.1",
57 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
58 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
59 | },
60 | "asynckit": {
61 | "version": "0.4.0",
62 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
63 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
64 | },
65 | "aws-sign2": {
66 | "version": "0.7.0",
67 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
68 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
69 | },
70 | "aws4": {
71 | "version": "1.9.0",
72 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz",
73 | "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A=="
74 | },
75 | "backo2": {
76 | "version": "1.0.2",
77 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
78 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
79 | },
80 | "base64-arraybuffer": {
81 | "version": "0.1.5",
82 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
83 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
84 | },
85 | "base64id": {
86 | "version": "2.0.0",
87 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
88 | "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
89 | },
90 | "bcrypt-pbkdf": {
91 | "version": "1.0.2",
92 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
93 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
94 | "requires": {
95 | "tweetnacl": "^0.14.3"
96 | }
97 | },
98 | "better-assert": {
99 | "version": "1.0.2",
100 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
101 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
102 | "requires": {
103 | "callsite": "1.0.0"
104 | }
105 | },
106 | "blob": {
107 | "version": "0.0.5",
108 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
109 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
110 | },
111 | "bluebird": {
112 | "version": "2.11.0",
113 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
114 | "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
115 | },
116 | "body-parser": {
117 | "version": "1.19.0",
118 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
119 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
120 | "requires": {
121 | "bytes": "3.1.0",
122 | "content-type": "~1.0.4",
123 | "debug": "2.6.9",
124 | "depd": "~1.1.2",
125 | "http-errors": "1.7.2",
126 | "iconv-lite": "0.4.24",
127 | "on-finished": "~2.3.0",
128 | "qs": "6.7.0",
129 | "raw-body": "2.4.0",
130 | "type-is": "~1.6.17"
131 | }
132 | },
133 | "bytes": {
134 | "version": "3.1.0",
135 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
136 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
137 | },
138 | "callsite": {
139 | "version": "1.0.0",
140 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
141 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
142 | },
143 | "caseless": {
144 | "version": "0.12.0",
145 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
146 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
147 | },
148 | "combined-stream": {
149 | "version": "1.0.8",
150 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
151 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
152 | "requires": {
153 | "delayed-stream": "~1.0.0"
154 | }
155 | },
156 | "component-bind": {
157 | "version": "1.0.0",
158 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
159 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
160 | },
161 | "component-emitter": {
162 | "version": "1.2.1",
163 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
164 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
165 | },
166 | "component-inherit": {
167 | "version": "0.0.3",
168 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
169 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM="
170 | },
171 | "content-disposition": {
172 | "version": "0.5.3",
173 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
174 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
175 | "requires": {
176 | "safe-buffer": "5.1.2"
177 | }
178 | },
179 | "content-type": {
180 | "version": "1.0.4",
181 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
182 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
183 | },
184 | "cookie": {
185 | "version": "0.4.0",
186 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
187 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
188 | },
189 | "cookie-signature": {
190 | "version": "1.0.6",
191 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
192 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
193 | },
194 | "core-util-is": {
195 | "version": "1.0.2",
196 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
197 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
198 | },
199 | "dashdash": {
200 | "version": "1.14.1",
201 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
202 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
203 | "requires": {
204 | "assert-plus": "^1.0.0"
205 | }
206 | },
207 | "debug": {
208 | "version": "2.6.9",
209 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
210 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
211 | "requires": {
212 | "ms": "2.0.0"
213 | }
214 | },
215 | "delayed-stream": {
216 | "version": "1.0.0",
217 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
218 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
219 | },
220 | "depd": {
221 | "version": "1.1.2",
222 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
223 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
224 | },
225 | "destroy": {
226 | "version": "1.0.4",
227 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
228 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
229 | },
230 | "ecc-jsbn": {
231 | "version": "0.1.2",
232 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
233 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
234 | "requires": {
235 | "jsbn": "~0.1.0",
236 | "safer-buffer": "^2.1.0"
237 | }
238 | },
239 | "ee-first": {
240 | "version": "1.1.1",
241 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
242 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
243 | },
244 | "encodeurl": {
245 | "version": "1.0.2",
246 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
247 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
248 | },
249 | "engine.io": {
250 | "version": "3.4.0",
251 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.0.tgz",
252 | "integrity": "sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w==",
253 | "requires": {
254 | "accepts": "~1.3.4",
255 | "base64id": "2.0.0",
256 | "cookie": "0.3.1",
257 | "debug": "~4.1.0",
258 | "engine.io-parser": "~2.2.0",
259 | "ws": "^7.1.2"
260 | },
261 | "dependencies": {
262 | "cookie": {
263 | "version": "0.3.1",
264 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
265 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
266 | },
267 | "debug": {
268 | "version": "4.1.1",
269 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
270 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
271 | "requires": {
272 | "ms": "^2.1.1"
273 | }
274 | },
275 | "ms": {
276 | "version": "2.1.2",
277 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
278 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
279 | }
280 | }
281 | },
282 | "engine.io-client": {
283 | "version": "3.4.0",
284 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz",
285 | "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==",
286 | "requires": {
287 | "component-emitter": "1.2.1",
288 | "component-inherit": "0.0.3",
289 | "debug": "~4.1.0",
290 | "engine.io-parser": "~2.2.0",
291 | "has-cors": "1.1.0",
292 | "indexof": "0.0.1",
293 | "parseqs": "0.0.5",
294 | "parseuri": "0.0.5",
295 | "ws": "~6.1.0",
296 | "xmlhttprequest-ssl": "~1.5.4",
297 | "yeast": "0.1.2"
298 | },
299 | "dependencies": {
300 | "debug": {
301 | "version": "4.1.1",
302 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
303 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
304 | "requires": {
305 | "ms": "^2.1.1"
306 | }
307 | },
308 | "ms": {
309 | "version": "2.1.2",
310 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
311 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
312 | },
313 | "ws": {
314 | "version": "6.1.4",
315 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz",
316 | "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==",
317 | "requires": {
318 | "async-limiter": "~1.0.0"
319 | }
320 | }
321 | }
322 | },
323 | "engine.io-parser": {
324 | "version": "2.2.0",
325 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz",
326 | "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==",
327 | "requires": {
328 | "after": "0.8.2",
329 | "arraybuffer.slice": "~0.0.7",
330 | "base64-arraybuffer": "0.1.5",
331 | "blob": "0.0.5",
332 | "has-binary2": "~1.0.2"
333 | }
334 | },
335 | "escape-html": {
336 | "version": "1.0.3",
337 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
338 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
339 | },
340 | "etag": {
341 | "version": "1.8.1",
342 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
343 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
344 | },
345 | "express": {
346 | "version": "4.17.1",
347 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
348 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
349 | "requires": {
350 | "accepts": "~1.3.7",
351 | "array-flatten": "1.1.1",
352 | "body-parser": "1.19.0",
353 | "content-disposition": "0.5.3",
354 | "content-type": "~1.0.4",
355 | "cookie": "0.4.0",
356 | "cookie-signature": "1.0.6",
357 | "debug": "2.6.9",
358 | "depd": "~1.1.2",
359 | "encodeurl": "~1.0.2",
360 | "escape-html": "~1.0.3",
361 | "etag": "~1.8.1",
362 | "finalhandler": "~1.1.2",
363 | "fresh": "0.5.2",
364 | "merge-descriptors": "1.0.1",
365 | "methods": "~1.1.2",
366 | "on-finished": "~2.3.0",
367 | "parseurl": "~1.3.3",
368 | "path-to-regexp": "0.1.7",
369 | "proxy-addr": "~2.0.5",
370 | "qs": "6.7.0",
371 | "range-parser": "~1.2.1",
372 | "safe-buffer": "5.1.2",
373 | "send": "0.17.1",
374 | "serve-static": "1.14.1",
375 | "setprototypeof": "1.1.1",
376 | "statuses": "~1.5.0",
377 | "type-is": "~1.6.18",
378 | "utils-merge": "1.0.1",
379 | "vary": "~1.1.2"
380 | }
381 | },
382 | "extend": {
383 | "version": "3.0.2",
384 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
385 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
386 | },
387 | "extsprintf": {
388 | "version": "1.3.0",
389 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
390 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
391 | },
392 | "fast-deep-equal": {
393 | "version": "2.0.1",
394 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
395 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
396 | },
397 | "fast-json-stable-stringify": {
398 | "version": "2.1.0",
399 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
400 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
401 | },
402 | "finalhandler": {
403 | "version": "1.1.2",
404 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
405 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
406 | "requires": {
407 | "debug": "2.6.9",
408 | "encodeurl": "~1.0.2",
409 | "escape-html": "~1.0.3",
410 | "on-finished": "~2.3.0",
411 | "parseurl": "~1.3.3",
412 | "statuses": "~1.5.0",
413 | "unpipe": "~1.0.0"
414 | }
415 | },
416 | "forever-agent": {
417 | "version": "0.6.1",
418 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
419 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
420 | },
421 | "form-data": {
422 | "version": "2.3.3",
423 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
424 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
425 | "requires": {
426 | "asynckit": "^0.4.0",
427 | "combined-stream": "^1.0.6",
428 | "mime-types": "^2.1.12"
429 | }
430 | },
431 | "forwarded": {
432 | "version": "0.1.2",
433 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
434 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
435 | },
436 | "fresh": {
437 | "version": "0.5.2",
438 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
439 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
440 | },
441 | "getpass": {
442 | "version": "0.1.7",
443 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
444 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
445 | "requires": {
446 | "assert-plus": "^1.0.0"
447 | }
448 | },
449 | "har-schema": {
450 | "version": "2.0.0",
451 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
452 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
453 | },
454 | "har-validator": {
455 | "version": "5.1.3",
456 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
457 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
458 | "requires": {
459 | "ajv": "^6.5.5",
460 | "har-schema": "^2.0.0"
461 | }
462 | },
463 | "has-binary2": {
464 | "version": "1.0.3",
465 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
466 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==",
467 | "requires": {
468 | "isarray": "2.0.1"
469 | }
470 | },
471 | "has-cors": {
472 | "version": "1.1.0",
473 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
474 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk="
475 | },
476 | "http": {
477 | "version": "0.0.0",
478 | "resolved": "https://registry.npmjs.org/http/-/http-0.0.0.tgz",
479 | "integrity": "sha1-huYybSnF0Dnen6xYSkVon5KfT3I="
480 | },
481 | "http-errors": {
482 | "version": "1.7.2",
483 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
484 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
485 | "requires": {
486 | "depd": "~1.1.2",
487 | "inherits": "2.0.3",
488 | "setprototypeof": "1.1.1",
489 | "statuses": ">= 1.5.0 < 2",
490 | "toidentifier": "1.0.0"
491 | }
492 | },
493 | "http-signature": {
494 | "version": "1.2.0",
495 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
496 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
497 | "requires": {
498 | "assert-plus": "^1.0.0",
499 | "jsprim": "^1.2.2",
500 | "sshpk": "^1.7.0"
501 | }
502 | },
503 | "iconv-lite": {
504 | "version": "0.4.24",
505 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
506 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
507 | "requires": {
508 | "safer-buffer": ">= 2.1.2 < 3"
509 | }
510 | },
511 | "indexof": {
512 | "version": "0.0.1",
513 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
514 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
515 | },
516 | "inherits": {
517 | "version": "2.0.3",
518 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
519 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
520 | },
521 | "ipaddr.js": {
522 | "version": "1.9.0",
523 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
524 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
525 | },
526 | "is-typedarray": {
527 | "version": "1.0.0",
528 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
529 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
530 | },
531 | "isarray": {
532 | "version": "2.0.1",
533 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
534 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4="
535 | },
536 | "isstream": {
537 | "version": "0.1.2",
538 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
539 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
540 | },
541 | "jsbn": {
542 | "version": "0.1.1",
543 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
544 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
545 | },
546 | "json-schema": {
547 | "version": "0.2.3",
548 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
549 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
550 | },
551 | "json-schema-traverse": {
552 | "version": "0.4.1",
553 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
554 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
555 | },
556 | "json-stringify-safe": {
557 | "version": "5.0.1",
558 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
559 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
560 | },
561 | "jsprim": {
562 | "version": "1.4.1",
563 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
564 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
565 | "requires": {
566 | "assert-plus": "1.0.0",
567 | "extsprintf": "1.3.0",
568 | "json-schema": "0.2.3",
569 | "verror": "1.10.0"
570 | }
571 | },
572 | "media-typer": {
573 | "version": "0.3.0",
574 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
575 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
576 | },
577 | "merge-descriptors": {
578 | "version": "1.0.1",
579 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
580 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
581 | },
582 | "methods": {
583 | "version": "1.1.2",
584 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
585 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
586 | },
587 | "mime": {
588 | "version": "1.6.0",
589 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
590 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
591 | },
592 | "mime-db": {
593 | "version": "1.42.0",
594 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz",
595 | "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ=="
596 | },
597 | "mime-types": {
598 | "version": "2.1.25",
599 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz",
600 | "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==",
601 | "requires": {
602 | "mime-db": "1.42.0"
603 | }
604 | },
605 | "ms": {
606 | "version": "2.0.0",
607 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
608 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
609 | },
610 | "negotiator": {
611 | "version": "0.6.2",
612 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
613 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
614 | },
615 | "node-http-ping": {
616 | "version": "0.3.1",
617 | "resolved": "https://registry.npmjs.org/node-http-ping/-/node-http-ping-0.3.1.tgz",
618 | "integrity": "sha512-4q295gTtUXhFYp3CRMsmUWAXwHoB0oKEz3czmO9ZueWDcTcS3sX4I8L5zvdiXRrZpCMhb/TBaY9I27Gi7/Pa1Q==",
619 | "requires": {
620 | "bluebird": "^2.9.14"
621 | }
622 | },
623 | "oauth-sign": {
624 | "version": "0.9.0",
625 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
626 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
627 | },
628 | "object-component": {
629 | "version": "0.0.3",
630 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
631 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
632 | },
633 | "on-finished": {
634 | "version": "2.3.0",
635 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
636 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
637 | "requires": {
638 | "ee-first": "1.1.1"
639 | }
640 | },
641 | "parseqs": {
642 | "version": "0.0.5",
643 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
644 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
645 | "requires": {
646 | "better-assert": "~1.0.0"
647 | }
648 | },
649 | "parseuri": {
650 | "version": "0.0.5",
651 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
652 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
653 | "requires": {
654 | "better-assert": "~1.0.0"
655 | }
656 | },
657 | "parseurl": {
658 | "version": "1.3.3",
659 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
660 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
661 | },
662 | "path-to-regexp": {
663 | "version": "0.1.7",
664 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
665 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
666 | },
667 | "performance-now": {
668 | "version": "2.1.0",
669 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
670 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
671 | },
672 | "prettysize": {
673 | "version": "2.0.0",
674 | "resolved": "https://registry.npmjs.org/prettysize/-/prettysize-2.0.0.tgz",
675 | "integrity": "sha512-VVtxR7sOh0VsG8o06Ttq5TrI1aiZKmC+ClSn4eBPaNf4SHr5lzbYW+kYGX3HocBL/MfpVrRfFZ9V3vCbLaiplg=="
676 | },
677 | "proxy-addr": {
678 | "version": "2.0.5",
679 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
680 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
681 | "requires": {
682 | "forwarded": "~0.1.2",
683 | "ipaddr.js": "1.9.0"
684 | }
685 | },
686 | "psl": {
687 | "version": "1.6.0",
688 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz",
689 | "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA=="
690 | },
691 | "punycode": {
692 | "version": "2.1.1",
693 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
694 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
695 | },
696 | "qs": {
697 | "version": "6.7.0",
698 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
699 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
700 | },
701 | "range-parser": {
702 | "version": "1.2.1",
703 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
704 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
705 | },
706 | "raw-body": {
707 | "version": "2.4.0",
708 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
709 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
710 | "requires": {
711 | "bytes": "3.1.0",
712 | "http-errors": "1.7.2",
713 | "iconv-lite": "0.4.24",
714 | "unpipe": "1.0.0"
715 | }
716 | },
717 | "request": {
718 | "version": "2.88.0",
719 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
720 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
721 | "requires": {
722 | "aws-sign2": "~0.7.0",
723 | "aws4": "^1.8.0",
724 | "caseless": "~0.12.0",
725 | "combined-stream": "~1.0.6",
726 | "extend": "~3.0.2",
727 | "forever-agent": "~0.6.1",
728 | "form-data": "~2.3.2",
729 | "har-validator": "~5.1.0",
730 | "http-signature": "~1.2.0",
731 | "is-typedarray": "~1.0.0",
732 | "isstream": "~0.1.2",
733 | "json-stringify-safe": "~5.0.1",
734 | "mime-types": "~2.1.19",
735 | "oauth-sign": "~0.9.0",
736 | "performance-now": "^2.1.0",
737 | "qs": "~6.5.2",
738 | "safe-buffer": "^5.1.2",
739 | "tough-cookie": "~2.4.3",
740 | "tunnel-agent": "^0.6.0",
741 | "uuid": "^3.3.2"
742 | },
743 | "dependencies": {
744 | "qs": {
745 | "version": "6.5.2",
746 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
747 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
748 | }
749 | }
750 | },
751 | "safe-buffer": {
752 | "version": "5.1.2",
753 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
754 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
755 | },
756 | "safer-buffer": {
757 | "version": "2.1.2",
758 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
759 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
760 | },
761 | "send": {
762 | "version": "0.17.1",
763 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
764 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
765 | "requires": {
766 | "debug": "2.6.9",
767 | "depd": "~1.1.2",
768 | "destroy": "~1.0.4",
769 | "encodeurl": "~1.0.2",
770 | "escape-html": "~1.0.3",
771 | "etag": "~1.8.1",
772 | "fresh": "0.5.2",
773 | "http-errors": "~1.7.2",
774 | "mime": "1.6.0",
775 | "ms": "2.1.1",
776 | "on-finished": "~2.3.0",
777 | "range-parser": "~1.2.1",
778 | "statuses": "~1.5.0"
779 | },
780 | "dependencies": {
781 | "ms": {
782 | "version": "2.1.1",
783 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
784 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
785 | }
786 | }
787 | },
788 | "serve-static": {
789 | "version": "1.14.1",
790 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
791 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
792 | "requires": {
793 | "encodeurl": "~1.0.2",
794 | "escape-html": "~1.0.3",
795 | "parseurl": "~1.3.3",
796 | "send": "0.17.1"
797 | }
798 | },
799 | "setprototypeof": {
800 | "version": "1.1.1",
801 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
802 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
803 | },
804 | "socket.io": {
805 | "version": "2.3.0",
806 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz",
807 | "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==",
808 | "requires": {
809 | "debug": "~4.1.0",
810 | "engine.io": "~3.4.0",
811 | "has-binary2": "~1.0.2",
812 | "socket.io-adapter": "~1.1.0",
813 | "socket.io-client": "2.3.0",
814 | "socket.io-parser": "~3.4.0"
815 | },
816 | "dependencies": {
817 | "debug": {
818 | "version": "4.1.1",
819 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
820 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
821 | "requires": {
822 | "ms": "^2.1.1"
823 | }
824 | },
825 | "ms": {
826 | "version": "2.1.2",
827 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
828 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
829 | }
830 | }
831 | },
832 | "socket.io-adapter": {
833 | "version": "1.1.2",
834 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz",
835 | "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
836 | },
837 | "socket.io-client": {
838 | "version": "2.3.0",
839 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz",
840 | "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==",
841 | "requires": {
842 | "backo2": "1.0.2",
843 | "base64-arraybuffer": "0.1.5",
844 | "component-bind": "1.0.0",
845 | "component-emitter": "1.2.1",
846 | "debug": "~4.1.0",
847 | "engine.io-client": "~3.4.0",
848 | "has-binary2": "~1.0.2",
849 | "has-cors": "1.1.0",
850 | "indexof": "0.0.1",
851 | "object-component": "0.0.3",
852 | "parseqs": "0.0.5",
853 | "parseuri": "0.0.5",
854 | "socket.io-parser": "~3.3.0",
855 | "to-array": "0.1.4"
856 | },
857 | "dependencies": {
858 | "debug": {
859 | "version": "4.1.1",
860 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
861 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
862 | "requires": {
863 | "ms": "^2.1.1"
864 | }
865 | },
866 | "ms": {
867 | "version": "2.1.2",
868 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
869 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
870 | },
871 | "socket.io-parser": {
872 | "version": "3.3.0",
873 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz",
874 | "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==",
875 | "requires": {
876 | "component-emitter": "1.2.1",
877 | "debug": "~3.1.0",
878 | "isarray": "2.0.1"
879 | },
880 | "dependencies": {
881 | "debug": {
882 | "version": "3.1.0",
883 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
884 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
885 | "requires": {
886 | "ms": "2.0.0"
887 | }
888 | },
889 | "ms": {
890 | "version": "2.0.0",
891 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
892 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
893 | }
894 | }
895 | }
896 | }
897 | },
898 | "socket.io-parser": {
899 | "version": "3.4.0",
900 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz",
901 | "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==",
902 | "requires": {
903 | "component-emitter": "1.2.1",
904 | "debug": "~4.1.0",
905 | "isarray": "2.0.1"
906 | },
907 | "dependencies": {
908 | "debug": {
909 | "version": "4.1.1",
910 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
911 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
912 | "requires": {
913 | "ms": "^2.1.1"
914 | }
915 | },
916 | "ms": {
917 | "version": "2.1.2",
918 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
919 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
920 | }
921 | }
922 | },
923 | "sshpk": {
924 | "version": "1.16.1",
925 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
926 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
927 | "requires": {
928 | "asn1": "~0.2.3",
929 | "assert-plus": "^1.0.0",
930 | "bcrypt-pbkdf": "^1.0.0",
931 | "dashdash": "^1.12.0",
932 | "ecc-jsbn": "~0.1.1",
933 | "getpass": "^0.1.1",
934 | "jsbn": "~0.1.0",
935 | "safer-buffer": "^2.0.2",
936 | "tweetnacl": "~0.14.0"
937 | }
938 | },
939 | "statuses": {
940 | "version": "1.5.0",
941 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
942 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
943 | },
944 | "systeminformation": {
945 | "version": "4.16.0",
946 | "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-4.16.0.tgz",
947 | "integrity": "sha512-1FjxPJSw7ad0zug+1YIQATj6Cn+wM5OBASEpjohEeOD2EGPIf0Cnhthd1L2O1YX+wKgOMuPldGfxYdo8yNHEIg=="
948 | },
949 | "to-array": {
950 | "version": "0.1.4",
951 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
952 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
953 | },
954 | "toidentifier": {
955 | "version": "1.0.0",
956 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
957 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
958 | },
959 | "tough-cookie": {
960 | "version": "2.4.3",
961 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
962 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
963 | "requires": {
964 | "psl": "^1.1.24",
965 | "punycode": "^1.4.1"
966 | },
967 | "dependencies": {
968 | "punycode": {
969 | "version": "1.4.1",
970 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
971 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
972 | }
973 | }
974 | },
975 | "tunnel-agent": {
976 | "version": "0.6.0",
977 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
978 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
979 | "requires": {
980 | "safe-buffer": "^5.0.1"
981 | }
982 | },
983 | "tweetnacl": {
984 | "version": "0.14.5",
985 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
986 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
987 | },
988 | "type-is": {
989 | "version": "1.6.18",
990 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
991 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
992 | "requires": {
993 | "media-typer": "0.3.0",
994 | "mime-types": "~2.1.24"
995 | }
996 | },
997 | "unpipe": {
998 | "version": "1.0.0",
999 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1000 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1001 | },
1002 | "uri-js": {
1003 | "version": "4.2.2",
1004 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
1005 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
1006 | "requires": {
1007 | "punycode": "^2.1.0"
1008 | }
1009 | },
1010 | "utils-merge": {
1011 | "version": "1.0.1",
1012 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1013 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1014 | },
1015 | "uuid": {
1016 | "version": "3.3.3",
1017 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
1018 | "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
1019 | },
1020 | "vary": {
1021 | "version": "1.1.2",
1022 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1023 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1024 | },
1025 | "verror": {
1026 | "version": "1.10.0",
1027 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
1028 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
1029 | "requires": {
1030 | "assert-plus": "^1.0.0",
1031 | "core-util-is": "1.0.2",
1032 | "extsprintf": "^1.2.0"
1033 | }
1034 | },
1035 | "ws": {
1036 | "version": "7.2.1",
1037 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz",
1038 | "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A=="
1039 | },
1040 | "xmlhttprequest-ssl": {
1041 | "version": "1.5.5",
1042 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
1043 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4="
1044 | },
1045 | "yeast": {
1046 | "version": "0.1.2",
1047 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz",
1048 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk="
1049 | }
1050 | }
1051 | }
1052 |
--------------------------------------------------------------------------------