From 1d3410ac915892b92d90a259d4b905c564c3a135 Mon Sep 17 00:00:00 2001 From: Leifer Mendez Date: Sat, 15 Jan 2022 12:36:46 +0100 Subject: [PATCH] improved many thing --- .env.example | 2 + .gitignore | 5 +- .prettierrc.json | 1 + CHANGELOG.md | 11 + README.md | 4 + app.js | 316 +++------ chats/.gitkeep | 0 chats/clientes-saludar.xlsx | Bin 7990 -> 6190 bytes controllers/connection.js | 12 + controllers/flows.js | 26 + controllers/handle.js | 7 + controllers/save.js | 17 + controllers/send.js | 102 +++ controllers/web.js | 10 + media/undefined | Bin 24542 -> 0 bytes middleware/client.js | 21 + package-lock.json | 1281 +++++++++++++++-------------------- package.json | 19 +- routes/api.js | 7 + 19 files changed, 848 insertions(+), 993 deletions(-) create mode 100644 .env.example create mode 100644 .prettierrc.json create mode 100644 CHANGELOG.md create mode 100644 chats/.gitkeep create mode 100644 controllers/connection.js create mode 100644 controllers/flows.js create mode 100644 controllers/handle.js create mode 100644 controllers/save.js create mode 100644 controllers/send.js create mode 100644 controllers/web.js delete mode 100644 media/undefined create mode 100644 middleware/client.js create mode 100644 routes/api.js diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c0cdf79 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +SAVE_MEDIA=true +PORT=3000 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 367d0c0..796233b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ /node_modules /node_modules/* -session.json \ No newline at end of file +session.json +chats/* +!chats/.gitkeep +.env \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..46b134b --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1 @@ +ÿþ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..4d63877 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,11 @@ + +Lucas Aldeco Brescia +hace 2 semanas +Bueno, descubrí el motivo, lo dejo acá por si a alguien le sirve. Cuando alguien publica un estado, se "recibe" un mensaje desde status@broadcast, al responder a esa dirección, se publica un nuevo estado. Basta con validar no responder a esa dirección y problema resuelto. + +#### Actualización 14 Ene 2022 +- npm update +- add mysql +- add env +- update route with middleware +- fix send message to story \ No newline at end of file diff --git a/README.md b/README.md index 14a0ac3..baf7453 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,10 @@ Hola amigos este BOT se realizo en vivo en mi canal de Youtube si quieres ver co 🤖 Link video https://www.youtube.com/watch?v=A_Xu0OR_HkE +#### Actualización 14 Ene 2022 +- npm update +- add mysql + #### Node > Debes de tener instalado NODE si no sabes como instalarlo te dejo un video en el cual explico como instalar node __https://www.youtube.com/watch?v=6741ceWzsKQ&list=PL_WGMLcL4jzVY1y-SutA3N_PCNCAG7Y46&index=2&t=50s Minuto 0:50__ diff --git a/app.js b/app.js index 8766553..af97bba 100644 --- a/app.js +++ b/app.js @@ -1,99 +1,78 @@ /** * ⚡⚡⚡ DECLARAMOS LAS LIBRERIAS y CONSTANTES A USAR! ⚡⚡⚡ */ +require('dotenv').config() const fs = require('fs'); -const mimeDb = require('mime-db') const express = require('express'); -const moment = require('moment'); -const ora = require('ora'); -const chalk = require('chalk'); -const ExcelJS = require('exceljs'); const qrcode = require('qrcode-terminal'); -const { flowConversation } = require('./conversation') -const { Client, MessageMedia } = require('whatsapp-web.js'); +const { Client } = require('whatsapp-web.js'); +const { middlewareClient } = require('./middleware/client') +const { connectionReady, connectionLost } = require('./controllers/connection') +const { saveMedia } = require('./controllers/save') +const { getMessages, responseMessages } = require('./controllers/flows') +const { sendMedia, sendMessage, lastTrigger } = require('./controllers/send') const app = express(); -app.use(express.urlencoded({ extended: true })) +app.use(express.json()) + +const port = process.env.PORT || 3000 const SESSION_FILE_PATH = './session.json'; -let client; -let sessionData; - -/** - * Guardamos archivos multimedia que nuestro cliente nos envie! - * @param {*} media - */ -const saveMedia = (media) => { - - const extensionProcess = mimeDb[media.mimetype] - const ext = extensionProcess.extensions[0] - fs.writeFile(`./media/${media.filename}.${ext}`, media.data, { encoding: 'base64' }, function (err) { - console.log('** Archivo Media Guardado **'); - }); -} - -/** - * Enviamos archivos multimedia a nuestro cliente - * @param {*} number - * @param {*} fileName - */ -const sendMedia = (number, fileName) => { - number = number.replace('@c.us', ''); - number = `${number}@c.us` - const media = MessageMedia.fromFilePath(`./mediaSend/${fileName}`); - client.sendMessage(number, media); -} - -/** - * Enviamos un mensaje simple (texto) a nuestro cliente - * @param {*} number - */ -const sendMessage = (number = null, text = null) => { - number = number.replace('@c.us', ''); - number = `${number}@c.us` - const message = text || `Hola soy un BOT recuerda https://www.youtube.com/leifermendez`; - client.sendMessage(number, message); - readChat(number, message) - console.log(`${chalk.red('⚡⚡⚡ Enviando mensajes....')}`); -} +var client; +var sessionData; /** * Escuchamos cuando entre un mensaje */ -const listenMessage = () => { - client.on('message', async msg => { - const { from, to, body } = msg; - //34691015468@c.us - console.log(msg.hasMedia); - if (msg.hasMedia) { - const media = await msg.downloadMedia(); - saveMedia(media); - // do something with the media data here - } +const listenMessage = () => client.on('message', async msg => { + const { from, body, hasMedia } = msg; + // Este bug lo reporto Lucas Aldeco Brescia para evitar que se publiquen estados + if(from === 'status@broadcast'){ + return + } + message = body.toLowerCase(); - await greetCustomer(from); - - console.log(body); - - await replyAsk(from, body); - - // await readChat(from, body) - // console.log(`${chalk.red('⚡⚡⚡ Enviando mensajes....')}`); - // console.log('Guardar este número en tu Base de Datos:', from); - - }); -} - -/** - * Response a pregunta - */ - -const replyAsk = (from, answer) => new Promise((resolve, reject) => { - console.log(`---------->`, answer); - if (answer === 'Quieromeme') { - sendMedia(from, 'meme-1.png') - resolve(true) + /** + * Guardamos el archivo multimedia que envia + */ + if (process.env.SAVE_MEDIA && hasMedia) { + const media = await msg.downloadMedia(); + saveMedia(media); } -}) + /** + * Ver si viene de un paso anterior + * Aqui podemos ir agregando más pasos + * a tu gusto! + */ + + const lastStep = await lastTrigger(from) || null; + + if (lastStep === 'STEP_2') { + const response = responseMessages(lastStep) + sendMessage(client, from, response); + return + } + + if (lastStep === 'STEP_3') { + const response = responseMessages(lastStep) + sendMessage(client, from, response); + return + } + + /** + * Respondemos al primero paso si encuentra palabras clave + */ + if (getMessages('STEP_1').includes(message)) { + const response = responseMessages('STEP_1') + sendMessage(client, from, response, 'STEP_2'); + return + } + + if (getMessages('STEP_2').includes(message)) { + const response = responseMessages('STEP_2') + sendMessage(client, from, response); + return + } +}); /** * Revisamos si tenemos credenciales guardadas para inciar sessio @@ -101,31 +80,19 @@ const replyAsk = (from, answer) => new Promise((resolve, reject) => { */ const withSession = () => { // Si exsite cargamos el archivo con las credenciales - const spinner = ora(`Cargando ${chalk.yellow('Validando session con Whatsapp...')}`); + console.log(`Validando session con Whatsapp...`) sessionData = require(SESSION_FILE_PATH); - spinner.start(); client = new Client({ session: sessionData }); client.on('ready', () => { - console.log('Client is ready!'); - spinner.stop(); - - // sendMessage(); - // sendMedia(); - connectionReady(); - + listenMessage() + loadRoutes(client); }); - - - client.on('auth_failure', () => { - spinner.stop(); - console.log('** Error de autentificacion vuelve a generar el QRCODE (Borrar el archivo session.json) **'); - }) - + client.on('auth_failure', () => connectionLost()) client.initialize(); } @@ -135,27 +102,24 @@ const withSession = () => { */ const withOutSession = () => { console.log('No tenemos session guardada'); + client = new Client(); + client.on('qr', qr => { qrcode.generate(qr, { small: true }); }); client.on('ready', () => { - console.log('Client is ready!'); - connectionReady(); + connectionReady() }); - client.on('auth_failure', () => { - console.log('** Error de autentificacion vuelve a generar el QRCODE **'); - }) - + client.on('auth_failure', () => connectionLost()); client.on('authenticated', (session) => { - // Guardamos credenciales de de session para usar luego sessionData = session; fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), function (err) { if (err) { - console.log(err); + console.log(`Ocurrio un error con el archivo: `, err); } }); }); @@ -163,145 +127,19 @@ const withOutSession = () => { client.initialize(); } -const connectionReady = () => { - listenMessage(); - readExcel(); +/** + * Cargamos rutas de express + */ + + const loadRoutes = (client) => { + app.use('/api/', middlewareClient(client), require('./routes/api')) } - -/** - * Difundir mensaje a clientes - */ -const readExcel = async () => { - const pathExcel = `./chats/clientes-saludar.xlsx`; - const workbook = new ExcelJS.Workbook(); - await workbook.xlsx.readFile(pathExcel); - const worksheet = workbook.getWorksheet(1); - const columnNumbers = worksheet.getColumn('A'); - columnNumbers.eachCell((cell, rowNumber) => { - const numberCustomer = cell.value - - const columnDate = worksheet.getRow(rowNumber); - let prevDate = columnDate.getCell(2).value; - prevDate = moment.unix(prevDate); - const diffMinutes = moment().diff(prevDate, 'minutes'); - - // Si ha pasado mas de 60 minuitos podemos enviar nuevamente - if (diffMinutes > 60) { - sendMessage(numberCustomer) - columnDate.getCell(2).value = moment().format('X') - columnDate.commit(); - - } - }); - - workbook.xlsx.writeFile(pathExcel); - -} - - -/** - * Guardar historial de conversacion - * @param {*} number - * @param {*} message - */ -const readChat = async (number, message) => { - const pathExcel = `./chats/${number}.xlsx`; - const workbook = new ExcelJS.Workbook(); - const today = moment().format('DD-MM-YYYY hh:mm') - - if (fs.existsSync(pathExcel)) { - /** - * Si existe el archivo de conversacion lo actualizamos - */ - const workbook = new ExcelJS.Workbook(); - workbook.xlsx.readFile(pathExcel) - .then(() => { - const worksheet = workbook.getWorksheet(1); - const lastRow = worksheet.lastRow; - var getRowInsert = worksheet.getRow(++(lastRow.number)); - getRowInsert.getCell('A').value = today; - getRowInsert.getCell('B').value = message; - getRowInsert.commit(); - workbook.xlsx.writeFile(pathExcel); - }); - - } else { - /** - * NO existe el archivo de conversacion lo creamos - */ - const worksheet = workbook.addWorksheet('Chats'); - worksheet.columns = [ - { header: 'Fecha', key: 'number_customer' }, - { header: 'Mensajes', key: 'message' } - ]; - worksheet.addRow([today, message]); - workbook.xlsx.writeFile(pathExcel) - .then(() => { - - console.log("saved"); - }) - .catch((err) => { - console.log("err", err); - }); - } -} - -/** - * Saludos a primera respuesta - * @param {*} req - * @param {*} res - */ - -const greetCustomer = (from) => new Promise((resolve, reject) => { - from = from.replace('@c.us', ''); - - const pathExcel = `./chats/${from}@c.us.xlsx`; - if (!fs.existsSync(pathExcel)) { - const firstMessage = [ - '👋 Ey! que pasa bro', - 'Recuerda subscribirte a mi canal de YT', - 'https://www.youtube.com/leifermendez', - 'de regalo te dejo algunos de mis cursos', - '🔴 Aprende ANGULAR desde cero 2021 ⮕ https://bit.ly/367tJ32', - '✅ Aprende NODE desde cero 2021 ⮕ https://bit.ly/3od1Bl6', - '🔵 (Socket.io) NODE (Tutorial) ⮕ https://bit.ly/3pg1Q02', - '------', - '------', - 'Veo que es la primera vez que nos escribes ¿Quieres que te envie un MEME?', - 'Responde Quieromeme' - ].join(' ') - - sendMessage(from, firstMessage) - sendMedia(from, 'curso-1-1.png') - sendMedia(from, 'curso-2.png') - sendMedia(from, 'curso-3.png') - } - resolve(true) -}) - -/** - * Controladores - */ - -const sendMessagePost = (req, res) => { - const { message, number } = req.body - console.log(message, number); - sendMessage(number, message) - res.send({ status: 'Enviado!' }) -} - -/** - * Rutas - */ - -app.post('/send', sendMessagePost); - /** * Revisamos si existe archivo con credenciales! */ (fs.existsSync(SESSION_FILE_PATH)) ? withSession() : withOutSession(); -app.listen(9000, () => { - console.log('Server ready!'); +app.listen(port, () => { + console.log(`El server esta listo por el puerto ${port}`); }) \ No newline at end of file diff --git a/chats/.gitkeep b/chats/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/chats/clientes-saludar.xlsx b/chats/clientes-saludar.xlsx index 28ba9524fa4830233af7f4209a1feb0068f21383..018b3640dd43a44573c839a1028bcd62c361708e 100644 GIT binary patch literal 6190 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 diff --git a/controllers/connection.js b/controllers/connection.js new file mode 100644 index 0000000..2c05c99 --- /dev/null +++ b/controllers/connection.js @@ -0,0 +1,12 @@ +const connectionReady = (cb = () =>{}) => { + console.log('Client is ready!'); + cb() +} + +const connectionLost = (cb = () =>{}) => { + console.log('** Error de autentificacion vuelve a generar el QRCODE (Borrar el archivo session.json) **'); + cb() +} + + +module.exports = {connectionReady, connectionLost} \ No newline at end of file diff --git a/controllers/flows.js b/controllers/flows.js new file mode 100644 index 0000000..371c593 --- /dev/null +++ b/controllers/flows.js @@ -0,0 +1,26 @@ +const getMessages = (step) => { + switch (step) { + case 'STEP_1': + return ['hola', 'hi'] + break; + case 'STEP_2': + return ['hola', 'hi'] + break; + } + return null +} + + +const responseMessages = (step) => { + switch (step) { + case 'STEP_1': + return ['Si como estas', '🤔'].join('') + break; + case 'STEP_2': + return ['pa como estas', '🤔'].join('') + break; + } + return null +} + +module.exports = { getMessages, responseMessages } \ No newline at end of file diff --git a/controllers/handle.js b/controllers/handle.js new file mode 100644 index 0000000..ef373bd --- /dev/null +++ b/controllers/handle.js @@ -0,0 +1,7 @@ +const cleanNumber = (number) => { + number = number.replace('@c.us', ''); + number = `${number}@c.us`; + return number +} + +module.exports = {cleanNumber} \ No newline at end of file diff --git a/controllers/save.js b/controllers/save.js new file mode 100644 index 0000000..1c53e2b --- /dev/null +++ b/controllers/save.js @@ -0,0 +1,17 @@ +const mimeDb = require('mime-db') + +/** + * Guardamos archivos multimedia que nuestro cliente nos envie! + * @param {*} media + */ + + +const saveMedia = () => { + const extensionProcess = mimeDb[media.mimetype] + const ext = extensionProcess.extensions[0] + fs.writeFile(`../media/${media.filename}.${ext}`, media.data, { encoding: 'base64' }, function (err) { + console.log('** Archivo Media Guardado **'); + }); +} + +module.exports = {saveMedia} \ No newline at end of file diff --git a/controllers/send.js b/controllers/send.js new file mode 100644 index 0000000..023a81d --- /dev/null +++ b/controllers/send.js @@ -0,0 +1,102 @@ + +const ExcelJS = require('exceljs'); +const moment = require('moment'); +const fs = require('fs'); +const { MessageMedia } = require('whatsapp-web.js'); +const { cleanNumber } = require('./handle') +/** + * Enviamos archivos multimedia a nuestro cliente + * @param {*} number + * @param {*} fileName + */ + +const sendMedia = (client, number, fileName) => { + number = cleanNumber(number) + const media = MessageMedia.fromFilePath(`${__dirname}/../mediaSend/${fileName}`); + client.sendMessage(number, media); +} + +/** + * Enviamos un mensaje simple (texto) a nuestro cliente + * @param {*} number + */ +const sendMessage = (client, number = null, text = null, trigger = null) => { + number = cleanNumber(number) + const message = text + client.sendMessage(number, message); + readChat(number, message, trigger) + console.log(`⚡⚡⚡ Enviando mensajes....`); +} + +/** + * Opte + */ +const lastTrigger = (number) => new Promise((resolve, reject) => { + number = cleanNumber(number) + const pathExcel = `${__dirname}/../chats/${number}.xlsx`; + const workbook = new ExcelJS.Workbook(); + if(fs.existsSync(pathExcel)) + { + workbook.xlsx.readFile(pathExcel) + .then(() => { + const worksheet = workbook.getWorksheet(1); + const lastRow = worksheet.lastRow; + const getRowPrevStep = worksheet.getRow(lastRow.number); + const lastStep = getRowPrevStep.getCell('C').value; + resolve(lastStep) + }); + }else{ + resolve(null) + } +}) + +/** + * Guardar historial de conversacion + * @param {*} number + * @param {*} message + */ + const readChat = async (number, message, trigger = null) => { + const pathExcel = `${__dirname}/../chats/${number}.xlsx`; + const workbook = new ExcelJS.Workbook(); + const today = moment().format('DD-MM-YYYY hh:mm') + + if (fs.existsSync(pathExcel)) { + /** + * Si existe el archivo de conversacion lo actualizamos + */ + const workbook = new ExcelJS.Workbook(); + workbook.xlsx.readFile(pathExcel) + .then(() => { + const worksheet = workbook.getWorksheet(1); + const lastRow = worksheet.lastRow; + var getRowInsert = worksheet.getRow(++(lastRow.number)); + getRowInsert.getCell('A').value = today; + getRowInsert.getCell('B').value = message; + getRowInsert.getCell('C').value = trigger; + getRowInsert.commit(); + workbook.xlsx.writeFile(pathExcel); + }); + + } else { + /** + * NO existe el archivo de conversacion lo creamos + */ + const worksheet = workbook.addWorksheet('Chats'); + worksheet.columns = [ + { header: 'Fecha', key: 'number_customer' }, + { header: 'Mensajes', key: 'message' }, + { header: 'Disparador', key: 'trigger' } + ]; + worksheet.addRow([today, message, trigger]); + workbook.xlsx.writeFile(pathExcel) + .then(() => { + + console.log("saved"); + }) + .catch((err) => { + console.log("err", err); + }); + } +} + +module.exports = { sendMessage, sendMedia, lastTrigger } \ No newline at end of file diff --git a/controllers/web.js b/controllers/web.js new file mode 100644 index 0000000..0824f42 --- /dev/null +++ b/controllers/web.js @@ -0,0 +1,10 @@ +const { sendMessage } = require('../controllers/send') + +const sendMessagePost = (req, res) => { + const { message, number } = req.body + const client = req.clientWs || null; + sendMessage(client, number, message) + res.send({ status: 'Enviado!' }) +} + +module.exports = { sendMessagePost } \ No newline at end of file diff --git a/media/undefined b/media/undefined deleted file mode 100644 index 8a1af44a3e2f4ba5800592e7157975cbdd52eed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24542 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 U?|=b;Ku{9-BL2JKj4prw*$>BrB>(^b diff --git a/middleware/client.js b/middleware/client.js new file mode 100644 index 0000000..67c0d30 --- /dev/null +++ b/middleware/client.js @@ -0,0 +1,21 @@ +const middlewareClient = (client = null) => async (req, res, next) => { + try { + + if(!client){ + res.status(409) + console.log(client) + res.send({ error: 'Error de client.' }) + }else{ + req.clientWs = client; + next() + } + + + } catch (e) { + console.log(e) + res.status(409) + res.send({ error: 'Error de client' }) + } + +} +module.exports = { middlewareClient } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e9a9b75..068221c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,38 +32,39 @@ } }, "@pedroslopez/moduleraid": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@pedroslopez/moduleraid/-/moduleraid-5.0.0.tgz", - "integrity": "sha512-zhYWDnB7APf85Vi11fAucfeW3iWtJBIQcEBsu/WyQvsNcdO9fsfTd+CA+Jd297kljYQkpHPCCOTBK7DAPSuXvg==" + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@pedroslopez/moduleraid/-/moduleraid-5.0.2.tgz", + "integrity": "sha512-wtnBAETBVYZ9GvcbgdswRVSLkFkYAGv1KzwBBTeRXvGT9sb9cPllOgFFWXCn9PyARQ0H+Ijz6mmoRrGateUDxQ==" }, "@tokenizer/token": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz", - "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==" + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" }, - "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==" + "@types/component-emitter": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==" + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" }, "@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" - }, - "@types/readable-stream": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.9.tgz", - "integrity": "sha512-sqsgQqFT7HmQz/V5jH1O0fvQQnXAJO46Gg9LRO/JPfjmVmGUlcx831TZZO3Y3HtWhIkzf3kTsNT0Z0kzIhIvZw==", - "requires": { - "@types/node": "*", - "safe-buffer": "*" - } + "version": "14.18.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.5.tgz", + "integrity": "sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A==" }, "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", "optional": true, "requires": { "@types/node": "*" @@ -88,35 +89,25 @@ } }, "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { - "color-convert": "^2.0.1" + "debug": "4" }, "dependencies": { - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "color-name": "~1.1.4" + "ms": "2.1.2" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -169,26 +160,13 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } } } }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -207,46 +185,43 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } } } }, "array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "async": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", - "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==" }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + }, "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "binary": { "version": "0.3.0", @@ -273,35 +248,20 @@ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" } }, "brace-expansion": { @@ -338,9 +298,9 @@ "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" }, "cfb": { "version": "1.2.0", @@ -360,38 +320,11 @@ "traverse": ">=0.3.0 <0.4" } }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -414,31 +347,38 @@ } }, "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.0.tgz", + "integrity": "sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -449,13 +389,18 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, "compress-commons": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.0.tgz", - "integrity": "sha512-ofaaLqfraD1YRTkrRKPCrGJ1pFeDG/MVCkVVV2FNGeWquSlqw5wOrwOfPQ1xF2u+blpeWASie5EubHz+vsNIgA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "requires": { "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.1", + "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } @@ -471,17 +416,17 @@ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -491,9 +436,9 @@ "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { "version": "1.0.6", @@ -505,6 +450,15 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "crc-32": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", @@ -524,16 +478,16 @@ } }, "dayjs": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.4.tgz", - "integrity": "sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==" + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "2.1.2" + "ms": "2.0.0" } }, "decompress-response": { @@ -549,19 +503,6 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, - "deepmerge": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz", - "integrity": "sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow==" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "^1.0.2" - } - }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -583,9 +524,14 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "devtools-protocol": { - "version": "0.0.818844", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz", - "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==" + "version": "0.0.901419", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", + "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==" + }, + "dotenv": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-11.0.0.tgz", + "integrity": "sha512-Fp/b504Y5W+e+FpCxTFMUZ7ZEQkQYF0rx+KZtmwixJxGQbLHrhCwo3FjZgNC8vIfrSi29PABNbMoCGD9YoiXbQ==" }, "duplexer2": { "version": "0.1.4", @@ -608,19 +554,6 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } } } }, @@ -642,6 +575,51 @@ "once": "^1.4.0" } }, + "engine.io": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", + "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.0", + "ws": "~8.2.3" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "ws": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==" + } + } + }, + "engine.io-parser": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz", + "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==", + "requires": { + "base64-arraybuffer": "~1.0.1" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -652,35 +630,10 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "excel4node": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/excel4node/-/excel4node-1.7.2.tgz", - "integrity": "sha512-3XSsPSSbUeGloTRQMTmgf4aA1WDGa9fWQitOCGN/URG8NvwPjgVdbyG7FWKukqTdl5XBz9jv0vVBz3BBIo52tg==", - "requires": { - "deepmerge": "3.2.0", - "image-size": "0.7.2", - "jszip": "3.2.1", - "lodash.get": "4.4.2", - "lodash.isequal": "4.5.0", - "lodash.isundefined": "3.0.1", - "lodash.reduce": "4.6.0", - "lodash.uniqueid": "4.0.1", - "mime": "2.4.0", - "uuid": "3.3.2", - "xmlbuilder": "11.0.1" - }, - "dependencies": { - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==" - } - } - }, "exceljs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.2.1.tgz", - "integrity": "sha512-EogoTdXH1X1PxqD9sV8caYd1RIfXN3PVlCV+mA/87CgdO2h4X5xAEbr7CaiP8tffz7L4aBFwsdMbjfMXi29NjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/exceljs/-/exceljs-4.3.0.tgz", + "integrity": "sha512-hTAeo5b5TPvf8Z02I2sKIT4kSfCnOO2bCxYX8ABqODCdAjppI3gI9VYiGCQQYVcBaBSKlFDMKlAQRqC+kV9O8w==", "requires": { "archiver": "^5.0.0", "dayjs": "^1.8.34", @@ -694,9 +647,9 @@ }, "dependencies": { "jszip": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", - "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.7.1.tgz", + "integrity": "sha512-ghL0tz1XG9ZEmRMcEN2vt7xabrDdqHHeykgARpmZ0BiIctWxM47Vt63ZO2dnp4QYt/xJVLLy5Zv1l/xRdh2byg==", "requires": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -720,19 +673,6 @@ } } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -751,16 +691,16 @@ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -774,41 +714,23 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, @@ -821,6 +743,21 @@ "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "fast-csv": { @@ -846,14 +783,13 @@ "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" }, "file-type": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.3.0.tgz", - "integrity": "sha512-ZA0hV64611vJT42ltw0T9IDwHApQuxRdrmQZWTeDmeAUtZBBVSQW3nSQqhhW1cAgpXgqcJvm410BYHXJQ9AymA==", + "version": "16.5.3", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.3.tgz", + "integrity": "sha512-uVsl7iFhHSOY4bEONLlTK47iAHtNsFHWP5YE4xJfZ4rnX7S1Q3wce09XgqSC7E/xh8Ncv/be1lNoyprlUH/x6A==", "requires": { "readable-web-to-node-stream": "^3.0.0", - "strtok3": "^6.0.3", - "token-types": "^2.0.0", - "typedarray-to-buffer": "^3.1.5" + "strtok3": "^6.2.4", + "token-types": "^4.1.1" } }, "finalhandler": { @@ -868,21 +804,6 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } } }, "find-up": { @@ -904,9 +825,9 @@ } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "frac": { "version": "1.1.2", @@ -962,6 +883,21 @@ "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "get-stream": { @@ -978,9 +914,9 @@ "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -991,14 +927,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "has-unicode": { "version": "2.0.1", @@ -1006,31 +937,39 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } + "toidentifier": "1.0.1" } }, "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "requires": { - "agent-base": "5", + "agent-base": "6", "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "iconv-lite": { @@ -1046,11 +985,6 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, - "image-size": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.2.tgz", - "integrity": "sha512-CBmVIFHyDyiWi1U24eNHl8SH0Iir2IgmEv1RwdRVZxWsEbSCvV5b/eXaYP8epOFv2dbw5uNBOrn1Nc5P5KvsUA==" - }, "immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -1093,21 +1027,6 @@ "number-is-nan": "^1.0.0" } }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -1119,54 +1038,14 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "jsqr": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.3.1.tgz", - "integrity": "sha512-zCTP6Qd/WwjrpuHFkJuXc5opRdKprUr7eI7+JCCtcetThJt45qptu82MWQ+eET+FtDrMo7+BYjo3iD0XIq1L9Q==" - }, - "jszip": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.1.tgz", - "integrity": "sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz", + "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" }, "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "requires": { "readable-stream": "^2.0.5" }, @@ -1184,19 +1063,6 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } } } }, @@ -1241,11 +1107,6 @@ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" - }, "lodash.groupby": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", @@ -1281,11 +1142,6 @@ "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", "integrity": "sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g=" }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, "lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", @@ -1296,20 +1152,6 @@ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, - "lodash.uniqueid": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz", - "integrity": "sha1-MmjyanyI5PSxdY1nknGBTjH6WyY=" - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -1334,28 +1176,23 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.46.0" + "mime-db": "1.51.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, "mimic-response": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", @@ -1393,9 +1230,9 @@ "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "napi-build-utils": { "version": "1.0.2", @@ -1408,9 +1245,9 @@ "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, "node-abi": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.20.0.tgz", - "integrity": "sha512-6ldtfVR5l3RS8D0aT+lj/uM2Vv/PGEkeWzt2tl8DFBsGY/IuVnAIHl+dG6C14NlWClVv7Rn2+ZDvox+35Hx2Kg==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "requires": { "semver": "^5.4.1" }, @@ -1423,19 +1260,19 @@ } }, "node-addon-api": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", - "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + "node-webpmux": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-webpmux/-/node-webpmux-3.1.1.tgz", + "integrity": "sha512-vG75BAe9zKghN+Y+XsJMPdOfVyesn1MmGvd/DMxeQ6gtpB3U053yCWXO1Gl2QWXTfU1++7flTihv/yB6EEdtKQ==" }, "normalize-path": { "version": "3.0.0", @@ -1479,45 +1316,6 @@ "wrappy": "1" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "ora": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.0.tgz", - "integrity": "sha512-1StwyXQGoU6gdjYkyVcqOLnVlbKj+6yPNNOxJVgpt9t4eksKjiriiHuxktLYkgllwk+D6MbC4ihH84L1udRXPg==", - "requires": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -1565,9 +1363,9 @@ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "peek-readable": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-3.1.3.tgz", - "integrity": "sha512-mpAcysyRJxmICBcBa5IXH7SZPvWkcghm6Fk8RekoS3v+BpbSzlZzuWbMx+GXrlUwESi9qHar4nVEZNMKylIHvg==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.0.2.tgz", + "integrity": "sha512-9fMaz6zoxw9ypO1KZy5RDJgSupEtu0Q+g/OqqsVHX3rKGR8qehRLYzsFARZ4bVvdvfknKiXvuDbkMnO1g6cRpQ==" }, "pend": { "version": "1.2.0", @@ -1583,9 +1381,9 @@ } }, "prebuild-install": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.0.1.tgz", - "integrity": "sha512-7GOJrLuow8yeiyv75rmvZyeMGzl8mdEX5gY69d6a6bHWmiPevwqFw+tQavhK0EYMaSg3/KD24cWqeQv1EWsqDQ==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", @@ -1593,29 +1391,21 @@ "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", - "node-abi": "^2.7.0", - "noop-logger": "^0.1.1", + "node-abi": "^2.21.0", "npmlog": "^4.0.1", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^3.0.3", "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - } + "tunnel-agent": "^0.6.0" } }, + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "dev": true + }, "printj": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", @@ -1627,16 +1417,16 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", + "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==" }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, @@ -1655,22 +1445,37 @@ } }, "puppeteer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-5.5.0.tgz", - "integrity": "sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-10.4.0.tgz", + "integrity": "sha512-2cP8mBoqnu5gzAVpbZ0fRaobBWZM8GEUF4I1F6WbgHrKV/rz7SX8PG2wMymZgD0wo0UBlg2FBPNxlF/xlqW6+w==", "requires": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.818844", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^4.0.0", - "node-fetch": "^2.6.1", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.0.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" + "debug": "4.3.1", + "devtools-protocol": "0.0.901419", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "node-fetch": "2.6.1", + "pkg-dir": "4.2.0", + "progress": "2.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.0.0", + "unbzip2-stream": "1.3.3", + "ws": "7.4.6" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "qrcode-terminal": { @@ -1679,9 +1484,9 @@ "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==" }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" }, "range-parser": { "version": "1.2.1", @@ -1689,12 +1494,12 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -1721,11 +1526,10 @@ } }, "readable-web-to-node-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.1.tgz", - "integrity": "sha512-4zDC6CvjUyusN7V0QLsXVB7pJCD9+vtrM9bYDRv6uBQ+SKfx36rp5AFNPRgh9auKRul/a1iFZJYXcCbwRL+SaA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", "requires": { - "@types/readable-stream": "^2.3.9", "readable-stream": "^3.6.0" } }, @@ -1737,15 +1541,6 @@ "minimatch": "^3.0.4" } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -1755,9 +1550,9 @@ } }, "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==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safer-buffer": { "version": "2.1.2", @@ -1773,17 +1568,17 @@ } }, "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "requires": { "lru-cache": "^6.0.0" } }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -1792,50 +1587,30 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "set-blocking": { @@ -1854,31 +1629,42 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "sharp": { - "version": "0.26.3", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.26.3.tgz", - "integrity": "sha512-NdEJ9S6AMr8Px0zgtFo1TJjMK/ROMU92MkDtYn2BBrDjIx3YfH9TUyGdzPC+I/L619GeYQc690Vbaxc5FPCCWg==", + "version": "0.28.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.28.3.tgz", + "integrity": "sha512-21GEP45Rmr7q2qcmdnjDkNP04Ooh5v0laGS5FDpojOO84D1DJwUijLiSq8XNNM6e8aGXYtoYRh3sVNdm8NodMA==", "requires": { - "array-flatten": "^3.0.0", "color": "^3.1.3", "detect-libc": "^1.0.3", - "node-addon-api": "^3.0.2", - "npmlog": "^4.1.2", - "prebuild-install": "^6.0.0", - "semver": "^7.3.2", - "simple-get": "^4.0.0", + "node-addon-api": "^3.2.0", + "prebuild-install": "^6.1.2", + "semver": "^7.3.5", + "simple-get": "^3.1.0", "tar-fs": "^2.1.1", "tunnel-agent": "^0.6.0" + }, + "dependencies": { + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + } } }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "simple-concat": { "version": "1.0.1", @@ -1886,28 +1672,13 @@ "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, "simple-get": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", - "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", "requires": { - "decompress-response": "^6.0.0", + "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } } }, "simple-swizzle": { @@ -1918,6 +1689,64 @@ "is-arrayish": "^0.3.1" } }, + "socket.io": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz", + "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==", + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.1.0", + "socket.io-adapter": "~2.3.3", + "socket.io-parser": "~4.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz", + "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==" + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "ssf": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", @@ -1939,22 +1768,29 @@ "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + } } }, "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.2.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" + "safe-buffer": "~5.1.0" } }, "strip-json-comments": { @@ -1963,32 +1799,23 @@ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "strtok3": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.0.8.tgz", - "integrity": "sha512-QLgv+oiXwXgCgp2PdPPa+Jpp4D9imK9e/0BsyfeFMr6QL6wMVqoVn9+OXQ9I7MZbmUzN6lmitTJ09uwS2OmGcw==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.2.4.tgz", + "integrity": "sha512-GO8IcFF9GmFDvqduIspUBwCzCbqzegyVKIsSymcMgiZKeCfrN9SowtUoi8+b59WZMAjIzVZic/Ft97+pynR3Iw==", "requires": { - "@tokenizer/token": "^0.1.1", - "@types/debug": "^4.1.5", - "peek-readable": "^3.1.3" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.0.1" } }, "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", + "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", "requires": { "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", + "mkdirp": "^0.5.1", "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "tar-stream": "^2.0.0" } }, "tar-stream": { @@ -2017,16 +1844,16 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "token-types": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz", - "integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.1.1.tgz", + "integrity": "sha512-hD+QyuUAyI2spzsI0B7gf/jJ2ggR4RjkAo37j3StuePhApJUwcWDjnHDOFdIWYSwNR28H14hpwm4EI+V1Ted1w==", "requires": { - "@tokenizer/token": "^0.1.1", + "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, @@ -2052,18 +1879,10 @@ "mime-types": "~2.1.24" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, "unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -2104,19 +1923,6 @@ "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } } } }, @@ -2130,35 +1936,30 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "requires": { - "defaults": "^1.0.3" - } - }, "whatsapp-web.js": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/whatsapp-web.js/-/whatsapp-web.js-1.12.5.tgz", - "integrity": "sha512-jGqu6FH05HLpn5s4T7XS7wwo+QTf3albewPA7r6X1h9CTShCXksHTaIMG03Tai/tmx25vQGYXEBdSVct0JGKfg==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/whatsapp-web.js/-/whatsapp-web.js-1.15.3.tgz", + "integrity": "sha512-U07dpYiF3dd8GXCNFbIEHFXPCAH79XpKuo9UCi6cjrfue3MaBnAFs+EmjumT05ZpN1dRV9IPqVKEZr/ZaTOggQ==", "requires": { - "@pedroslopez/moduleraid": "^5.0.0", + "@pedroslopez/moduleraid": "^5.0.2", "fluent-ffmpeg": "^2.1.2", "jsqr": "^1.3.1", "mime": "^2.4.5", - "puppeteer": "^5.2.1", - "sharp": "^0.26.3" + "node-webpmux": "^3.1.0", + "puppeteer": "^10.1.0", + "sharp": "^0.28.3" + }, + "dependencies": { + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + } } }, "which": { @@ -2169,17 +1970,12 @@ "isexe": "^2.0.0" } }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "wmf": { @@ -2198,9 +1994,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" }, "xlsx": { "version": "0.16.9", @@ -2219,11 +2015,6 @@ "word": "~0.3.0" } }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, "xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", diff --git a/package.json b/package.json index f62ada7..a8acafd 100644 --- a/package.json +++ b/package.json @@ -4,22 +4,25 @@ "description": "", "main": "index.js", "scripts": { + "start": "node app.js", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { - "chalk": "^4.1.0", - "excel4node": "^1.7.2", - "exceljs": "^4.2.1", - "express": "^4.17.1", - "file-type": "^16.3.0", - "mime-db": "^1.46.0", + "dotenv": "^11.0.0", + "exceljs": "^4.3.0", + "express": "^4.17.2", + "file-type": "^16.5.3", + "mime-db": "^1.51.0", "moment": "^2.29.1", - "ora": "^5.4.0", "qrcode-terminal": "^0.12.0", - "whatsapp-web.js": "^1.12.5", + "socket.io": "^4.4.1", + "whatsapp-web.js": "^1.15.3", "xlsx": "^0.16.9" + }, + "devDependencies": { + "prettier": "2.5.1" } } diff --git a/routes/api.js b/routes/api.js new file mode 100644 index 0000000..7d88a05 --- /dev/null +++ b/routes/api.js @@ -0,0 +1,7 @@ +const express = require('express') +const router = express.Router(); +const { sendMessagePost } = require('../controllers/web') + +router.post('/send', sendMessagePost) + +module.exports = router \ No newline at end of file