diff --git a/.gitignore b/.gitignore index ccb2c80..58228be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ node_modules/ -package-lock.json \ No newline at end of file +package-lock.json +storage/ +logs/ +config/ \ No newline at end of file diff --git a/config/certs/file.crt b/config/certs/file.crt deleted file mode 100644 index 4569d86..0000000 --- a/config/certs/file.crt +++ /dev/null @@ -1,15 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICRDCCAa0CFCVQzFjsGbbYOOlCxMGn1sZyBzwVMA0GCSqGSIb3DQEBCwUAMGEx -CzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdCZWlqaW5n -MQ4wDAYDVQQKDAVNaXhseTEOMAwGA1UECwwFTWl4SU8xDjAMBgNVBAMMBU1peElP -MB4XDTIyMDEyOTA4MDE0MVoXDTIzMDEyOTA4MDE0MVowYTELMAkGA1UEBhMCQ04x -EDAOBgNVBAgMB0JlaWppbmcxEDAOBgNVBAcMB0JlaWppbmcxDjAMBgNVBAoMBU1p -eGx5MQ4wDAYDVQQLDAVNaXhJTzEOMAwGA1UEAwwFTWl4SU8wgZ8wDQYJKoZIhvcN -AQEBBQADgY0AMIGJAoGBAM3xzY1n5V05vAZbYniDbMoNXCzgL5puebmV2mIkMAHv -QnhMZHv2O938ezFae0l3A6zRkhWgX4XLmGUwKria3xCC9E0soF2wM0JfIFpDIQ5g -WnixtCiI8MjV8hXQ0Nh1hJ0MMwEX6g72N/YyH5Y/P9lsmr6OiG7dXe4oyaROY/U5 -AgMBAAEwDQYJKoZIhvcNAQELBQADgYEASvGJMK+h09mGCsza7h2ieVe75ogbG/nK -+c7KYYOBR2OXTNk90Od+2tJog5hJl8M1nRDHdOEPgTPDYKVz0hXjJBZnM5NtcoYS -pq6vf83MtY8polmly/EZsZqiVPaEsH97nniRoMOP4JdyKlqU2g94yFDUiTTZW4cS -iURo4pW8gRE= ------END CERTIFICATE----- diff --git a/config/certs/private.pem b/config/certs/private.pem deleted file mode 100644 index 0d78614..0000000 --- a/config/certs/private.pem +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM3xzY1n5V05vAZb -YniDbMoNXCzgL5puebmV2mIkMAHvQnhMZHv2O938ezFae0l3A6zRkhWgX4XLmGUw -Kria3xCC9E0soF2wM0JfIFpDIQ5gWnixtCiI8MjV8hXQ0Nh1hJ0MMwEX6g72N/Yy -H5Y/P9lsmr6OiG7dXe4oyaROY/U5AgMBAAECgYB8zETFpeoF/lCEgahAY1PvdP0g -bJIsQToeTkLSKh+1bGmZQKG7xNEuiiuVEsGXGTnu5ehilpaMG340A2ZADAmTf552 -Zr7AHSWmg4YEEykihSoJ2owfmqamm5Fsyoe/oxijsWwXAiZIv6VkDznchnQ+1I/w -Ioyigp+dHbHS3OjiAQJBAOaDx0XjofpJQe4oCufTIqltomRtxtP4fFbeEbmQrXRt -zNvH6QeKeanA+F4JQGVKcDSt6rz5yi8MqukOpZKBcdkCQQDktp4hfgvCQN8U50t+ -izZVImXGb47tfNKCWkNdrVnMI597ad3Qx+NV41oohMV4SFNCA8VgTq2onkhBbRjP -YSJhAkBp9n2t5Nvan75M6d9JfcbbN2iE3emeGwWdMOvY72astKSNCzJVoxQWMnx5 -TatqZHN7486aHAES67HM/EykMhjRAkArlooog+clzEs3pqUCpvFh5D5VRSmOJT3R -TfaMwd7dQuTAFnsJsS6oTb3+/t7Lf60uZZ2WLyh1fET1Ax+5Vh/BAkEAlNxqK/DI -Fu1JviGs33vE55YHu4F0u822PUT9XN8NNzFhsvK5Oza+O7Tyyq7WJejR7I8IjzOb -RvSzVsDN3/+4ug== ------END PRIVATE KEY----- diff --git a/config/config.json b/config/config.json deleted file mode 100644 index 09a9288..0000000 --- a/config/config.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "MIXIO_HTTP_PORT": 8080, - "MIXIO_HTTPS_PORT": 8081, - "MAX_PROJECT_NUM_PER_USER": 20, - "MAX_MESSAGE_PER_USER": 1000, - "MAX_MESSAGE_PER_SECOND": 5, - "ALLOW_REGISTER": true, - "ALLOW_HOOK": true, - "OFFLINE_MODE": true, - "BAIDU_MAP_AK": "", - "BAIDU_MAP_SERVER_AK": "", - "ADMIN_USERNAME":"admin", - "ADMIN_PASSWORD":"public", - "STORAGE_ENGINE":"sqlite", - "MYSQL_HOST":"localhost", - "MYSQL_PORT":3306, - "MYSQL_USER":"", - "MYSQL_PASS":"", - "MYSQL_DB":"mixio" -} \ No newline at end of file diff --git a/mixio.js b/mixio.js index 1bca56b..b927fa0 100644 --- a/mixio.js +++ b/mixio.js @@ -1,3 +1,5 @@ +var VERSION = "1.10.0" + // change pwd to src if (process.argv[0].indexOf("node") != -1) { // exec from source @@ -16,7 +18,7 @@ var logFileName = "logs/" + [ [spawnTime.getFullYear(), spawnTime.getMonth() + 1, spawnTime.getDate()].join("-"), [spawnTime.getHours() >= 10 ? spawnTime.getHours() : ("0" + spawnTime.getHours()), spawnTime.getMinutes() >= 10 ? spawnTime.getMinutes() : ("0" + spawnTime.getMinutes()), spawnTime.getSeconds() >= 10 ? spawnTime.getSeconds() : ("0" + spawnTime.getSeconds())].join("-") ].join("-") + ".log" const { spawn, exec } = require('child_process'); -var fs = require('fs') +var fs = require('fs-extra') var express = require('express'); var session = require('express-session'); const sqlite3 = require('sqlite3').verbose(); @@ -33,26 +35,211 @@ var jq = require("jquery"); const mqtt = require('mqtt'); var { JSLang, arrLang, lang } = require("./js/lang.js") const path = require('path'); +var readline = require('readline'); +var iconv = require('iconv-lite'); -var versionPath = "version.json" -var VERSION = JSON.parse(fs.readFileSync(versionPath), "utf-8")["version"] -var configPath = "config/config.json" -var configs = fs.readFileSync(configPath); -configs = JSON.parse(configs.toString()); - -var STORAGE_ENGINE = configs["STORAGE_ENGINE"] - +function init(cb){ + if (!fs.existsSync("logs")) { + fs.mkdirSync("logs") + } + if (!fs.existsSync("config")) { + fs.mkdirSync("config") + var defaultConfig = `{ + "MIXIO_HTTP_PORT": 8080, + "MIXIO_HTTPS_PORT": 8443, + "MAX_PROJECT_NUM_PER_USER": 20, + "MAX_MESSAGE_PER_USER": 1000, + "MAX_MESSAGE_PER_SECOND": 5, + "ALLOW_REGISTER": true, + "ALLOW_HOOK": true, + "OFFLINE_MODE": true, + "BAIDU_MAP_AK": "", + "BAIDU_MAP_SERVER_AK": "", + "ADMIN_USERNAME":"admin", + "ADMIN_PASSWORD":"public", + "STORAGE_ENGINE":"sqlite", + "MYSQL_HOST":"localhost", + "MYSQL_PORT":3306, + "MYSQL_USER":"", + "MYSQL_PASS":"", + "MYSQL_DB":"mixio" + }` + fs.writeFileSync("config/config.json", defaultConfig) + fs.mkdirSync("config/certs") + var defaultCrt = +`-----BEGIN CERTIFICATE----- +MIICRDCCAa0CFCVQzFjsGbbYOOlCxMGn1sZyBzwVMA0GCSqGSIb3DQEBCwUAMGEx +CzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdCZWlqaW5n +MQ4wDAYDVQQKDAVNaXhseTEOMAwGA1UECwwFTWl4SU8xDjAMBgNVBAMMBU1peElP +MB4XDTIyMDEyOTA4MDE0MVoXDTIzMDEyOTA4MDE0MVowYTELMAkGA1UEBhMCQ04x +EDAOBgNVBAgMB0JlaWppbmcxEDAOBgNVBAcMB0JlaWppbmcxDjAMBgNVBAoMBU1p +eGx5MQ4wDAYDVQQLDAVNaXhJTzEOMAwGA1UEAwwFTWl4SU8wgZ8wDQYJKoZIhvcN +AQEBBQADgY0AMIGJAoGBAM3xzY1n5V05vAZbYniDbMoNXCzgL5puebmV2mIkMAHv +QnhMZHv2O938ezFae0l3A6zRkhWgX4XLmGUwKria3xCC9E0soF2wM0JfIFpDIQ5g +WnixtCiI8MjV8hXQ0Nh1hJ0MMwEX6g72N/YyH5Y/P9lsmr6OiG7dXe4oyaROY/U5 +AgMBAAEwDQYJKoZIhvcNAQELBQADgYEASvGJMK+h09mGCsza7h2ieVe75ogbG/nK ++c7KYYOBR2OXTNk90Od+2tJog5hJl8M1nRDHdOEPgTPDYKVz0hXjJBZnM5NtcoYS +pq6vf83MtY8polmly/EZsZqiVPaEsH97nniRoMOP4JdyKlqU2g94yFDUiTTZW4cS +iURo4pW8gRE= +-----END CERTIFICATE----- +` + fs.writeFileSync("config/certs/file.crt", defaultCrt) + var defaultPem = +`-----BEGIN PRIVATE KEY----- +MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM3xzY1n5V05vAZb +YniDbMoNXCzgL5puebmV2mIkMAHvQnhMZHv2O938ezFae0l3A6zRkhWgX4XLmGUw +Kria3xCC9E0soF2wM0JfIFpDIQ5gWnixtCiI8MjV8hXQ0Nh1hJ0MMwEX6g72N/Yy +H5Y/P9lsmr6OiG7dXe4oyaROY/U5AgMBAAECgYB8zETFpeoF/lCEgahAY1PvdP0g +bJIsQToeTkLSKh+1bGmZQKG7xNEuiiuVEsGXGTnu5ehilpaMG340A2ZADAmTf552 +Zr7AHSWmg4YEEykihSoJ2owfmqamm5Fsyoe/oxijsWwXAiZIv6VkDznchnQ+1I/w +Ioyigp+dHbHS3OjiAQJBAOaDx0XjofpJQe4oCufTIqltomRtxtP4fFbeEbmQrXRt +zNvH6QeKeanA+F4JQGVKcDSt6rz5yi8MqukOpZKBcdkCQQDktp4hfgvCQN8U50t+ +izZVImXGb47tfNKCWkNdrVnMI597ad3Qx+NV41oohMV4SFNCA8VgTq2onkhBbRjP +YSJhAkBp9n2t5Nvan75M6d9JfcbbN2iE3emeGwWdMOvY72astKSNCzJVoxQWMnx5 +TatqZHN7486aHAES67HM/EykMhjRAkArlooog+clzEs3pqUCpvFh5D5VRSmOJT3R +TfaMwd7dQuTAFnsJsS6oTb3+/t7Lf60uZZ2WLyh1fET1Ax+5Vh/BAkEAlNxqK/DI +Fu1JviGs33vE55YHu4F0u822PUT9XN8NNzFhsvK5Oza+O7Tyyq7WJejR7I8IjzOb +RvSzVsDN3/+4ug== +-----END PRIVATE KEY----- +` + fs.writeFileSync("config/certs/private.pem", defaultPem) + } + if (!fs.existsSync("storage")) { + fs.mkdirSync("storage") + var newDB = new sqlite3.Database("storage/mixio.db", sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, function(err) { + if (err) { + console.log(err) + cb(false) + } + else{ + newDB.run(`CREATE TABLE "devices" ( + "userName" TEXT, + "clientid" TEXT, + "timestamp" INTEGER DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY("clientid") + )`,function(err){ + if(err){ + console.log(err) + cb(false) + } + else + { + newDB.run(`CREATE TABLE "project" ( + "projectName" TEXT, + "userName" TEXT, + "projectLayout" TEXT, + "dataStorage" TEXT, + "logicStorage" TEXT, + "timestamp" INTEGER DEFAULT CURRENT_TIMESTAMP, + "projectType" INTEGER + )`, function(err){ + if(err){ + console.log(err) + cb(false) + } + else + { + newDB.run(`CREATE TABLE "share" ( + "shareid" TEXT, + "userName" TEXT, + "projectName" TEXT, + "projectLayout" TEXT, + "dataStorage" TEXT, + "logicStorage" TEXT, + "timeStamp" INTEGER DEFAULT CURRENT_TIMESTAMP, + "status" INTEGER DEFAULT 1, + "shareCount" INTEGER DEFAULT 0 + )`, function(err){ + if(err){ + console.log(err) + cb(false) + } + else + { + newDB.run(`CREATE TABLE "share_key" ( + "userName" TEXT, + "projectPass" TEXT, + "projectName" TEXT, + "share_key" TEXT + )`, function(err){ + if(err) + { + console.log(err) + cb(false) + } + else + { + newDB.run(`CREATE TABLE "user" ( + "id" INTEGER, + "username" TEXT, + "password" TEXT, + "salt" TEXT, + "is_superuser" INTEGER DEFAULT 0, + "verified" INTEGER DEFAULT 1, + "question" TEXT, + "answer" TEXT, + PRIMARY KEY("id" AUTOINCREMENT) + )`, function(err){ + if(err) + { + console.log(err) + cb(false) + } + else + { + newDB.close() + fs.mkdirSync("storage/reserve") + fs.writeFileSync("storage/reserve/filter.json", "{}") + var newDB1 = new sqlite3.Database("storage/reserve/1.db", sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, function(err) { + if(err) + { + console.log(err) + cb(false) + } + else + { + newDB1.run(`CREATE TABLE "reserve" ( + "id" INTEGER, + "userName" TEXT NOT NULL, + "topic" TEXT NOT NULL, + "message" TEXT NOT NULL, + "time" INTEGER DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY("id" AUTOINCREMENT) + )`, function(err){ + if(err) + { + console.log(err) + cb(false) + } + else + { + newDB1.close() + for(var i = 2;i<=8;i = i+1){ + fs.copyFileSync("storage/reserve/1.db","storage/reserve/" + i + ".db") + } + cb(true) + } + }) + } + }) + } + }) + } + }) + } + }) + } + }) + } + }) + } + }) + } + else + cb(true) +} var mysql = require('mysql8'); -var MYSQL_HOST = configs["MYSQL_HOST"] -var MYSQL_USER = configs["MYSQL_USER"] -var MYSQL_PASS = configs["MYSQL_PASS"] -var MYSQL_DB = configs["MYSQL_DB"] -var MYSQL_PORT = configs["MYSQL_PORT"] - -var MAX_MESSAGE_PER_USER = configs["MAX_MESSAGE_PER_USER"] -var MAX_MESSAGE_PER_SECOND = configs["MAX_MESSAGE_PER_SECOND"] - var serverStatus = true var globalWeather = {} @@ -1845,132 +2032,238 @@ async function startOnce() { } const args = process.argv.slice(2) -if (args.length != 1) { - console.log("Invalid parameter(s). Use \"mixio help\" for help.") -} else { - if (args[0] == "debug") - { - daemon_start() - startOnce() - } - else if (args[0] == "start") - { - var parent_exit = function(child){ - var logFile = fs.openSync(logFileName, 'r') - while(true){ - // check log file for database connection - var data = fs.readFileSync(logFile, 'utf8') - if(data[data.length-1] == "\n") - data = data.slice(0, -1) - if(data!="") - console.log(data) - if(data.toString().indexOf("Database Connected!") != -1) - { - console.log("MixIO server is running now.") - child.unref() - process.exit() - } - else if(data.toString().indexOf("Error") != -1) - { - console.error("An error occured while initializing MixIO server. Log file: " + process.cwd() + logFileName) - child.unref() - process.exit() - } - } - } - // child process to run 'mixio' in background - var logFile = fs.openSync(logFileName, 'a') - if(process.argv[0].indexOf("node") != -1) - { - var child = spawn(process.argv[0], [process.argv[1], "debug"], { detached: true , stdio:['ignore', logFile, logFile]}) - parent_exit(child) - } - else - { - var child = spawn(process.argv[0], [process.argv[1], "debug"], { detached: true , stdio:['ignore', logFile, logFile]}) - parent_exit(child) - } - } - else if (args[0] == "stop") - { - // kill 'mixio' process if it is running - if(process.argv[0].indexOf("node") != -1) - { - if(process.platform == "win32") +var startMixIO = function(){ + var parent_exit = function(child){ + var logFile = fs.openSync(logFileName, 'r') + while(true){ + // check log file for database connection + var data = fs.readFileSync(logFile, 'utf8') + if(data[data.length-1] == "\n") + data = data.slice(0, -1) + if(data!="") + console.log(data) + if(data.toString().indexOf("Database Connected!") != -1) { - console.log("Shutting down MixIO server...") - exec('taskkill /F /IM node.exe', function(err, stdout, stderr) { - if (err) { - console.log(err) - } - }) + console.log("MixIO server is running now.") + child.unref() + for (var t = Date.now(); Date.now() - t <= 2000;); + process.exit() } - else - { - console.log("Shutting down MixIO server...") - exec('pkill node', function(err, stdout, stderr) { - if (err) { - console.log(err) - } - }) - } - } - else - { - if(process.platform == "win32") - { - console.log("Shutting down MixIO server...") - exec('taskkill /F /IM mixio.exe', function(err, stdout, stderr) { - if (err) { - console.log(err) - } - }) - } - else - { - console.log("Shutting down MixIO server...") - exec('pkill mixio', function(err, stdout, stderr) { - if (err) { - console.log(err) - } - }) + else if(data.toString().indexOf("Error") != -1) + { + console.error("An error occured while initializing MixIO server. Log file: " + process.cwd() + logFileName) + child.unref() + for (var t = Date.now(); Date.now() - t <= 2000;); + process.exit() } } } - else if (args[0] == "version") + // child process to run 'mixio' in background + var logFile = fs.openSync(logFileName, 'a') + if(process.argv[0].indexOf("node") != -1) { - console.log(fs.readFileSync("version.json", "utf8")) - } - else if (args[0] == "update") - { - // use git - console.log("Updating MixIO server...") - exec('git pull', function(err, stdout, stderr) { - if (err) { - console.log(err) - } - else - { - console.log("Update finished.") - } - }) - } - else if (args[0] == "help") - { - console.log("MixIO server help:") - console.log("mixio start: start MixIO server in background.") - console.log("mixio stop: stop MixIO server.") - console.log("mixio debug: start MixIO server in foreground.") - console.log("mixio version: show MixIO server version.") - console.log("mixio update: update MixIO server.") + var child = spawn(process.argv[0], [process.argv[1], "debug"], { detached: true , stdio:['ignore', logFile, logFile]}) + parent_exit(child) } else { - console.log("Invalid parameter(s). Use \"mixio help\" for help.") + var child = spawn(process.argv[0], [process.argv[1], "debug"], { detached: true , stdio:['ignore', logFile, logFile]}) + parent_exit(child) } } +var stopMixIO = function(){ + // kill 'mixio' process if it is running + if(process.argv[0].indexOf("node") != -1) + { + if(process.platform == "win32") + { + console.log("Shutting down MixIO server...") + exec('taskkill /F /IM node.exe', function(err, stdout, stderr) { + if (err) { + console.log(err) + } + }) + } + else + { + console.log("Shutting down MixIO server...") + exec('pkill node', function(err, stdout, stderr) { + if (err) { + console.log(err) + } + }) + } + } + else + { + if(process.platform == "win32") + { + console.log("Shutting down MixIO server...") + exec('taskkill /F /IM mixio.exe', function(err, stdout, stderr) { + if (err) { + console.log(err) + } + }) + } + else + { + console.log("Shutting down MixIO server...") + exec('pkill mixio', function(err, stdout, stderr) { + if (err) { + console.log(err) + } + }) + } + } +} + +init(function(res){ + if(res) + { + configPath = "config/config.json" + configs = fs.readFileSync(configPath); + configs = JSON.parse(configs.toString()); + + STORAGE_ENGINE = configs["STORAGE_ENGINE"] + + + MYSQL_HOST = configs["MYSQL_HOST"] + MYSQL_USER = configs["MYSQL_USER"] + MYSQL_PASS = configs["MYSQL_PASS"] + MYSQL_DB = configs["MYSQL_DB"] + MYSQL_PORT = configs["MYSQL_PORT"] + + MAX_MESSAGE_PER_USER = configs["MAX_MESSAGE_PER_USER"] + MAX_MESSAGE_PER_SECOND = configs["MAX_MESSAGE_PER_SECOND"] + if (args.length > 1 || (args.length == 0 && process.platform != "win32")) { + console.log("Invalid parameter(s). Use \"mixio help\" for help.") + } else { + var show = function(){ + if(args.length == 0){ + // wait for user input, 1 for start, 2 for stop, 3 for autoStart, 4 for remove autoStart + console.log("1. Start MixIO server") + console.log("2. Stop MixIO server") + console.log("3. Set MixIO server to auto start") + console.log("4. Remove MixIO server from auto start") + console.log("5. Exit") + var rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }) + rl.question("Please select an option: ", function(answer) { + rl.close() + if (answer == "1") { + startMixIO() + } else if (answer == "2") { + stopMixIO() + } else if (answer == "3") { + var child = spawn("schtasks", ["/create", "/sc", "onlogon", "/tn", "MixIO", "/tr", process.execPath + " start", "/rl", "highest", "/f"]) + child.stdout.on('data', function(data) { + // encode to ANSI + console.log(iconv.decode(data, 'cp936').toString()) + }) + child.stderr.on('data', function(data) { + // encode to ANSI + console.log(iconv.decode(data, 'cp936').toString()) + }) + child.on("close", function() { + show(); + }) + + + } else if (answer == "4") { + var child = spawn("schtasks", ["/delete", "/tn", "MixIO", "/f"]) + child.stdout.on('data', function(data) { + // encode to ANSI + console.log(iconv.decode(data, 'cp936').toString()) + }) + child.stderr.on('data', function(data) { + // encode to ANSI + console.log(iconv.decode(data, 'cp936').toString()) + }) + child.on("close", function() { + show(); + }) + } else if (answer == "5") { + process.exit() + } else { + console.log("Invalid option.") + } + }) + } + else if (args[0] == "debug") + { + if(res){ + daemon_start() + startOnce() + } + } + else if (args[0] == "start") + { + startMixIO() + + } + else if (args[0] == "stop") + { + stopMixIO() + } + else if (args[0] == "version") + { + console.log(VERSION) + } + else if (args[0] == "install" && process.platform == "linux") + { + var install_shell = ` + service=" + [UNIT] + Description=MixIO.Service + After=network.target + StartLimitIntervalSec=0 + + [Service] + Type=forking + Restart=always + RestartSec=1 + WorkingDirectory="`+ process.argv[0].slice(0,process.argv[0].lastIndexOf("/"))+`" + ExecStart=`+ process.argv[0].slice(0,process.argv[0].lastIndexOf("/"))+`/mixio start + ExecStop=`+ process.argv[0].slice(0,process.argv[0].lastIndexOf("/"))+`/mixio stop + + [Install] + WantedBy=multi-user.target + " + echo "${service}" > /etc/systemd/system/mixio.service + ` + //exec shell + exec(install_shell, function(err, stdout){ + if(err) + console.log(err) + else + console.log(stdout) + }) + } + else if (args[0] == "help") + { + console.log("MixIO server help:") + console.log("mixio start: start MixIO server in background.") + console.log("mixio stop: stop MixIO server.") + console.log("mixio debug: start MixIO server in foreground.") + console.log("mixio version: show MixIO server version.") + if(process.platform == "linux") + console.log("mixio install: install MixIO service.") + } + else + { + console.log("Invalid parameter(s). Use \"mixio help\" for help.") + } + } + show(); + } + } +}) + + //MixIO diff --git a/package-lock.json b/package-lock.json index 2668464..e0ca4aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,15 @@ "express": "^4.17.2", "express-session": "^1.17.2", "forever-monitor": "^3.0.3", + "fs-extra": "^11.1.0", + "iconv-lite": "^0.6.3", "jquery": "^3.6.0", "js-md5": "^0.7.3", "jsdom": "^19.0.0", "mqtt": "^4.3.7", "mysql8": "^2.17.3", "net": "^1.0.2", + "readline": "^1.3.0", "sqlite3": "^5.0.2", "websocket-stream": "^5.5.2" }, @@ -633,7 +636,7 @@ }, "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, "engines": { @@ -755,6 +758,17 @@ "ms": "2.0.0" } }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1429,18 +1443,6 @@ "iconv-lite": "^0.6.2" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -2073,18 +2075,16 @@ "dev": true }, "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=14.14" } }, "node_modules/fs-minipass": { @@ -2386,11 +2386,11 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -2761,7 +2761,6 @@ "version": "6.1.0", "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -3909,6 +3908,36 @@ "pkg-fetch": "lib-es5/bin.js" } }, + "node_modules/pkg-fetch/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -4093,6 +4122,17 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz", @@ -4161,6 +4201,11 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" + }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", @@ -5216,7 +5261,6 @@ "version": "2.0.0", "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, "engines": { "node": ">= 10.0.0" } @@ -5438,17 +5482,6 @@ "node": ">=12" } }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", @@ -6177,7 +6210,7 @@ }, "at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, @@ -6275,6 +6308,14 @@ "requires": { "ms": "2.0.0" } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } } } }, @@ -6818,17 +6859,6 @@ "optional": true, "requires": { "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } } }, "end-of-stream": { @@ -7360,12 +7390,10 @@ "dev": true }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -7618,11 +7646,11 @@ } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "ieee754": { @@ -7915,7 +7943,6 @@ "version": "6.1.0", "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -8793,6 +8820,20 @@ "prebuild-install": "6.1.4", "resolve": "^1.22.0", "stream-meter": "^1.0.4" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "pkg-fetch": { @@ -8809,6 +8850,20 @@ "semver": "^7.3.5", "tar-fs": "^2.1.1", "yargs": "^16.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } } }, "posix-character-classes": { @@ -8948,6 +9003,16 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "rc": { @@ -9011,6 +9076,11 @@ } } }, + "readline": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", + "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==" + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", @@ -9872,8 +9942,7 @@ "universalify": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "unpipe": { "version": "1.0.0", @@ -10055,16 +10124,6 @@ "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "requires": { "iconv-lite": "0.6.3" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } } }, "whatwg-mimetype": { diff --git a/package.json b/package.json index 94da8a3..553bb46 100644 --- a/package.json +++ b/package.json @@ -5,12 +5,15 @@ "express": "^4.17.2", "express-session": "^1.17.2", "forever-monitor": "^3.0.3", + "fs-extra": "^11.1.0", + "iconv-lite": "^0.6.3", "jquery": "^3.6.0", "js-md5": "^0.7.3", "jsdom": "^19.0.0", "mqtt": "^4.3.7", "mysql8": "^2.17.3", "net": "^1.0.2", + "readline": "^1.3.0", "sqlite3": "^5.0.2", "websocket-stream": "^5.5.2" }, diff --git a/pkg_tools/linux/install.sh b/pkg_tools/linux/install.sh deleted file mode 100644 index f0ac52c..0000000 --- a/pkg_tools/linux/install.sh +++ /dev/null @@ -1,18 +0,0 @@ -service=" -[Unit] -Description=MixIO Service -After=network.target -StartLimitIntervalSec=0 - -[Service] -Type=forking -Restart=always -RestartSec=1 -WorkingDirectory="$(pwd)" -ExecStart="$(pwd)"/mixio start -ExecStop="$(pwd)"/mixio stop - -[Install] -WantedBy=multi-user.target -" -echo "${service}" > /etc/systemd/system/mixio.service \ No newline at end of file diff --git a/pkg_tools/mixio.empty.db b/pkg_tools/mixio.empty.db deleted file mode 100644 index c90a3b3..0000000 Binary files a/pkg_tools/mixio.empty.db and /dev/null differ diff --git a/pkg_tools/reserve/1.db b/pkg_tools/reserve/1.db deleted file mode 100644 index a5da355..0000000 Binary files a/pkg_tools/reserve/1.db and /dev/null differ diff --git a/pkg_tools/reserve/2.db b/pkg_tools/reserve/2.db deleted file mode 100644 index a5da355..0000000 Binary files a/pkg_tools/reserve/2.db and /dev/null differ diff --git a/pkg_tools/reserve/3.db b/pkg_tools/reserve/3.db deleted file mode 100644 index a5da355..0000000 Binary files a/pkg_tools/reserve/3.db and /dev/null differ diff --git a/pkg_tools/reserve/4.db b/pkg_tools/reserve/4.db deleted file mode 100644 index c868d78..0000000 Binary files a/pkg_tools/reserve/4.db and /dev/null differ diff --git a/pkg_tools/reserve/5.db b/pkg_tools/reserve/5.db deleted file mode 100644 index a5da355..0000000 Binary files a/pkg_tools/reserve/5.db and /dev/null differ diff --git a/pkg_tools/reserve/6.db b/pkg_tools/reserve/6.db deleted file mode 100644 index a5da355..0000000 Binary files a/pkg_tools/reserve/6.db and /dev/null differ diff --git a/pkg_tools/reserve/7.db b/pkg_tools/reserve/7.db deleted file mode 100644 index a5da355..0000000 Binary files a/pkg_tools/reserve/7.db and /dev/null differ diff --git a/pkg_tools/reserve/8.db b/pkg_tools/reserve/8.db deleted file mode 100644 index a5da355..0000000 Binary files a/pkg_tools/reserve/8.db and /dev/null differ diff --git a/pkg_tools/reserve/filter.json b/pkg_tools/reserve/filter.json deleted file mode 100644 index 7a73a41..0000000 --- a/pkg_tools/reserve/filter.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} \ No newline at end of file diff --git a/pkg_tools/win-x64-pkg.sh b/pkg_tools/win-x64-pkg.sh index 69e5ab0..bbd9758 100644 --- a/pkg_tools/win-x64-pkg.sh +++ b/pkg_tools/win-x64-pkg.sh @@ -5,31 +5,13 @@ version="{ \"platform\":\"win-x64\", \"node-version\":\"16\" }" -gitignore="config/* -logs/* -storage/* -" cd ../../ rm -rf mixio_win_x64 mkdir mixio_win_x64 -cd mixio_win_x64 -echo "${version}" > version.json -echo "${gitignore}" > .gitignore -mkdir logs -mkdir storage -mkdir config -cd ../ chmod -R 777 mixio cd mixio npm install pkg -t node16-win-x64 package.json mv -f mixio ../mixio_win_x64/ -cp -r config ../mixio_win_x64/ -cd pkg_tools -cp win/autoStart.bat ../../mixio_win_x64/ -cp win/removeAutoStart.bat ../../mixio_win_x64/ -cp win/start.bat ../../mixio_win_x64/ -cp mixio.empty.db ../../mixio_win_x64/storage/mixio.db -cp -r reserve ../../mixio_win_x64/storage/ -cd ../../ +cd ../ chmod -R 777 mixio_win_x64 diff --git a/pkg_tools/win/autoStart.bat b/pkg_tools/win/autoStart.bat deleted file mode 100644 index 71319a5..0000000 --- a/pkg_tools/win/autoStart.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -cd /d %~dp0 -reg add hklm\software\microsoft\windows\currentversion\run /v MixIO /t reg_sz /d "%cd%\start.bat" -pause \ No newline at end of file diff --git a/pkg_tools/win/removeAutoStart.bat b/pkg_tools/win/removeAutoStart.bat deleted file mode 100644 index 6f0f770..0000000 --- a/pkg_tools/win/removeAutoStart.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -cd /d %~dp0 -reg delete hklm\software\microsoft\windows\currentversion\run /v MixIO -pause \ No newline at end of file diff --git a/pkg_tools/win/start.bat b/pkg_tools/win/start.bat deleted file mode 100644 index a140175..0000000 --- a/pkg_tools/win/start.bat +++ /dev/null @@ -1,4 +0,0 @@ -@echo off -cd /d %~dp0 -mixio.exe start -pause \ No newline at end of file diff --git a/storage/.gitignore b/storage/.gitignore deleted file mode 100644 index 970d3eb..0000000 --- a/storage/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -reserve/ -mixio.db \ No newline at end of file diff --git a/version.json b/version.json deleted file mode 100644 index 247bf88..0000000 --- a/version.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version":"1.10.0", - "platform":"src", - "node-version":"16" -}