diff --git a/helpers/buffer.js b/helpers/buffer.js new file mode 100644 index 00000000..3fb65adb --- /dev/null +++ b/helpers/buffer.js @@ -0,0 +1,23 @@ +const messageBuffer = { + jz0ahj: [ + { + chatId: "-388078727", + name: "jim", + text: "helloo", + from: "jims", + adminName: "admin", + }, + ], +}; + +module.exports.getMessages = function getMessages(userId) { + return messageBuffer[userId] || []; +}; + +module.exports.getMessageCount = function getMessageCount(userId) { + return messageBuffer[userId] ? messageBuffer[userId].length : 0; +}; + +module.exports.deleteBuffer = function deleteBuffer(userId) { + delete messageBuffer[userId]; +}; diff --git a/helpers/socket.js b/helpers/socket.js new file mode 100644 index 00000000..8a36a14b --- /dev/null +++ b/helpers/socket.js @@ -0,0 +1,214 @@ +const { getMessages, deleteBuffer } = require("./buffer"); +const { sendMessageToTelegram, sendTypingAction } = require("./telegram"); +const socketIo = require("socket.io"); + +const connectedSockets = {}; + +module.exports.createSocketServer = function createSocketServer(server) { + const io = socketIo(server); + + io.on("connection", (socket) => { + socket.on("register", async function (registerMsg) { + const { isNewUser, chatId, userId, oldId, userData, currentUrl } = + registerMsg; + console.info("a user connected", userId); + socket.userId = userId; + socket.userData = userData; + connectedSockets[userId] = socket; + const messages = getMessages(userId); + + if (messages.length) { + console.info(`${userId} has ${messages.length} messages in the buffer`); + for (let msg of messages) { + const { chatId, name, text, from, adminName } = msg; + console.info("sending buffered message to user", text); + socket.emit(chatId + "-" + userId, { + name, + text, + from, + adminName, + }); + } + deleteBuffer(userId); + } + }); + + socket.on("message", (data) => { + if (!connectedSockets[socket.userId]) { + console.log( + `Message received on disconnected socket - ${socket.userId}` + ); + connectedSockets[socket.userId] = socket; + } + const { action, msg } = data; + console.log("Message received:", data); + if (action === "typing") { + sendTypingAction(); + } else if (action === "message") { + connectedSockets[socket.userId].messageReceived = true; + const text = `[${socket.userId}]: ${socket.userData?.email}\n${data.msg.text}`; + sendMessageToTelegram(text); + } + }); + + socket.on("disconnect", () => { + if (connectedSockets[socket.userId].messageReceived) { + sendTelegramMessage(chatId, socket.userId + " has left"); + } + delete connectedSockets[socket.userId]; + }); + }); +}; + +// export function sendMessageToUser({ chatId, userId, message }) { +// const { name, text, from } = message; +// // check if connected, if not then buffer +// if (connectedSockets[userId]) { +// console.log("client connected sending message"); +// const sock = connectedSockets[userId]; +// sock.emit(chatId + "-" + userId, { +// name, +// text, +// from: "admin", +// adminName: from, +// }); +// } else { +// if (!messageBuffer[userId]) { +// messageBuffer[userId] = []; +// } +// console.log("client not connected buffering message"); +// messageBuffer[userId].unshift({ +// chatId, +// name, +// text, +// from: "admin", +// adminName: from, +// }); +// } +// } + +// export async function onConnectionStart(client) { +// client.on("register", async function (registerMsg) { +// const { isNewUser, chatId, userId, oldId, userData, currentUrl } = +// registerMsg; +// console.log("register user", userId); +// connectedSockets[userId] = client; +// let messageReceived = false; +// // check the buffer and send anything in there +// if (messageBuffer[userId]) { +// const buffered = messageBuffer[userId]; +// let msg = buffered.pop(); +// console.log(`sending ${buffered.length} buffered messages`); +// while (msg) { +// const { chatId, name, text, from, adminName } = msg; +// client.emit(chatId + "-" + userId, { +// name, +// text, +// from, +// adminName, +// }); +// msg = buffered.pop(); +// } +// delete messageBuffer[userId]; +// } + +// console.log("userId " + userId + " connected to chatId " + chatId); + +// if (oldId) { +// await sendMessage( +// chatId, +// userId, +// `Lead ${oldId} has logged in as ${userData.email}` +// ); +// await sendStartMessage(chatId, { ...userData, currentUrl }); +// } + +// client.on("message", async function (data) { +// if (data.action === "typing") { +// return setTyping(chatId); +// } +// const { msg } = data; +// if (isNewUser && !messageReceived) { +// // enrich user data +// await sendStartMessage(chatId, { +// ...userData, +// currentUrl, +// }); +// } + +// messageReceived = true; +// client.emit(chatId + "-" + userId, msg); +// return sendMessage( +// chatId, +// userId, +// msg.text, +// userData ? userData.email : "" +// ); +// }); + +// client.on("disconnect", function () { +// if (messageReceived) { +// sendTelegramMessage(chatId, userId + " has left"); +// } +// delete connectedSockets[userId]; +// }); +// }); +// } + +// function sendStartMessage(chatId, userData = {}) { +// const { id, email, currentUrl } = userData; +// console.log(userData); +// const isLead = !email; +// let text = ""; + +// if (isLead) { +// text = `New Lead +// URL:\t ${currentUrl || "unknown"} +// `; +// } else { +// text = `A user has started a chat. +// ID:\t ${id} +// Email:\t ${email} +// URL:\t ${currentUrl || "unknown"} +// Stripe:\t https://dashboard.stripe.com/search?query=${email} +// `; +// } +// text = `${text}`; +// return sendTelegramMessage(chatId, text, "HTML"); +// } + +// function sendMessage(chatId, userId, text, email = "") { +// return sendTelegramMessage( +// chatId, +// `[${userId}] ${email}:\n${text}`, +// "HTML" +// ); +// } + +// function setTyping(chatId) { +// return new Promise((resolve, reject) => { +// request +// .post( +// "https://api.telegram.org/bot" + +// process.env.TELEGRAM_TOKEN + +// "/sendChatAction", +// function (err, resp, body) { +// if (err) { +// console.error(err); +// return reject(err); +// } +// resolve(body); +// } +// ) +// .form({ +// chat_id: chatId, +// action: "typing", +// }); +// }); +// } + +// export function connectSocket(http) { +// const io = require("socket.io")(http); +// // handle chat visitors websocket messages +// io.on("connection", onConnectionStart); +// } diff --git a/helpers/telegram.js b/helpers/telegram.js new file mode 100644 index 00000000..bb6146b5 --- /dev/null +++ b/helpers/telegram.js @@ -0,0 +1,28 @@ +const { Telegraf } = require("telegraf"); + +const bot = new Telegraf(process.env.TELEGRAM_TOKEN); +const channelId = process.env.CHANNEL_ID; + +bot.on("message", (ctx) => { + console.log(`Message in group: ${ctx.message.text}`); + if (ctx.chat.type === "group" || ctx.chat.type === "supergroup") { + console.log(`Message in group: ${ctx.message.text}`); + // Add your logic here + } +}); + +module.exports.sendMessageToTelegram = function sendMessageToTelegram(message) { + bot.telegram.sendMessage(channelId, message); +}; + +module.exports.sendTypingAction = function sendTypingAction() { + bot.telegram.sendChatAction(channelId, "typing"); +}; + +module.exports.startBot = function startBot() { + bot.launch(); + console.info("Launched Squarechat."); +}; + +process.once("SIGINT", () => bot.stop("SIGINT")); +process.once("SIGTERM", () => bot.stop("SIGTERM")); diff --git a/index.js b/index.js new file mode 100644 index 00000000..d6ec6ec7 --- /dev/null +++ b/index.js @@ -0,0 +1,39 @@ +const express = require("express"); +const { Telegraf } = require("telegraf"); +const http = require("http"); + +const cors = require("cors"); +const { sendMessageToTelegram, startBot } = require("./helpers/telegram"); +const { getMessageCount } = require("./helpers/buffer"); +const { createSocketServer } = require("./helpers/socket"); + +const { PORT } = process.env; + +const app = express(); +const server = http.createServer(app); + +createSocketServer(server); + +app.post("/usage-start", cors(), function (req, res) { + console.log("usage from", req.query.host); + const unreadCount = getMessageCount(req.query.userId); + res.status(200).send(unreadCount.toString()); +}); + +app.post("/unreads", cors(), function (req, res) { + const unreadCount = getMessageCount(req.query.userId); + res.status(200).send(unreadCount.toString()); +}); + +// left here until the cache expires +app.post("/usage-end", cors(), function (req, res) { + res.statusCode = 200; + res.end(); +}); + +app.use(express.static("dist")); + +server.listen(PORT, () => { + console.log(`Server is running on port ${PORT}`); +}); +startBot(); diff --git a/package.json b/package.json index 10b9d425..598998c4 100644 --- a/package.json +++ b/package.json @@ -36,9 +36,10 @@ "preact": "^7.1.0", "request": "^2.79.0", "shx": "^0.2.2", - "socket.io": "^1.7.3", - "socket.io-client": "^1.7.3", + "socket.io": "^4.8.0", + "socket.io-client": "^4.8.0", "store": "^1.3.20", + "telegraf": "^4.16.3", "webpack": "^1.14.0" } } diff --git a/server.js b/server.js index 36cdd227..d6bd8506 100644 --- a/server.js +++ b/server.js @@ -1,199 +1,122 @@ -const request = require('request'); -const compression = require('compression'); -const cors = require('cors'); -const express = require('express'); -const bodyParser = require('body-parser'); +const request = require("request"); +const compression = require("compression"); +const cors = require("cors"); +const express = require("express"); +const bodyParser = require("body-parser"); +const { sendMessageToUser, onConnectionStart } = require("./helpers/socket"); const app = express(); -const http = require('http').Server(app); -const io = require('socket.io')(http); +const http = require("http").Server(app); if (!process.env.TELEGRAM_TOKEN) { - console.error('TELEGRAM_TOKEN not provided'); + console.error("TELEGRAM_TOKEN not provided"); process.exit(1); } -const connectedSockets = {}; -const messageBuffer = {}; -app.use(express.static('dist', { index: 'demo.html', maxage: '4h' })); +app.use(express.static("dist", { index: "demo.html", maxage: "4h" })); app.use(bodyParser.json()); // handle admin Telegram messages -app.post('/hook', function(req, res) { +app.post("/hook", function (req, res) { try { const message = req.body.message || req.body.channel_post; const chatId = message.chat.id; - const name = message.chat.first_name || message.chat.title || 'admin'; - const text = message.text || ''; + const name = message.chat.first_name || message.chat.title || "admin"; + const text = message.text || ""; const reply = message.reply_to_message; const from = message.from.username; res.statusCode = 200; - if (text.startsWith('/start')) { - console.log('/start chatId ' + chatId); + if (text.startsWith("/start")) { + console.log("/start chatId " + chatId); sendTelegramMessage( chatId, - '*Welcome to Intergram* \n' + - 'Your unique chat id is `' + + "*Welcome to Intergram* \n" + + "Your unique chat id is `" + chatId + - '`\n' + - 'Use it to link between the embedded chat and this telegram chat', - 'Markdown' + "`\n" + + "Use it to link between the embedded chat and this telegram chat", + "Markdown" ); } else if (reply) { - let replyText = reply.text || ''; + let replyText = reply.text || ""; // check if a reply to someone known const userIdMatch = replyText.match(/^\[(.+)\]/); if (userIdMatch) { const userId = userIdMatch[1]; - // check if connected, if not then buffer - if (connectedSockets[userId]) { - console.log('client connected sending message'); - const sock = connectedSockets[userId]; - sock.emit(chatId + '-' + userId, { + sendMessageToUser({ + chatId, + userId, + message: { name, text, - from: 'admin', - adminName: from - }); - } else { - if (!messageBuffer[userId]) { - messageBuffer[userId] = []; - } - console.log('client not connected buffering message'); - messageBuffer[userId].unshift({ - chatId, - name, - text, - from: 'admin', - adminName: from - }); - } + from: "admin", + }, + }); + // // check if connected, if not then buffer + // if (connectedSockets[userId]) { + // console.log("client connected sending message"); + // const sock = connectedSockets[userId]; + // sock.emit(chatId + "-" + userId, { + // name, + // text, + // from: "admin", + // adminName: from, + // }); + // } else { + // if (!messageBuffer[userId]) { + // messageBuffer[userId] = []; + // } + // console.log("client not connected buffering message"); + // messageBuffer[userId].unshift({ + // chatId, + // name, + // text, + // from: "admin", + // adminName: from, + // }); + // } } } } catch (e) { - console.error('hook error', e, req.body); + console.error("hook error", e, req.body); } finally { res.end(); } }); -// handle chat visitors websocket messages -io.on('connection', function(client) { - const address = client.handshake.address.replace('::ffff:', ''); - client.on('register', function(registerMsg) { - const { - isNewUser, - chatId, - userId, - oldId, - userData, - currentUrl - } = registerMsg; - console.log('register user', userId); - connectedSockets[userId] = client; - let messageReceived = false; - // check the buffer and send anything in there - if (messageBuffer[userId]) { - const buffered = messageBuffer[userId]; - let msg = buffered.pop(); - console.log(`sending ${buffered.length} buffered messages`); - while (msg) { - const { chatId, name, text, from, adminName } = msg; - client.emit(chatId + '-' + userId, { - name, - text, - from, - adminName - }); - msg = buffered.pop(); - } - delete messageBuffer[userId]; - } - - console.log('userId ' + userId + ' connected to chatId ' + chatId); - - if (oldId) { - sendMessage( - chatId, - userId, - `Lead ${oldId} has logged in as ${userData.email}` - ).then(() => { - return sendStartMessage(chatId, { ...userData, currentUrl }); - }); - } - client.on('message', function(data) { - if (data.action === 'typing') { - return setTyping(chatId); - } - const { msg } = data; - return Promise.resolve() - .then(() => { - if (isNewUser && !messageReceived) { - // enrich user data - return getIpAddressGeo(address).then(location => { - console.log('sending start msg'); - return sendStartMessage(chatId, { - ...userData, - location, - currentUrl - }); - }); - } - }) - .then(() => { - messageReceived = true; - client.emit(chatId + '-' + userId, msg); - return sendMessage( - chatId, - userId, - msg.text, - userData ? userData.email : '' - ); - }); - }); - - client.on('disconnect', function() { - if (messageReceived) { - sendTelegramMessage(chatId, userId + ' has left'); - } - delete connectedSockets[userId]; - }); - }); -}); - -function sendStartMessage(chatId, userData = {}) { - const { id, name, email, provider, location, currentUrl } = userData; - console.log(userData); - const isLead = !email; - let text = ''; - - if (isLead) { - text = `New Lead -URL:\t ${currentUrl || 'unknown'} -`; - } else { - text = `A user has started a chat. -ID:\t ${id} -Email:\t ${email} -Location:\t ${location || 'unknown'} -URL:\t ${currentUrl || 'unknown'} -Stripe:\t https://dashboard.stripe.com/search?query=${email} -`; - } - text = `${text}`; - return sendTelegramMessage(chatId, text, 'HTML'); -} - -function sendMessage(chatId, userId, text, email = '') { - return sendTelegramMessage( - chatId, - `[${userId}] ${email}:\n${text}`, - 'HTML' - ); -} - -app.post('/usage-start', cors(), function(req, res) { - console.log('usage from', req.query.host); +// function sendStartMessage(chatId, userData = {}) { +// const { id, name, email, provider, location, currentUrl } = userData; +// console.log(userData); +// const isLead = !email; +// let text = ""; + +// if (isLead) { +// text = `New Lead +// URL:\t ${currentUrl || "unknown"} +// `; +// } else { +// text = `A user has started a chat. +// ID:\t ${id} +// Email:\t ${email} +// Location:\t ${location || "unknown"} +// URL:\t ${currentUrl || "unknown"} +// Stripe:\t https://dashboard.stripe.com/search?query=${email} +// `; +// } +// text = `${text}`; +// return sendTelegramMessage(chatId, text, "HTML"); +// } + +// function sendMessage(chatId, userId, text, email = "") { +// return sendTelegramMessage( +// chatId, +// `[${userId}] ${email}:\n${text}`, +// "HTML" +// ); +// } + +app.post("/usage-start", cors(), function (req, res) { + console.log("usage from", req.query.host); let unreadCount = 0; if (messageBuffer[req.query.userId]) { unreadCount = messageBuffer[req.query.userId].length; @@ -202,7 +125,7 @@ app.post('/usage-start', cors(), function(req, res) { res.status(200).send(unreadCount.toString()); }); -app.post('/unreads', cors(), function(req, res) { +app.post("/unreads", cors(), function (req, res) { let unreadCount = 0; if (messageBuffer[req.query.userId]) { unreadCount = messageBuffer[req.query.userId].length; @@ -212,98 +135,73 @@ app.post('/unreads', cors(), function(req, res) { }); // left here until the cache expires -app.post('/usage-end', cors(), function(req, res) { +app.post("/usage-end", cors(), function (req, res) { res.statusCode = 200; res.end(); }); -http.listen(process.env.PORT || 3000, function() { - console.log('listening on port:' + (process.env.PORT || 3000)); +http.listen(process.env.PORT || 3000, function () { + console.log("listening on port:" + (process.env.PORT || 3000)); }); -app.get('/.well-known/acme-challenge/:content', (req, res) => { +app.get("/.well-known/acme-challenge/:content", (req, res) => { res.send(process.env.CERTBOT_RESPONSE); }); -function getIpAddressGeo(ip) { - return new Promise((resolve, reject) => { - request.get( - `https://api.ipgeolocation.io/ipgeo?apiKey=${ - process.env.GEO_KEY - }&ip=${ip}`, - (err, resp, body) => { - if (err) { - console.log(body); - return reject(err); - } - console.log(body); - resolve(JSON.parse(body).country_name); - } - ); - }); -} - -function setTyping(chatId) { - return new Promise((resolve, reject) => { - request - .post( - 'https://api.telegram.org/bot' + - process.env.TELEGRAM_TOKEN + - '/sendChatAction', - function(err, resp, body) { - if (err) { - console.error(err); - return reject(err); - } - resolve(body); - } - ) - .form({ - chat_id: chatId, - action: 'typing' - }); - }); -} - -function sendTelegramMessage(chatId, text, parseMode) { - const url = - 'https://api.telegram.org/bot' + - process.env.TELEGRAM_TOKEN + - '/sendMessage'; - - return new Promise((resolve, reject) => { - request - .post(url, function(err, resp, body) { - if (err) { - console.error(err); - return reject(err); - } - resolve(body); - }) - .form({ - chat_id: chatId, - text: text, - parse_mode: parseMode - }); - }); -} - -process.on('uncaughtException', error => { - sendTelegramMessage( - '-388078727', - `Server uncaught exception: -${error.toString()} -` - ); - console.error(error); -}); - -process.on('unhandledRejection', error => { - sendTelegramMessage( - '-388078727', - `Server unhandled rejection: -${error.toString()} -` - ); - console.error(error); -}); +// function getIpAddressGeo(ip) { +// return new Promise((resolve, reject) => { +// request.get( +// `https://api.ipgeolocation.io/ipgeo?apiKey=${process.env.GEO_KEY}&ip=${ip}`, +// (err, resp, body) => { +// if (err) { +// console.log(body); +// return reject(err); +// } +// console.log(body); +// resolve(JSON.parse(body).country_name); +// } +// ); +// }); +// } + +// function setTyping(chatId) { +// return new Promise((resolve, reject) => { +// request +// .post( +// "https://api.telegram.org/bot" + +// process.env.TELEGRAM_TOKEN + +// "/sendChatAction", +// function (err, resp, body) { +// if (err) { +// console.error(err); +// return reject(err); +// } +// resolve(body); +// } +// ) +// .form({ +// chat_id: chatId, +// action: "typing", +// }); +// }); +// } + +// process.on("uncaughtException", (error) => { +// sendTelegramMessage( +// "-388078727", +// `Server uncaught exception: +// ${error.toString()} +// ` +// ); +// console.error(error); +// }); + +// process.on("unhandledRejection", (error) => { +// sendTelegramMessage( +// "-388078727", +// `Server unhandled rejection: +// ${error.toString()} +// ` +// ); +// console.error(error); +// }); diff --git a/src/chat/chat.js b/src/chat/chat.js index 415b0b86..2c3f2d2b 100644 --- a/src/chat/chat.js +++ b/src/chat/chat.js @@ -1,12 +1,12 @@ -import * as store from 'store'; +import * as store from "store"; -import { Component, h } from 'preact'; +import { Component, h } from "preact"; -import MessageArea from './message-area'; -import io from 'socket.io-client'; +import MessageArea from "./message-area"; +import io from "socket.io-client"; export default class Chat extends Component { - autoResponseState = 'pristine'; // pristine, set or canceled + autoResponseState = "pristine"; // pristine, set or canceled autoResponseTimer = 0; constructor(props) { @@ -24,28 +24,28 @@ export default class Chat extends Component { } componentDidMount() { - this.socket = io.connect(); - const oldId = store.get('oldId'); - this.socket.on('connect', () => { - this.socket.emit('register', { + this.socket = io(); + const oldId = store.get("oldId"); + this.socket.on("connect", () => { + this.socket.emit("register", { chatId: this.props.chatId, userId: this.props.userId, isNewUser: this.props.isNewUser, userData: this.props.conf.userData, currentUrl: this.props.conf.url, - oldId + oldId, }); }); - store.set('oldId', null); + store.set("oldId", null); this.socket.on( - this.props.chatId + '-' + this.props.userId, + this.props.chatId + "-" + this.props.userId, this.incomingMessage ); if (!this.state.messages.length) { this.writeToMessages({ text: this.props.conf.introMessage, - from: 'admin' + from: "admin", }); } } @@ -70,24 +70,24 @@ export default class Chat extends Component { handleKeyPress = (e) => { let message; let timeout; - const now = new Date().toLocaleString('en-US', { - timeZone: 'Asia/Singapore' + const now = new Date().toLocaleString("en-US", { + timeZone: "Asia/Singapore", }); let hours = new Date(now).getHours(); const isNightTime = hours < 8 && hours > 11; - this.socket.send({ action: 'typing' }); + this.socket.send({ action: "typing" }); if (e.keyCode == 13 && this.input.value) { let text = this.input.value; this.socket.send({ - action: 'message', + action: "message", msg: { text, - from: 'visitor' + from: "visitor", }, - userData: this.props.conf.userData + userData: this.props.conf.userData, }); - this.input.value = ''; - if (this.autoResponseState === 'pristine') { + this.input.value = ""; + if (this.autoResponseState === "pristine") { if (isNightTime) { timeout = 1000; message = `(Auto message) It's night time right now and we're probably asleep, please leave your email so we can contact you later, or fill out the form here.`; @@ -98,24 +98,24 @@ export default class Chat extends Component { this.autoResponseTimer = setTimeout(() => { this.writeToMessages({ text: message, - from: 'admin' + from: "admin", }); - this.autoResponseState = 'canceled'; + this.autoResponseState = "canceled"; }, timeout); // 2 MINUTES - this.autoResponseState = 'set'; + this.autoResponseState = "set"; } } }; incomingMessage = (msg) => { this.writeToMessages(msg); - if (msg.from === 'admin') { - document.getElementById('messageSound').play(); + if (msg.from === "admin") { + document.getElementById("messageSound").play(); - if (this.autoResponseState === 'pristine') { - this.autoResponseState = 'canceled'; - } else if (this.autoResponseState === 'set') { - this.autoResponseState = 'canceled'; + if (this.autoResponseState === "pristine") { + this.autoResponseState = "canceled"; + } else if (this.autoResponseState === "set") { + this.autoResponseState = "canceled"; clearTimeout(this.autoResponseTimer); } } @@ -133,7 +133,7 @@ export default class Chat extends Component { return; } this.setState({ - message: this.state.messages.push(msg) + message: this.state.messages.push(msg), }); if (store.enabled) { @@ -142,7 +142,7 @@ export default class Chat extends Component { messages.push(msg); }); } catch (e) { - console.log('failed to add new message to local storage', e); + console.log("failed to add new message to local storage", e); store.set(this.messagesKey, []); } } diff --git a/src/chat/message-area.js b/src/chat/message-area.js index 6d9b5e59..e59eba64 100644 --- a/src/chat/message-area.js +++ b/src/chat/message-area.js @@ -11,7 +11,7 @@ const admins = { jivings: jamesImg, dinkydani: danielleImg, jameswilliamr: otterImg, - admin: lmaImg + admin: lmaImg, }; export default class MessageArea extends Component { componentDidMount() { @@ -27,37 +27,43 @@ export default class MessageArea extends Component { return (
    { + ref={(r) => { this.ref = r; }} > - {props.messages.map(({ name, text, from, time, adminName = 'admin' }) => { - const renderedMsg = md.render(text); - console.log(renderedMsg); - const isAdmin = from !== "visitor"; - return ( -
  1. - {admins[adminName] ? ( -
    - admin-image -
    - ) : null} - -
    -
    - {props.conf.displayMessageTime ? ( -
    - {currentTime - new Date(time) < dayInMillis - ? dateFormat(time, "HH:MM") - : dateFormat(time, "m/d/yy HH:MM")} + {props.messages.map( + ({ name, text, from, time, adminName = "admin" }) => { + const renderedMsg = md.render(text); + console.log(renderedMsg); + const isAdmin = from !== "visitor"; + return ( +
  2. + {admins[adminName] ? ( +
    + admin-image
    ) : ( - "" +
    + admin-image +
    )} - -
  3. - ); - })} + +
    +
    + {props.conf.displayMessageTime ? ( +
    + {currentTime - new Date(time) < dayInMillis + ? dateFormat(time, "HH:MM") + : dateFormat(time, "m/d/yy HH:MM")} +
    + ) : ( + "" + )} +
    + + ); + } + )}
); } diff --git a/yarn.lock b/yarn.lock index 0aa9d98b..91df394e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,28 @@ # yarn lockfile v1 +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz#821f8442f4175d8f0467b9daf26e3a18e2d02af2" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== + +"@telegraf/types@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@telegraf/types/-/types-7.1.0.tgz#d8bd9b2f5070b4de46971416e890338cd89fc23d" + integrity sha512-kGevOIbpMcIlCDeorKGpwZmdH7kHbqlk/Yj6dEpJMKEQw5lk0KVQY0OLXaCswy8GqlIVLd5625OB+rAntP9xVw== + +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/cors@^2.8.12": + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + dependencies: + "@types/node" "*" + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -26,18 +48,24 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.4.tgz#64db61e0359eb5a8d99b55e05c729f130a678b04" integrity sha512-W0+n1Y+gK/8G2P/piTkBBN38Qc5Q1ZSO6B5H3QmPCUewaiXOo2GCAWZ4ElZCcNhjJuBSUSLGFUJnmlCn5+nxOQ== +"@types/node@>=10.0.0": + version "22.7.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.4.tgz#e35d6f48dca3255ce44256ddc05dee1c23353fcc" + integrity sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg== + dependencies: + undici-types "~6.19.2" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" - integrity sha1-w8p0NJOGSMPg2cHjKN1otiLChMo= +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: - mime-types "~2.1.11" - negotiator "0.6.1" + event-target-shim "^5.0.0" accepts@~1.1.3: version "1.1.4" @@ -72,11 +100,6 @@ acorn@^5.3.0, acorn@^5.5.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -251,11 +274,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arraybuffer.slice@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" - integrity sha1-8zshWfBTKj8xB6JywMz70a0peco= - asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1049,30 +1067,20 @@ babylon@^6.0.18, babylon@^6.18.0: resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== base@^0.11.1: version "0.11.2" @@ -1099,13 +1107,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - bfj-node4@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/bfj-node4/-/bfj-node4-5.3.1.tgz#e23d8b27057f1d0214fc561142ad9db998f26830" @@ -1125,11 +1126,6 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -blob@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" - integrity sha1-vPEwUspURj8w+fx+lbmkdjCpSSE= - bluebird@^3.5.1: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" @@ -1210,6 +1206,24 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1266,11 +1280,6 @@ caller-path@^0.1.0: dependencies: callsites "^0.2.0" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" @@ -1461,31 +1470,11 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" - integrity sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - compressible@~2.0.16: version "2.0.17" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" @@ -1582,16 +1571,16 @@ cookie@0.1.2: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.2.tgz#72fec3d24e48a3432073d90c12642005061004b1" integrity sha1-cv7D0k5Io0Mgc9kMEmQgBQYQBLE= -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - cookie@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -1607,7 +1596,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -cors@^2.8.1: +cors@^2.8.1, cors@~2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== @@ -1666,20 +1655,6 @@ dateformat@^2.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI= -debug@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo= - dependencies: - ms "0.7.1" - -debug@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" - integrity sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w= - dependencies: - ms "0.7.2" - debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -1701,6 +1676,13 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" +debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + debug@~2.1.0: version "2.1.3" resolved "https://registry.yarnpkg.com/debug/-/debug-2.1.3.tgz#ce8ab1b5ee8fbee2bfa3b633cab93d366b63418e" @@ -1914,47 +1896,37 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -engine.io-client@~1.8.4: - version "1.8.5" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.5.tgz#fe7fb60cb0dcf2fa2859489329cb5968dedeb11f" - integrity sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "2.3.3" - engine.io-parser "1.3.2" - has-cors "1.1.0" - indexof "0.0.1" - parsejson "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~1.1.5" - xmlhttprequest-ssl "1.5.3" - yeast "0.1.2" - -engine.io-parser@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" - integrity sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo= - dependencies: - after "0.8.2" - arraybuffer.slice "0.0.6" - base64-arraybuffer "0.1.5" - blob "0.0.4" - has-binary "0.1.7" - wtf-8 "1.0.0" - -engine.io@~1.8.4: - version "1.8.5" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.5.tgz#4ebe5e75c6dc123dee4afdce6e5fdced21eb93f6" - integrity sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A== - dependencies: - accepts "1.3.3" - base64id "1.0.0" - cookie "0.3.1" - debug "2.3.3" - engine.io-parser "1.3.2" - ws "~1.1.5" +engine.io-client@~6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.6.1.tgz#28a9cc4e90d448e1d0ba9369ad08a7af82f9956a" + integrity sha512-aYuoak7I+R83M/BBPIOs2to51BmFIpC1wZe6zZzMrT2llVsHy5cvcmdsJgP2Qz6smHu+sD9oexiSUAVd8OfBPw== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.17.1" + xmlhttprequest-ssl "~2.1.1" + +engine.io-parser@~5.2.1: + version "5.2.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" + integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== + +engine.io@~6.6.0: + version "6.6.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.1.tgz#a82b1e5511239a0e95fac14516870ee9138febc8" + integrity sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og== + dependencies: + "@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.2.1" + ws "~8.17.1" enhanced-resolve@~0.9.0: version "0.9.1" @@ -2172,6 +2144,11 @@ event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" @@ -2704,18 +2681,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-binary@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" - integrity sha1-aOYesWIQyVRaClzOBqhzkS/h5ow= - dependencies: - isarray "0.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -3266,11 +3231,6 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -3358,11 +3318,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= - json3@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" @@ -3647,7 +3602,7 @@ mime-db@~1.12.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" integrity sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc= -mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.24" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== @@ -3738,6 +3693,11 @@ mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: dependencies: minimist "0.0.8" +mri@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + ms@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.6.2.tgz#d89c2124c6fdc1353d65a8b77bf1aac4b193708c" @@ -3748,16 +3708,6 @@ ms@0.7.0: resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.0.tgz#865be94c2e7397ad8a57da6a633a6e2f30798b83" integrity sha1-hlvpTC5zl62KV9pqYzpuLzB5i4M= -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg= - -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - integrity sha1-riXPJRKziFodldfwN4aNhDESR2U= - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3773,6 +3723,11 @@ ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -3832,11 +3787,6 @@ negotiator@0.4.9: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f" integrity sha1-kuRrbbU8fkIe1koryU8IvnYw3z8= -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -3852,6 +3802,13 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-fetch@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-forge@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a" @@ -3962,21 +3919,11 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" - integrity sha1-ejs9DpgGPUP0wD8uiubNUahog6A= - object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= - object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -4086,11 +4033,6 @@ optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -options@>=0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" - integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= - original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -4171,6 +4113,11 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-timeout@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-4.1.0.tgz#788253c0452ab0ffecf18a62dff94ff1bd09ca0a" + integrity sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw== + p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -4191,27 +4138,6 @@ parse-glob@^3.0.4: is-extglob "^1.0.0" is-glob "^2.0.0" -parsejson@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" - integrity sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs= - dependencies: - better-assert "~1.0.0" - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= - dependencies: - better-assert "~1.0.0" - parseurl@~1.3.0, parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4772,6 +4698,13 @@ safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-compare@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/safe-compare/-/safe-compare-1.1.4.tgz#5e0128538a82820e2e9250cd78e45da6786ba593" + integrity sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ== + dependencies: + buffer-alloc "^1.2.0" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -4784,6 +4717,11 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sandwich-stream@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/sandwich-stream/-/sandwich-stream-2.0.2.tgz#6d1feb6cf7e9fe9fadb41513459a72c2e84000fa" + integrity sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ== + sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -4998,53 +4936,44 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -socket.io-adapter@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" - integrity sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s= +socket.io-adapter@~2.5.2: + version "2.5.5" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz#c7a1f9c703d7756844751b6ff9abfc1780664082" + integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg== dependencies: - debug "2.3.3" - socket.io-parser "2.3.1" + debug "~4.3.4" + ws "~8.17.1" -socket.io-client@1.7.4, socket.io-client@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.4.tgz#ec9f820356ed99ef6d357f0756d648717bdd4281" - integrity sha1-7J+CA1btme9tNX8HVtZIcXvdQoE= - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "2.3.3" - engine.io-client "~1.8.4" - has-binary "0.1.7" - indexof "0.0.1" - object-component "0.0.3" - parseuri "0.0.5" - socket.io-parser "2.3.1" - to-array "0.1.4" +socket.io-client@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.8.0.tgz#2ea0302d0032d23422bd2860f78127a800cad6a2" + integrity sha512-C0jdhD5yQahMws9alf/yvtsMGTaIDBnZ8Rb5HU56svyq0l5LIrGzIDZZD5pHQlmzxLuU91Gz+VpQMKgCTNYtkw== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.2" + engine.io-client "~6.6.1" + socket.io-parser "~4.2.4" -socket.io-parser@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" - integrity sha1-3VMgJRA85Clpcya+/WQAX8/ltKA= +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== dependencies: - component-emitter "1.1.2" - debug "2.2.0" - isarray "0.0.1" - json3 "3.3.2" + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" -socket.io@^1.7.3: - version "1.7.4" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.4.tgz#2f7ecedc3391bf2d5c73e291fe233e6e34d4dd00" - integrity sha1-L37O3DORvy1cc+KR/iM+bjTU3QA= +socket.io@^4.8.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.0.tgz#33d05ae0915fad1670bd0c4efcc07ccfabebe3b1" + integrity sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA== dependencies: - debug "2.3.3" - engine.io "~1.8.4" - has-binary "0.1.7" - object-assign "4.1.0" - socket.io-adapter "0.5.0" - socket.io-client "1.7.4" - socket.io-parser "2.3.1" + accepts "~1.3.4" + base64id "~2.0.0" + cors "~2.8.5" + debug "~4.3.2" + engine.io "~6.6.0" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" sockjs-client@1.3.0: version "1.3.0" @@ -5314,6 +5243,20 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +telegraf@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/telegraf/-/telegraf-4.16.3.tgz#f03fa30482b540a7f9895af8f13ec8f432840a66" + integrity sha512-yjEu2NwkHlXu0OARWoNhJlIjX09dRktiMQFsM678BAH/PEPVwctzL67+tvXqLCRQQvm3SDtki2saGO9hLlz68w== + dependencies: + "@telegraf/types" "^7.1.0" + abort-controller "^3.0.0" + debug "^4.3.4" + mri "^1.2.0" + node-fetch "^2.7.0" + p-timeout "^4.1.0" + safe-compare "^1.1.4" + sandwich-stream "^2.0.2" + text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -5336,11 +5279,6 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -5389,6 +5327,11 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -5469,10 +5412,10 @@ uglify-to-browserify@~1.0.0: resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= -ultron@1.0.x: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" - integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== union-value@^1.0.0: version "1.0.1" @@ -5618,6 +5561,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webpack-bundle-analyzer@^2.2.1: version "2.13.1" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz#07d2176c6e86c3cdce4c23e56fae2a7b6b4ad526" @@ -5737,6 +5685,14 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -5811,23 +5767,15 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@~1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" - integrity sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w== - dependencies: - options ">=0.0.5" - ultron "1.0.x" - -wtf-8@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" - integrity sha1-OS2LotDxw00e4tYw8V0O+2jhBIo= +ws@~8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== -xmlhttprequest-ssl@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" - integrity sha1-GFqIjATspGw+QHDZn3tJ3jUomS0= +xmlhttprequest-ssl@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.1.tgz#0d045c3b2babad8e7db1af5af093f5d0d60df99a" + integrity sha512-ptjR8YSJIXoA3Mbv5po7RtSYHO6mZr8s7i5VGmEk7QY2pQWyT1o0N+W1gKbOyJPUCGXGnuw0wqe8f0L6Y0ny7g== xtend@^4.0.0: version "4.0.2" @@ -5879,8 +5827,3 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=