diff --git a/.gitignore b/.gitignore index 6257d4f..3b0e34a 100644 --- a/.gitignore +++ b/.gitignore @@ -106,4 +106,5 @@ dist .idea/workspace.xml .DS_Store -/dist \ No newline at end of file +/dist +./mongo_example_swarmlab.js \ No newline at end of file diff --git a/client/package-lock.json b/client/package-lock.json index 3cce201..9ef0f7b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -377,10 +377,9 @@ } }, "node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dependencies": { "ms": "^2.1.1" } @@ -455,6 +454,15 @@ "yeast": "0.1.2" } }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/engine.io-parser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", @@ -844,14 +852,6 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/nodemon/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -880,9 +880,6 @@ }, "bin": { "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" } }, "node_modules/normalize-path": { @@ -1098,6 +1095,15 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/socket.io-parser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.2.tgz", @@ -1111,6 +1117,15 @@ "node": ">=10.0.0" } }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -1641,9 +1656,9 @@ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } @@ -1707,6 +1722,16 @@ "ws": "~7.2.1", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } } }, "engine.io-parser": { @@ -1985,14 +2010,6 @@ "update-notifier": "^4.1.0" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -2180,6 +2197,16 @@ "engine.io-client": "~4.0.0", "parseuri": "0.0.6", "socket.io-parser": "~4.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } } }, "socket.io-parser": { @@ -2190,6 +2217,16 @@ "@types/component-emitter": "^1.2.10", "component-emitter": "~1.3.0", "debug": "~4.1.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + } } }, "string-width": { diff --git a/mongo_example_swarmlab.js b/mongo_example_swarmlab.js deleted file mode 100644 index 994d4c9..0000000 --- a/mongo_example_swarmlab.js +++ /dev/null @@ -1,882 +0,0 @@ -'use strict' - -var pathmodule = require('path'); -var app = require('express')(); -var http = require('http').Server(app); -var https = require('https'); -var CONFIG = require(pathmodule.resolve(__dirname, 'runconfig.js')); -const io = require('socket.io')(http, { -// pingTimeout: 30000, -// allowUpgrades: false, -// serveClient: false, -// pingInterval: 10000, -// //transports: [ 'websocket', 'polling' ], -// transports: [ 'polling', 'websocket' ], - cors: { - origin: 'http://localhost:8080', - methods: ['GET', 'POST'], - allowedHeaders: ['my-custom-header'], - credentials: true - }, - cookie: { - name: 'test', - httpOnly: false, - path: '/custom' - } -}); - -/* -const Redis = require("ioredis"); -const redistest = new Redis({ - host: 'redisserver', - port: 6379, - }); -const pubtest = new Redis({ - host: 'redisserver', - port: 6379, - }); -*/ - - -//import { createAdapter } from 'socket.io-redis'; -const createAdapter = require('socket.io-redis'); -//const RedisClient = require("redis"); -const Redis = require('ioredis'); -//const pubClient = RedisClient.createClient({ - -const pubClient = new Redis({ - host: 'redisserver', - port: 6379, -}); - -//const pubClient = new RedisClient({ host: 'localhost', port: 6379 }); -const subClient = pubClient.duplicate(); - -io.adapter(createAdapter({pubClient, subClient})); - - -pubClient.on('connect', function () { - console.log('You are now connected'); -}); - -const MongoClient = require('mongodb').MongoClient; -const {DateTime} = require('luxon'); - - -var async = require('async'); -const {check, validationResult} = require('express-validator'); -const urlExistSync = require('url-exist-sync'); - -var express = require('express'); -app.use(express.json()); - -const axios = require('axios'); -axios.defaults.timeout = 30000 - -const helmet = require('helmet'); -app.use(helmet()); - -const cors = require('cors') -const whitelist = [ - 'http://localhost:8080', - 'http://localhost:3080', - 'http://localhost:3081', - 'http://localhost:3082' -] -const corsOptions = { - credentials: true, - methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'], - optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204 - allowedHeaders: [ - 'Content-Type', - 'Authorization', - 'X-Requested-With', - 'device-remember-token', - 'Access-Control-Allow-Origin', - 'Access-Control-Allow-Headers', - 'Origin', - 'Accept' - ], - origin: function (origin, callback) { - if (whitelist.indexOf(origin) !== -1) { - callback(null, true) - } else { - callback(null, true) - //callback(new Error('Not allowed by CORS')) - } - } -} - - -// *************************************************** -// checktoken -// *************************************************** - -async function checkToken(token) { - const agent = new https.Agent({ - rejectUnauthorized: false, - }); - const instance = axios.create({ - baseURL: 'https://api.swarmlab.io', - withCredentials: true, - rejectUnauthorized: false, - crossdomain: true, - httpsAgent: agent, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'multipart/form-data', - 'Authorization': 'Bearer ' + token - } - }) - try { - var pipelines = { - 'source': 'ssologin' - } - var params = { - pipeline: pipelines - } - - var options = { - headers: {'content-type': 'application/x-www-form-urlencoded', Authorization: `Bearer ${token}`}, - }; - - instance.defaults.timeout = 30000; - const res = await instance.post('/istokenvalidsso', params, options); - if (res.status == 200) { - //console.log("check " +JSON.stringify(res.data)) - return res.data - } else { - console.log('noerror: ' + res) - return res.status - - } - } catch (err) { - console.error('error: ' + err); - var error = new Object(); - error.action = '401' - return error - } -} - - -function convertDateToUTC(date) { - return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds()); -} - -// *************************************************** -// get pipelines -// *************************************************** - -async function getpipelines(token, pipelinename) { - const agent = new https.Agent({ - rejectUnauthorized: false, - }); - const instance = axios.create({ - baseURL: 'https://api.swarmlab.io', - withCredentials: true, - rejectUnauthorized: false, - crossdomain: true, - httpsAgent: agent, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'multipart/form-data', - 'Authorization': 'Bearer ' + token - } - }) - /* - var params = { - playbook: value - } - var options = { - params: params, - headers: { 'content-type': 'application/x-www-form-urlencoded',Authorization: `Bearer ${token}` }, - }; - - const playbook = await api.GET('playbookCode',options); - return playbook - */ - try { - - var pipelines = { - 'querytokenFilter': CONFIG.api.token, - 'filter': pipelinename - } - //var params = { - // pipeline: pipelines - // } - var params = { - querytokenFilter: CONFIG.api.token, - filter: pipelinename - } - - var options = { - params: params, - headers: {'content-type': 'application/x-www-form-urlencoded', Authorization: `Bearer ${token}`}, - }; - - //https://api.swarmlab.io/gettutorlabrooms?sort=pipelinename%7Casc&page=1&per_page=5&filter=&type=scripts&tutor=yes - instance.defaults.timeout = 30000; - //const res = await instance.get('/getplaygrounds',params,options); - const res = await instance.get('/getplaygrounds', options); - if (res.status == 200) { - return res.data - } else { - console.log('noerror: ' + res) - return await res.status - - } - } catch (err) { - console.error('error: ' + err); - var error = new Object(); - error.action = '401' - return await error - } -} - -// *************************************************** -// get user pipelines -// *************************************************** - -async function getuserpipelines(token, user, swarmlabname) { - var pipelinename = user - const agent = new https.Agent({ - rejectUnauthorized: false, - }); - const instance = axios.create({ - baseURL: 'https://api.swarmlab.io', - withCredentials: true, - rejectUnauthorized: false, - crossdomain: true, - httpsAgent: agent, - headers: { - 'Accept': 'application/json', - 'Content-Type': 'multipart/form-data', - 'Authorization': 'Bearer ' + token - } - }) - try { - - var pipelines = { - 'querytokenFilter': CONFIG.api.token, - 'filter': pipelinename, - swarmlabname: swarmlabname - } - //var params = { - // pipeline: pipelines - // } - var params = { - querytokenFilter: CONFIG.api.token, - filter: pipelinename, - swarmlabname: swarmlabname - } - - var options = { - params: params, - headers: {'content-type': 'application/x-www-form-urlencoded', Authorization: `Bearer ${token}`}, - }; - - instance.defaults.timeout = 30000; - const res = await instance.get('/getuserplaygrounds', options); - if (res.status == 200) { - return res.data - } else { - console.log('noerror: ' + res) - return await res.status - - } - } catch (err) { - console.error('error: ' + err); - var error = new Object(); - error.action = '401' - error.error = err - return await error - } -} - - -global.online = 'ob'; -global.pipelines = []; - -function sendlog(reslog, pathfileval) { - var usertmp = global.pipelines.find(x => x.pathlogfile == pathfileval); - //for (var key in usertmp.data){ - var user = usertmp.data[0].user25user; - // if(usertmp.data){ - console.log('-----------------------' + JSON.stringify(usertmp)); - io.in(user).emit('logdata', reslog); - // } - //} -} - -function onlogfile(path) { - - console.log('File', path, 'has been added'); - var pathfileval = pathmodule.basename(path); - var arrfile = pathfileval.toString().split('-'); - var pathfile = arrfile[0]; - var indexfind1 = global.pipelines.findIndex(x => x.pathlogfile == pathfileval); - console.log('file11111111111111111111111111111111 ' + JSON.stringify(pathfileval)) - if (indexfind1 === -1) { - (async () => { - console.log('file2222222222222222222222222222222222222 ' + JSON.stringify(pathfileval)) - var token = 'd2539e5a7ae1f9f1b0eb2b8f22ca467a86d28407'; // desto - var resdata = await getpipelines(token, pathfile) - //resdata.data.pathlogfile = 'test' - var resob = {} - resob.pathlogfile = pathfileval - var resobarray = [] - for (let i in resdata.data) { - var resob1 = {} - resob1.data = resdata.data[i].res25swarmlabname - resob1.user25user = resdata.data[i].res25user - resob1.res25creator = resdata.data[i].res25creator - resob1.res25fileforce = resdata.data[i].res25fileforce - resobarray.push(resob1) - } - resob.data = resobarray - var indexfind = global.pipelines.findIndex(x => x.pathlogfile == pathfileval); - indexfind === -1 ? global.pipelines.push(resob) : console.log('object already exists ' + pathfileval) - })() - } - -} - -// *************************************************** -// rest get -// *************************************************** - -app.get('/get_log', [ - check('token').isLength({min: 40}) - ], - cors(corsOptions), (req, res, next) => { - - (async () => { - var RES = new Object(); - RES.token = req.query['token'] - RES.start = req.query['start'] - RES.end = req.query['end'] - RES.swarmlabname = req.query['swarmlabname'] - RES.ok = 'ok' - /* - * - * validate - * - */ - - - var isvalid = await checkToken(RES.token); - if (isvalid.action == 'ok') { - console.log('Authserver ok ' + RES.token); - RES.error = 'ok' - } else { - console.log('Authserver no ' + RES.token); - RES.error = 'no' - } - if (RES.error == 'ok') { - - var resdata = await getuserpipelines(RES.token, isvalid.user, RES.swarmlabname) - var mongourl = 'mongodb://' + CONFIG.mongo.user + ':' + CONFIG.mongo.password + '@ondemand_playground_mongo1:27017,ondemand_playground_mongo2:27017,ondemand_playground_mongo3:27017,ondemand_playground_mongo4:27017,ondemand_playground_mongo5:27017,ondemand_playground_mongo6:27017,ondemand_playground_mongo7:27017/fluent?replicaSet=rs1&authSource=swarmlabplaygroundstats' - const OPTS = { - useNewUrlParser: true, - useUnifiedTopology: true - }; - MongoClient.connect(mongourl, OPTS, function (err, client) { - if (err) { - console.log(err); - } else { - const db = client.db('fluent'); - //usersession.SOCKET.user = isvalid.user - console.log(JSON.stringify('mongo ----------------connected')) - console.log('-----test------- ' + JSON.stringify(RES)) - if ((typeof RES.start !== 'undefined') && (typeof RES.end !== 'undefined')) { - if (DateTime.fromISO(RES.start).isValid) { - var datestart = DateTime.fromISO(RES.start) - var dateend = DateTime.fromISO(RES.end) - var search_term = { - '$and': [ - { - 'time': { - $gte: datestart - } - }, - { - 'time': { - $lt: dateend - } - }, - ] - } - } else { - RES.ok = 'no' - } - } else if (typeof RES.end !== 'undefined') { - var dateend = DateTime.fromISO(RES.end) - if (DateTime.fromISO(RES.end).isValid) { - var search_term = { - '$and': [ - { - 'time': { - $lt: dateend - } - } - ] - } - } else { - RES.ok = 'no' - } - } else if (typeof RES.start !== 'undefined') { - var datestart = DateTime.fromISO(RES.start) - if (DateTime.fromISO(RES.start).isValid) { - var search_term = { - '$and': [ - { - 'time': { - $gte: datestart - } - } - ] - } - } else { - RES.ok = 'no' - } - } - if (RES.ok == 'ok') { - //var search_term = '{"$gte": new Date("2020-12-01T00:00:00.000Z") , "$lt": new Date("2020-12-11T16:17:36.470Z") }' - //var search_term = {"time" : {$lte : datenow}} - var resdataarray = [] - var resraw = {} - var reslab = '' - var datestart1 = DateTime.fromISO(RES.start) - console.log('-----now1------- ' + JSON.stringify(search_term)) - console.log('-----now2------- ' + JSON.stringify(datestart1)) - console.log('-----now3------- ' + JSON.stringify(datestart)) - - db.collection('logs').find(search_term).toArray() - //db.collection('logs').find({"time" : {$gt : datestart}}).toArray() - .then(item => { - console.log('item ' + JSON.stringify(item)) - for (let i in item) { - reslab = item[i].tailed_path - var segment_array = reslab.split('/'); - var last_segment = segment_array.pop(); - var fieldstmp = last_segment.split('-'); - var nameofswarmlab = fieldstmp[0]; - - var regexlog = new RegExp(nameofswarmlab); - for (let ii in resdata.data) { - if (regexlog.test(resdata.data[ii].res25swarmlabname)) { - resdataarray.push(item[i]) - RES.found = item[i] - } - } - } - - RES.error_msg = 'ok' - RES.data = resdataarray - //RES.dataserver = resdataarray - //RES.dataservertmp = resdata - res.json(RES) - }) - .catch(err => { - console.error(err) - RES.error_msg = err - res.json(RES) - }) - } else { // RES.ok - RES.error_msg = 'no date' - res.json(RES) - } - } // error mongo connect - }); // mongo connect - } else { // token error - RES.data = 'no' - RES.error_msg = 'token err' - res.json(RES) - } - })() - - }); - -app.get('/run', [ - //check('access_token').isLength({ min: 40 }), - //check('llo').isBase64() - ], - cors(corsOptions), (req, res, next) => { - - (async () => { - - var mongourl = 'mongodb://' + CONFIG.mongo.user + ':' + CONFIG.mongo.password + '@ondemand_playground_mongo1:27017,ondemand_playground_mongo2:27017,ondemand_playground_mongo3:27017,ondemand_playground_mongo4:27017,ondemand_playground_mongo5:27017,ondemand_playground_mongo6:27017,ondemand_playground_mongo7:27017/fluent?replicaSet=rs1&authSource=swarmlabplaygroundstats' - const OPTS = { - useNewUrlParser: true, - useUnifiedTopology: true - }; - MongoClient.connect(mongourl, OPTS, function (err, client) { - if (err) { - console.log(err); - } else { - const db = client.db('fluent'); - //db.collection('log', onCollection); - console.log(JSON.stringify('mongo connected')) - var stream = db.collection('logs').find({}, { - tailable: true, - awaitdata: true - /* other options */ - }).stream(); - - stream.on('data', function (doc) { - console.log(JSON.stringify(doc)) - //socket.iWrite(JSON.stringify({'action': 'log','param': doc.log})); - }); - } - }); - var RES = new Object(); - RES.code = req.query['filter'] - RES.token = req.query['filter'] - var isvalid = await checkToken(RES.token); - if (isvalid.action == 'ok') { - console.log('Authserver ok ' + RES.token); - } else { - console.log('Authserver no ' + RES.token); - } - RES.error = false - RES.error_msg = 'ok' - res.json(RES) - })() - - }); - -// *************************************************** -// rest post -// *************************************************** - -app.post('/run', [ - //check('access_token').isLength({ min: 40 }), - //check('llo').isBase64() - ], - cors(corsOptions), (req, res, next) => { - - - (async () => { - - //console.log(JSON.stringify(req.headers)); - //console.log(JSON.stringify(req.body)); - //console.log("mongo "+JSON.stringify(req.body)); - //console.log("LOG "+JSON.stringify(req.body[0].message)); - //console.log("PATH "+JSON.stringify(req.body[0].tailed_path)); - for (var i = 0; i < req.body.length; i++) { - //var getpath = await onlogfile(req.body[i].tailed_path) - - var path = req.body[i].tailed_path - - console.log('File', path, 'has been added'); - var pathfileval = pathmodule.basename(path); - var arrfile = pathfileval.toString().split('-'); - var pathfile = arrfile[0]; - var indexfind1 = global.pipelines.findIndex(x => x.pathlogfile == pathfileval); - console.log('file11111111111111111111111111111111 ' + JSON.stringify(pathfileval)) - if (indexfind1 === -1) { - (async () => { - console.log('file2222222222222222222222222222222222222 ' + JSON.stringify(pathfileval)) - var token = 'd2539e5a7ae1f9f1b0eb2b8f22ca467a86d28407'; // desto - var resdata = await getpipelines(token, pathfile) - //resdata.data.pathlogfile = 'test' - var resob = {} - resob.pathlogfile = pathfileval - var resobarray = [] - for (let i in resdata.data) { - var resob1 = {} - resob1.data = resdata.data[i].res25swarmlabname - resob1.user25user = resdata.data[i].res25user - resob1.res25creator = resdata.data[i].res25creator - resob1.res25fileforce = resdata.data[i].res25fileforce - resobarray.push(resob1) - } - resob.data = resobarray - //var indexfind = global.pipelines.findIndex(x => x.res25swarmlabname==resdata.data[0].res25swarmlabname); - var indexfind = global.pipelines.findIndex(x => x.pathlogfile == pathfileval); - - //indexfind === -1 ? global.pipelines.push({resob}) : console.log("object already exists") - indexfind === -1 ? global.pipelines.push(resob) : console.log('object already exists ' + pathfileval) - - //console.log('info', JSON.stringify(resdata)); - //console.log('info------------- ', JSON.stringify(global.pipelines)); - })() - } - // - var obj = req.body[i]; - - //var indexfind = global.pipelines.findIndex(x => x.res25swarmlabname==resdata.data.res25swarmlabname); - //indexfind === -1 ? global.pipelines.push(resob) : console.log("object already exists") - var now = new Date(); - - var reslog = new Object(); - reslog.log = obj - - reslog.date = convertDateToUTC(now) - console.log(reslog); - var pathfileval = pathmodule.basename(reslog.log.tailed_path); - var indexfind = global.pipelines.findIndex(x => x.pathlogfile == pathfileval); - //indexfind === -1 ? sendlog(reslog,pathfileval) : console.log("object already exists") - indexfind === -1 ? console.log('object not found') : sendlog(reslog, pathfileval) - console.log('IOT ' + JSON.stringify(reslog.log.tailed_path)); - console.log('IOTindexfind ' + JSON.stringify(indexfind)); - console.log('IOTuser ' + JSON.stringify(global.pipelines)); - // io.in("iot").emit("message", reslog); - // io.emit("logdata", reslog); - } - })() - - //io.in("iot").emit("message", RES); - - console.error('socket POST from client'); - var RES = new Object(); - RES.error = false - RES.error_msg = 'ok' - RES.msg = req.body[0].messsage - - res.json(RES) - }); - -// *************************************************** -// socket -// *************************************************** - -//function getSHA256ofJSON(input){ -// return require("crypto").createHash("sha256").update(JSON.stringify(input)).digest("hex"); -//} - -function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} - -function getSHA256ofJSON(data, inputEncoding, encoding) { - if (!data) { - return ''; - } - inputEncoding = inputEncoding || 'utf-8'; - encoding = encoding || 'hex'; - const hash = require('crypto').createHash('md5'); - return hash.update(JSON.stringify(data), inputEncoding).digest(encoding); -} - -//var getkey = function getkey(key) { -async function getkey(key) { - return new Promise((resolve) => { - - - pubClient.get(key, function (err, reply) { - if (err) { - - console.log('----------error------------') - - resolve(null) - } else { - if (reply) { - console.log('---------fount----------') - resolve(1) - } else { - console.log('----------not fount------------') - resolve(2) - //return 2 - } - } - }) - }) -} - -var setkey = function setkv(key, value) { - return new Promise((resolve) => { - //pubClient.set(key,value, 'EX', expire, function(err,reply){ - pubClient.set(key, value, function (err, reply) { - if (err) { - resolve(null) - } else { - resolve(reply) - } - }) - }) -} - -async function iosend(data, issend, io, pubClient, user1) { - var new1 = {} - new1.tailed_path = data.tailed_path - new1.message = data.message - - var now = new Date(); - var reslog1 = {} - //reslog1.data = resob1 - reslog1.log = new1 - reslog1.date = convertDateToUTC(now) - var user = user1 - - const randomTimeInMs = Math.random() * (2000); - await sleep(randomTimeInMs); - var getres = await getkey(issend); - - if (getres == '1') { - console.log(issend + ' ---1 ' + JSON.stringify(reslog1)) - //io.in(user).emit("logdata", reslog1); - } else if (getres == '2') { - console.log(issend + ' ---2 ' + JSON.stringify(reslog1)) - setkey(issend, '1') - //pubClient.set(issend, '1', function(err, res) { - //}); - io.in(user).emit('logdata', reslog1); - //} - - } - -} - -function onCollection(err, collection) { - let options = { - tailable: true, - awaitdata: true, - numberOfRetries: -1, - tailableRetryInterval: 500 - }; - var cursor = collection.find({}, options).stream(); - var itemsProcessed = 0; - - var reslog = new Object(); - var now = new Date(); - cursor.on('data', function (data) { - var issendob = new Object(); - issendob.id = data._id - issendob.message = data.message - issendob.tailed_path = data.tailed_path - - var issend = getSHA256ofJSON(issendob) - - console.log('++++++++' + JSON.stringify(data)); - console.log('++++++++ob' + JSON.stringify(issendob)); - console.log('++++++++sha' + JSON.stringify(issend)); - - var pathfileval = pathmodule.basename(data.tailed_path); - var arrfile = pathfileval.toString().split('-'); - var pathfile = arrfile[0]; - - var indexupdate = 'yes' - var resob = {}; - pubClient.get(pathfileval, function (err, object) { - var objecttmp = JSON.parse(object); - if (object) { - var user1 = objecttmp.user25user.replace(/[\n\t\r]/g, '') - iosend(data, issend, io, pubClient, user1) - } else { - (async () => { - var token = 'd2539e5a7ae1f9f1b0eb2b8f22ca467a86d28407'; // desto - var resdata1 = await getpipelines(token, pathfile) - resob.pathlogfile = pathfileval - var resob11 = {} - var i1 = 0 - resob11.data = resdata1.data[i1].res25swarmlabname - resob11.user25user = resdata1.data[i1].res25user.replace(/[\n\t\r]/g, '') - resob11.res25creator = resdata1.data[i1].res25creator - resob11.res25fileforce = resdata1.data[i1].res25fileforce - resob11.tailed_path = pathfileval - var resob1string1 = JSON.stringify(resob11); - await pubClient.set(pathfileval, resob1string1, function (err, res) { - }); - var user1 = resob11.user25user - iosend(data, issend, io, pubClient, user1) - console.log(' ---no--- ' + JSON.stringify(data)) - })() //await inside yes - } - }); - - }); - - - setInterval(function () { - console.log('itemsProcessed', itemsProcessed); - // this method is also exposed by the Server instance - //console.log(adapter.rooms); - }, 8000); -} - - -var mongourl = 'mongodb://' + CONFIG.mongo.user + ':' + CONFIG.mongo.password + '@ondemand_playground_mongo1:27017,ondemand_playground_mongo2:27017,ondemand_playground_mongo3:27017,ondemand_playground_mongo4:27017,ondemand_playground_mongo5:27017,ondemand_playground_mongo6:27017,ondemand_playground_mongo7:27017/fluent?replicaSet=rs1&authSource=swarmlabplaygroundstats' -const OPTS = { - useNewUrlParser: true, - useUnifiedTopology: true -}; -var mongooptions = { - autoReconnect: true, - keepAlive: 1, - connectTimeoutMS: 30000, - socketTimeoutMS: 0 -} -MongoClient.connect(mongourl, OPTS, function (err, client) { - if (err) { - console.log(err); - } else { - const db = client.db('fluent'); - db.collection('logs', onCollection); - } -}); - -io.on('connection', s => { - console.error('socket connection'); - -//s.set('transports', ['websocket']); -//s.set('pingTimeout', 30000); -//s.set('allowUpgrades', false); -//s.set('serveClient', false); -//s.set('pingInterval', 10000); - // ------------------------------ - // --- set - // ------------------------------ - var usersession = new Object(); - usersession.SOCKET = {}; - usersession.SOCKET.error = {}; - console.error('socket ...'); - s.auth = false; - - // ------------------------------ - // --- authenticate - // ------------------------------ - s.on('authenticate', function (data) { - const token = data - console.log('invalid 1 ' + token); - (async () => { - var isvalid = await checkToken(token); - if (isvalid.action == 'ok') { - console.log('Authserver ok ', s.id + ' - ' + token); - // pubClient.set(session, resob1string, function(err, res) { - // }); - usersession.SOCKET.user = isvalid.user - usersession.SOCKET.scope = isvalid.scope // space delimeter - usersession.SOCKET.token = isvalid.token - s.auth = true; - } else { - console.log('Authserver no ', s.id + ' - ' + token); - s.auth = false; - } - })() - }); - - setTimeout(function () { - if (!s.auth) { - console.log('Disconnecting timeout socket ', s.id); - //s.disconnect('unauthorized'); - } else { - var room = usersession.SOCKET.user - //s.on("subscribe", function (room) { - s.join(room); - console.log('joining rooom', s.rooms); - console.log(room + ' created ') - // }); - } - }, 30000); - - - var id = s.id - s.on('log', obj => { - console.error('from client ' + s.id + ' obj ' + obj); - }); - -}); - -http.listen(3000, () => console.error('listening on http://localhost:3000/')); -console.error('socket.io example'); \ No newline at end of file diff --git a/server/middlewares/middleware.js b/server/middlewares/middleware.js index 3436510..12e639e 100644 --- a/server/middlewares/middleware.js +++ b/server/middlewares/middleware.js @@ -1,21 +1,4 @@ -const {validationResult} = require('express-validator'); - module.exports = { - handleErrors(route) { - return async (req, res, next) => { - const errors = validationResult(req); - if (!errors.isEmpty()) { - req.session.errors = errors.errors; - return res.redirect('/auth/' + route); - } - req.session.errors = {}; - next(); - } - }, - handleErrorsPassport(req, res, route, info) { - req.session.errors = info; - return res.redirect('/auth/' + route); - }, requireAuth(req, res, next) { if (!req.isAuthenticated()) return res.redirect('/auth/login'); diff --git a/server/middlewares/validator.js b/server/middlewares/validator.js deleted file mode 100644 index e69de29..0000000 diff --git a/server/package-lock.json b/server/package-lock.json index 557fc52..c814821 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -19,7 +19,6 @@ "express": "^4.17.1", "express-rate-limit": "^5.2.3", "express-session": "^1.17.1", - "express-validator": "^6.8.0", "faker": "^5.1.0", "mongoose": "^5.11.8", "nodemon": "^2.0.6", @@ -87,9 +86,9 @@ } }, "node_modules/@types/node": { - "version": "14.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.13.tgz", - "integrity": "sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ==" + "version": "14.14.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz", + "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==" }, "node_modules/abbrev": { "version": "1.1.1", @@ -173,6 +172,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { @@ -453,6 +455,9 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chokidar": { @@ -806,6 +811,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dependencies": { "ms": "^2.1.1" } @@ -912,18 +918,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" }, - "node_modules/express-validator": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.8.0.tgz", - "integrity": "sha512-zEHxjly2Rx0vzJOgWJBCTk1vNNwxqp0a8S8WtKaW912oTmnQGSdh/XuuNzkt+tRBgw66z9u+ah+Sv8SH5SJyUQ==", - "dependencies": { - "lodash": "^4.17.20", - "validator": "^13.5.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/faker": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/faker/-/faker-5.1.0.tgz", @@ -1040,6 +1034,9 @@ }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { @@ -1360,11 +1357,6 @@ "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -1434,19 +1426,19 @@ } }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" }, "engines": { "node": ">= 0.6" @@ -1521,12 +1513,32 @@ }, "optionalDependencies": { "saslprep": "^1.0.0" + }, + "peerDependenciesMeta": { + "aws4": { + "optional": true + }, + "bson-ext": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "mongodb-extjson": { + "optional": true + }, + "snappy": { + "optional": true + } } }, "node_modules/mongoose": { - "version": "5.11.8", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.8.tgz", - "integrity": "sha512-RRfrYLg7pyuyx7xu5hwadjIZZJB9W2jqIMkL1CkTmk/uOCX3MX2tl4BVIi2rJUtgMNwn6dy3wBD3soB8I9Nlog==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.9.tgz", + "integrity": "sha512-lmG6R64jtGGxqtn88BkkY+v470LUfGgyTKUyjswQ5c01GNgQvxA0kQd8h+tm0hZb639hKNRxL9ZBQlLleUpuIQ==", "dependencies": { "@types/mongodb": "^3.5.27", "bson": "^1.1.4", @@ -1543,12 +1555,19 @@ }, "engines": { "node": ">=4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" } }, "node_modules/mongoose-legacy-pluralize": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", + "peerDependencies": { + "mongoose": "*" + } }, "node_modules/mongoose/node_modules/ms": { "version": "2.1.2", @@ -1558,7 +1577,21 @@ "node_modules/mongoose/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/mpath": { "version": "0.8.1", @@ -2090,6 +2123,10 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-redis" } }, "node_modules/redis-commands": { @@ -2341,6 +2378,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dependencies": { "ms": "^2.1.1" } @@ -2369,6 +2407,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dependencies": { "ms": "^2.1.1" } @@ -2382,6 +2421,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dependencies": { "ms": "^2.1.1" } @@ -2534,9 +2574,6 @@ }, "bin": { "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" } }, "node_modules/tsscmp": { @@ -2680,14 +2717,6 @@ "node": ">= 0.4.0" } }, - "node_modules/validator": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.5.2.tgz", - "integrity": "sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2777,11 +2806,23 @@ } }, "node_modules/ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", "engines": { "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/xdg-basedir": { @@ -2850,9 +2891,9 @@ } }, "@types/node": { - "version": "14.14.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.13.tgz", - "integrity": "sha512-vbxr0VZ8exFMMAjCW8rJwaya0dMCDyYW2ZRdTyjtrCvJoENMpdUHOT/eTzvgyA5ZnqRZ/sI0NwqAxNHKYokLJQ==" + "version": "14.14.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz", + "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==" }, "abbrev": { "version": "1.1.1", @@ -3506,15 +3547,6 @@ } } }, - "express-validator": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.8.0.tgz", - "integrity": "sha512-zEHxjly2Rx0vzJOgWJBCTk1vNNwxqp0a8S8WtKaW912oTmnQGSdh/XuuNzkt+tRBgw66z9u+ah+Sv8SH5SJyUQ==", - "requires": { - "lodash": "^4.17.20", - "validator": "^13.5.1" - } - }, "faker": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/faker/-/faker-5.1.0.tgz", @@ -3855,11 +3887,6 @@ "package-json": "^6.3.0" } }, - "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" - }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -3907,16 +3934,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==" }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" } }, "mimic-response": { @@ -3976,9 +4003,9 @@ } }, "mongoose": { - "version": "5.11.8", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.8.tgz", - "integrity": "sha512-RRfrYLg7pyuyx7xu5hwadjIZZJB9W2jqIMkL1CkTmk/uOCX3MX2tl4BVIi2rJUtgMNwn6dy3wBD3soB8I9Nlog==", + "version": "5.11.9", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.11.9.tgz", + "integrity": "sha512-lmG6R64jtGGxqtn88BkkY+v470LUfGgyTKUyjswQ5c01GNgQvxA0kQd8h+tm0hZb639hKNRxL9ZBQlLleUpuIQ==", "requires": { "@types/mongodb": "^3.5.27", "bson": "^1.1.4", @@ -4009,7 +4036,8 @@ "mongoose-legacy-pluralize": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==", + "requires": {} }, "mpath": { "version": "0.8.1", @@ -4911,11 +4939,6 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "validator": { - "version": "13.5.2", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.5.2.tgz", - "integrity": "sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -4989,9 +5012,10 @@ } }, "ws": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz", - "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ==" + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.2.tgz", + "integrity": "sha512-T4tewALS3+qsrpGI/8dqNMLIVdq/g/85U98HPMa6F0m6xTbvhXU6RCQLqPH3+SlomNV/LdY6RXEbBpMH6EOJnA==", + "requires": {} }, "xdg-basedir": { "version": "4.0.0", diff --git a/server/package.json b/server/package.json index 96f45bb..615a269 100644 --- a/server/package.json +++ b/server/package.json @@ -21,7 +21,6 @@ "express": "^4.17.1", "express-rate-limit": "^5.2.3", "express-session": "^1.17.1", - "express-validator": "^6.8.0", "faker": "^5.1.0", "mongoose": "^5.11.8", "nodemon": "^2.0.6", diff --git a/server/services/redis.js b/server/services/redis.js deleted file mode 100644 index 0ba9195..0000000 --- a/server/services/redis.js +++ /dev/null @@ -1,25 +0,0 @@ -const redis = require('redis'); - -const subscriber = redis.createClient(); -const publisher = redis.createClient(); - -let messageCount = 0; - -subscriber.on('subscribe', function (channel, count) { - publisher.publish('a channel', 'a message'); - publisher.publish('a channel', 'another message'); -}); - -subscriber.on('message', function (channel, message) { - messageCount += 1; - - console.log('Subscriber received message in channel \'' + channel + '\': ' + message); - - if (messageCount === 2) { - subscriber.unsubscribe(); - subscriber.quit(); - publisher.quit(); - } -}); - -subscriber.subscribe('a channel'); \ No newline at end of file diff --git a/web/package-lock.json b/web/package-lock.json index 5249bd6..dc8ac3c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1516,9 +1516,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.14.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", - "integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==", + "version": "14.14.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz", + "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==", "dev": true }, "node_modules/@types/normalize-package-data": { @@ -2113,13 +2113,13 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.0.4.tgz", - "integrity": "sha512-snpMICsbWTZqBFnPB03qr4DtiSxVYfDF3DvbDSkN9Z9NTM8Chl8E/lYhKBSsvauq91DAWAh8PU3lr9vrLyQsug==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.0.5.tgz", + "integrity": "sha512-iFXwk2gmU/GGwN4hpBwDWWMLvpkIejf/AybcFtlQ5V1ur+5jwfBaV0Y1RXoR6ePfBPJixtKZ3PmN+M+HgMAtfQ==", "dependencies": { "@babel/parser": "^7.12.0", "@babel/types": "^7.12.0", - "@vue/shared": "3.0.4", + "@vue/shared": "3.0.5", "estree-walker": "^2.0.1", "source-map": "^0.6.1" } @@ -2133,26 +2133,26 @@ } }, "node_modules/@vue/compiler-dom": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.4.tgz", - "integrity": "sha512-FOxbHBIkkGjYQeTz1DlXQjS1Ms8EPXQWsdTdTPeohoS0KzCz6RiOjiAG+jLtMi6Nr5GX2h0TlCvcnI8mcsicFQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.5.tgz", + "integrity": "sha512-HSOSe2XSPuCkp20h4+HXSiPH9qkhz6YbW9z9ZtL5vef2T2PMugH7/osIFVSrRZP/Ul5twFZ7MIRlp8tPX6e4/g==", "dependencies": { - "@vue/compiler-core": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/compiler-core": "3.0.5", + "@vue/shared": "3.0.5" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.4.tgz", - "integrity": "sha512-brDn6HTuK6R3oBCjtMPPsIpyJEZFinlnxjtBXww/goFJOJBAU9CrsdegwyZItNnixCFUIg4CLv4Nj1Eg/eKlfg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.5.tgz", + "integrity": "sha512-uOAC4X0Gx3SQ9YvDC7YMpbDvoCmPvP0afVhJoxRotDdJ+r8VO3q4hFf/2f7U62k4Vkdftp6DVni8QixrfYzs+w==", "dev": true, "dependencies": { "@babel/parser": "^7.12.0", "@babel/types": "^7.12.0", - "@vue/compiler-core": "3.0.4", - "@vue/compiler-dom": "3.0.4", - "@vue/compiler-ssr": "3.0.4", - "@vue/shared": "3.0.4", + "@vue/compiler-core": "3.0.5", + "@vue/compiler-dom": "3.0.5", + "@vue/compiler-ssr": "3.0.5", + "@vue/shared": "3.0.5", "consolidate": "^0.16.0", "estree-walker": "^2.0.1", "hash-sum": "^2.0.0", @@ -2165,7 +2165,7 @@ "source-map": "^0.6.1" }, "peerDependencies": { - "vue": "3.0.4" + "vue": "3.0.5" } }, "node_modules/@vue/compiler-sfc/node_modules/source-map": { @@ -2178,13 +2178,13 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.4.tgz", - "integrity": "sha512-4aYWQEL4+LS4+D44K9Z7xMOWMEjBsz4Li9nMcj2rxRQ35ewK6uFPodvs6ORP60iBDSkwUFZoldFlNemQlu1BFw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.5.tgz", + "integrity": "sha512-Wm//Kuxa1DpgjE4P9W0coZr8wklOfJ35Jtq61CbU+t601CpPTK4+FL2QDBItaG7aoUUDCWL5nnxMkuaOgzTBKg==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/compiler-dom": "3.0.5", + "@vue/shared": "3.0.5" } }, "node_modules/@vue/component-compiler-utils": { @@ -2264,36 +2264,36 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.4.tgz", - "integrity": "sha512-AFTABrLhUYZY2on3ea9FxeXal7w3f6qIp9gT+/oG93H7dFTL5LvVnxygCopv7tvkIl/GSGQb/yK1D1gmXx1Pww==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.5.tgz", + "integrity": "sha512-3xodUE3sEIJgS7ntwUbopIpzzvi7vDAOjVamfb2l+v1FUg0jpd3gf62N2wggJw3fxBMr+QvyxpD+dBoxLsmAjw==", "dependencies": { - "@vue/shared": "3.0.4" + "@vue/shared": "3.0.5" } }, "node_modules/@vue/runtime-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.4.tgz", - "integrity": "sha512-qH9e4kqU7b3u1JewvLmGmoAGY+mnuBqz7aEKb2mhpEgwa1yFv496BRuUfMXXMCix3+TndUVMJ8jt41FSdNppwg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.5.tgz", + "integrity": "sha512-Cnyi2NqREwOLcTEsIi1DQX1hHtkVj4eGm4hBG7HhokS05DqpK4/80jG6PCCnCH9rIJDB2FqtaODX397210plXg==", "dependencies": { - "@vue/reactivity": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/reactivity": "3.0.5", + "@vue/shared": "3.0.5" } }, "node_modules/@vue/runtime-dom": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.4.tgz", - "integrity": "sha512-BGIoiTSESzWUhN0Ofi2X/q+HN8f6IUFmUEyyBGKbmx7DTAJNZhFfjqsepfXQrM5IGeTfJLB1ZEVyroDQJNXq3g==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.5.tgz", + "integrity": "sha512-iilX1KySeIzHHtErT6Y44db1rhWK5tAI0CiJIPr+SJoZ2jbjoOSE6ff/jfIQakchbm1d6jq6VtRVnp5xYdOXKA==", "dependencies": { - "@vue/runtime-core": "3.0.4", - "@vue/shared": "3.0.4", + "@vue/runtime-core": "3.0.5", + "@vue/shared": "3.0.5", "csstype": "^2.6.8" } }, "node_modules/@vue/shared": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.0.4.tgz", - "integrity": "sha512-Swfbz31AaMX48CpFl+YmIrqOH9MgJMTrltG9e26A4ZxYx9LjGuMV+41WnxFzS3Bc9nbrc6sDPM37G6nIT8NJSg==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.0.5.tgz", + "integrity": "sha512-gYsNoGkWejBxNO6SNRjOh/xKeZ0H0V+TFzaPzODfBjkAIb0aQgBuixC1brandC/CDJy1wYPwSoYrXpvul7m6yw==" }, "node_modules/@vue/web-component-wrapper": { "version": "1.2.0", @@ -4694,15 +4694,15 @@ } }, "node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, "node_modules/css-select-base-adapter": { @@ -4734,12 +4734,15 @@ } }, "node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true, "engines": { - "node": "*" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, "node_modules/cssesc": { @@ -5370,9 +5373,9 @@ } }, "node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "dependencies": { "dom-serializer": "0", @@ -5545,26 +5548,6 @@ "ms": "^2.1.1" } }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/engine.io-parser": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", @@ -7343,9 +7326,9 @@ "dev": true }, "node_modules/http-parser-js": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", - "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", "dev": true }, "node_modules/http-proxy": { @@ -8751,21 +8734,21 @@ } }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" }, "engines": { "node": ">= 0.6" @@ -11064,14 +11047,14 @@ "dev": true }, "node_modules/renderkid": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", - "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", + "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", "dev": true, "dependencies": { - "css-select": "^1.1.0", + "css-select": "^2.0.2", "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", + "htmlparser2": "^3.10.1", "lodash": "^4.17.20", "strip-ansi": "^3.0.0" } @@ -12452,40 +12435,6 @@ "node": ">=4.0.0" } }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -13344,13 +13293,13 @@ "dev": true }, "node_modules/vue": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.0.4.tgz", - "integrity": "sha512-2o+AiQF8sAupyhbyl3oxVCl3WCwC/n5NI7VMM+gVQ231qvSB8eI7sCBloloqDJK6yA367EEtmRSeSCf4sxCC+A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.0.5.tgz", + "integrity": "sha512-TfaprOmtsAfhQau7WsomXZ8d9op/dkQLNIq8qPV3A0Vxs6GR5E+c1rfJS1SDkXRQj+dFyfnec7+U0Be1huiScg==", "dependencies": { - "@vue/compiler-dom": "3.0.4", - "@vue/runtime-dom": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/compiler-dom": "3.0.5", + "@vue/runtime-dom": "3.0.5", + "@vue/shared": "3.0.5" } }, "node_modules/vue-class-component": { @@ -13860,6 +13809,15 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/webpack-chain": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", @@ -14364,6 +14322,15 @@ "node": ">=6" } }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/webpack-dev-server/node_modules/yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", @@ -14752,12 +14719,23 @@ "dev": true }, "node_modules/ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "dependencies": { - "async-limiter": "~1.0.0" + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, "node_modules/xmlhttprequest-ssl": { @@ -16216,9 +16194,9 @@ "dev": true }, "@types/node": { - "version": "14.14.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.16.tgz", - "integrity": "sha512-naXYePhweTi+BMv11TgioE2/FXU4fSl29HAH1ffxVciNsH3rYXjNP2yM8wqmSm7jS20gM8TIklKiTen+1iVncw==", + "version": "14.14.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.19.tgz", + "integrity": "sha512-4nhBPStMK04rruRVtVc6cDqhu7S9GZai0fpXgPXrFpcPX6Xul8xnrjSdGB4KPBVYG/R5+fXWdCM8qBoiULWGPQ==", "dev": true }, "@types/normalize-package-data": { @@ -16702,13 +16680,13 @@ } }, "@vue/compiler-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.0.4.tgz", - "integrity": "sha512-snpMICsbWTZqBFnPB03qr4DtiSxVYfDF3DvbDSkN9Z9NTM8Chl8E/lYhKBSsvauq91DAWAh8PU3lr9vrLyQsug==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.0.5.tgz", + "integrity": "sha512-iFXwk2gmU/GGwN4hpBwDWWMLvpkIejf/AybcFtlQ5V1ur+5jwfBaV0Y1RXoR6ePfBPJixtKZ3PmN+M+HgMAtfQ==", "requires": { "@babel/parser": "^7.12.0", "@babel/types": "^7.12.0", - "@vue/shared": "3.0.4", + "@vue/shared": "3.0.5", "estree-walker": "^2.0.1", "source-map": "^0.6.1" }, @@ -16721,26 +16699,26 @@ } }, "@vue/compiler-dom": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.4.tgz", - "integrity": "sha512-FOxbHBIkkGjYQeTz1DlXQjS1Ms8EPXQWsdTdTPeohoS0KzCz6RiOjiAG+jLtMi6Nr5GX2h0TlCvcnI8mcsicFQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.0.5.tgz", + "integrity": "sha512-HSOSe2XSPuCkp20h4+HXSiPH9qkhz6YbW9z9ZtL5vef2T2PMugH7/osIFVSrRZP/Ul5twFZ7MIRlp8tPX6e4/g==", "requires": { - "@vue/compiler-core": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/compiler-core": "3.0.5", + "@vue/shared": "3.0.5" } }, "@vue/compiler-sfc": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.4.tgz", - "integrity": "sha512-brDn6HTuK6R3oBCjtMPPsIpyJEZFinlnxjtBXww/goFJOJBAU9CrsdegwyZItNnixCFUIg4CLv4Nj1Eg/eKlfg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.0.5.tgz", + "integrity": "sha512-uOAC4X0Gx3SQ9YvDC7YMpbDvoCmPvP0afVhJoxRotDdJ+r8VO3q4hFf/2f7U62k4Vkdftp6DVni8QixrfYzs+w==", "dev": true, "requires": { "@babel/parser": "^7.12.0", "@babel/types": "^7.12.0", - "@vue/compiler-core": "3.0.4", - "@vue/compiler-dom": "3.0.4", - "@vue/compiler-ssr": "3.0.4", - "@vue/shared": "3.0.4", + "@vue/compiler-core": "3.0.5", + "@vue/compiler-dom": "3.0.5", + "@vue/compiler-ssr": "3.0.5", + "@vue/shared": "3.0.5", "consolidate": "^0.16.0", "estree-walker": "^2.0.1", "hash-sum": "^2.0.0", @@ -16762,13 +16740,13 @@ } }, "@vue/compiler-ssr": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.4.tgz", - "integrity": "sha512-4aYWQEL4+LS4+D44K9Z7xMOWMEjBsz4Li9nMcj2rxRQ35ewK6uFPodvs6ORP60iBDSkwUFZoldFlNemQlu1BFw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.0.5.tgz", + "integrity": "sha512-Wm//Kuxa1DpgjE4P9W0coZr8wklOfJ35Jtq61CbU+t601CpPTK4+FL2QDBItaG7aoUUDCWL5nnxMkuaOgzTBKg==", "dev": true, "requires": { - "@vue/compiler-dom": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/compiler-dom": "3.0.5", + "@vue/shared": "3.0.5" } }, "@vue/component-compiler-utils": { @@ -16835,36 +16813,36 @@ "requires": {} }, "@vue/reactivity": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.4.tgz", - "integrity": "sha512-AFTABrLhUYZY2on3ea9FxeXal7w3f6qIp9gT+/oG93H7dFTL5LvVnxygCopv7tvkIl/GSGQb/yK1D1gmXx1Pww==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.0.5.tgz", + "integrity": "sha512-3xodUE3sEIJgS7ntwUbopIpzzvi7vDAOjVamfb2l+v1FUg0jpd3gf62N2wggJw3fxBMr+QvyxpD+dBoxLsmAjw==", "requires": { - "@vue/shared": "3.0.4" + "@vue/shared": "3.0.5" } }, "@vue/runtime-core": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.4.tgz", - "integrity": "sha512-qH9e4kqU7b3u1JewvLmGmoAGY+mnuBqz7aEKb2mhpEgwa1yFv496BRuUfMXXMCix3+TndUVMJ8jt41FSdNppwg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.0.5.tgz", + "integrity": "sha512-Cnyi2NqREwOLcTEsIi1DQX1hHtkVj4eGm4hBG7HhokS05DqpK4/80jG6PCCnCH9rIJDB2FqtaODX397210plXg==", "requires": { - "@vue/reactivity": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/reactivity": "3.0.5", + "@vue/shared": "3.0.5" } }, "@vue/runtime-dom": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.4.tgz", - "integrity": "sha512-BGIoiTSESzWUhN0Ofi2X/q+HN8f6IUFmUEyyBGKbmx7DTAJNZhFfjqsepfXQrM5IGeTfJLB1ZEVyroDQJNXq3g==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.0.5.tgz", + "integrity": "sha512-iilX1KySeIzHHtErT6Y44db1rhWK5tAI0CiJIPr+SJoZ2jbjoOSE6ff/jfIQakchbm1d6jq6VtRVnp5xYdOXKA==", "requires": { - "@vue/runtime-core": "3.0.4", - "@vue/shared": "3.0.4", + "@vue/runtime-core": "3.0.5", + "@vue/shared": "3.0.5", "csstype": "^2.6.8" } }, "@vue/shared": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.0.4.tgz", - "integrity": "sha512-Swfbz31AaMX48CpFl+YmIrqOH9MgJMTrltG9e26A4ZxYx9LjGuMV+41WnxFzS3Bc9nbrc6sDPM37G6nIT8NJSg==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.0.5.tgz", + "integrity": "sha512-gYsNoGkWejBxNO6SNRjOh/xKeZ0H0V+TFzaPzODfBjkAIb0aQgBuixC1brandC/CDJy1wYPwSoYrXpvul7m6yw==" }, "@vue/web-component-wrapper": { "version": "1.2.0", @@ -18846,15 +18824,15 @@ } }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, "css-select-base-adapter": { @@ -18882,9 +18860,9 @@ } }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true }, "cssesc": { @@ -19386,9 +19364,9 @@ } }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { "dom-serializer": "0", @@ -19542,12 +19520,6 @@ "requires": { "ms": "^2.1.1" } - }, - "ws": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", - "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", - "requires": {} } } }, @@ -20959,9 +20931,9 @@ } }, "http-parser-js": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", - "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", "dev": true }, "http-proxy": { @@ -22061,18 +22033,18 @@ "dev": true }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" } }, "mimic-fn": { @@ -23998,14 +23970,14 @@ "dev": true }, "renderkid": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", - "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz", + "integrity": "sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ==", "dev": true, "requires": { - "css-select": "^1.1.0", + "css-select": "^2.0.2", "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", + "htmlparser2": "^3.10.1", "lodash": "^4.17.20", "strip-ansi": "^3.0.0" }, @@ -25189,36 +25161,6 @@ "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" - }, - "dependencies": { - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } } }, "tapable": { @@ -25905,13 +25847,13 @@ "dev": true }, "vue": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.0.4.tgz", - "integrity": "sha512-2o+AiQF8sAupyhbyl3oxVCl3WCwC/n5NI7VMM+gVQ231qvSB8eI7sCBloloqDJK6yA367EEtmRSeSCf4sxCC+A==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.0.5.tgz", + "integrity": "sha512-TfaprOmtsAfhQau7WsomXZ8d9op/dkQLNIq8qPV3A0Vxs6GR5E+c1rfJS1SDkXRQj+dFyfnec7+U0Be1huiScg==", "requires": { - "@vue/compiler-dom": "3.0.4", - "@vue/runtime-dom": "3.0.4", - "@vue/shared": "3.0.4" + "@vue/compiler-dom": "3.0.5", + "@vue/runtime-dom": "3.0.5", + "@vue/shared": "3.0.5" } }, "vue-class-component": { @@ -26438,6 +26380,15 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } } } }, @@ -26835,6 +26786,15 @@ } } }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", @@ -27028,13 +26988,10 @@ "dev": true }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==", + "requires": {} }, "xmlhttprequest-ssl": { "version": "1.5.5",