Commit be3049ab authored by Sebastián Long's avatar Sebastián Long

Finish CHATBOTS-15

parents 4a1e1763 a70c76b9
...@@ -13,3 +13,5 @@ jspm_packages/ ...@@ -13,3 +13,5 @@ jspm_packages/
/.idea/modules.xml /.idea/modules.xml
/.idea/vcs.xml /.idea/vcs.xml
/.idea/workspace.xml /.idea/workspace.xml
/.idea
/logs
\ No newline at end of file
# Crisp Chatbot
Este proyecto es un servidor escrito en NodeJS que brinda la interacción de usuario para los chatbots
de reserva de turnos. Se basa en un servicio de eventos, los cuales recibe de Crisp cada vez que el usuario escribe
un mensaje. Cuando esto sucede, interceptamos el mensaje y manejamos los datos del usuario, sobre todo
para saber en qué paso se encuentra dentro de la conversación, y los datos que fue ingresando.
Actualmente el chatbot se despliega en dos sitios web: reserva de turnos bajo demanda (IPS), y
reserva de turnos programados.
El chatbot de reserva de turnos programados se carga en el sitio de Integrando Pacientes.
El script que lo carga (configurado en el proyecto de dicha aplicación web), postea
además los datos del usuario en la API de Crisp, tales como su nombre, apellido y teléfono.
Dichos datos son recuperados por este servidor la primera vez que el usuario interacciona
con el chatbot de reserva de turnos programados, y los envía a Sendinblue. En Sendinblue
tenemos una lista de correos donde enviamos tutoriales de cómo usar el chatbot.
## Configuración
Los siguientes parametros deben ser configurados en [default.json](./config/default.json)
* credenciales.crisp.identifier: identifier para la integración con Crisp.
* credenciales.crisp.key: key para la integración con Crisp.
* credenciales.sendinblue.apikey: API Key de Sendinblue.
* credenciales.isApiToken: API Token de Integrando Salud.
* isBaseUrl: URL base de Integrando Salud (https://www.integrandosalud.com/src-v2/public/api/v1)
* sendingbluBaseUrl: URL base de Sendingblue (https://api.sendinblue.com/v3)
* sendingblueListId: ID de la lista de correo de Sendinblue (54)
* crispWebsiteIdIpsTurnosBajoDemanda: Website ID para el website de turnos bajo demanda.
* crispWebsiteIdIsTurnosProgramados Website ID para el website de turnos programados.
* idAgendaIPS: ID de la agenda del IPS.
* idDominioIPS: ID del dominio del IPS.
## Ejecución
Para correr el proyecto, una vez seteada la configuración, correr el siguiente comando:
```npm run start```
## Logs
Los logs se almacenan en el directorio [/logs](./logs).
* El archivo [error.log](./logs/error.log) muestra solamente errores.
* El archivo [info.log](./logs/error.log) muestra tanto errores como logs de información.
\ No newline at end of file
var Crisp = require("node-crisp-api"); const Crisp = require("crisp-api");
var CrispClient = new Crisp(); const CrispClient = new Crisp();
const config = require('config'); const config = require('config');
var identifier = config.get('credenciales.crisp.identifier'); const identifier = config.get('credenciales.crisp.identifier');
var key = config.get('credenciales.crisp.key'); const key = config.get('credenciales.crisp.key');
let SIGUIENTE_PASO = 'siguiente_paso'; const SIGUIENTE_PASO = 'siguiente_paso';
const DELAY_MS = 1000; const DELAY_MS = 1000;
let localData = {}; let localData = {};
CrispClient.authenticate(identifier, key); CrispClient.authenticateTier("plugin", identifier, key);
async function sendTextMessage(website_id, session_id, message) { async function sendTextMessage(website_id, session_id, message) {
await composeMessage(website_id, session_id, DELAY_MS); await composeMessage(website_id, session_id, DELAY_MS);
await CrispClient.websiteConversations.sendMessage( await CrispClient.website.sendMessageInConversation(
website_id, website_id,
session_id, { session_id, {
type: "text", type: "text",
...@@ -25,14 +25,14 @@ async function sendTextMessage(website_id, session_id, message) { ...@@ -25,14 +25,14 @@ async function sendTextMessage(website_id, session_id, message) {
} }
async function composeMessage(website_id, session_id, ms){ async function composeMessage(website_id, session_id, ms){
await CrispClient.websiteConversations.composeMessage( await CrispClient.website.composeMessageInConversation(
website_id, website_id,
session_id, { session_id, {
"type": "start", "type": "start",
"from": "operator"} "from": "operator"}
); );
await new Promise(resolve => setTimeout(resolve, ms)); await new Promise(resolve => setTimeout(resolve, ms));
await CrispClient.websiteConversations.composeMessage( await CrispClient.website.composeMessageInConversation(
website_id, website_id,
session_id, { session_id, {
"type": "stop", "type": "stop",
...@@ -46,7 +46,7 @@ async function showWritingIcon(website_id, session_id){ ...@@ -46,7 +46,7 @@ async function showWritingIcon(website_id, session_id){
async function sendPickerMessage(website_id, session_id, id, title, choices) { async function sendPickerMessage(website_id, session_id, id, title, choices) {
await composeMessage(website_id, session_id, DELAY_MS); await composeMessage(website_id, session_id, DELAY_MS);
await CrispClient.websiteConversations.sendMessage( await CrispClient.website.sendMessageInConversation(
website_id, website_id,
session_id, { session_id, {
type: "picker", type: "picker",
...@@ -84,7 +84,7 @@ async function getUserData(website_id, session_id) { ...@@ -84,7 +84,7 @@ async function getUserData(website_id, session_id) {
} }
async function updateCrispData(website_id, session_id, correo, tipo_documento, numero_documento, fecha_nacimiento, sexo) { async function updateCrispData(website_id, session_id, correo, tipo_documento, numero_documento, fecha_nacimiento, sexo) {
await CrispClient.websiteConversations.updateMeta(website_id, session_id, { await CrispClient.website.updateConversationMetas(website_id, session_id, {
email: correo, email: correo,
data: { data: {
tipo_documento: tipo_documento, tipo_documento: tipo_documento,
...@@ -96,7 +96,7 @@ async function updateCrispData(website_id, session_id, correo, tipo_documento, n ...@@ -96,7 +96,7 @@ async function updateCrispData(website_id, session_id, correo, tipo_documento, n
} }
async function getCrispData(website_id, session_id) { async function getCrispData(website_id, session_id) {
return await CrispClient.websiteConversations.getMeta(website_id, session_id); return await CrispClient.website.getConversationMetas(website_id, session_id);
} }
async function updateUserData(website_id, session_id, data) { async function updateUserData(website_id, session_id, data) {
......
const config = require('config'); const config = require('config');
const axios = require('axios'); const axios = require('axios');
let _ = require('lodash'); let _ = require('lodash');
const logger = require('../logger/index.js');
var AUTH_TOKEN = config.get('credenciales.isApiToken'); const AUTH_TOKEN = config.get('credenciales.isApiToken');
let isClient = axios.create({ let isClient = axios.create({
baseURL: config.get('isBaseUrl'), baseURL: config.get('isBaseUrl'),
...@@ -22,14 +23,6 @@ function sortProvinciasByName(provincias){ ...@@ -22,14 +23,6 @@ function sortProvinciasByName(provincias){
return provinciasByName; return provinciasByName;
} }
function getProvinciaById(provincias, id) {
for (let i = 0; i < provincias.length; i++) {
if (provincias[i].id_provincia === id) {
return provincias[i];
}
}
}
module.exports = module.exports =
{ {
getProvincias: async function () { getProvincias: async function () {
...@@ -39,7 +32,7 @@ module.exports = ...@@ -39,7 +32,7 @@ module.exports =
return sortProvinciasByName(provincias); return sortProvinciasByName(provincias);
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
}); });
}, },
getMedicosByName: async function (nombreMedico, idProvincia) { getMedicosByName: async function (nombreMedico, idProvincia) {
...@@ -48,7 +41,7 @@ module.exports = ...@@ -48,7 +41,7 @@ module.exports =
return response.data.data; return response.data.data;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
}); });
}, },
getEspecialidadesMedico: async function (idPersonaInstitucional, idProvincia) { getEspecialidadesMedico: async function (idPersonaInstitucional, idProvincia) {
...@@ -57,7 +50,7 @@ module.exports = ...@@ -57,7 +50,7 @@ module.exports =
return response.data.data; return response.data.data;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
}); });
}, },
getTurnosDisponibles: async function (idAgenda, idPersonaInstitucional, fechaUsa) { getTurnosDisponibles: async function (idAgenda, idPersonaInstitucional, fechaUsa) {
...@@ -66,7 +59,7 @@ module.exports = ...@@ -66,7 +59,7 @@ module.exports =
return response.data.turnos; return response.data.turnos;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
}); });
}, },
getSiguientesTurnosDisponibles: async function (idAgenda, idPersonaInstitucional) { getSiguientesTurnosDisponibles: async function (idAgenda, idPersonaInstitucional) {
...@@ -75,7 +68,7 @@ module.exports = ...@@ -75,7 +68,7 @@ module.exports =
return response.data; return response.data;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
}); });
}, },
existeUsuario: async function(tipo_documento, numero_documento, fecha_nacimiento, sexo){ existeUsuario: async function(tipo_documento, numero_documento, fecha_nacimiento, sexo){
...@@ -84,7 +77,7 @@ module.exports = ...@@ -84,7 +77,7 @@ module.exports =
return response.data; return response.data;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
}); });
}, },
crearTurno: async function (idPersonaFederada, idHorario, fechaHora) { crearTurno: async function (idPersonaFederada, idHorario, fechaHora) {
...@@ -97,7 +90,8 @@ module.exports = ...@@ -97,7 +90,8 @@ module.exports =
return response.data; return response.data;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
return error;
}); });
}, },
federarUsuario: async function (tipoDocumento, numeroDocumento, fechaNacimiento, sexo, mail, telefonoCelular, idDominio) { federarUsuario: async function (tipoDocumento, numeroDocumento, fechaNacimiento, sexo, mail, telefonoCelular, idDominio) {
...@@ -119,7 +113,7 @@ module.exports = ...@@ -119,7 +113,7 @@ module.exports =
return response.data; return response.data;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
return {success: false}; return {success: false};
}); });
}, },
...@@ -129,7 +123,7 @@ module.exports = ...@@ -129,7 +123,7 @@ module.exports =
return response.data; return response.data;
}) })
.catch(function (error) { .catch(function (error) {
console.log(error); logger.error(error.data);
return {success: false}; return {success: false};
}); });
} }
......
const config = require('config'); const config = require('config');
const axios = require('axios'); const axios = require('axios');
const logger = require('../logger/index.js');
const API_KEY = config.get('credenciales.sendinblue.apiKey'); const API_KEY = config.get('credenciales.sendinblue.apiKey');
const COUNTRY_CODE_ARG = "+54"; const COUNTRY_CODE_ARG = "+54";
...@@ -13,12 +14,12 @@ let sendinblueClient = axios.create({ ...@@ -13,12 +14,12 @@ let sendinblueClient = axios.create({
async function saveContactToList(email, nombres, apellidos, sms, listId){ async function saveContactToList(email, nombres, apellidos, sms, listId){
sms = parseSms(sms); sms = parseSms(sms);
createOrUpdateContact(email, nombres, apellidos, sms) createOrUpdateContact(email, nombres, apellidos, sms)
.then(function (data){ .then(function (){
console.log(`Usuario ${email} creado/actualizado`); logger.info(`Usuario ${email} creado/actualizado`);
addContactToList(email, listId); addContactToList(email, listId);
}) })
.catch(function (error) { .catch(function (error) {
console.log(`Error al crear/actualizar usuario en sendinblue: ${JSON.stringify(error.response.data)}`); logger.error(`Error al crear/actualizar usuario en sendinblue: ${JSON.stringify(error.response.data)}`);
}); });
} }
...@@ -40,7 +41,6 @@ async function createOrUpdateContact(email, nombres, apellidos, sms){ ...@@ -40,7 +41,6 @@ async function createOrUpdateContact(email, nombres, apellidos, sms){
}) })
.catch(async function (error) { .catch(async function (error) {
if(error.response.data.code === ERROR_CODE_DUPLICATE_PARAMETER){ if(error.response.data.code === ERROR_CODE_DUPLICATE_PARAMETER){
console.log(error.response.data)
return await sendinblueClient.put(encodeURI(`/contacts/${email}`), { return await sendinblueClient.put(encodeURI(`/contacts/${email}`), {
"attributes": { "attributes": {
"NOMBRE": nombres, "NOMBRE": nombres,
...@@ -52,6 +52,10 @@ async function createOrUpdateContact(email, nombres, apellidos, sms){ ...@@ -52,6 +52,10 @@ async function createOrUpdateContact(email, nombres, apellidos, sms){
return response.data; return response.data;
}) })
} }
else{
logger.error(error.data);
return error;
}
}); });
} }
...@@ -60,11 +64,12 @@ async function addContactToList(email, listId){ ...@@ -60,11 +64,12 @@ async function addContactToList(email, listId){
"emails": [email] "emails": [email]
}) })
.then(async function (response) { .then(async function (response) {
console.log(`Usuario ${email} agregado a lista ${listId}`) logger.info(`Usuario ${email} agregado a lista ${listId}`)
return response.data; return response.data;
}) })
.catch(async function (error) { .catch(async function (error) {
console.log(`Error al agregar al usuario ${email} a la lista ${listId}: ${JSON.stringify(error.response.data)}`); logger.error(`Error al agregar al usuario ${email} a la lista ${listId}:`);
logger.error(error.response.data);
}); });
} }
......
const axios = require('axios');
const config = require('config'); const config = require('config');
const handlerTurnosProgramados = require('./handlers/is_turnos_programados.js'); const handlerTurnosProgramados = require('./handlers/is_turnos_programados.js');
const handlerTurnosBajoDemanda = require('./handlers/ips_turnos_bajo_demanda'); const handlerTurnosBajoDemanda = require('./handlers/ips_turnos_bajo_demanda');
const crisp = require('./crisp.js'); const crisp = require('./crisp.js');
const utils = require('./utils.js');
const pasosTurnosProgramados = require('./handlers/pasos_is_turnos_programados.js'); const pasosTurnosProgramados = require('./handlers/pasos_is_turnos_programados.js');
const pasosIpsTurnosBajoDemanda = require('./handlers/pasos_ips_turnos_bajo_demanda'); const pasosIpsTurnosBajoDemanda = require('./handlers/pasos_ips_turnos_bajo_demanda');
const is = require('./endpoints/is.js');
const sendinblue = require('./endpoints/sendinblue.js'); const sendinblue = require('./endpoints/sendinblue.js');
const logger = require('./logger/index.js');
const WEBSITE_ID_IPS_TURNOS_BAJO_DEMANDA = config.get('crispWebsiteIdIpsTurnosBajoDemanda'); const WEBSITE_ID_IPS_TURNOS_BAJO_DEMANDA = config.get('crispWebsiteIdIpsTurnosBajoDemanda');
const WEBSITE_ID_TURNOS_PROGRAMADOS = config.get('crispWebsiteIdIsTurnosProgramados'); const WEBSITE_ID_TURNOS_PROGRAMADOS = config.get('crispWebsiteIdIsTurnosProgramados');
const REINICIAR = 'REINICIAR';
crisp.CrispClient.userProfile.get().then(function(myProfile) { crisp.CrispClient.plugin.getConnectAccount()
console.log(`El chatbot esta escuchando eventos (profile name: ${myProfile.first_name})`); .then(account => {
}); console.log('El chatbot esta escuchando eventos');
logger.info('Servicio iniciado');
logger.info("Plugin ID:");
logger.info(account.plugin_id);
})
.catch(error => {
console.error('Error al inicializar el chatbot: ', error);
logger.error('Error al inicializar el chatbot:');
logger.error(error);
});
crisp.CrispClient.on("message:updated", async function (message) { crisp.CrispClient.on("message:updated", async function (message) {
logger.info('Opcion del usuario:');
logger.info(message.content);
darSiguientePaso(message, message.website_id, message.session_id); darSiguientePaso(message, message.website_id, message.session_id);
}) })
crisp.CrispClient.on("message:send", async function (message) { crisp.CrispClient.on("message:send", async function (message) {
if(message.content.toUpperCase() === 'REINICIAR'){ if(message.content.toUpperCase() === REINICIAR){
await crisp.updateUserData(message.website_id, message.session_id, {}); await crisp.updateUserData(message.website_id, message.session_id, {});
} }
let siguientePaso = await crisp.getSiguientePaso(message.website_id, message.session_id); let siguientePaso = await crisp.getSiguientePaso(message.website_id, message.session_id);
logger.info(`Usuario tipea: ${message.content}`)
if (siguientePaso == null) { if (siguientePaso == null) {
if(message.website_id === WEBSITE_ID_TURNOS_PROGRAMADOS){ if(message.website_id === WEBSITE_ID_TURNOS_PROGRAMADOS){
enviarUserAListaSendingblue(message.website_id, message.session_id, config.get('sendingblueListId')); enviarUserAListaSendingblue(message.website_id, message.session_id, config.get('sendingblueListId'));
...@@ -36,7 +47,12 @@ crisp.CrispClient.on("message:send", async function (message) { ...@@ -36,7 +47,12 @@ crisp.CrispClient.on("message:send", async function (message) {
} }
darSiguientePaso(message, message.website_id, message.session_id) darSiguientePaso(message, message.website_id, message.session_id)
.catch((ignorar) => {}) //Ignorar error cuando el usuario escribe un mensaje en lugar de usar el picker, o viceversa .catch((error) => {
logger.error(`Error al procesar el mensaje del usuario:`);
logger.error(error);
crisp.sendTextMessage(message.website_id, message.session_id,
`Ocurrió un error al procesar su respuesta. Por favor, verifique los datos ingresados y reintente. Si quiere comenzar desde el inicio, escriba ${REINICIAR}.`)
})
}); });
async function darSiguientePaso(message, website_id, session_id) { async function darSiguientePaso(message, website_id, session_id) {
...@@ -59,9 +75,10 @@ async function enviarUserAListaSendingblue(website_id, session_id, listId){ ...@@ -59,9 +75,10 @@ async function enviarUserAListaSendingblue(website_id, session_id, listId){
let email = crispUsrData['email']; let email = crispUsrData['email'];
let phone = crispUsrData['phone']; let phone = crispUsrData['phone'];
console.log(nombres, apellidos, email, phone); logger.info(nombres, apellidos, email, phone);
sendinblue.saveContactToList(email, nombres, apellidos, phone, listId); sendinblue.saveContactToList(email, nombres, apellidos, phone, listId);
} catch (e) { } catch (e) {
console.log(`Hubo un error al intentar enviar el usuario a la lista de sendinblue. Error: ${e}`); logger.error(`Hubo un error al intentar enviar el usuario a la lista de sendinblue. Error:`);
logger.error(e);
} }
} }
\ No newline at end of file
const winston = require('winston');
const { combine, timestamp, printf } = winston.format;
const logFormat = printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${JSON.stringify(message)}`;
});
const logger = winston.createLogger({
level: 'info',
format: combine(
timestamp(),
logFormat
),
defaultMeta: { service: 'chatbot' },
transports: [
// Guardar logs con nivel `error` y por debajo en `error.log`
new winston.transports.File({ filename: 'logs/error.log', level: 'error', handleRejections: true }),
// Guardar logs con nivel `info` y por debajo en `info.log`
new winston.transports.File({ filename: 'logs/info.log' }),
],
});
module.exports = logger;
\ No newline at end of file
...@@ -4,6 +4,16 @@ ...@@ -4,6 +4,16 @@
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@dabh/diagnostics": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
"integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
"requires": {
"colorspace": "1.1.x",
"enabled": "2.0.x",
"kuler": "^2.0.0"
}
},
"@sindresorhus/is": { "@sindresorhus/is": {
"version": "0.14.0", "version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
...@@ -29,32 +39,13 @@ ...@@ -29,32 +39,13 @@
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
}, },
"ansi-align": { "ansi-align": {
"version": "3.0.0", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
"integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
"dev": true,
"requires": {
"string-width": "^3.0.0"
},
"dependencies": {
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true, "dev": true,
"requires": { "requires": {
"emoji-regex": "^7.0.1", "string-width": "^4.1.0"
"is-fullwidth-code-point": "^2.0.0",
"strip-ansi": "^5.1.0"
} }
}
}
},
"ansi-regex": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
}, },
"ansi-styles": { "ansi-styles": {
"version": "4.3.0", "version": "4.3.0",
...@@ -85,17 +76,17 @@ ...@@ -85,17 +76,17 @@
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
}, },
"async-limiter": { "async": {
"version": "1.0.1", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "resolved": "https://registry.npmjs.org/async/-/async-3.2.2.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" "integrity": "sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g=="
}, },
"axios": { "axios": {
"version": "0.21.1", "version": "0.21.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
"integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
"requires": { "requires": {
"follow-redirects": "^1.10.0" "follow-redirects": "^1.14.0"
} }
}, },
"backo2": { "backo2": {
...@@ -110,17 +101,9 @@ ...@@ -110,17 +101,9 @@
"dev": true "dev": true
}, },
"base64-arraybuffer": { "base64-arraybuffer": {
"version": "0.1.5", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
"integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
},
"better-assert": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
"requires": {
"callsite": "1.0.0"
}
}, },
"binary-extensions": { "binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
...@@ -197,11 +180,6 @@ ...@@ -197,11 +180,6 @@
} }
} }
}, },
"callsite": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA="
},
"camelcase": { "camelcase": {
"version": "5.3.1", "version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
...@@ -271,6 +249,30 @@ ...@@ -271,6 +249,30 @@
"mimic-response": "^1.0.0" "mimic-response": "^1.0.0"
} }
}, },
"color": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz",
"integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==",
"requires": {
"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-convert": { "color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
...@@ -283,8 +285,30 @@ ...@@ -283,8 +285,30 @@
"color-name": { "color-name": {
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
"dev": true },
"color-string": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
"integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
"requires": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
}
},
"colors": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
"integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
},
"colorspace": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz",
"integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==",
"requires": {
"color": "^3.1.3",
"text-hex": "1.0.x"
}
}, },
"component-bind": { "component-bind": {
"version": "1.0.0", "version": "1.0.0",
...@@ -292,9 +316,9 @@ ...@@ -292,9 +316,9 @@
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
}, },
"component-emitter": { "component-emitter": {
"version": "1.2.1", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
}, },
"component-inherit": { "component-inherit": {
"version": "0.0.3", "version": "0.0.3",
...@@ -329,6 +353,22 @@ ...@@ -329,6 +353,22 @@
"xdg-basedir": "^4.0.0" "xdg-basedir": "^4.0.0"
} }
}, },
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"crisp-api": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/crisp-api/-/crisp-api-5.0.1.tgz",
"integrity": "sha512-6ei7tPSUY8UznEX9xElpH3tAqozvdSO2NsA1JOr8wf194BKg/fr2Ka4AzxIoPV3J1zMaB27G6bwljjPTofbgLA==",
"requires": {
"fbemitter": "3.0.0",
"got": "9.6.0",
"q": "2.0.3",
"socket.io-client": "2.4.0"
}
},
"cross-fetch": { "cross-fetch": {
"version": "3.1.4", "version": "3.1.4",
"resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz",
...@@ -384,11 +424,10 @@ ...@@ -384,11 +424,10 @@
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
}, },
"emoji-regex": { "enabled": {
"version": "7.0.3", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
"dev": true
}, },
"end-of-stream": { "end-of-stream": {
"version": "1.4.4", "version": "1.4.4",
...@@ -399,31 +438,31 @@ ...@@ -399,31 +438,31 @@
} }
}, },
"engine.io-client": { "engine.io-client": {
"version": "3.2.1", "version": "3.5.2",
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz",
"integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==",
"requires": { "requires": {
"component-emitter": "1.2.1", "component-emitter": "~1.3.0",
"component-inherit": "0.0.3", "component-inherit": "0.0.3",
"debug": "~3.1.0", "debug": "~3.1.0",
"engine.io-parser": "~2.1.1", "engine.io-parser": "~2.2.0",
"has-cors": "1.1.0", "has-cors": "1.1.0",
"indexof": "0.0.1", "indexof": "0.0.1",
"parseqs": "0.0.5", "parseqs": "0.0.6",
"parseuri": "0.0.5", "parseuri": "0.0.6",
"ws": "~3.3.1", "ws": "~7.4.2",
"xmlhttprequest-ssl": "~1.5.4", "xmlhttprequest-ssl": "~1.6.2",
"yeast": "0.1.2" "yeast": "0.1.2"
} }
}, },
"engine.io-parser": { "engine.io-parser": {
"version": "2.1.3", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
"integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
"requires": { "requires": {
"after": "0.8.2", "after": "0.8.2",
"arraybuffer.slice": "~0.0.7", "arraybuffer.slice": "~0.0.7",
"base64-arraybuffer": "0.1.5", "base64-arraybuffer": "0.1.4",
"blob": "0.0.5", "blob": "0.0.5",
"has-binary2": "~1.0.2" "has-binary2": "~1.0.2"
} }
...@@ -443,9 +482,9 @@ ...@@ -443,9 +482,9 @@
} }
}, },
"fbjs": { "fbjs": {
"version": "3.0.0", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.0.tgz", "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.1.tgz",
"integrity": "sha512-dJd4PiDOFuhe7vk4F80Mba83Vr2QuK86FoxtgPmzBqEJahncp+13YCmfoa53KHCo6OnlXLG7eeMWPfB5CrpVKg==", "integrity": "sha512-8+vkGyT4lNDRKHQNPp0yh/6E7FfkLg89XqQbOYnvntRh+8RiSD43yrh9E5ejp1muCizTL4nDVG+y8W4e+LROHg==",
"requires": { "requires": {
"cross-fetch": "^3.0.4", "cross-fetch": "^3.0.4",
"fbjs-css-vars": "^1.0.0", "fbjs-css-vars": "^1.0.0",
...@@ -453,7 +492,7 @@ ...@@ -453,7 +492,7 @@
"object-assign": "^4.1.0", "object-assign": "^4.1.0",
"promise": "^7.1.1", "promise": "^7.1.1",
"setimmediate": "^1.0.5", "setimmediate": "^1.0.5",
"ua-parser-js": "^0.7.18" "ua-parser-js": "^0.7.30"
} }
}, },
"fbjs-css-vars": { "fbjs-css-vars": {
...@@ -461,6 +500,11 @@ ...@@ -461,6 +500,11 @@
"resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz",
"integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ=="
}, },
"fecha": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
"integrity": "sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q=="
},
"fill-range": { "fill-range": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
...@@ -470,10 +514,15 @@ ...@@ -470,10 +514,15 @@
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
} }
}, },
"fn.name": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
"integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
},
"follow-redirects": { "follow-redirects": {
"version": "1.13.3", "version": "1.14.5",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
"integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA=="
}, },
"fsevents": { "fsevents": {
"version": "2.3.2", "version": "2.3.2",
...@@ -585,12 +634,22 @@ ...@@ -585,12 +634,22 @@
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
}, },
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": { "ini": {
"version": "1.3.7", "version": "1.3.7",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
"integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
"dev": true "dev": true
}, },
"is-arrayish": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
},
"is-binary-path": { "is-binary-path": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
...@@ -615,12 +674,6 @@ ...@@ -615,12 +674,6 @@
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true "dev": true
}, },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
"dev": true
},
"is-glob": { "is-glob": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
...@@ -664,6 +717,11 @@ ...@@ -664,6 +717,11 @@
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true "dev": true
}, },
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
},
"is-typedarray": { "is-typedarray": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
...@@ -707,6 +765,11 @@ ...@@ -707,6 +765,11 @@
"json-buffer": "3.0.0" "json-buffer": "3.0.0"
} }
}, },
"kuler": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
},
"latest-version": { "latest-version": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
...@@ -721,6 +784,25 @@ ...@@ -721,6 +784,25 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
}, },
"logform": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/logform/-/logform-2.3.0.tgz",
"integrity": "sha512-graeoWUH2knKbGthMtuG1EfaSPMZFZBIrhuJHhkS5ZseFBrc7DupCzihOQAzsK/qIKPQaPJ/lFQFctILUY5ARQ==",
"requires": {
"colors": "^1.2.1",
"fecha": "^4.2.0",
"ms": "^2.1.1",
"safe-stable-stringify": "^1.1.0",
"triple-beam": "^1.3.0"
},
"dependencies": {
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
}
}
},
"loose-envify": { "loose-envify": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
...@@ -775,17 +857,6 @@ ...@@ -775,17 +857,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}, },
"node-crisp-api": {
"version": "1.12.2",
"resolved": "https://registry.npmjs.org/node-crisp-api/-/node-crisp-api-1.12.2.tgz",
"integrity": "sha512-iw1eN7xPELDafeRigTg0p7+4YjSqWhG9GkA3+px1QRyBTJhzWUKWTwwTfUu9rT4DgCSOso6npLsIYkIzIOAPqQ==",
"requires": {
"fbemitter": "3.0.0",
"got": "9.6.0",
"q": "2.0.3",
"socket.io-client": "2.1.1"
}
},
"node-fetch": { "node-fetch": {
"version": "2.6.1", "version": "2.6.1",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
...@@ -842,20 +913,15 @@ ...@@ -842,20 +913,15 @@
"dev": true "dev": true
}, },
"normalize-url": { "normalize-url": {
"version": "4.5.0", "version": "4.5.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
"integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="
}, },
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
}, },
"object-component": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
},
"once": { "once": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
...@@ -864,6 +930,14 @@ ...@@ -864,6 +930,14 @@
"wrappy": "1" "wrappy": "1"
} }
}, },
"one-time": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
"integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
"requires": {
"fn.name": "1.x.x"
}
},
"p-cancelable": { "p-cancelable": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
...@@ -890,20 +964,14 @@ ...@@ -890,20 +964,14 @@
} }
}, },
"parseqs": { "parseqs": {
"version": "0.0.5", "version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
"requires": {
"better-assert": "~1.0.0"
}
}, },
"parseuri": { "parseuri": {
"version": "0.0.5", "version": "0.0.6",
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
"requires": {
"better-assert": "~1.0.0"
}
}, },
"picomatch": { "picomatch": {
"version": "2.2.3", "version": "2.2.3",
...@@ -921,6 +989,11 @@ ...@@ -921,6 +989,11 @@
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
}, },
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"promise": { "promise": {
"version": "7.3.1", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
...@@ -975,6 +1048,16 @@ ...@@ -975,6 +1048,16 @@
"strip-json-comments": "~2.0.1" "strip-json-comments": "~2.0.1"
} }
}, },
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"readdirp": { "readdirp": {
"version": "3.5.0", "version": "3.5.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
...@@ -1011,9 +1094,14 @@ ...@@ -1011,9 +1094,14 @@
} }
}, },
"safe-buffer": { "safe-buffer": {
"version": "5.1.2", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
},
"safe-stable-stringify": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz",
"integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw=="
}, },
"semver": { "semver": {
"version": "5.7.1", "version": "5.7.1",
...@@ -1049,37 +1137,47 @@ ...@@ -1049,37 +1137,47 @@
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
"dev": true "dev": true
}, },
"simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
"integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
"requires": {
"is-arrayish": "^0.3.1"
}
},
"socket.io-client": { "socket.io-client": {
"version": "2.1.1", "version": "2.4.0",
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz",
"integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==",
"requires": { "requires": {
"backo2": "1.0.2", "backo2": "1.0.2",
"base64-arraybuffer": "0.1.5",
"component-bind": "1.0.0", "component-bind": "1.0.0",
"component-emitter": "1.2.1", "component-emitter": "~1.3.0",
"debug": "~3.1.0", "debug": "~3.1.0",
"engine.io-client": "~3.2.0", "engine.io-client": "~3.5.0",
"has-binary2": "~1.0.2", "has-binary2": "~1.0.2",
"has-cors": "1.1.0",
"indexof": "0.0.1", "indexof": "0.0.1",
"object-component": "0.0.3", "parseqs": "0.0.6",
"parseqs": "0.0.5", "parseuri": "0.0.6",
"parseuri": "0.0.5", "socket.io-parser": "~3.3.0",
"socket.io-parser": "~3.2.0",
"to-array": "0.1.4" "to-array": "0.1.4"
} }
}, },
"socket.io-parser": { "socket.io-parser": {
"version": "3.2.0", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
"integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
"requires": { "requires": {
"component-emitter": "1.2.1", "component-emitter": "~1.3.0",
"debug": "~3.1.0", "debug": "~3.1.0",
"isarray": "2.0.1" "isarray": "2.0.1"
} }
}, },
"stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
"integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
},
"string-width": { "string-width": {
"version": "4.2.2", "version": "4.2.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
...@@ -1092,9 +1190,9 @@ ...@@ -1092,9 +1190,9 @@
}, },
"dependencies": { "dependencies": {
"ansi-regex": { "ansi-regex": {
"version": "5.0.0", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true "dev": true
}, },
"emoji-regex": { "emoji-regex": {
...@@ -1120,13 +1218,12 @@ ...@@ -1120,13 +1218,12 @@
} }
} }
}, },
"strip-ansi": { "string_decoder": {
"version": "5.2.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dev": true,
"requires": { "requires": {
"ansi-regex": "^4.1.0" "safe-buffer": "~5.2.0"
} }
}, },
"strip-json-comments": { "strip-json-comments": {
...@@ -1150,6 +1247,11 @@ ...@@ -1150,6 +1247,11 @@
"integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
"dev": true "dev": true
}, },
"text-hex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
"integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
},
"to-array": { "to-array": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
...@@ -1178,6 +1280,11 @@ ...@@ -1178,6 +1280,11 @@
"nopt": "~1.0.10" "nopt": "~1.0.10"
} }
}, },
"triple-beam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
},
"type-fest": { "type-fest": {
"version": "0.8.1", "version": "0.8.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
...@@ -1194,14 +1301,9 @@ ...@@ -1194,14 +1301,9 @@
} }
}, },
"ua-parser-js": { "ua-parser-js": {
"version": "0.7.28", "version": "0.7.31",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
"integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ=="
},
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
}, },
"undefsafe": { "undefsafe": {
"version": "2.0.3", "version": "2.0.3",
...@@ -1261,6 +1363,11 @@ ...@@ -1261,6 +1363,11 @@
"prepend-http": "^2.0.0" "prepend-http": "^2.0.0"
} }
}, },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"weak-map": { "weak-map": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz", "resolved": "https://registry.npmjs.org/weak-map/-/weak-map-1.0.5.tgz",
...@@ -1275,6 +1382,65 @@ ...@@ -1275,6 +1382,65 @@
"string-width": "^4.0.0" "string-width": "^4.0.0"
} }
}, },
"winston": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
"integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==",
"requires": {
"@dabh/diagnostics": "^2.0.2",
"async": "^3.1.0",
"is-stream": "^2.0.0",
"logform": "^2.2.0",
"one-time": "^1.0.0",
"readable-stream": "^3.4.0",
"stack-trace": "0.0.x",
"triple-beam": "^1.3.0",
"winston-transport": "^4.4.0"
}
},
"winston-transport": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
"integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
"requires": {
"readable-stream": "^2.3.7",
"triple-beam": "^1.2.0"
},
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"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"
}
}
}
},
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
...@@ -1293,14 +1459,9 @@ ...@@ -1293,14 +1459,9 @@
} }
}, },
"ws": { "ws": {
"version": "3.3.3", "version": "7.4.6",
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
"requires": {
"async-limiter": "~1.0.0",
"safe-buffer": "~5.1.0",
"ultron": "~1.1.0"
}
}, },
"xdg-basedir": { "xdg-basedir": {
"version": "4.0.0", "version": "4.0.0",
...@@ -1309,9 +1470,9 @@ ...@@ -1309,9 +1470,9 @@
"dev": true "dev": true
}, },
"xmlhttprequest-ssl": { "xmlhttprequest-ssl": {
"version": "1.5.5", "version": "1.6.3",
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
"integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q=="
}, },
"yeast": { "yeast": {
"version": "0.1.2", "version": "0.1.2",
......
...@@ -11,10 +11,11 @@ ...@@ -11,10 +11,11 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"axios": "^0.21.1", "axios": "^0.21.4",
"config": "^3.3.6", "config": "^3.3.6",
"crisp-api": "5.0.1",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"node-crisp-api": "^1.12.2" "winston": "^3.3.3"
}, },
"devDependencies": { "devDependencies": {
"nodemon": "^2.0.7" "nodemon": "^2.0.7"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment