Compare commits

...

2 Commits

Author SHA1 Message Date
IoTcat 0b9130095d w10fyp 3 years ago
IoTcat 81aeef527d coap..end 3 years ago
  1. 5
      package.json
  2. 184
      src/cli/compiler.js
  3. 5
      src/cli/device.js
  4. 78
      src/cli/init.js
  5. 23
      src/cli/run.js
  6. 40
      src/cli/ttt.js
  7. 38
      src/director/index.js
  8. 83
      src/director/modules/heartbeat.js
  9. 0
      src/director/modules/lib/cache.js
  10. 39
      src/director/modules/lib/coap.js
  11. 39
      src/director/modules/lib/crypt.js
  12. 39
      src/director/modules/lib/http.js
  13. 19
      src/director/modules/lib/log.js
  14. 0
      src/director/modules/lib/reg.js
  15. 46
      src/director/modules/serve.js
  16. BIN
      src/drivers/nodemcu/bin/full.bin
  17. BIN
      src/drivers/nodemcu/bin/old2.bin
  18. 6
      src/drivers/nodemcu/lua/FUNC.json
  19. 0
      src/drivers/nodemcu/lua/__stopped
  20. 31
      src/drivers/nodemcu/lua/config.json
  21. 27
      src/drivers/nodemcu/lua/config.lua
  22. 9
      src/drivers/nodemcu/lua/heartbeatFunc.json
  23. 168
      src/drivers/nodemcu/lua/init.lua
  24. 493
      yarn.lock

@ -15,8 +15,13 @@
"dependencies": {
"boxen": "^4.2.0",
"cli-table": "^0.3.1",
"coap": "^0.24.0",
"colors": "^1.4.0",
"dgram": "^1.0.1",
"express": "^4.17.1",
"fs": "^0.0.1-security",
"log4js": "^6.3.0",
"md5": "^2.3.0",
"ora": "^5.1.0",
"request": "^2.88.2",
"yargs": "^16.1.1"

@ -0,0 +1,184 @@
module.exports = () => {
let o = {
device: {
nodemcu: id => {
let service = {};
let act = {
clear: () => new Promise(async resolve => {
let res = await send(id, 'clear', '');
if(res.status){
resolve(true);
}else{
resolve(false);
}
}),
refresh: () => new Promise(async resolve => {
let res = await send(id, 'refresh', '');
if(res.status){
resolve(true);
}else{
resolve(false);
}
}),
getConstruct: () => {
let s = '';
for(let fid in service){
if(service[fid].hasOwnProperty('construct') && service[fid].construct){
s += service[fid].construct;
s += ' ';
}
}
s += '';
return s;
},
getDestruct: () => {
let s = '';
for(let fid in service){
if(service[fid].hasOwnProperty('destruct') && service[fid].destruct){
s += service[fid].destruct;
s += ' ';
}
}
s += '';
return s;
},
getMainTbl: () => {
let tbl = {};
for(let fid in service){
if(service[fid].hasOwnProperty('main') && service[fid].main){
tbl[fid] = service[fid].main;
}
}
return tbl;
}
}
let o = {
id: id,
pin: {
D0: 0,
D1: 1,
D2: 2,
D3: 3,
D4: 4,
D5: 5,
D6: 6,
D7: 7,
D8: 8,
A0: 0
},
service: {
add: (fid, main, construct, destruct) => {
service[fid] = {};
service[fid].main = main;
service[fid].construct = construct || '';
service[fid].destruct = destruct || '';
},
del : (fid) => {
if(service.hasOwnProperty(fid)){
delete service[fid];
}
},
clear: () => {
service = {}
},
list: () => service,
push: () => new Promise(async (resolve, reject) => {
let construct = act.getConstruct();
let destruct = act.getDestruct();
let mainTbl = act.getMainTbl();
await act.clear();
await push(id, 'construct', construct);
await push(id, 'destruct', destruct);
for(let fid in mainTbl){
await push(id, fid, mainTbl[fid]);
}
await act.refresh();
let res = await send(id, 'list', '');
let flag = Object.keys(mainTbl).every(val => Object.keys(res).indexOf(val) != -1)
resolve(flag);
})
}
}
return o;
}
},
module: {
led: (dev, pin) => {
let o = {
breath: (val) => {
if(typeof val == "number") dev.service.add('led', ``, `pwm.setup(${pin}, 100, 512);pwm.start(${pin});local n = 0; timer = tmr.create(); timer:register(10, tmr.ALARM_AUTO, function() pwm.setduty(${pin}, math.abs((n*${Math.floor(1024*2*10/val)})%(1022*2) - 1023)); n = n + 1; end);timer:start();`, `timer:unregister();timer = nil;pwm.close(${pin})`);
if(typeof val == "object") {
dev.service.add('led', `function(s) G.val = s; end`, `G.val = 2;pwm.setup(${pin}, 100, 512);pwm.start(${pin});local n = 0; timer = tmr.create(); timer:register(10, tmr.ALARM_AUTO, function() pwm.setduty(${pin}, math.abs((n*G.val)%(1022*2) - 1023)); n = n + 1; end);timer:start();`, `timer:unregister();timer = nil;pwm.close(${pin})`);
val.reg('192.168.3.225', '5678', 'led')
}
//dev.service.add('led'+val, '', `print("cons")`, `print("dest")`);
}
}
return o;
},
sensor: (dev, pin) => {
let o = {
reg: (ip, port, fip) => {
dev.service.add('sensor', '', `local fVal = false; timer = tmr.create(); timer:alarm(300, tmr.ALARM_AUTO, function() local v = adc.read(0) if not (v > 400) == fVal then fVal=(v>400); print(v); if v> 400 then w.send('${ip}', ${port}, '${fip}', 15) else w.send('${ip}', ${port}, '${fip}', 5) end end end);`, `timer:unregister();timer = nil;pwm.close(${pin})`);
}
}
return o;
}
}
}
const request = require('request');
let send = (id, fid, body) => new Promise((resolve, reject) => {
request(`http://127.0.0.1:8081/?id=${id}&fid=${fid}&body=${new Buffer(JSON.stringify([body])).toString('base64')}`, (err, req, res) => {
console.log('Sent '+fid +' to '+id)
if(typeof res == "string"){
try{
res = JSON.parse(res)
}catch(e){
}
}
if(err){
resolve(false)
}else{
console.log(res)
if(!res.status){
resolve(false);
}else{
resolve(res.data)
}
}
});
});
let push = (id, fid, body) => new Promise(async resolve => {
let obj = {
"hash": fid,
"func": body
}
console.log(obj)
let res = await send(id, 'push', obj);
resolve(res);
})
return o;
}

@ -7,8 +7,9 @@ module.exports = (yargs) => {
upload: async (argv) => new Promise(async resolve => {
await reset(argv._[1]);
await upload(argv._[1], __dirname+'/../drivers/nodemcu/lua/init.lua');
await upload(argv._[1], __dirname+'/../drivers/nodemcu/lua/config.lua');
await upload(argv._[1], __dirname+'/../drivers/nodemcu/lua/config.json');
await upload(argv._[1], __dirname+'/../drivers/nodemcu/lua/FUNC.json');
await upload(argv._[1], __dirname+'/../drivers/nodemcu/lua/__stopped');
await reset(argv._[1]);
resolve()
}),
@ -36,7 +37,7 @@ module.exports = (yargs) => {
.command('terminal', "wiot terminal <PortsName>".green + " Open a NodeMCU terminal..", yargs => yargs, async argv => {
await o.terminal(argv);
})
.command('init', "wiot init <PortsName>".green + " Init a NodeMCU board..", yargs => yargs, async argv => {
.command('ini', "wiot ini <PortsName>".green + " Init a NodeMCU board..", yargs => yargs, async argv => {
await o.flash(argv);
await o.upload(argv);
})

@ -0,0 +1,78 @@
module.exports = (yargs) => {
var o = {
init: async (argv) => new Promise(async resolve => {
ban = new ora(`Creating new wIoT project...`).start();
let path = './';
if(argv._.length > 2){
path = argv._[2];
if(path.substring(-1) != '/' && path.substring(-1) != '\\'){
path += '/';
}
}
fs.mkdir(path + argv._[1], function(err){
if (err) {
ban.fail('Creating failure!!');
console.error(err);
resolve();
}
o.copyFolder(__dirname + '/../../dist', path + argv._[1], function(err){
if (err) {
ban.fail('Creating failure!!');
console.error(err);
resolve();
}
ban.success('Initiate successfully!!');
resolve()
})
});
}),
copyFolder: function(srcDir, tarDir, cb) {
fs.readdir(srcDir, function(err, files) {
var count = 0
var checkEnd = function() {
++count == files.length && cb && cb()
}
if (err) {
checkEnd()
return
}
files.forEach(function(file) {
var srcPath = path.join(srcDir, file)
var tarPath = path.join(tarDir, file)
fs.stat(srcPath, function(err, stats) {
if (stats.isDirectory()) {
console.log('mkdir', tarPath)
fs.mkdir(tarPath, function(err) {
if (err) {
console.log(err)
return
}
copyFolder(srcPath, tarPath, checkEnd)
})
} else {
copyFile(srcPath, tarPath, checkEnd)
}
})
})
files.length === 0 && cb && cb()
})
}
}
const ora = require('ora');
const fs = require('fs');
const path = require('path');
yargs = yargs
.command('init', "wiot init <ProjectName> [path]".green + " Create and initiate a new wIoT Project folder", yargs => yargs, async argv => {
await o.init(argv);
})
return yargs;
}

@ -0,0 +1,23 @@
module.exports = (yargs) => {
const request = require('request');
const ora = require('ora');
const fs = require('fs');
yargs = yargs
.command('run', "wiot run".green + " Run the selected file on NodeMCU cluster..", yargs => yargs, async argv => {
let s = fs.readFileSync(argv._[1], 'utf-8');
let b = new Buffer(s).toString('base64');
ban = new ora(`Pushing...`).start();
request('http://192.168.3.251:3000/?body='+b, (err)=>{
if(err){
ban.fail('fail');
}else{
ban.succeed('success');
}
});
})
return yargs;
}

@ -0,0 +1,40 @@
const wiot = require('./compiler.js')();
;(async () => {
// declare two nodemcu board by ID
let NodeTest1 = wiot.device.nodemcu('test1');
let NodeTest2 = wiot.device.nodemcu('test2');
// declare a led
let led = wiot.module.led(NodeTest1, NodeTest1.pin.D2);
// declare a sensor
let sensor = wiot.module.sensor(NodeTest2, NodeTest2.pin.A0);
// let the frequency of breathing is controled by sensor
led.breath(sensor);
// push above to the two nodemcu
await NodeTest1.service.push()
await NodeTest2.service.push()
})();
/*
//breathing led
;(async () => {
// declear new nodemcu board by ID
let NodeTest1 = wiot.device.nodemcu('test1');
//declear new led module at D2 on nodemcu test1
let led = wiot.module.led(NodeTest1, NodeTest1.pin.D2);
// let led breathe with 2s
led.breath(2000);
// push the above functions to nodemcu
await NodeTest1.service.push()
})();
*/

@ -0,0 +1,38 @@
const heartbeat = require(__dirname + '/modules/heartbeat.js')();
const app = require('express')();
app.listen(8081);
app.get('/', async function (req, res) {
if(!req.query.hasOwnProperty('id') || !req.query.hasOwnProperty('fid') || !req.query.hasOwnProperty('body')){
res.send('Illegal params');
return;
}
console.log(req.query.body)
let msg = await heartbeat.push(req.query.id, req.query.fid, JSON.parse(new Buffer(req.query.body, 'base64').toString())[0]);
res.send(msg);
})
;(async () => {
//console.log('aaaaaaaaaaaaaaa: ', await heartbeat.push('test1', 'info', ''))
//heartbeat.push('test1', 'test', 'test1', (r)=>{
//console.log(r)
//})
//heartbeat.push('test1', 'exec', 'pwm.setup(2, 100, 512);pwm.start(2);local n = 0; local timer = tmr.create(); timer:register(10, tmr.ALARM_AUTO, function() pwm.setduty(2, n%1024); n = n + 1; end);timer:start();');
//console.log(await heartbeat.push('test1', 'exec', 'return adc.read(0)'))
})()

@ -0,0 +1,83 @@
module.exports = (params) => {
const md5 = require('md5');
const serve = require(__dirname + '/serve.js')();
const log = require(__dirname + '/lib/log.js')();
let waitList = {};
let reg = {};
let f = {
generateId: () => {
return md5(''+new Date().valueOf()+Math.random()).substring(0, 8);
}
}
let o = {
push: (id, cmd, body, cb) => new Promise((resolve, reject) => {
if(!waitList.hasOwnProperty(id)){
waitList[id] = {};
}
let sid = f.generateId();
waitList[id][sid] = {};
waitList[id][sid].body = JSON.stringify({
fid: cmd,
sid: sid,
body: body
});
waitList[id][sid].res = false;
let lstn = ()=>{
if(waitList.hasOwnProperty(id) && waitList[id].hasOwnProperty(sid) && waitList[id][sid].res !== false && waitList[id][sid].res !== null){
let body = waitList[id][sid].res;
delete waitList[id][sid];
if(typeof cb == "function"){
cb(body)
}
resolve(body)
}else{
setTimeout(lstn, 50);
}
}
lstn();
})
}
serve.add('/', (info, data) => {
if(!data.hasOwnProperty('id')){
return;
}
// First heartbeat
if(!waitList.hasOwnProperty(data.id)){
waitList[data.id] = {};
}
// cmd response
if(data.hasOwnProperty('sid') && data.sid){
if(waitList.hasOwnProperty(data.id) && waitList[data.id].hasOwnProperty(data.sid)){
waitList[data.id][data.sid].res = data.body;
}
}
//heartbeat-cmd
for(let i in waitList[data.id]){
if(waitList[data.id][i].res === false){
log.info(data.id, 'Type: heartbeat-cmd | res: '+JSON.stringify(data) + ' | payload: '+waitList[data.id][i].body);
waitList[data.id][i].res = null;
return waitList[data.id][i].body;
}
};
//heartbeat without cmd
log.info(data.id, 'Type: heartbeat | res: '+JSON.stringify(data));
return ;
});
return o ;
}

@ -0,0 +1,39 @@
module.exports = (params) => {
const coap = require('coap').createServer();
let stack = [];
let o = {
receive: (f) => {
stack.push(f);
}
}
coap.on('request', async (req, res) => {
stack.
console.log(req.payload.toString())
res.setOption("Content-Format", "application/json")
if(!req.payload.toString()) res.end('{"meg": "legal params"}');
let data = JSON.parse(req.payload.toString());
await register(data, req)
let body = await cache(data);
res.end(body);
log(req, body)
})
// the default CoAP port is 5683
coap.listen(function() {
console.log('CoAP Server Started..')
})
return o ;
}

@ -0,0 +1,39 @@
module.exports = (params) => {
const coap = require('coap').createServer();
let stack = [];
let o = {
receive: (f) => {
stack.push(f);
}
}
coap.on('request', async (req, res) => {
stack.
console.log(req.payload.toString())
res.setOption("Content-Format", "application/json")
if(!req.payload.toString()) res.end('{"meg": "legal params"}');
let data = JSON.parse(req.payload.toString());
await register(data, req)
let body = await cache(data);
res.end(body);
log(req, body)
})
// the default CoAP port is 5683
coap.listen(function() {
console.log('CoAP Server Started..')
})
return o ;
}

@ -0,0 +1,39 @@
module.exports = (params) => {
const coap = require('coap').createServer();
let stack = [];
let o = {
receive: (f) => {
stack.push(f);
}
}
coap.on('request', async (req, res) => {
stack.
console.log(req.payload.toString())
res.setOption("Content-Format", "application/json")
if(!req.payload.toString()) res.end('{"meg": "legal params"}');
let data = JSON.parse(req.payload.toString());
await register(data, req)
let body = await cache(data);
res.end(body);
log(req, body)
})
// the default CoAP port is 5683
coap.listen(function() {
console.log('CoAP Server Started..')
})
return o ;
}

@ -0,0 +1,19 @@
module.exports = (params) => {
let o = {
info: (id, body) => {
console.log(id+': '+body)
},
error: (id, body) => {
console.error(id+' eee: '+body)
},
get: (id) => {
return '';
}
}
return o ;
}

@ -0,0 +1,46 @@
module.exports = (params) => {
const udps = require('dgram').createSocket('udp4');
const log = require(__dirname + '/lib/log.js')();
// format: path => (info{method, address, contentType, path}, data{})
// return: res.end
let stack = {};
let o = {
add: (path, f) => {
stack[path] = f;
},
del: (path) => {
delete stack[path];
},
list: () => stack
}
//udp server
udps.bind(5678);
udps.on('listening', function () {
log.info('system', 'udp4 server started on 5678..');
})
//接收消息
udps.on('message', function (msg, rinfo) {
let strmsg = msg.toString();
let res = stack['/']({
method: 'udp',
address: rinfo.address,
contentType: '',
path: '/'
}, JSON.parse(strmsg)
)
if(res) udps.send(res, 0, res.length, rinfo.port, rinfo.address);
})
//错误处理
udps.on('error', function (err) {
log.error('system', 'udp error :: \n' + err);
udps.close();
})
return o ;
}

Binary file not shown.

Binary file not shown.

@ -3,7 +3,9 @@
"restart": "function() node.restart();end",
"exec": "function(s) return loadstring(s)();end",
"list": "function() local obj = {};for k, v in pairs(w.f) do obj[k] = encoder.toHex(crypto.hash([[md5]],string.dump(v))); end;return obj;end",
"push": "function(s) local obj = sjson.decode(s);w.push(obj.hash, obj.func);return {status = true};end",
"push": "function(s) print(s.hash) w.push(s.hash, s.func);return {status = true};end",
"pull": "function(s) w.pull(s);return {status = true};end",
"clear": "function() w.clear();return {status = true};end"
"clear": "function() w.clear();return {status = true};end",
"refresh": "function() w.refresh();return {status = true};end",
"test": "function(s) return s end"
}

@ -0,0 +1,31 @@
{
"firmware": {
"version": "0.0.1"
},
"wifi": {
"station": {
"ssid": "yimian-iot",
"pwd": "1234567890.",
"save": true
}
},
"udp": {
"server": {
"port": 5678
}
},
"w": {
"id": "test2",
"director": {
"ip": "192.168.3.100",
"port": 5678
},
"heartbeat": {
"interval": 2000
},
"key": "1234567890abcdef",
"scanInterval": 300,
"retryInterval": 10000,
"maxRetryTimes": 5
}
}

@ -1,27 +0,0 @@
CONFIG = {
firmware = {
version = '0.0.1'
},
wifi = {
station = {
ssid = "yimian-iot",
pwd = "1234567890.",
save = true
}
},
coap = {
server = {
port = 5683
}
},
w = {
id = node.chipid(),
director = {
ip = '192.168.3.251',
port = 5683
},
heartbeat = {
interval = 15000
}
}
}

@ -0,0 +1,9 @@
{
"info": "function() return CONFIG;end",
"restart": "function() node.restart();end",
"exec": "function(s) return loadstring(s)();end",
"list": "function() local obj = {};for k, v in pairs(w.f) do obj[k] = encoder.toHex(crypto.hash([[md5]],string.dump(v))); end;return obj;end",
"push": "function(s) local obj = sjson.decode(s);w.push(obj.hash, obj.func);return {status = true};end",
"pull": "function(s) w.pull(s);return {status = true};end",
"clear": "function() w.clear();return {status = true};end"
}

@ -1,24 +1,102 @@
--CONFIG
dofile('config.lua')
--Global Var
cs = nil --coAP Server
cc = nil --coAP Client
CONFIG = {}
udp = nil --UDP Server
key = nil --Encrypt Key
G = {} --Var Zone
--wIoT Toolbox
w = {
f = {},
waitList = {},
send = function(ip, port, fid, body, cb)
local sid = func.randomLetter(8)
local o = {
fid = fid,
sid = sid,
id = CONFIG.w.id,
body = body
}
local status, msg = pcall(sjson.encode, o)
udp:send(port, ip, msg)
if cb == nil then return ;end
w.waitList[sid] = false
local resTimer = tmr.create()
local retryTimer = tmr.create()
local retryTimes = CONFIG.w.maxRetryTimes
resTimer:register(CONFIG.w.scanInterval, tmr.ALARM_AUTO, function()
if func.tableKeyExist(w.waitList, sid) and w.waitList[sid] ~= false then
cb(w.waitList[sid])
w.waitList[sid] = nil
resTimer:unregister()
retryTimer:unregister()
collectgarbage("collect")
end
end)
retryTimer:register(CONFIG.w.retryInterval, tmr.ALARM_AUTO, function()
if retryTimes > 0 and func.tableKeyExist(w.waitList, sid) and w.waitList[sid] == false then
udp:send(port, ip, msg)
retryTimes = retryTimes - 1
else
retryTimer:unregister()
collectgarbage("collect")
end
end)
resTimer:start()
retryTimer:start()
end,
receive = function(s, data, port, ip)
print(data)
local status, msg = pcall(sjson.decode, data)
if not status then return end
if not func.tableKeyExist(msg, 'sid') or not func.tableKeyExist(msg, 'body') then return end
--respond mode
print(msg.fid)
if not func.tableKeyExist(msg, 'fid') then
if func.tableKeyExist(w.waitList, msg.sid) then
w.waitList[msg.sid] = msg.body
end
return
end
print(msg.fid)
--request mode
if not func.tableKeyExist(w.f, msg.fid) then return end
local res = w.f[msg.fid](msg.body, {port = port, ip = ip, socket = s, sid = msg.sid, fid = msg.fid});
print(msg.fid)
local resObj = {
sid = msg.sid,
id = CONFIG.w.id,
body = res
}
status, res = pcall(sjson.encode, resObj)
print(res)
s:send(port, ip, res)
end,
heartbeat = function()
local o = {
version = CONFIG.firmware.version,
id = CONFIG.w.id,
ip = wifi.sta.getip(),
port = CONFIG.udp.server.port,
}
--request
print(sjson.encode(o))
udp:send(CONFIG.w.director.port, CONFIG.w.director.ip, sjson.encode(o))
end,
_push = function(hash, s)
w.f[hash] = function(r)
if hash == 'construct' or hash == 'destruct' then
print(s)
loadstring('print("hhhhhhh")')()
loadstring(s)()
return
end
local status, msg = pcall(loadstring('return '..s)(), r)
return sjson.encode({
local data = {
status = status,
msg = msg
})
data = msg
}
return data
end
_G["_"..hash] = w.f[hash]
cs:func('_'..hash, coap.JSON)
return hash
end,
push = function(hash, s)
@ -28,22 +106,15 @@ w = {
end,
pull = function(hash)
w.f[hash] = nil
_G["_"..hash] = nil
func.jsonfPull('func.json', hash)
w.refresh()
end,
clear = function()
for k, v in pairs(w.f) do
loadstring('_'..k..'=nil')
end
w.f = {}
func.jsonfClear('func.json')
w.refresh()
end,
start = function()
print('w starting...')
cs = coap.Server()
cs:listen(CONFIG.coap.server.port)
local usr = func.jsonfRead('func.json')
if next(usr) ~= nil then
print('in usr')
@ -55,22 +126,24 @@ w = {
print('in systemd')
local systemd = func.jsonfRead('FUNC.json')
for k, v in pairs(systemd) do
print(k)
w.push(k, v)
end
end
if func.tableKeyExist(w.f, 'construct') then
w.f:construct()
end
end,
stop = function()
cs:close()
cs = nil
if func.tableKeyExist(w.f, 'destruct') then
w.f:destruct()
end
w.f = {}
collectgarbage("collect")
end,
refresh = function()
w.stop()
w.start()
for k, v in pairs(w.f) do
cs:func('_'..k, coap.JSON)
end
pcall(w.stop)
pcall(w.start)
end
}
@ -78,7 +151,15 @@ w = {
func = {
init = {
run = function()
func.init.wifi(func.init.coap, func.init.w, func.run)
if file.exists("__running") then
file.rename("__running", "__stopped")
else
func.jsonfClear('func.json')
end
collectgarbage("collect")
w.start()
collectgarbage("collect")
func.init.wifi(func.init.udp, func.init.w, func.run)
end,
wifi = function(after, after2, after3)
print('Setting up WIFI...')
@ -97,16 +178,18 @@ func = {
end)
wifiInit:start()
end,
coap = function (after, after2)
cc = coap.Client()
udp = function (after, after2)
udp = net.createUDPSocket()
udp:listen(CONFIG.udp.server.port)
udp:on("receive", w.receive)
after(after2)
end,
w = function(after)
w.start()
--cc:post(coap.CON, 'coap://'..CONFIG.w.director.ip..CONFIG.w.director.port..'/reg', '{"version": "'..CONFIG.firmware.version..'", "id": "'..CONFIG.w.id..'", "ip": "'..wifi.sta.getip()..'", "port": '..CONFIG.coap.server.port..'}')
w.heartbeat()
local heartbeat = tmr.create()
heartbeat:register(CONFIG.w.heartbeat.interval, tmr.ALARM_AUTO, function()
--cc:post(coap.CON, 'coap://'..CONFIG.w.director.ip..CONFIG.w.director.port..'/heartbeat', '{"id": "'..CONFIG.w.id..'", , "ip": "'..wifi.sta.getip()..'"}')
w.heartbeat()
file.rename("__stopped", "__running")
end);
heartbeat:start()
if after then after() end
@ -152,6 +235,26 @@ func = {
end,
jsonfClear = function(f)
func.jsonfWrite(f, {})
end,
encrypt = function(s, kay)
if key == nil then return s;end
local msg = encoder.toHex(crypto.encrypt("AES-ECB", key, s..func.randomLetter(4)))
return msg..string.sub(encoder.toHex(crypto.hmac("sha1", msg, key)), 1, 8)
end,
decrypt = function(s, kay)
if key == nil then return s;end
local msg, hmac = string.sub(s, 1, string.len(s)-8), string.sub(s, string.len(s)-7, 8)
if string.sub(encoder.toHex(crypto.hmac("sha1", msg, key)), 1, 8) ~= hmac then return nil; end
local raw = crypto.decrypt("AES-ECB", key, encoder.fromHex(msg))
return string.sub(raw, 1, string.len(raw) - 4)
end,
tableKeyExist = function(obj, key)
for k, v in pairs(obj) do
if k == key then
return true
end
end
return false
end
}
@ -161,7 +264,8 @@ func.run = function()
gpio.write(0, gpio.LOW)
end
--Load CONFIG
CONFIG = func.jsonfRead('config.json')
--exec Init
func.init.run()

@ -68,6 +68,14 @@
dependencies:
debug "^4.1.1"
accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
dependencies:
mime-types "~2.1.24"
negotiator "0.6.2"
ajv@^6.12.3:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@ -130,6 +138,11 @@ array-filter@^1.0.0:
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
asn1@~0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
@ -206,7 +219,7 @@ bl@^1.0.0:
readable-stream "^2.3.5"
safe-buffer "^5.1.1"
bl@^4.0.3:
bl@^4.0.2, bl@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489"
integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==
@ -215,6 +228,22 @@ bl@^4.0.3:
inherits "^2.0.4"
readable-stream "^3.4.0"
body-parser@1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
dependencies:
bytes "3.1.0"
content-type "~1.0.4"
debug "2.6.9"
depd "~1.1.2"
http-errors "1.7.2"
iconv-lite "0.4.24"
on-finished "~2.3.0"
qs "6.7.0"
raw-body "2.4.0"
type-is "~1.6.17"
boxen@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64"
@ -263,6 +292,11 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
bytes@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
call-bind@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce"
@ -276,6 +310,11 @@ camelcase@^5.3.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
capitalize@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/capitalize/-/capitalize-2.0.3.tgz#ccfeb1046d2a054eb30f34af907a70c3e90f3b73"
integrity sha512-Qc5ksT1/zEJBbFYD05h99hCNEW0cgyD0zzE5WvkgisNnppJ+16zfaSk34evF0j6pGW8hejkRUeygJ5uN5k22SQ==
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@ -297,6 +336,11 @@ chalk@^4.0.0, chalk@^4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
charenc@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
@ -348,6 +392,24 @@ clone@^1.0.2:
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
coap-packet@^0.1.14:
version "0.1.14"
resolved "https://registry.yarnpkg.com/coap-packet/-/coap-packet-0.1.14.tgz#384822b6705abbf31a0cbc449ef7a3a64c4f3e52"
integrity sha1-OEgitnBau/MaDLxEnvejpkxPPlI=
coap@^0.24.0:
version "0.24.0"
resolved "https://registry.yarnpkg.com/coap/-/coap-0.24.0.tgz#64bdbf0279d423230a6dbdd47b5aedf5d914f241"
integrity sha512-8qn5JMHrbM8sX9PWIWsjZ4/WLJE3g/uvGMdS5v4rggL92+Cp5CReT81ohmF8US7CRD3KIAlWYrnJ3ghlu1WyXA==
dependencies:
bl "^4.0.2"
capitalize "^2.0.3"
coap-packet "^0.1.14"
debug "^4.1.1"
fastseries "^2.0.0"
lru-cache "^5.1.1"
readable-stream "^3.6.0"
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
@ -402,11 +464,38 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0:
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
content-disposition@0.5.3:
version "0.5.3"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
dependencies:
safe-buffer "5.1.2"
content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
cookie@0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
crypt@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
cycle@1.0.x:
version "1.0.3"
resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
@ -419,6 +508,23 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
date-format@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf"
integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==
date-format@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95"
integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==
debug@2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
debug@^4.1.1:
version "4.2.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1"
@ -482,11 +588,26 @@ delegates@^1.0.0:
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
detect-libc@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
dgram@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/dgram/-/dgram-1.0.1.tgz#37f3b200f8033a5ff759303089c81ce361b651c3"
integrity sha1-N/OyAPgDOl/3WTAwicgc42G2UcM=
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@ -495,6 +616,11 @@ ecc-jsbn@~0.1.1:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@ -505,6 +631,11 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
version "1.4.4"
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
@ -574,11 +705,57 @@ escalade@^3.1.1:
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
expand-template@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
express@^4.17.1:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
dependencies:
accepts "~1.3.7"
array-flatten "1.1.1"
body-parser "1.19.0"
content-disposition "0.5.3"
content-type "~1.0.4"
cookie "0.4.0"
cookie-signature "1.0.6"
debug "2.6.9"
depd "~1.1.2"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
finalhandler "~1.1.2"
fresh "0.5.2"
merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "~2.3.0"
parseurl "~1.3.3"
path-to-regexp "0.1.7"
proxy-addr "~2.0.5"
qs "6.7.0"
range-parser "~1.2.1"
safe-buffer "5.1.2"
send "0.17.1"
serve-static "1.14.1"
setprototypeof "1.1.1"
statuses "~1.5.0"
type-is "~1.6.18"
utils-merge "1.0.1"
vary "~1.1.2"
extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
@ -609,11 +786,34 @@ fast-json-stable-stringify@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
fastseries@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fastseries/-/fastseries-2.0.0.tgz#d43eb975f6175dd83457d1d68fbd30f936ec7f2b"
integrity sha512-XBU9RXeoYc2/VnvMhplAxEmZLfIk7cvTBu+xwoBuTI8pL19E03cmca17QQycKIdxgwCeFA/a4u27gv1h3ya5LQ==
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
finalhandler@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
dependencies:
debug "2.6.9"
encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.3"
statuses "~1.5.0"
unpipe "~1.0.0"
flatted@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138"
integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==
foreach@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
@ -633,11 +833,30 @@ form-data@~2.3.2:
combined-stream "^1.0.6"
mime-types "^2.1.12"
forwarded@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-magic@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/fs-magic/-/fs-magic-2.1.1.tgz#17913e319d158e970532c80725a2c5000924fbe5"
@ -713,6 +932,11 @@ glob@^7.1.3, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.4"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
@ -748,6 +972,28 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
http-errors@1.7.2:
version "1.7.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
dependencies:
depd "~1.1.2"
inherits "2.0.3"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-errors@~1.7.2:
version "1.7.3"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
dependencies:
depd "~1.1.2"
inherits "2.0.4"
setprototypeof "1.1.1"
statuses ">= 1.5.0 < 2"
toidentifier "1.0.0"
http-signature@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
@ -762,6 +1008,13 @@ i@0.3.x:
resolved "https://registry.yarnpkg.com/i/-/i-0.3.6.tgz#d96c92732076f072711b6b10fd7d4f65ad8ee23d"
integrity sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=
iconv-lite@0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
dependencies:
safer-buffer ">= 2.1.2 < 3"
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@ -775,16 +1028,26 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
inherits@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
ipaddr.js@1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
is-arguments@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3"
@ -800,6 +1063,11 @@ is-boolean-object@^1.0.0:
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e"
integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ==
is-buffer@~1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-callable@^1.1.4, is-callable@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9"
@ -943,6 +1211,13 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
jsonfile@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
graceful-fs "^4.1.6"
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@ -960,6 +1235,17 @@ log-symbols@^4.0.0:
dependencies:
chalk "^4.0.0"
log4js@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb"
integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==
dependencies:
date-format "^3.0.0"
debug "^4.1.1"
flatted "^2.0.1"
rfdc "^1.1.4"
streamroller "^2.2.4"
logging-facility@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/logging-facility/-/logging-facility-2.0.1.tgz#dc3b10b566aa38b58302a5772246cbd4ba9f3761"
@ -967,6 +1253,13 @@ logging-facility@^2.0.1:
dependencies:
colors "^1.1.2"
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
dependencies:
yallist "^3.0.2"
luamin@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/luamin/-/luamin-1.0.4.tgz#944529b58fc6fa4d31eace2e0353d41210f0e3d3"
@ -979,18 +1272,47 @@ luaparse@^0.2.1:
resolved "https://registry.yarnpkg.com/luaparse/-/luaparse-0.2.1.tgz#aa8f56132b0de97d37f3c991a9df42e0e17f656c"
integrity sha1-qo9WEysN6X0388mRqd9C4OF/ZWw=
md5@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==
dependencies:
charenc "0.0.2"
crypt "0.0.2"
is-buffer "~1.1.6"
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
mime-db@1.44.0:
version "1.44.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
mime-types@^2.1.12, mime-types@~2.1.19:
mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24:
version "2.1.27"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
dependencies:
mime-db "1.44.0"
mime@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
@ -1025,6 +1347,16 @@ mkdirp@0.x.x:
dependencies:
minimist "^1.2.5"
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
ms@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
@ -1050,6 +1382,11 @@ ncp@0.4.x:
resolved "https://registry.yarnpkg.com/ncp/-/ncp-0.4.2.tgz#abcc6cbd3ec2ed2a729ff6e7c1fa8f01784a8574"
integrity sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
node-abi@^2.7.0:
version "2.19.1"
resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.19.1.tgz#6aa32561d0a5e2fdb6810d8c25641b657a8cea85"
@ -1132,6 +1469,13 @@ object.assign@^4.1.1:
has-symbols "^1.0.1"
object-keys "^1.1.1"
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
dependencies:
ee-first "1.1.1"
once@^1.3.0, once@^1.3.1, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
@ -1160,11 +1504,21 @@ ora@^5.1.0:
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
@ -1217,6 +1571,14 @@ prompt@^0.2.14:
utile "0.2.x"
winston "0.8.x"
proxy-addr@~2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==
dependencies:
forwarded "~0.1.2"
ipaddr.js "1.9.1"
psl@^1.1.28:
version "1.8.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
@ -1235,11 +1597,31 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
qs@6.7.0:
version "6.7.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
raw-body@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
dependencies:
bytes "3.1.0"
http-errors "1.7.2"
iconv-lite "0.4.24"
unpipe "1.0.0"
rc@^1.2.7:
version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
@ -1270,7 +1652,7 @@ readable-stream@^2.0.6, readable-stream@^2.3.0, readable-stream@^2.3.5:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^3.1.1, readable-stream@^3.4.0:
readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@ -1331,6 +1713,11 @@ revalidator@0.1.x:
resolved "https://registry.yarnpkg.com/revalidator/-/revalidator-0.1.8.tgz#fece61bfa0c1b52a206bd6b18198184bdd523a3b"
integrity sha1-/s5hv6DBtSoga9axgZgYS91SOjs=
rfdc@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2"
integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==
rimraf@2.x.x:
version "2.7.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
@ -1338,17 +1725,17 @@ rimraf@2.x.x:
dependencies:
glob "^7.1.3"
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@ -1358,6 +1745,25 @@ semver@^5.4.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
send@0.17.1:
version "0.17.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
dependencies:
debug "2.6.9"
depd "~1.1.2"
destroy "~1.0.4"
encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
http-errors "~1.7.2"
mime "1.6.0"
ms "2.1.1"
on-finished "~2.3.0"
range-parser "~1.2.1"
statuses "~1.5.0"
serialport@^8.0.5:
version "8.0.8"
resolved "https://registry.yarnpkg.com/serialport/-/serialport-8.0.8.tgz#207fcd90dcf0e1c18311799c595b2a12e6dfe4fd"
@ -1374,11 +1780,26 @@ serialport@^8.0.5:
"@serialport/stream" "^8.0.6"
debug "^4.1.1"
serve-static@1.14.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
dependencies:
encodeurl "~1.0.2"
escape-html "~1.0.3"
parseurl "~1.3.3"
send "0.17.1"
set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
setprototypeof@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
side-channel@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3"
@ -1426,6 +1847,20 @@ stack-trace@0.0.x:
resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
"statuses@>= 1.5.0 < 2", statuses@~1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
streamroller@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53"
integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==
dependencies:
date-format "^2.1.0"
debug "^4.1.1"
fs-extra "^8.1.0"
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@ -1575,6 +2010,11 @@ to-buffer@^1.1.1:
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
toidentifier@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
@ -1600,6 +2040,24 @@ type-fest@^0.8.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
type-is@~1.6.17, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
dependencies:
media-typer "0.3.0"
mime-types "~2.1.24"
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
uri-js@^4.2.2:
version "4.4.0"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602"
@ -1624,11 +2082,21 @@ utile@0.2.x:
ncp "0.4.x"
rimraf "2.x.x"
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
uuid@^3.3.2:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
verror@1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
@ -1734,6 +2202,11 @@ y18n@^5.0.5:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18"
integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
yargs-parser@^20.2.2:
version "20.2.4"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"

Loading…
Cancel
Save