From fe6685468cdf784c69e58aba0edcf87c089229e0 Mon Sep 17 00:00:00 2001 From: marzavec Date: Thu, 21 Dec 2023 23:14:03 -0800 Subject: [PATCH] four new modules --- LICENSE | 21 - commands/admin/removemod.js | 2 +- commands/core/chat.js | 57 +- commands/core/join.js | 2 +- commands/core/morestats.js | 2 +- commands/core/session.js | 34 +- commands/core/updateMessage.js | 49 +- commands/mod/disablecaptcha.js | 86 + commands/mod/dumb.js | 1 + commands/mod/enablecaptcha.js | 279 +++ commands/mod/lockroom.js | 332 +++ commands/mod/speak.js | 3 +- commands/mod/unlockroom.js | 89 + commands/utility/_Text.js | 10 + commands/utility/_UAC.js | 6 +- documentation/admin_addmod.js.html | 4 +- documentation/admin_listusers.js.html | 2 +- documentation/admin_reload.js.html | 5 +- documentation/admin_removemod.js.html | 8 +- documentation/admin_saveconfig.js.html | 6 +- documentation/admin_shout.js.html | 2 +- documentation/core_changecolor.js.html | 2 +- documentation/core_changenick.js.html | 16 +- documentation/core_chat.js.html | 2 +- documentation/core_emote.js.html | 2 +- documentation/core_help.js.html | 2 +- documentation/core_invite.js.html | 2 +- documentation/core_join.js.html | 27 +- documentation/core_morestats.js.html | 2 +- documentation/core_ping.js.html | 2 +- documentation/core_session.js.html | 31 +- documentation/core_stats.js.html | 2 +- documentation/core_whisper.js.html | 2 +- documentation/index.html | 2 +- documentation/internal_disconnect.js.html | 18 +- documentation/internal_socketreply.js.html | 2 +- documentation/mod_ban.js.html | 2 +- documentation/mod_dumb.js.html | 3 +- documentation/mod_forcecolor.js.html | 2 +- documentation/mod_kick.js.html | 2 +- documentation/mod_speak.js.html | 3 +- documentation/mod_unban.js.html | 2 +- documentation/mod_unbanall.js.html | 2 +- documentation/module-addmod.html | 2 +- documentation/module-ban.html | 2 +- documentation/module-changecolor.html | 2 +- documentation/module-changenick.html | 10 +- documentation/module-chat.html | 2 +- documentation/module-disconnect.html | 8 +- documentation/module-dumb.html | 2 +- documentation/module-emote.html | 2 +- documentation/module-forcecolor.html | 2 +- documentation/module-help.html | 2 +- documentation/module-invite.html | 2 +- documentation/module-join.html | 8 +- documentation/module-kick.html | 2 +- documentation/module-listusers.html | 2 +- documentation/module-morestats.html | 2 +- documentation/module-ping.html | 2 +- documentation/module-reload.html | 4 +- documentation/module-removemod.html | 6 +- documentation/module-saveconfig.html | 4 +- documentation/module-session.html | 6 +- documentation/module-shout.html | 2 +- documentation/module-socketreply.html | 2 +- documentation/module-speak.html | 2 +- documentation/module-stats.html | 2 +- documentation/module-unban.html | 2 +- documentation/module-unbanall.html | 2 +- documentation/module-whisper.html | 2 +- documentation/scripts/linenumber.js | 40 +- documentation/scripts/prettify/lang-css.js | 4 +- documentation/scripts/prettify/prettify.js | 153 +- package-lock.json | 2275 ++++++++++---------- package.json | 9 +- scripts/config.js | 4 +- test/changenick.test.js | 14 + test/chat.test.js | 28 + test/disablecaptcha.test.js | 100 + test/dumb.test.js | 151 +- test/enablecaptcha.test.js | 222 ++ test/join.test.js | 19 + test/lockroom.test.js | 413 ++++ test/mockImports.js | 10 + test/speak.test.js | 56 + test/text.test.js | 19 + test/uac.test.js | 4 +- test/unlockroom.test.js | 113 + test/updateMessage.test.js | 233 ++ 89 files changed, 3654 insertions(+), 1429 deletions(-) delete mode 100644 LICENSE create mode 100644 commands/mod/disablecaptcha.js create mode 100644 commands/mod/enablecaptcha.js create mode 100644 commands/mod/lockroom.js create mode 100644 commands/mod/unlockroom.js create mode 100644 test/disablecaptcha.test.js create mode 100644 test/enablecaptcha.test.js create mode 100644 test/lockroom.test.js create mode 100644 test/text.test.js create mode 100644 test/unlockroom.test.js create mode 100644 test/updateMessage.test.js diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f0e18e1..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2022 marzavec - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/commands/admin/removemod.js b/commands/admin/removemod.js index fe7c28c..d01db82 100644 --- a/commands/admin/removemod.js +++ b/commands/admin/removemod.js @@ -48,7 +48,7 @@ export async function run({ for (let i = 0, l = targetMod.length; i < l; i += 1) { // downgrade privileges - targetMod[i].uType = 'user'; /* @legacy */ + targetMod[i].uType = 'user'; targetMod[i].level = levels.default; // inform ex-mod diff --git a/commands/core/chat.js b/commands/core/chat.js index 5ba3dee..8e15539 100644 --- a/commands/core/chat.js +++ b/commands/core/chat.js @@ -6,43 +6,51 @@ * @module chat */ -import { parseText } from '../utility/_Text.js'; +import { + parseText, +} from '../utility/_Text.js'; import { isAdmin, isModerator, } from '../utility/_UAC.js'; +/** + * Maximum length of the customId property + * @type {number} + */ export const MAX_MESSAGE_ID_LENGTH = 6; + /** - * The time in milliseconds before a message is considered stale, and thus no longer allowed - * to be edited. - * @type {number} - */ + * The time in milliseconds before a message is considered stale, and thus no longer allowed + * to be edited. + * @type {number} + */ const ACTIVE_TIMEOUT = 5 * 60 * 1000; + /** - * The time in milliseconds that a check for stale messages should be performed. - * @type {number} - */ + * The time in milliseconds that a check for stale messages should be performed. + * @type {number} + */ const TIMEOUT_CHECK_INTERVAL = 30 * 1000; /** - * Stores active messages that can be edited. - * @type {{ customId: string, userid: number, sent: number }[]} - */ + * Stores active messages that can be edited. + * @type {{ customId: string, userid: number, sent: number }[]} + */ export const ACTIVE_MESSAGES = []; /** - * Cleans up stale messages. - * @public - * @return {void} - */ + * Cleans up stale messages. + * @public + * @return {void} + */ export function cleanActiveMessages() { const now = Date.now(); - for (let i = 0; i < ACTIVE_MESSAGES.length; i++) { + for (let i = 0; i < ACTIVE_MESSAGES.length; i += 1) { const message = ACTIVE_MESSAGES[i]; if (now - message.sent > ACTIVE_TIMEOUT || message.toDelete) { ACTIVE_MESSAGES.splice(i, 1); - i--; + i -= 1; } } } @@ -51,12 +59,12 @@ export function cleanActiveMessages() { setInterval(cleanActiveMessages, TIMEOUT_CHECK_INTERVAL); /** - * Adds a message to the active messages map. - * @public - * @param {string} id - * @param {number} userid - * @return {void} - */ + * Adds a message to the active messages map. + * @public + * @param {string} id + * @param {number} userid + * @return {void} + */ export function addActiveMessage(customId, userid) { ACTIVE_MESSAGES.push({ customId, @@ -93,7 +101,7 @@ export async function run({ }, socket); } - const customId = payload.customId; + const { customId } = payload; if (typeof (customId) === 'string' && customId.length > MAX_MESSAGE_ID_LENGTH) { // There's a limit on the custom id length. @@ -127,6 +135,7 @@ export async function run({ } addActiveMessage(outgoingPayload.customId, socket.userid); + // broadcast to channel peers server.broadcast(outgoingPayload, { channel: socket.channel }); diff --git a/commands/core/join.js b/commands/core/join.js index 8956376..6e327bd 100644 --- a/commands/core/join.js +++ b/commands/core/join.js @@ -49,7 +49,7 @@ export async function run({ } // `join` is the legacy entry point, check if it needs to be upgraded - if (typeof socket.hcProtocol === 'undefined') { + if (typeof socket.hcProtocol === 'undefined' || socket.hcProtocol === 1) { payload = upgradeLegacyJoin(server, socket, payload); } diff --git a/commands/core/morestats.js b/commands/core/morestats.js index 93cdc5c..02ea8af 100644 --- a/commands/core/morestats.js +++ b/commands/core/morestats.js @@ -37,7 +37,7 @@ export async function run({ core, server, socket }) { // gather connection and channel count const ips = {}; const channels = {}; - // @todo use public channels from core.appConfig.data + // @todo use public channel flag const publicChanCounts = { lounge: 0, meta: 0, diff --git a/commands/core/session.js b/commands/core/session.js index eebed57..5be594a 100644 --- a/commands/core/session.js +++ b/commands/core/session.js @@ -2,9 +2,9 @@ /** * @author Marzavec ( https://github.com/marzavec ) - * @summary Restore session + * @summary Create or restore session * @version 1.0.0 - * @description Restore previous state by session + * @description Restore previous state by session or create new session * @module session */ @@ -24,9 +24,9 @@ import { const SessionLocation = './session.key'; /** - * Get a fresh session string for target socket - * @param {Object} socket - * @param {Object} core + * Get a new json web token for the provided socket + * @param {*} socket + * @param {*} core * @returns {object} */ export function getSession(socket, core) { @@ -39,7 +39,7 @@ export function getSession(socket, core) { nick: socket.nick, trip: socket.trip, userid: socket.userid, - uType: socket.uType, /* @legacy */ + uType: socket.uType, muzzled: socket.muzzled || false, banned: socket.banned || false, }, core.sessionKey, { @@ -49,8 +49,8 @@ export function getSession(socket, core) { /** * Reply to target socket with session failure notice - * @param {Object} server - * @param {Object} socket + * @param {*} server + * @param {*} socket * @returns {boolean} */ function notifyFailure(server, socket) { @@ -136,13 +136,21 @@ export async function run({ socket.nick = session.nick; socket.trip = session.trip; socket.userid = session.userid; - socket.uType = session.uType; /* @legacy */ + socket.uType = session.uType; socket.muzzled = session.muzzled; socket.banned = session.banned; socket.hash = server.getSocketHash(socket); socket.hcProtocol = 2; + // dispatch info + server.reply({ + cmd: 'session', + restored: true, + token: getSession(socket, core), + channels: socket.channels, + }, socket); + for (let i = 0, j = session.channels.length; i < j; i += 1) { restoreJoin({ core, @@ -152,14 +160,6 @@ export async function run({ }, true); } - // dispatch updated session - server.reply({ - cmd: 'session', - restored: true, - token: getSession(socket, core), - channels: socket.channels, - }, socket); - return true; } diff --git a/commands/core/updateMessage.js b/commands/core/updateMessage.js index 880d96c..752ca2b 100644 --- a/commands/core/updateMessage.js +++ b/commands/core/updateMessage.js @@ -1,10 +1,35 @@ -import { parseText } from "../utility/_Text.js"; -import { isAdmin, isModerator } from "../utility/_UAC.js"; -import { ACTIVE_MESSAGES, MAX_MESSAGE_ID_LENGTH } from "./chat.js"; +/** + * @author MinusGix ( https://github.com/MinusGix ) + * @summary Change target message + * @version v1.0.0 + * @description Will alter a previously sent message using that message's customId + * @module updateMessage + */ -export async function run({ core, server, socket, payload }) { +import { + parseText, +} from '../utility/_Text.js'; +import { + isAdmin, + isModerator, +} from '../utility/_UAC.js'; +import { + ACTIVE_MESSAGES, + MAX_MESSAGE_ID_LENGTH, +} from './chat.js'; + +/** + * Executes when invoked by a remote client + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {void} + */ +export async function run({ + server, socket, payload, +}) { // undefined | "overwrite" | "append" | "prepend" | "complete" - let mode = payload.mode; + const { customId } = payload; + let { mode, text } = payload; if (!mode) { mode = 'overwrite'; @@ -14,14 +39,10 @@ export async function run({ core, server, socket, payload }) { return server.police.frisk(socket.address, 13); } - const customId = payload.customId; - - if (!customId || typeof customId !== "string" || customId.length > MAX_MESSAGE_ID_LENGTH) { + if (!customId || typeof customId !== 'string' || customId.length > MAX_MESSAGE_ID_LENGTH) { return server.police.frisk(socket.address, 13); } - let text = payload.text; - if (typeof (text) !== 'string') { return server.police.frisk(socket.address, 13); } @@ -43,7 +64,7 @@ export async function run({ core, server, socket, payload }) { // Or flashing between huge and small. Etc. let message; - for (let i = 0; i < ACTIVE_MESSAGES.length; i++) { + for (let i = 0; i < ACTIVE_MESSAGES.length; i += 1) { const msg = ACTIVE_MESSAGES[i]; if (msg.userid === socket.userid && msg.customId === customId) { @@ -80,6 +101,12 @@ export async function run({ core, server, socket, payload }) { return true; } +/** + * The following payload properties are required to invoke this module: + * "text", "customId" + * @public + * @typedef {Array} addmod/requiredData + */ export const requiredData = ['text', 'customId']; /** diff --git a/commands/mod/disablecaptcha.js b/commands/mod/disablecaptcha.js new file mode 100644 index 0000000..ff310c7 --- /dev/null +++ b/commands/mod/disablecaptcha.js @@ -0,0 +1,86 @@ +/** + * @author Marzavec ( https://github.com/marzavec ) + * @summary Disables the captcha + * @version 1.0.0 + * @description Disables the captcha on the channel specified in the channel property, + * default is current channel + * @module disablecaptcha + */ + +import { + isModerator, +} from '../utility/_UAC.js'; + +/** + * Automatically executes once after server is ready + * @param {Object} core - Reference to core enviroment object + * @public + * @return {void} + */ +export async function init(core) { + if (typeof core.captchas === 'undefined') { + core.captchas = {}; + } +} + +/** + * Executes when invoked by a remote client + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {void} + */ +export async function run({ + core, server, socket, payload, +}) { + // increase rate limit chance and ignore if not admin or mod + if (!isModerator(socket.level)) { + return server.police.frisk(socket.address, 10); + } + + let targetChannel; + + if (typeof payload.channel !== 'string') { + if (typeof socket.channel !== 'string') { // @todo Multichannel + return false; // silently fail + } + + targetChannel = socket.channel; + } else { + targetChannel = payload.channel; + } + + if (!core.captchas[targetChannel]) { + return server.reply({ + cmd: 'info', + text: 'Captcha is not enabled.', + channel: socket.channel, // @todo Multichannel + }, socket); + } + + core.captchas[targetChannel] = false; + + server.broadcast({ + cmd: 'info', + text: `Captcha disabled on: ${targetChannel}`, + channel: false, // @todo Multichannel, false for global info + }, { channel: targetChannel, level: isModerator }); + + return true; +} + +/** + * Module meta information + * @public + * @typedef {Object} disablecaptcha/info + * @property {string} name - Module command name + * @property {string} category - Module category name + * @property {string} description - Information about module + * @property {string} usage - Information about module usage + */ +export const info = { + name: 'disablecaptcha', + category: 'moderators', + description: 'Disables the captcha on the channel specified in the channel property, default is current channel', + usage: ` + API: { cmd: 'disablecaptcha', channel: '' }`, +}; diff --git a/commands/mod/lockroom.js b/commands/mod/lockroom.js new file mode 100644 index 0000000..babcd7e --- /dev/null +++ b/commands/mod/lockroom.js @@ -0,0 +1,332 @@ +/* eslint no-param-reassign: 0 */ + +/** + * @author Marzavec ( https://github.com/marzavec ) + * @summary Locks the channel + * @version 1.0.0 + * @description Locks a channel preventing default levels from joining + * @module lockroom + */ + +import { + levels, + isTrustedUser, + isModerator, + verifyNickname, + getUserPerms, +} from '../utility/_UAC.js'; +import { + upgradeLegacyJoin, + legacyLevelToLabel, +} from '../utility/_LegacyFunctions.js'; +import { + Errors, +} from '../utility/_Constants.js'; +import { + canJoinChannel, +} from '../utility/_Channels.js'; + +const danteQuotes = [ + 'Do not be afraid; our fate cannot be taken from us; it is a gift.', + 'In the middle of the journey of our life I found myself within a dark woods where the straight way was lost.', + 'There is no greater sorrow then to recall our times of joy in wretchedness.', + 'They yearn for what they fear for.', + 'Through me you go into a city of weeping; through me you go into eternal pain; through me you go amongst the lost people', + 'From there we came outside and saw the stars', + 'But the stars that marked our starting fall away. We must go deeper into greater pain, for it is not permitted that we stay.', + 'Hope not ever to see Heaven. I have come to lead you to the other shore; into eternal darkness; into fire and into ice.', + 'As little flowers, which the chill of night has bent and huddled, when the white sun strikes, grow straight and open fully on their stems, so did I, too, with my exhausted force.', + 'At grief so deep the tongue must wag in vain; the language of our sense and memory lacks the vocabulary of such pain.', + 'Thence we came forth to rebehold the stars.', + 'He is, most of all, l\'amor che move il sole e l\'altre stelle.', + 'The poets leave hell and again behold the stars.', + 'One ought to be afraid of nothing other then things possessed of power to do us harm, but things innoucuous need not be feared.', + 'As phantoms frighten beasts when shadows fall.', + 'We were men once, though we\'ve become trees', + 'Here pity only lives when it is dead', + 'Lasciate ogne speranza, voi ch\'intrate.', + 'There is no greater sorrow than thinking back upon a happy time in misery', + 'My thoughts were full of other things When I wandered off the path.', +]; + +/** + * Automatically executes once after server is ready + * @param {Object} core - Reference to core enviroment object + * @public + * @return {void} + */ +export async function init(core) { + if (typeof core.locked === 'undefined') { + core.locked = {}; + } +} + +/** + * Executes when invoked by a remote client + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {void} + */ +export async function run({ + core, server, socket, payload, +}) { + // increase rate limit chance and ignore if not admin or mod + if (!isModerator(socket.level)) { + return server.police.frisk(socket.address, 10); + } + + let targetChannel; + + if (typeof payload.channel !== 'string') { + if (typeof socket.channel !== 'string') { // @todo Multichannel + return false; // silently fail + } + + targetChannel = socket.channel; + } else { + targetChannel = payload.channel; + } + + if (core.locked[targetChannel]) { + return server.reply({ + cmd: 'info', + text: 'Channel is already locked.', + channel: socket.channel, // @todo Multichannel + }, socket); + } + + // apply lock flag to channel list + core.locked[targetChannel] = true; + + // inform mods + server.broadcast({ + cmd: 'info', + text: `Channel: ?${targetChannel} lock enabled by [${socket.trip}]${socket.nick}`, + channel: false, // @todo Multichannel, false for global info + }, { level: isModerator }); + + return true; +} + +/** + * Automatically executes once after server is ready to register this modules hooks + * @param {Object} server - Reference to server enviroment object + * @public + * @return {void} + */ +export function initHooks(server) { + server.registerHook('in', 'changenick', this.changeNickCheck.bind(this), 1); + server.registerHook('in', 'whisper', this.whisperCheck.bind(this), 1); + server.registerHook('in', 'chat', this.chatCheck.bind(this), 1); + server.registerHook('in', 'invite', this.inviteCheck.bind(this), 1); + server.registerHook('in', 'join', this.joinCheck.bind(this), 1); +} + +/** + * Executes every time an incoming changenick command is invoked; + * hook incoming changenick commands, reject them if the channel is 'purgatory' + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {{Object|boolean|string}} Object = same/altered payload, + * false = suppress action, + * string = error + */ +export function changeNickCheck({ + socket, payload, +}) { + if (socket.channel === 'purgatory') { // @todo Multichannel update + return false; + } + + return payload; +} + +/** + * Executes every time an incoming whisper command is invoked; + * hook incoming whisper commands, reject them if the channel is 'purgatory' + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {{Object|boolean|string}} Object = same/altered payload, + * false = suppress action, + * string = error + */ +export function whisperCheck({ + socket, payload, +}) { + if (socket.channel === 'purgatory') { // @todo Multichannel update + return false; + } + + return payload; +} + +/** + * Executes every time an incoming chat command is invoked; + * hook incoming chat commands, reject them if the channel is 'purgatory' + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {{Object|boolean|string}} Object = same/altered payload, + * false = suppress action, + * string = error + */ +export function chatCheck({ + socket, payload, +}) { + if (socket.channel === 'purgatory') { + if (socket.level >= levels.moderator) { + return payload; + } + + return false; + } + + return payload; +} + +/** + * Executes every time an incoming invite command is invoked; + * hook incoming invite commands, reject them if the channel is 'purgatory' + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {{Object|boolean|string}} Object = same/altered payload, + * false = suppress action, + * string = error + */ +export function inviteCheck({ + socket, payload, +}) { + if (socket.channel === 'purgatory') { + return false; + } + + return payload; +} + +/** + * Executes every time an incoming join command is invoked; + * hook incoming join commands, shunt them to purgatory if needed + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {{Object|boolean|string}} Object = same/altered payload, + * false = suppress action, + * string = error + */ +export function joinCheck({ + core, server, socket, payload, +}) { + // check if target channel is locked + if (typeof core.locked[payload.channel] === 'undefined' || core.locked[payload.channel] !== true) { + if (payload.channel !== 'purgatory') { + return payload; + } + } + + // `join` is the legacy entry point, check if it needs to be upgraded + if (typeof socket.hcProtocol === 'undefined') { + payload = upgradeLegacyJoin(server, socket, payload); + } + + // store payload values + const { channel, nick, pass } = payload; + + // check if a client is able to join target channel + const mayJoin = canJoinChannel(channel, socket); + if (mayJoin !== true) { + return server.reply({ + cmd: 'warn', + text: 'You may not join that channel.', + id: mayJoin, + channel: false, // @todo Multichannel, false for global event + }, socket); + } + + // calling socket already in a channel + // @todo multichannel update, will remove + if (typeof socket.channel !== 'undefined') { + return server.reply({ + cmd: 'warn', // @todo Remove this + text: 'Joining more than one channel is not currently supported', + id: Errors.Join.ALREADY_JOINED, + channel: false, // @todo Multichannel, false for global event + }, socket); + } + // end todo + + // validates the user input for `nick` + if (verifyNickname(nick, socket) !== true) { + return server.reply({ + cmd: 'warn', + text: 'Nickname must consist of up to 24 letters, numbers, and underscores', + id: Errors.Join.INVALID_NICK, + channel: false, // @todo Multichannel, false for global event + }, socket); + } + + // get trip and level + const { trip, level } = getUserPerms(pass, core.saltKey, core.appConfig.data, channel); + + // store the user values + const userInfo = { + nick, + trip, + uType: legacyLevelToLabel(level), + hash: socket.hash, + level, + userid: socket.userid, + isBot: socket.isBot, + color: socket.color, + channel, + }; + + // check if trip is allowed + if (userInfo.uType === 'user') { + if (userInfo.trip == null || isTrustedUser(level) === false) { + const origNick = userInfo.nick; + const origChannel = payload.channel; + + // not allowed, shunt to purgatory + payload.channel = 'purgatory'; + + // lost souls have no names + if (origChannel === 'purgatory') { + // someone is pulling a Dante + payload.nick = `Dante_${Math.random().toString(36).substr(2, 8)}`; + } else { + payload.nick = `${Math.random().toString(36).substr(2, 8)}${Math.random().toString(36).substr(2, 8)}`; + } + + setTimeout(() => { + server.reply({ + cmd: 'info', + text: danteQuotes[Math.floor(Math.random() * danteQuotes.length)], + channel: 'purgatory', // @todo Multichannel + }, socket); + }, 100); + + server.broadcast({ + cmd: 'info', + text: `${payload.nick} is: ${origNick}\ntrip: ${userInfo.trip || 'none'}\ntried to join: ?${origChannel}\nhash: ${userInfo.hash}`, + channel: 'purgatory', // @todo Multichannel, false for global info + }, { channel: 'purgatory', level: isModerator }); + } + } + + return payload; +} + +/** + * Module meta information + * @public + * @typedef {Object} kick/info + * @property {string} name - Module command name + * @property {string} category - Module category name + * @property {string} description - Information about module + * @property {string} usage - Information about module usage + */ +export const info = { + name: 'lockroom', + category: 'moderators', + description: 'Locks a channel preventing default levels from joining', + usage: ` + API: { cmd: 'lockroom', channel: '' }`, +}; diff --git a/commands/mod/speak.js b/commands/mod/speak.js index 69330ad..0c988d9 100644 --- a/commands/mod/speak.js +++ b/commands/mod/speak.js @@ -94,6 +94,7 @@ export async function run({ * @property {string} name - Module command name * @property {string} category - Module category name * @property {string} description - Information about module + * @property {Array} aliases - An array of alternative cmd names * @property {string} usage - Information about module usage */ export const info = { @@ -102,5 +103,5 @@ export const info = { description: 'Pardon a dumb user to be able to speak again', aliases: ['unmuzzle', 'unmute'], usage: ` - API: { cmd: 'speak', ip/hash: '' }`, }; diff --git a/commands/mod/unlockroom.js b/commands/mod/unlockroom.js new file mode 100644 index 0000000..9fcfebb --- /dev/null +++ b/commands/mod/unlockroom.js @@ -0,0 +1,89 @@ +/* eslint no-console: 0 */ + +/** + * @author Marzavec ( https://github.com/marzavec ) + * @summary Unlock target channel + * @version 1.0.0 + * @description Unlocks a channel allowing anyone to join + * @module unlockroom + */ + +import { + isModerator, +} from '../utility/_UAC.js'; + +/** + * Automatically executes once after server is ready + * @param {Object} core - Reference to core enviroment object + * @public + * @return {void} + */ +export async function init(core) { + if (typeof core.locked === 'undefined') { + core.locked = {}; + } +} + +/** + * Executes when invoked by a remote client + * @param {Object} env - Enviroment object with references to core, server, socket & payload + * @public + * @return {void} + */ +export async function run({ + core, server, socket, payload, +}) { + // increase rate limit chance and ignore if not admin or mod + if (!isModerator(socket.level)) { + return server.police.frisk(socket.address, 10); + } + + let targetChannel; + + if (typeof payload.channel !== 'string') { + if (typeof socket.channel !== 'string') { // @todo Multichannel + return false; // silently fail + } + + targetChannel = socket.channel; + } else { + targetChannel = payload.channel; + } + + if (!core.locked[targetChannel]) { + return server.reply({ + cmd: 'info', + text: 'Channel is not locked.', + channel: socket.channel, // @todo Multichannel + }, socket); + } + + core.locked[targetChannel] = false; + + server.broadcast({ + cmd: 'info', + text: `Channel: ?${targetChannel} unlocked by [${socket.trip}]${socket.nick}`, + channel: targetChannel, // @todo Multichannel, false for global info + }, { channel: targetChannel, level: isModerator }); + + console.log(`Channel: ?${targetChannel} unlocked by [${socket.trip}]${socket.nick} in ${socket.channel}`); + + return true; +} + +/** + * Module meta information + * @public + * @typedef {Object} unlockroom/info + * @property {string} name - Module command name + * @property {string} category - Module category name + * @property {string} description - Information about module + * @property {string} usage - Information about module usage + */ +export const info = { + name: 'unlockroom', + category: 'moderators', + description: 'Unlock the current channel you are in or target channel as specified', + usage: ` + API: { cmd: 'unlockroom', channel: '' }`, +}; diff --git a/commands/utility/_Text.js b/commands/utility/_Text.js index 05939da..308ad63 100644 --- a/commands/utility/_Text.js +++ b/commands/utility/_Text.js @@ -1,3 +1,13 @@ +/* eslint import/prefer-default-export: 0 */ + +/** + * @author MinusGix ( https://github.com/MinusGix ) + * @summary General string helper functions + * @version v1.0.0 + * @description A library of several commonly used string functions + * @module Text + */ + /** * Check and trim string provided by remote client * @public diff --git a/commands/utility/_UAC.js b/commands/utility/_UAC.js index 96a9332..320392e 100644 --- a/commands/utility/_UAC.js +++ b/commands/utility/_UAC.js @@ -15,8 +15,6 @@ const { createHash, } = await import('crypto'); -const TripLength = 10; - /** * Object defining labels for default permission ranges * @typedef {Object} levels @@ -110,7 +108,7 @@ export function getUserDetails(socket) { return { nick: socket.nick, trip: socket.trip || '', - uType: socket.uType, /* @legacy */ + uType: socket.uType, hash: socket.hash, level: socket.level, userid: socket.userid, @@ -152,7 +150,7 @@ export function getUserPerms(pass, salt, config, channel) { const sha = createHash('sha256'); sha.update(pass + salt); - const trip = sha.digest('base64').substr(0, TripLength); + const trip = sha.digest('base64').substr(0, 6); // check if user is global admin if (trip === config.adminTrip) { diff --git a/documentation/admin_addmod.js.html b/documentation/admin_addmod.js.html index eacf973..63e1265 100644 --- a/documentation/admin_addmod.js.html +++ b/documentation/admin_addmod.js.html @@ -56,7 +56,7 @@ export async function run({ } // add new trip to config - core.appConfig.data.globalMods.push({ trip: payload.trip }); + core.config.mods.push({ trip: payload.trip }); // find targets current connections const newMod = server.findSockets({ trip: payload.trip }); @@ -150,7 +150,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/admin_listusers.js.html b/documentation/admin_listusers.js.html index fa199b7..705a369 100644 --- a/documentation/admin_listusers.js.html +++ b/documentation/admin_listusers.js.html @@ -119,7 +119,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/admin_reload.js.html b/documentation/admin_reload.js.html index f3831f5..6759d6a 100644 --- a/documentation/admin_reload.js.html +++ b/documentation/admin_reload.js.html @@ -54,7 +54,8 @@ export async function run({ } // do command reload and store results - let loadResult = await core.commands.reloadCommands(); + let loadResult = core.dynamicImports.reloadDirCache(); + loadResult += core.commands.loadCommands(); // clear and rebuild all module hooks server.loadHooks(); @@ -113,7 +114,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/admin_removemod.js.html b/documentation/admin_removemod.js.html index 5d40cd2..9422420 100644 --- a/documentation/admin_removemod.js.html +++ b/documentation/admin_removemod.js.html @@ -57,9 +57,7 @@ export async function run({ // remove trip from config // eslint-disable-next-line no-param-reassign - core.appConfig.data.globalMods = core.appConfig.data.globalMods.filter( - (mod) => mod.trip !== payload.trip, - ); + core.config.mods = core.config.mods.filter((mod) => mod.trip !== payload.trip); // find targets current connections const targetMod = server.findSockets({ trip: payload.trip }); @@ -76,7 +74,7 @@ export async function run({ for (let i = 0, l = targetMod.length; i < l; i += 1) { // downgrade privileges - targetMod[i].uType = 'user'; /* @legacy */ + targetMod[i].uType = 'user'; targetMod[i].level = levels.default; // inform ex-mod @@ -155,7 +153,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/admin_saveconfig.js.html b/documentation/admin_saveconfig.js.html index a3af560..696eb3d 100644 --- a/documentation/admin_saveconfig.js.html +++ b/documentation/admin_saveconfig.js.html @@ -52,9 +52,7 @@ export async function run({ core, server, socket }) { } // attempt save, notify of failure - try { - await core.appConfig.write(); - } catch (err) { + if (!core.configManager.save()) { return server.reply({ cmd: 'warn', // @todo Add numeric error code as `id` text: 'Failed to save config, check logs.', @@ -104,7 +102,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/admin_shout.js.html b/documentation/admin_shout.js.html index 40b6367..b76de12 100644 --- a/documentation/admin_shout.js.html +++ b/documentation/admin_shout.js.html @@ -100,7 +100,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_changecolor.js.html b/documentation/core_changecolor.js.html index 5241ad8..202b272 100644 --- a/documentation/core_changecolor.js.html +++ b/documentation/core_changecolor.js.html @@ -200,7 +200,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_changenick.js.html b/documentation/core_changenick.js.html index f666107..33ed8cd 100644 --- a/documentation/core_changenick.js.html +++ b/documentation/core_changenick.js.html @@ -48,7 +48,7 @@ import { * @return {void} */ export async function run({ - server, socket, payload, + core, server, socket, payload, }) { const { channel } = socket; @@ -77,6 +77,18 @@ export async function run({ }, socket); } + // prevent admin impersonation + // @todo prevent mod impersonation + if (newNick.toLowerCase() === core.config.adminName.toLowerCase()) { + server.police.frisk(socket.address, 4); + + return server.reply({ + cmd: 'warn', // @todo Add numeric error code as `id` + text: 'You are not the admin, liar!', + channel, // @todo Multichannel + }, socket); + } + if (newNick == previousNick) { return server.reply({ cmd: 'warn', // @todo Add numeric error code as `id` @@ -255,7 +267,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_chat.js.html b/documentation/core_chat.js.html index 0243531..915af4d 100644 --- a/documentation/core_chat.js.html +++ b/documentation/core_chat.js.html @@ -237,7 +237,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_emote.js.html b/documentation/core_emote.js.html index e81a524..1832c4a 100644 --- a/documentation/core_emote.js.html +++ b/documentation/core_emote.js.html @@ -204,7 +204,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_help.js.html b/documentation/core_help.js.html index 7a3eaae..c337611 100644 --- a/documentation/core_help.js.html +++ b/documentation/core_help.js.html @@ -176,7 +176,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_invite.js.html b/documentation/core_invite.js.html index 7920f80..b33aeaf 100644 --- a/documentation/core_invite.js.html +++ b/documentation/core_invite.js.html @@ -165,7 +165,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_join.js.html b/documentation/core_join.js.html index bba3e25..518fa80 100644 --- a/documentation/core_join.js.html +++ b/documentation/core_join.js.html @@ -27,7 +27,6 @@
/* eslint no-param-reassign: 0 */
-/* eslint import/no-cycle: [0, { ignoreExternal: true }] */
 
 /**
   * @author Marzavec ( https://github.com/marzavec )
@@ -37,9 +36,6 @@
   * @module join
   */
 
-import {
-  getSession,
-} from './session.js';
 import {
   canJoinChannel,
   socketInChannel,
@@ -118,7 +114,7 @@ export async function run({
   }
 
   // get trip and level
-  const { trip, level } = getUserPerms(pass, core.saltKey, core.appConfig.data, channel);
+  const { trip, level } = getUserPerms(pass, core.config, channel);
 
   // store the user values
   const userInfo = {
@@ -133,6 +129,13 @@ export async function run({
     channel,
   };
 
+  // prevent admin impersonation
+  if (nick.toLowerCase() === core.config.adminName.toLowerCase()) {
+    if (userInfo.trip !== 'Admin') {
+      userInfo.nick = `Fake${userInfo.nick}`;
+    }
+  }
+
   // check if the nickname already exists in the channel
   const userExists = server.findSockets({
     channel,
@@ -177,7 +180,6 @@ export async function run({
   socket.channel = channel; /* @legacy */
   // @todo multi-channel patch
   // socket.channels.push(channel);
-  socket.channels = [channel];
 
   nicks.push(userInfo.nick); /* @legacy */
   users.push({ ...{ isme: true, isBot: socket.isBot }, ...userInfo });
@@ -190,14 +192,6 @@ export async function run({
     channel, // @todo Multichannel (?)
   }, socket);
 
-  // update client with new session info
-  server.reply({
-    cmd: 'session',
-    restored: false,
-    token: getSession(socket, core),
-    channels: socket.channels,
-  }, socket);
-
   // stats are fun
   core.stats.increment('users-joined');
 
@@ -276,9 +270,6 @@ export function restoreJoin({
     channel, // @todo Multichannel (?)
   }, socket);
 
-  socket.channel = channel; /* @legacy */
-  socket.channels.push(channel);
-
   return true;
 }
 
@@ -314,7 +305,7 @@ export const info = {
 
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_morestats.js.html b/documentation/core_morestats.js.html index 07b3fad..4e37b5a 100644 --- a/documentation/core_morestats.js.html +++ b/documentation/core_morestats.js.html @@ -206,7 +206,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_ping.js.html b/documentation/core_ping.js.html index 9285bc0..fd0cb6f 100644 --- a/documentation/core_ping.js.html +++ b/documentation/core_ping.js.html @@ -74,7 +74,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_session.js.html b/documentation/core_session.js.html index 4d37721..78c58a0 100644 --- a/documentation/core_session.js.html +++ b/documentation/core_session.js.html @@ -26,7 +26,7 @@
-
/* eslint import/no-cycle: [0, { ignoreExternal: true }] */
+            
/* eslint no-param-reassign: 0 */
 
 /**
   * @author Marzavec ( https://github.com/marzavec )
@@ -49,7 +49,7 @@ import {
   restoreJoin,
 } from './join.js';
 
-const SessionLocation = './session.key';
+const CertLocation = './cert.key';
 
 /**
   *
@@ -67,10 +67,10 @@ export function getSession(socket, core) {
     nick: socket.nick,
     trip: socket.trip,
     userid: socket.userid,
-    uType: socket.uType, /* @legacy */
-    muzzled: socket.muzzled || false,
-    banned: socket.banned || false,
-  }, core.sessionKey, {
+    uType: socket.uType,
+    muzzled: socket.muzzled,
+    banned: socket.banned,
+  }, core.cert, {
     expiresIn: '7 days',
   });
 }
@@ -106,7 +106,7 @@ export async function run({
 
   let session = false;
   try {
-    session = jsonwebtoken.verify(payload.token, core.sessionKey);
+    session = jsonwebtoken.verify(payload.token, core.cert);
   } catch (err) {
     return notifyFailure(server, socket);
   }
@@ -120,7 +120,7 @@ export async function run({
     return notifyFailure(server, socket);
   }
 
-  if (typeof session.color !== 'string' && typeof session.color !== 'boolean') {
+  if (typeof session.color !== 'string') {
     return notifyFailure(server, socket);
   }
 
@@ -157,14 +157,15 @@ export async function run({
   }
 
   // populate socket info with validated session
-  socket.channels = [];
+  socket.channel = session.channel;
+  socket.channels = session.channels;
   socket.color = session.color;
   socket.isBot = session.isBot;
   socket.level = session.level;
   socket.nick = session.nick;
   socket.trip = session.trip;
   socket.userid = session.userid;
-  socket.uType = session.uType; /* @legacy */
+  socket.uType = session.uType;
   socket.muzzled = session.muzzled;
   socket.banned = session.banned;
 
@@ -179,12 +180,12 @@ export async function run({
     channels: socket.channels,
   }, socket);
 
-  for (let i = 0, j = session.channels.length; i < j; i += 1) {
+  for (let i = 0, j = socket.channels.length; i < j; i += 1) {
     restoreJoin({
       core,
       server,
       socket,
-      channel: session.channels[i],
+      channel: socket.channels[i],
     }, true);
   }
 
@@ -199,8 +200,8 @@ export async function run({
   */
 export function init(core) {
   // load the encryption key if required
-  if (typeof core.sessionKey === 'undefined') {
-    core.sessionKey = fs.readFileSync(SessionLocation);
+  if (typeof core.cert === 'undefined') {
+    core.cert = fs.readFileSync(CertLocation);
   }
 }
 
@@ -235,7 +236,7 @@ export const info = {
 
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_stats.js.html b/documentation/core_stats.js.html index 1b25125..b16c7b9 100644 --- a/documentation/core_stats.js.html +++ b/documentation/core_stats.js.html @@ -101,7 +101,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/core_whisper.js.html b/documentation/core_whisper.js.html index f82308d..351c19c 100644 --- a/documentation/core_whisper.js.html +++ b/documentation/core_whisper.js.html @@ -273,7 +273,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/index.html b/documentation/index.html index 2c1c319..310280f 100644 --- a/documentation/index.html +++ b/documentation/index.html @@ -96,7 +96,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/internal_disconnect.js.html b/documentation/internal_disconnect.js.html index 35dd4b8..e83bd69 100644 --- a/documentation/internal_disconnect.js.html +++ b/documentation/internal_disconnect.js.html @@ -34,10 +34,6 @@ * @module disconnect */ -import { - socketInChannel, -} from '../utility/_Channels.js'; - /** * Executes when invoked by a remote client * @param {Object} env - Enviroment object with references to core, server, socket & payload @@ -53,14 +49,10 @@ export async function run({ server, socket, payload }) { // send leave notice to client peers // @todo Multichannel update if (socket.channel) { - const isDuplicate = socketInChannel(server, socket.channel, socket); - - if (isDuplicate === false) { - server.broadcast({ - cmd: 'onlineRemove', - nick: socket.nick, - }, { channel: socket.channel }); - } + server.broadcast({ + cmd: 'onlineRemove', + nick: socket.nick, + }, { channel: socket.channel }); } // commit close just in case @@ -108,7 +100,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/internal_socketreply.js.html b/documentation/internal_socketreply.js.html index f1f6455..144e062 100644 --- a/documentation/internal_socketreply.js.html +++ b/documentation/internal_socketreply.js.html @@ -93,7 +93,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/mod_ban.js.html b/documentation/mod_ban.js.html index 9471b5e..9e61eb0 100644 --- a/documentation/mod_ban.js.html +++ b/documentation/mod_ban.js.html @@ -157,7 +157,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/mod_dumb.js.html b/documentation/mod_dumb.js.html index f197c42..7ae8eae 100644 --- a/documentation/mod_dumb.js.html +++ b/documentation/mod_dumb.js.html @@ -389,6 +389,7 @@ export function whisperCheck({ * @property {string} name - Module command name * @property {string} category - Module category name * @property {string} description - Information about module + * @property {Array} aliases - An array of alternative cmd names * @property {string} usage - Information about module usage */ export const info = { @@ -415,7 +416,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/mod_forcecolor.js.html b/documentation/mod_forcecolor.js.html index 232b4e5..f8610d7 100644 --- a/documentation/mod_forcecolor.js.html +++ b/documentation/mod_forcecolor.js.html @@ -241,7 +241,7 @@ Text: /forcecolor <target nick> <color as hex>`,
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/mod_kick.js.html b/documentation/mod_kick.js.html index 650b684..6b65861 100644 --- a/documentation/mod_kick.js.html +++ b/documentation/mod_kick.js.html @@ -194,7 +194,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/mod_speak.js.html b/documentation/mod_speak.js.html index c9566c7..a9c6eb4 100644 --- a/documentation/mod_speak.js.html +++ b/documentation/mod_speak.js.html @@ -122,6 +122,7 @@ export async function run({ * @property {string} name - Module command name * @property {string} category - Module category name * @property {string} description - Information about module + * @property {Array} aliases - An array of alternative cmd names * @property {string} usage - Information about module usage */ export const info = { @@ -148,7 +149,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/mod_unban.js.html b/documentation/mod_unban.js.html index 1ed956a..ecf73cc 100644 --- a/documentation/mod_unban.js.html +++ b/documentation/mod_unban.js.html @@ -133,7 +133,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/mod_unbanall.js.html b/documentation/mod_unbanall.js.html index 8e4c416..a2ce97f 100644 --- a/documentation/mod_unbanall.js.html +++ b/documentation/mod_unbanall.js.html @@ -106,7 +106,7 @@ export const info = {
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-addmod.html b/documentation/module-addmod.html index 1e4b182..3e7e7a5 100644 --- a/documentation/module-addmod.html +++ b/documentation/module-addmod.html @@ -595,7 +595,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-ban.html b/documentation/module-ban.html index bf7061d..661f988 100644 --- a/documentation/module-ban.html +++ b/documentation/module-ban.html @@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-changecolor.html b/documentation/module-changecolor.html index 337cb77..f684538 100644 --- a/documentation/module-changecolor.html +++ b/documentation/module-changecolor.html @@ -893,7 +893,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-changenick.html b/documentation/module-changenick.html index 10b4082..d74189c 100644 --- a/documentation/module-changenick.html +++ b/documentation/module-changenick.html @@ -255,7 +255,7 @@
Source:
@@ -410,7 +410,7 @@
Source:
@@ -784,7 +784,7 @@
Source:
@@ -857,7 +857,7 @@
Source:
@@ -893,7 +893,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-chat.html b/documentation/module-chat.html index 2df83e7..bc4fba8 100644 --- a/documentation/module-chat.html +++ b/documentation/module-chat.html @@ -1038,7 +1038,7 @@ assumes a failed chat command invocation and will reject with notice
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-disconnect.html b/documentation/module-disconnect.html index 46e4209..47db03c 100644 --- a/documentation/module-disconnect.html +++ b/documentation/module-disconnect.html @@ -255,7 +255,7 @@
Source:
@@ -486,7 +486,7 @@
Source:
@@ -559,7 +559,7 @@
Source:
@@ -595,7 +595,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-dumb.html b/documentation/module-dumb.html index 4316c2f..4c86f9f 100644 --- a/documentation/module-dumb.html +++ b/documentation/module-dumb.html @@ -1264,7 +1264,7 @@ shadow-prevent all whispers from muzzled users
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-emote.html b/documentation/module-emote.html index c1c2541..229f5c4 100644 --- a/documentation/module-emote.html +++ b/documentation/module-emote.html @@ -894,7 +894,7 @@ hooks chat commands checking for /me
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-forcecolor.html b/documentation/module-forcecolor.html index ca2ecb6..56be862 100644 --- a/documentation/module-forcecolor.html +++ b/documentation/module-forcecolor.html @@ -894,7 +894,7 @@ hooks chat commands checking for /forcecolor
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-help.html b/documentation/module-help.html index e905547..f43fd20 100644 --- a/documentation/module-help.html +++ b/documentation/module-help.html @@ -821,7 +821,7 @@ hooks chat commands checking for /help
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-invite.html b/documentation/module-invite.html index 8e4d552..d635329 100644 --- a/documentation/module-invite.html +++ b/documentation/module-invite.html @@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-join.html b/documentation/module-join.html index 4fca6e6..6b8470b 100644 --- a/documentation/module-join.html +++ b/documentation/module-join.html @@ -97,7 +97,7 @@
Source:
@@ -255,7 +255,7 @@
Source:
@@ -486,7 +486,7 @@
Source:
@@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-kick.html b/documentation/module-kick.html index f522c78..1101b23 100644 --- a/documentation/module-kick.html +++ b/documentation/module-kick.html @@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-listusers.html b/documentation/module-listusers.html index 7ecfac1..e4a23c2 100644 --- a/documentation/module-listusers.html +++ b/documentation/module-listusers.html @@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-morestats.html b/documentation/module-morestats.html index f6b1b34..a26cabd 100644 --- a/documentation/module-morestats.html +++ b/documentation/module-morestats.html @@ -821,7 +821,7 @@ hooks chat commands checking for /stats
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-ping.html b/documentation/module-ping.html index 087e342..eb93b1a 100644 --- a/documentation/module-ping.html +++ b/documentation/module-ping.html @@ -473,7 +473,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-reload.html b/documentation/module-reload.html index 9b69736..7ebbebb 100644 --- a/documentation/module-reload.html +++ b/documentation/module-reload.html @@ -486,7 +486,7 @@
Source:
@@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-removemod.html b/documentation/module-removemod.html index 89443c9..3611d20 100644 --- a/documentation/module-removemod.html +++ b/documentation/module-removemod.html @@ -486,7 +486,7 @@
Source:
@@ -559,7 +559,7 @@
Source:
@@ -595,7 +595,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-saveconfig.html b/documentation/module-saveconfig.html index 9e7635c..00bfd34 100644 --- a/documentation/module-saveconfig.html +++ b/documentation/module-saveconfig.html @@ -486,7 +486,7 @@
Source:
@@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-session.html b/documentation/module-session.html index b6056eb..1ebaa0b 100644 --- a/documentation/module-session.html +++ b/documentation/module-session.html @@ -429,7 +429,7 @@
Source:
@@ -989,7 +989,7 @@
Source:
@@ -1025,7 +1025,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-shout.html b/documentation/module-shout.html index b1d7fea..4cdbbfb 100644 --- a/documentation/module-shout.html +++ b/documentation/module-shout.html @@ -595,7 +595,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-socketreply.html b/documentation/module-socketreply.html index 295fb88..9cb906a 100644 --- a/documentation/module-socketreply.html +++ b/documentation/module-socketreply.html @@ -596,7 +596,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-speak.html b/documentation/module-speak.html index 8c26b26..1db6710 100644 --- a/documentation/module-speak.html +++ b/documentation/module-speak.html @@ -677,7 +677,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-stats.html b/documentation/module-stats.html index fbe8aef..3a11bab 100644 --- a/documentation/module-stats.html +++ b/documentation/module-stats.html @@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-unban.html b/documentation/module-unban.html index 91cf840..e455524 100644 --- a/documentation/module-unban.html +++ b/documentation/module-unban.html @@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-unbanall.html b/documentation/module-unbanall.html index 917a661..408a449 100644 --- a/documentation/module-unbanall.html +++ b/documentation/module-unbanall.html @@ -522,7 +522,7 @@
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/module-whisper.html b/documentation/module-whisper.html index 5d5aea7..dfaa035 100644 --- a/documentation/module-whisper.html +++ b/documentation/module-whisper.html @@ -902,7 +902,7 @@ hooks chat commands checking for /whisper
- Documentation generated by JSDoc 3.6.6 on Wed Jun 22 2022 10:04:25 GMT-0500 (Central Daylight Time) + Documentation generated by JSDoc 3.6.10 on Thu May 05 2022 00:29:35 GMT-0700 (Pacific Daylight Time)
diff --git a/documentation/scripts/linenumber.js b/documentation/scripts/linenumber.js index 4354785..f355ce2 100644 --- a/documentation/scripts/linenumber.js +++ b/documentation/scripts/linenumber.js @@ -1,25 +1,25 @@ -/*global document */ +/* global document */ (() => { - const source = document.getElementsByClassName('prettyprint source linenums'); - let i = 0; - let lineNumber = 0; - let lineId; - let lines; - let totalLines; - let anchorHash; + const source = document.getElementsByClassName('prettyprint source linenums'); + let i = 0; + let lineNumber = 0; + let lineId; + let lines; + let totalLines; + let anchorHash; - if (source && source[0]) { - anchorHash = document.location.hash.substring(1); - lines = source[0].getElementsByTagName('li'); - totalLines = lines.length; + if (source && source[0]) { + anchorHash = document.location.hash.substring(1); + lines = source[0].getElementsByTagName('li'); + totalLines = lines.length; - for (; i < totalLines; i++) { - lineNumber++; - lineId = `line${lineNumber}`; - lines[i].id = lineId; - if (lineId === anchorHash) { - lines[i].className += ' selected'; - } - } + for (; i < totalLines; i++) { + lineNumber++; + lineId = `line${lineNumber}`; + lines[i].id = lineId; + if (lineId === anchorHash) { + lines[i].className += ' selected'; + } } + } })(); diff --git a/documentation/scripts/prettify/lang-css.js b/documentation/scripts/prettify/lang-css.js index 041e1f5..b258dc8 100644 --- a/documentation/scripts/prettify/lang-css.js +++ b/documentation/scripts/prettify/lang-css.js @@ -1,2 +1,2 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", -/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); +PR.registerLangHandler(PR.createSimpleLexer([['pln', /^[\t\n\f\r ]+/, null, ' \t\r\n ']], [['str', /^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/, null], ['str', /^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/, null], ['lang-css-str', /^url\(([^"')]*)\)/i], ['kwd', /^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i, null], ['lang-css-kw', /^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i], ['com', /^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//], ['com', + /^(?:<\!--|--\>)/], ['lit', /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i], ['lit', /^#[\da-f]{3,6}/i], ['pln', /^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i], ['pun', /^[^\s\w"']+/]]), ['css']); PR.registerLangHandler(PR.createSimpleLexer([], [['kwd', /^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]), ['css-kw']); PR.registerLangHandler(PR.createSimpleLexer([], [['str', /^[^"')]+/]]), ['css-str']); diff --git a/documentation/scripts/prettify/prettify.js b/documentation/scripts/prettify/prettify.js index eef5ad7..bf2f003 100644 --- a/documentation/scripts/prettify/prettify.js +++ b/documentation/scripts/prettify/prettify.js @@ -1,28 +1,125 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p= '0' && b <= '7' ? parseInt(a.substring(1), 8) : b === 'u' || b === 'x' ? parseInt(a.substring(2), 16) : a.charCodeAt(1); } function e(a) { if (a < 32) return (a < 16 ? '\\x0' : '\\x') + a.toString(16); a = String.fromCharCode(a); if (a === '\\' || a === '-' || a === '[' || a === ']')a = `\\${a}`; return a; } function h(a) { + for (var f = a.substring(1, a.length - 1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g), a = [], b = [], o = f[0] === '^', c = o ? 1 : 0, i = f.length; c < i; ++c) { var j = f[c]; if (/\\[bdsw]/i.test(j))a.push(j); else { var j = m(j); var d; c + 2 < i && f[c + 1] === '-' ? (d = m(f[c + 2]), c += 2) : d = j; b.push([j, d]); d < 65 || j > 122 || (d < 65 || j > 90 || b.push([Math.max(65, j) | 32, Math.min(d, 90) | 32]), d < 97 || j > 122 || b.push([Math.max(97, j) & -33, Math.min(d, 122) & -33])); } }b.sort((a, f) => a[0] - f[0] || f[1] - a[1]); f = []; j = [NaN, NaN]; for (c = 0; c < b.length; ++c)i = b[c], i[0] <= j[1] + 1 ? j[1] = Math.max(j[1], i[1]) : f.push(j = i); b = ['[']; o && b.push('^'); b.push.apply(b, a); for (c = 0; c +< f.length; ++c)i = f[c], b.push(e(i[0])), i[1] > i[0] && (i[1] + 1 > i[0] && b.push('-'), b.push(e(i[1]))); b.push(']'); return b.join(''); + } function y(a) { + for (var f = a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g), b = f.length, d = [], c = 0, i = 0; c < b; ++c) { var j = f[c]; j === '(' ? ++i : j.charAt(0) === '\\' && (j = +j.substring(1)) && j <= i && (d[j] = -1); } for (c = 1; c < d.length; ++c)d[c] === -1 && (d[c] = ++t); for (i = c = 0; c < b; ++c) { + j = f[c], j === '(' ? (++i, d[i] === void 0 && (f[c] = '(?:')) : j.charAt(0) === '\\' +&& (j = +j.substring(1)) && j <= i && (f[c] = `\\${d[i]}`); + } for (i = c = 0; c < b; ++c)f[c] === '^' && f[c + 1] !== '^' && (f[c] = ''); if (a.ignoreCase && s) for (c = 0; c < b; ++c)j = f[c], a = j.charAt(0), j.length >= 2 && a === '[' ? f[c] = h(j) : a !== '\\' && (f[c] = j.replace(/[A-Za-z]/g, (a) => { a = a.charCodeAt(0); return `[${String.fromCharCode(a & -33, a | 32)}]`; })); return f.join(''); + } for (var t = 0, s = !1, l = !1, p = 0, d = a.length; p < d; ++p) { var g = a[p]; if (g.ignoreCase)l = !0; else if (/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi, ''))) { s = !0; l = !1; break; } } for (var r = { + b: 8, t: 9, n: 10, v: 11, f: 12, r: 13, + }, n = [], p = 0, d = a.length; p < d; ++p) { g = a[p]; if (g.global || g.multiline) throw Error(`${g}`); n.push(`(?:${y(g)})`); } return RegExp(n.join('|'), l ? 'gi' : 'g'); + } function M(a) { + function m(a) { + switch (a.nodeType) { + case 1: if (e.test(a.className)) break; for (var g = a.firstChild; g; g = g.nextSibling)m(g); g = a.nodeName; if (g === 'BR' || g === 'LI')h[s] = '\n', t[s << 1] = y++, t[s++ << 1 | 1] = a; break; case 3: case 4: g = a.nodeValue, g.length && (g = p ? g.replace(/\r\n?/g, '\n') : g.replace(/[\t\n\r ]+/g, ' '), h[s] = g, t[s << 1] = y, y += g.length, + t[s++ << 1 | 1] = a); + } + } var e = /(?:^|\s)nocode(?:\s|$)/; var h = []; var y = 0; var t = []; var s = 0; let l; a.currentStyle ? l = a.currentStyle.whiteSpace : window.getComputedStyle && (l = document.defaultView.getComputedStyle(a, q).getPropertyValue('white-space')); var p = l && l.substring(0, 3) === 'pre'; m(a); return { a: h.join('').replace(/\n$/, ''), c: t }; + } function B(a, m, e, h) { m && (a = { a: m, d: a }, e(a), h.push.apply(h, a.e)); } function x(a, m) { + function e(a) { + for (var l = a.d, p = [l, 'pln'], d = 0, g = a.a.match(y) || [], r = {}, n = 0, z = g.length; n < z; ++n) { + const f = g[n]; let b = r[f]; let o = void 0; var c; if (typeof b +=== 'string')c = !1; else { var i = h[f.charAt(0)]; if (i)o = f.match(i[1]), b = i[0]; else { for (c = 0; c < t; ++c) if (i = m[c], o = f.match(i[1])) { b = i[0]; break; }o || (b = 'pln'); } if ((c = b.length >= 5 && b.substring(0, 5) === 'lang-') && !(o && typeof o[1] === 'string'))c = !1, b = 'src'; c || (r[f] = b); }i = d; d += f.length; if (c) { c = o[1]; let j = f.indexOf(c); let k = j + c.length; o[2] && (k = f.length - o[2].length, j = k - c.length); b = b.substring(5); B(l + i, f.substring(0, j), e, p); B(l + i + j, c, C(b, c), p); B(l + i + k, f.substring(k), e, p); } else p.push(l + i, b); + }a.e = p; + } var h = {}; let y; (function () { + for (var e = a.concat(m), + l = [], p = {}, d = 0, g = e.length; d < g; ++d) { let r = e[d]; let n = r[3]; if (n) for (let k = n.length; --k >= 0;)h[n.charAt(k)] = r; r = r[1]; n = `${r}`; p.hasOwnProperty(n) || (l.push(r), p[n] = q); }l.push(/[\S\s]/); y = L(l); + }()); var t = m.length; return e; + } function u(a) { + const m = []; const e = []; a.tripleQuotedStrings ? m.push(['str', /^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/, q, "'\""]) : a.multiLineStrings ? m.push(['str', /^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, + q, "'\"`"]) : m.push(['str', /^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/, q, "\"'"]); a.verbatimStrings && e.push(['str', /^@"(?:[^"]|"")*(?:"|$)/, q]); let h = a.hashComments; h && (a.cStyleComments ? (h > 1 ? m.push(['com', /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, q, '#']) : m.push(['com', /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/, q, '#']), e.push(['str', /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/, q])) : m.push(['com', /^#[^\n\r]*/, + q, '#'])); a.cStyleComments && (e.push(['com', /^\/\/[^\n\r]*/, q]), e.push(['com', /^\/\*[\S\s]*?(?:\*\/|$)/, q])); a.regexLiterals && e.push(['lang-regex', /^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]); (h = a.types) && e.push(['typ', h]); a = (`${a.keywords}`).replace( + /^ | $/g, + '', + ); a.length && e.push(['kwd', RegExp(`^(?:${a.replace(/[\s,]+/g, '|')})\\b`), q]); m.push(['pln', /^\s+/, q, ' \r\n\t\xa0']); e.push(['lit', /^@[$_a-z][\w$@]*/i, q], ['typ', /^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/, q], ['pln', /^[$_a-z][\w$@]*/i, q], ['lit', /^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i, q, '0123456789'], ['pln', /^\\[\S\s]?/, q], ['pun', /^.[^\s\w"-$'./@\\`]*/, q]); return x(m, e); + } function D(a, m) { + function e(a) { + switch (a.nodeType) { + case 1: if (k.test(a.className)) break; if (a.nodeName === 'BR') { + h(a), + a.parentNode && a.parentNode.removeChild(a); + } else for (a = a.firstChild; a; a = a.nextSibling)e(a); break; case 3: case 4: if (p) { let b = a.nodeValue; const d = b.match(t); if (d) { const c = b.substring(0, d.index); a.nodeValue = c; (b = b.substring(d.index + d[0].length)) && a.parentNode.insertBefore(s.createTextNode(b), a.nextSibling); h(a); c || a.parentNode.removeChild(a); } } + } + } function h(a) { + function b(a, d) { const e = d ? a.cloneNode(!1) : a; var f = a.parentNode; if (f) { var f = b(f, 1); let g = a.nextSibling; f.appendChild(e); for (let h = g; h; h = g)g = h.nextSibling, f.appendChild(h); } return e; } + for (;!a.nextSibling;) if (a = a.parentNode, !a) return; for (var a = b(a.nextSibling, 0), e; (e = a.parentNode) && e.nodeType === 1;)a = e; d.push(a); + } var k = /(?:^|\s)nocode(?:\s|$)/; var t = /\r\n?|\n/; var s = a.ownerDocument; let l; a.currentStyle ? l = a.currentStyle.whiteSpace : window.getComputedStyle && (l = s.defaultView.getComputedStyle(a, q).getPropertyValue('white-space')); var p = l && l.substring(0, 3) === 'pre'; for (l = s.createElement('LI'); a.firstChild;)l.appendChild(a.firstChild); for (var d = [l], g = 0; g < d.length; ++g)e(d[g]); m === (m | 0) && d[0].setAttribute( + 'value', + m, + ); const r = s.createElement('OL'); r.className = 'linenums'; for (var n = Math.max(0, m - 1 | 0) || 0, g = 0, z = d.length; g < z; ++g)l = d[g], l.className = `L${(g + n) % 10}`, l.firstChild || l.appendChild(s.createTextNode('\xa0')), r.appendChild(l); a.appendChild(r); + } function k(a, m) { for (let e = m.length; --e >= 0;) { const h = m[e]; A.hasOwnProperty(h) ? window.console && console.warn('cannot override language handler %s', h) : A[h] = a; } } function C(a, m) { if (!a || !A.hasOwnProperty(a))a = /^\s*= o && (h += 2); e >= c && (a += 2); + } + } catch (w) { 'console' in window && console.log(w && w.stack ? w.stack : w); } + } var v = ['break,continue,do,else,for,if,return,while']; var w = [[v, 'auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile'], + 'catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof']; const F = [w, 'alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where']; const G = [w, 'abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient']; + const H = [G, 'as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var']; var w = [w, 'debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN']; const I = [v, 'and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None']; + const J = [v, 'alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END']; var v = [v, 'case,done,elif,esac,eval,fi,function,in,local,set,then,until']; const K = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/; const N = /\S/; const O = u({ + keywords: [F, H, w, `caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END${ + I}`, J, v], + hashComments: !0, + cStyleComments: !0, + multiLineStrings: !0, + regexLiterals: !0, + }); var A = {}; k(O, ['default-code']); k( + x([], [['pln', /^[^]*(?:>|$)/], ['com', /^<\!--[\S\s]*?(?:--\>|$)/], ['lang-', /^<\?([\S\s]+?)(?:\?>|$)/], ['lang-', /^<%([\S\s]+?)(?:%>|$)/], ['pun', /^(?:<[%?]|[%?]>)/], ['lang-', /^]*>([\S\s]+?)<\/xmp\b[^>]*>/i], ['lang-js', /^]*>([\S\s]*?)(<\/script\b[^>]*>)/i], ['lang-css', /^]*>([\S\s]*?)(<\/style\b[^>]*>)/i], ['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i]]), + ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl'], + ); k(x([['pln', /^\s+/, q, ' \t\r\n'], ['atv', /^(?:"[^"]*"?|'[^']*'?)/, q, "\"'"]], [['tag', /^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i], ['atn', /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i], ['lang-uq.val', /^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/], ['pun', /^[/<->]+/], ['lang-js', /^on\w+\s*=\s*"([^"]+)"/i], ['lang-js', /^on\w+\s*=\s*'([^']+)'/i], ['lang-js', /^on\w+\s*=\s*([^\s"'>]+)/i], ['lang-css', /^style\s*=\s*"([^"]+)"/i], ['lang-css', /^style\s*=\s*'([^']+)'/i], ['lang-css', + /^style\s*=\s*([^\s"'>]+)/i]]), ['in.tag']); k(x([], [['atv', /^[\S\s]+/]]), ['uq.val']); k(u({ + keywords: F, hashComments: !0, cStyleComments: !0, types: K, + }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']); k(u({ keywords: 'null,true,false' }), ['json']); k(u({ + keywords: H, hashComments: !0, cStyleComments: !0, verbatimStrings: !0, types: K, + }), ['cs']); k(u({ keywords: G, cStyleComments: !0 }), ['java']); k(u({ keywords: v, hashComments: !0, multiLineStrings: !0 }), ['bsh', 'csh', 'sh']); k( + u({ + keywords: I, hashComments: !0, multiLineStrings: !0, tripleQuotedStrings: !0, + }), + ['cv', 'py'], + ); k(u({ + keywords: 'caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END', hashComments: !0, multiLineStrings: !0, regexLiterals: !0, + }), ['perl', 'pl', 'pm']); k(u({ + keywords: J, hashComments: !0, multiLineStrings: !0, regexLiterals: !0, + }), ['rb']); k(u({ keywords: w, cStyleComments: !0, regexLiterals: !0 }), ['js']); k(u({ + keywords: 'all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes', + hashComments: 3, + cStyleComments: !0, + multilineStrings: !0, + tripleQuotedStrings: !0, + regexLiterals: !0, + }), ['coffee']); k(x([], [['str', /^[\S\s]+/]]), ['regex']); window.prettyPrintOne = function (a, m, e) { const h = document.createElement('PRE'); h.innerHTML = a; e && D(h, e); E({ g: m, i: e, h }); return h.innerHTML; }; window.prettyPrint = function (a) { + function m() { + for (let e = window.PR_SHOULD_USE_CONTINUATION ? l.now() + 250 : Infinity; p < h.length && l.now() < e; p++) { + const n = h[p]; var k = n.className; if (k.indexOf('prettyprint') >= 0) { + var k = k.match(g); var f; var b; if (b = !k) { b = n; for (var o = void 0, c = b.firstChild; c; c = c.nextSibling) var i = c.nodeType, o = i === 1 ? o ? b : c : i === 3 ? N.test(c.nodeValue) ? b : o : o; b = (f = o === b ? void 0 : o) && f.tagName === 'CODE'; }b && (k = f.className.match(g)); k && (k = k[1]); b = !1; for (o = n.parentNode; o; o = o.parentNode) if ((o.tagName === 'pre' || o.tagName === 'code' || o.tagName === 'xmp') && o.className && o.className.indexOf('prettyprint') >= 0) { b = !0; break; }b || ((b = (b = n.className.match(/\blinenums\b(?::(\d+))?/)) ? b[1] && b[1].length ? +b[1] : !0 : !1) && D(n, b), d = { g: k, h: n, i: b }, E(d)); + } + }p < h.length ? setTimeout( + m, + 250, + ) : a && a(); + } for (var e = [document.getElementsByTagName('pre'), document.getElementsByTagName('code'), document.getElementsByTagName('xmp')], h = [], k = 0; k < e.length; ++k) for (let t = 0, s = e[k].length; t < s; ++t)h.push(e[k][t]); var e = q; var l = Date; l.now || (l = { now() { return +new Date(); } }); var p = 0; let d; var g = /\blang(?:uage)?-([\w.]+)(?!\S)/; m(); + }; window.PR = { + createSimpleLexer: x, + registerLangHandler: k, + sourceDecorator: u, + PR_ATTRIB_NAME: 'atn', + PR_ATTRIB_VALUE: 'atv', + PR_COMMENT: 'com', + PR_DECLARATION: 'dec', + PR_KEYWORD: 'kwd', + PR_LITERAL: 'lit', + PR_NOCODE: 'nocode', + PR_PLAIN: 'pln', + PR_PUNCTUATION: 'pun', + PR_SOURCE: 'src', + PR_STRING: 'str', + PR_TAG: 'tag', + PR_TYPE: 'typ', + }; +}()); diff --git a/package-lock.json b/package-lock.json index 5d3a2c1..ac0bc6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,12 +10,13 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { + "ascii-captcha": "^0.0.3", "enquirer": "^2.3.6", "hackchat-server": "^2.2.27", "http-server": "^14.1.0", - "jsonwebtoken": "^8.5.1", + "jsonwebtoken": "^9.0.2", "lowdb": "^3.0.0", - "pm2": "^5.2.0" + "pm2": "^5.3.0" }, "devDependencies": { "c8": "^7.11.0", @@ -45,17 +46,89 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/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==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", @@ -96,13 +169,10 @@ } }, "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -111,37 +181,29 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", @@ -161,59 +223,43 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -263,21 +309,30 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" @@ -307,13 +362,13 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -358,13 +413,13 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -373,7 +428,7 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -392,9 +447,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -415,34 +470,34 @@ } }, "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -459,12 +514,13 @@ } }, "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -643,29 +699,52 @@ "node": ">=8" } }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@opencensus/core": { @@ -684,9 +763,9 @@ } }, "node_modules/@opencensus/core/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -719,17 +798,17 @@ } }, "node_modules/@opencensus/propagation-b3/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } }, "node_modules/@pm2/agent": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.0.1.tgz", - "integrity": "sha512-QKHMm6yexcvdDfcNE7PL9D6uEjoQPGRi+8dh+rc4Hwtbpsbh5IAvZbz3BVGjcd4HaX6pt2xGpOohG7/Y2L4QLw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.0.3.tgz", + "integrity": "sha512-xkqqCoTf5VsciMqN0vb9jthW7olVAi4KRFNddCc7ZkeJZ3i8QwZANr4NSH2H5DvseRFHq7MiPspRY/EWAFWWTg==", "dependencies": { "async": "~3.2.0", "chalk": "~3.0.0", @@ -741,11 +820,16 @@ "nssocket": "0.6.0", "pm2-axon": "~4.0.1", "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~5.0.0", - "semver": "~7.2.0", + "proxy-agent": "~6.3.0", + "semver": "~7.5.0", "ws": "~7.4.0" } }, + "node_modules/@pm2/agent/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "node_modules/@pm2/agent/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -758,16 +842,10 @@ "node": ">=8" } }, - "node_modules/@pm2/agent/node_modules/semver": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz", - "integrity": "sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } + "node_modules/@pm2/agent/node_modules/dayjs": { + "version": "1.8.36", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", + "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" }, "node_modules/@pm2/agent/node_modules/ws": { "version": "7.4.6", @@ -790,9 +868,9 @@ } }, "node_modules/@pm2/io": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-5.0.0.tgz", - "integrity": "sha512-3rToDVJaRoob5Lq8+7Q2TZFruoEkdORxwzFpZaqF4bmH6Bkd7kAbdPrI/z8X6k1Meq5rTtScM7MmDgppH6aLlw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@pm2/io/-/io-5.0.2.tgz", + "integrity": "sha512-XAvrNoQPKOyO/jJyCu8jPhLzlyp35MEf7w/carHXmWKddPzeNOFSEpSEqMzPDawsvpxbE+i918cNN+MwgVsStA==", "dependencies": { "@opencensus/core": "0.0.9", "@opencensus/propagation-b3": "0.0.8", @@ -800,7 +878,7 @@ "debug": "~4.3.1", "eventemitter2": "^6.3.1", "require-in-the-middle": "^5.0.0", - "semver": "6.3.0", + "semver": "~7.5.4", "shimmer": "^1.2.0", "signal-exit": "^3.0.3", "tslib": "1.9.3" @@ -809,26 +887,10 @@ "node": ">=6.0" } }, - "node_modules/@pm2/io/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/@pm2/io/node_modules/eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" - }, - "node_modules/@pm2/io/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" }, "node_modules/@pm2/js-api": { "version": "0.6.7", @@ -845,23 +907,15 @@ "node": ">=4.0" } }, - "node_modules/@pm2/js-api/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/@pm2/js-api/node_modules/eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" }, "node_modules/@pm2/js-api/node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "engines": { "node": ">=8.3.0" }, @@ -890,10 +944,16 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { "node": ">= 6" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -916,6 +976,7 @@ "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -932,18 +993,11 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { "debug": "4" }, @@ -983,12 +1037,12 @@ "node_modules/amp": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz", - "integrity": "sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0=" + "integrity": "sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw==" }, "node_modules/amp-message": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz", - "integrity": "sha1-p48cmJlQh602GSpBKY5NtJ49/EU=", + "integrity": "sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg==", "dependencies": { "amp": "0.3.1" } @@ -1106,6 +1160,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ascii-captcha": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/ascii-captcha/-/ascii-captcha-0.0.3.tgz", + "integrity": "sha512-dxpezvW1gO/qZTUiLuVEkuuo4YPdX6figilAgbtXfSvyHqXZhZnzSwxdZKQpS/8btIH2S/2k072NHJ4WHoG4pg==" + }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -1127,14 +1186,17 @@ } }, "node_modules/ast-types/node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dependencies": { + "lodash": "^4.17.14" + } }, "node_modules/async-listener": { "version": "0.6.10", @@ -1149,9 +1211,9 @@ } }, "node_modules/async-listener/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -1180,6 +1242,14 @@ "node": ">= 0.8" } }, + "node_modules/basic-ftp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", + "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1202,7 +1272,7 @@ "node_modules/bodec": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz", - "integrity": "sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw=" + "integrity": "sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1263,14 +1333,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/c8": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.0.tgz", @@ -1653,11 +1715,6 @@ "safe-buffer": "~5.1.1" } }, - "node_modules/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==" - }, "node_modules/corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", @@ -1688,20 +1745,20 @@ "node_modules/culvert": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz", - "integrity": "sha1-lQL18BVKLVoioCPnn3HMk2+m728=" + "integrity": "sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==" }, "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==", "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" }, "node_modules/debug": { "version": "4.3.3", @@ -1743,7 +1800,8 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/default-require-extensions": { "version": "3.0.0", @@ -1779,25 +1837,16 @@ } }, "node_modules/degenerator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", - "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dependencies": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.8" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, "node_modules/didyoumean2": { @@ -1949,73 +1998,25 @@ } }, "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dependencies": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" + "estraverse": "^5.2.0", + "esutils": "^2.0.2" }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4.0" + "node": ">=6.0" }, "optionalDependencies": { "source-map": "~0.6.1" } }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", @@ -2088,9 +2089,9 @@ } }, "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -2204,15 +2205,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", @@ -2307,15 +2299,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -2328,19 +2311,10 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { "node": ">=4.0" } @@ -2356,7 +2330,7 @@ "node_modules/eventemitter2": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI=" + "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==" }, "node_modules/eventemitter3": { "version": "4.0.7", @@ -2370,9 +2344,9 @@ "dev": true }, "node_modules/fast-json-patch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.0.tgz", - "integrity": "sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -2383,7 +2357,8 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "node_modules/fast-url-parser": { "version": "1.1.3", @@ -2403,7 +2378,7 @@ "node_modules/fclone": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=" + "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==" }, "node_modules/file-entry-cache": { "version": "6.0.1", @@ -2417,14 +2392,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "engines": { - "node": ">= 6" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2576,22 +2543,13 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -2617,9 +2575,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" @@ -2664,19 +2622,33 @@ } }, "node_modules/get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "dependencies": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "engines": { - "node": ">= 6" + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/get-uri/node_modules/fs-extra": { @@ -2695,7 +2667,7 @@ "node_modules/get-uri/node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -2711,12 +2683,12 @@ "node_modules/git-node-fs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz", - "integrity": "sha1-SbIV4kLr5Dqkx1Ybu6SZUhdSCA8=" + "integrity": "sha512-bLQypt14llVXBg0S0u8q8HmU7g9p3ysH+NvVlae5vILuUvs759665HvmR5+wb04KjHyjFcDRxdYb4kyNnluMUQ==" }, "node_modules/git-sha1": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz", - "integrity": "sha1-WZrBkrcYdYJeE6RF86bgURjC90U=" + "integrity": "sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg==" }, "node_modules/glob": { "version": "7.2.0", @@ -2878,6 +2850,17 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -2903,21 +2886,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -2935,6 +2903,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -2974,6 +2943,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -3079,9 +3049,9 @@ } }, "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, "node_modules/is-bigint": { "version": "1.0.4", @@ -3135,11 +3105,11 @@ } }, "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3337,11 +3307,6 @@ "node": ">=0.10.0" } }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3385,9 +3350,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3455,7 +3420,7 @@ "node_modules/js-git": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz", - "integrity": "sha1-UvplWrYYd9bxB578ZTS1VPMeVEQ=", + "integrity": "sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==", "dependencies": { "bodec": "^0.1.0", "culvert": "^0.1.2", @@ -3514,13 +3479,13 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "optional": true }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -3541,9 +3506,9 @@ } }, "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -3554,19 +3519,11 @@ "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^5.6.0" + "semver": "^7.5.4" }, "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" + "node": ">=12", + "npm": ">=6" } }, "node_modules/jwa": { @@ -3591,7 +3548,7 @@ "node_modules/lazy": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=", + "integrity": "sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==", "engines": { "node": ">=0.2.0" } @@ -3735,11 +3692,11 @@ } }, "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" } }, "node_modules/make-dir": { @@ -3758,9 +3715,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -3805,9 +3762,9 @@ } }, "node_modules/mocha": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", - "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -3823,9 +3780,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -3879,15 +3836,15 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { - "node": "*" + "node": ">=10" } }, "node_modules/mocha/node_modules/ms": { @@ -3980,7 +3937,7 @@ "node_modules/module-details-from-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=" + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" }, "node_modules/ms": { "version": "2.1.2", @@ -3993,9 +3950,9 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -4091,7 +4048,7 @@ "node_modules/nssocket": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz", - "integrity": "sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo=", + "integrity": "sha512-a9GSOIql5IqgWJR3F/JXG4KpJTA3Z53Cj0MeMvGpglytB1nxE4PdFNC0jINe27CS7cGivoynwc054EzCcT3M3w==", "dependencies": { "eventemitter2": "~0.4.14", "lazy": "~1.0.11" @@ -4103,7 +4060,7 @@ "node_modules/nssocket/node_modules/eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" + "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==" }, "node_modules/nyc": { "version": "15.1.0", @@ -4436,35 +4393,85 @@ } }, "node_modules/pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/pac-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", - "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "dependencies": { - "degenerator": "^3.0.1", - "ip": "^1.1.5", - "netmask": "^2.0.1" + "degenerator": "^5.0.0", + "ip": "^1.1.8", + "netmask": "^2.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 14" } }, "node_modules/package-hash": { @@ -4485,7 +4492,7 @@ "node_modules/pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" }, "node_modules/parent-module": { "version": "1.0.1", @@ -4557,9 +4564,9 @@ } }, "node_modules/pidusage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.0.tgz", - "integrity": "sha512-8VJLToXhj+RYZGNVw8oxc7dS54iCQXUJ+MDFHezQ/fwF5B8W4OWodAMboc1wb08S/4LiHwAmkT4ohf/d3YPPsw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", + "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", "dependencies": { "safe-buffer": "^5.2.1" }, @@ -4669,9 +4676,9 @@ } }, "node_modules/pm2": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-5.2.0.tgz", - "integrity": "sha512-PO5hMVhQ85cTszFM++6v07Me9hPJMkFbHjkFigtMMk+La8ty2wCi2dlBTeZYJDhPUSjK8Ccltpq2buNRcyMOTw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-5.3.0.tgz", + "integrity": "sha512-xscmQiAAf6ArVmKhjKTeeN8+Td7ZKnuZFFPw1DGkdFPR/0Iyx+m+1+OpCdf9+HQopX3VPc9/wqPQHqVOfHum9w==", "dependencies": { "@pm2/agent": "~2.0.0", "@pm2/io": "~5.0.0", @@ -4680,11 +4687,11 @@ "async": "~3.2.0", "blessed": "0.1.81", "chalk": "3.0.0", - "chokidar": "^3.5.1", + "chokidar": "^3.5.3", "cli-tableau": "^2.0.0", "commander": "2.15.1", "croner": "~4.1.92", - "dayjs": "~1.8.25", + "dayjs": "~1.11.5", "debug": "^4.3.1", "enquirer": "2.3.6", "eventemitter2": "5.0.1", @@ -4698,7 +4705,7 @@ "pm2-multimeter": "^0.1.2", "promptly": "^2", "semver": "^7.2", - "source-map-support": "0.5.19", + "source-map-support": "0.5.21", "sprintf-js": "1.1.2", "vizion": "~2.2.1", "yamljs": "0.3.0" @@ -4774,6 +4781,12 @@ "tx2": "~1.0.4" } }, + "node_modules/pm2-sysmonit/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "optional": true + }, "node_modules/pm2-sysmonit/node_modules/pidusage": { "version": "2.0.21", "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz", @@ -4806,6 +4819,11 @@ ], "optional": true }, + "node_modules/pm2/node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "node_modules/pm2/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -4836,14 +4854,6 @@ "node": ">= 0.12.0" } }, - "node_modules/portfinder/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/portfinder/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -4893,21 +4903,72 @@ } }, "node_modules/proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", + "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", "dependencies": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, "node_modules/proxy-from-env": { @@ -4947,20 +5008,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/raw-body": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.0.tgz", - "integrity": "sha512-XpyZ6O7PVu3ItMQl0LslfsRoKxMOxi3SzDkrOtxMES5AqLFpYjQCryxI4LGygUN2jL+RgFsPkMPPlG7cg/47+A==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -4972,17 +5019,6 @@ "node": ">=0.8" } }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -5032,13 +5068,16 @@ } }, "node_modules/require-in-the-middle": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz", - "integrity": "sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", + "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", "dependencies": { "debug": "^4.1.1", "module-details-from-path": "^1.0.3", - "resolve": "^1.12.0" + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=6" } }, "node_modules/require-main-filename": { @@ -5053,11 +5092,11 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5132,9 +5171,9 @@ "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=" }, "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5176,11 +5215,6 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5235,11 +5269,11 @@ } }, "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -5248,18 +5282,50 @@ } }, "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5269,9 +5335,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -5299,14 +5365,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/steno": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/steno/-/steno-2.1.0.tgz", @@ -5327,11 +5385,6 @@ "stubs": "^3.0.0" } }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -5432,9 +5485,9 @@ } }, "node_modules/systeminformation": { - "version": "5.11.4", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.11.4.tgz", - "integrity": "sha512-rh7bjpjP5whUaTknim5CiGdAiKZcgWhmbmxjzBRXDWqUc/k67bz2OP+03DdcX6/SN/CDSAi/NeUwM5o2gjHJoA==", + "version": "5.21.20", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.20.tgz", + "integrity": "sha512-AyS1fNc+MDoAJtFknFbbo587H8h6yejJwM+H9rVusnOToIEkiMehMyD5JM7o3j55Cto20MawIZrcgNMgd4BfOQ==", "optional": true, "os": [ "darwin", @@ -5522,14 +5575,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -5556,7 +5601,7 @@ "node_modules/tv4": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", "engines": { "node": ">= 0.8.0" } @@ -5646,14 +5691,6 @@ "node": ">= 10.0.0" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5729,29 +5766,6 @@ "node": ">=4.0" } }, - "node_modules/vizion/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/vm2": { - "version": "3.9.8", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.8.tgz", - "integrity": "sha512-/1PYg/BwdKzMPo8maOZ0heT7DLI0DAFTm7YQaz/Lim9oIaFZsJs3EdtalvXuBfZwczNwsYhju75NW4d6E+4q+w==", - "dependencies": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" - }, - "bin": { - "vm2": "bin/vm2" - }, - "engines": { - "node": ">=6.0" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -5828,9 +5842,10 @@ "dev": true }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5894,14 +5909,6 @@ } } }, - "node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "engines": { - "node": "*" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -5910,11 +5917,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, "node_modules/yamljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", @@ -6016,12 +6018,71 @@ } }, "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { @@ -6054,39 +6115,29 @@ }, "dependencies": { "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/generator": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.3.tgz", - "integrity": "sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" } }, "@babel/helper-compilation-targets": { @@ -6102,49 +6153,36 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, "@babel/helper-module-imports": { @@ -6182,18 +6220,24 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.22.5" } }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true }, "@babel/helper-validator-option": { @@ -6214,13 +6258,13 @@ } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -6256,19 +6300,19 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -6283,9 +6327,9 @@ } }, "@babel/parser": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.3.tgz", - "integrity": "sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true }, "@babel/runtime": { @@ -6297,31 +6341,31 @@ } }, "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "dependencies": { @@ -6334,12 +6378,13 @@ } }, "@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -6477,26 +6522,43 @@ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@opencensus/core": { @@ -6512,9 +6574,9 @@ }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -6540,16 +6602,16 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, "@pm2/agent": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.0.1.tgz", - "integrity": "sha512-QKHMm6yexcvdDfcNE7PL9D6uEjoQPGRi+8dh+rc4Hwtbpsbh5IAvZbz3BVGjcd4HaX6pt2xGpOohG7/Y2L4QLw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.0.3.tgz", + "integrity": "sha512-xkqqCoTf5VsciMqN0vb9jthW7olVAi4KRFNddCc7ZkeJZ3i8QwZANr4NSH2H5DvseRFHq7MiPspRY/EWAFWWTg==", "requires": { "async": "~3.2.0", "chalk": "~3.0.0", @@ -6561,11 +6623,16 @@ "nssocket": "0.6.0", "pm2-axon": "~4.0.1", "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~5.0.0", - "semver": "~7.2.0", + "proxy-agent": "~6.3.0", + "semver": "~7.5.0", "ws": "~7.4.0" }, "dependencies": { + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -6575,10 +6642,10 @@ "supports-color": "^7.1.0" } }, - "semver": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz", - "integrity": "sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==" + "dayjs": { + "version": "1.8.36", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", + "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" }, "ws": { "version": "7.4.6", @@ -6589,9 +6656,9 @@ } }, "@pm2/io": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-5.0.0.tgz", - "integrity": "sha512-3rToDVJaRoob5Lq8+7Q2TZFruoEkdORxwzFpZaqF4bmH6Bkd7kAbdPrI/z8X6k1Meq5rTtScM7MmDgppH6aLlw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@pm2/io/-/io-5.0.2.tgz", + "integrity": "sha512-XAvrNoQPKOyO/jJyCu8jPhLzlyp35MEf7w/carHXmWKddPzeNOFSEpSEqMzPDawsvpxbE+i918cNN+MwgVsStA==", "requires": { "@opencensus/core": "0.0.9", "@opencensus/propagation-b3": "0.0.8", @@ -6599,29 +6666,16 @@ "debug": "~4.3.1", "eventemitter2": "^6.3.1", "require-in-the-middle": "^5.0.0", - "semver": "6.3.0", + "semver": "~7.5.4", "shimmer": "^1.2.0", "signal-exit": "^3.0.3", "tslib": "1.9.3" }, "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, "eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" } } }, @@ -6637,23 +6691,15 @@ "ws": "^7.0.0" }, "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, "eventemitter2": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.5.tgz", - "integrity": "sha512-bXE7Dyc1i6oQElDG0jMRZJrRAn9QR2xyyFGmBdZleNmyQX0FqGYmhZIrIrpPfm/w//LTo4tVQGOGQcGCb5q9uw==" + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==" }, "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "requires": {} } } @@ -6669,7 +6715,13 @@ "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" }, "@types/istanbul-lib-coverage": { "version": "2.0.4", @@ -6692,7 +6744,8 @@ "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true }, "acorn-jsx": { "version": "5.3.2", @@ -6701,15 +6754,11 @@ "dev": true, "requires": {} }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "requires": { "debug": "4" } @@ -6739,12 +6788,12 @@ "amp": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz", - "integrity": "sha1-at+NWKdPNh6CwfqNOJwHnhOfxH0=" + "integrity": "sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw==" }, "amp-message": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz", - "integrity": "sha1-p48cmJlQh602GSpBKY5NtJ49/EU=", + "integrity": "sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg==", "requires": { "amp": "0.3.1" } @@ -6829,6 +6878,11 @@ "es-abstract": "^1.19.0" } }, + "ascii-captcha": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/ascii-captcha/-/ascii-captcha-0.0.3.tgz", + "integrity": "sha512-dxpezvW1gO/qZTUiLuVEkuuo4YPdX6figilAgbtXfSvyHqXZhZnzSwxdZKQpS/8btIH2S/2k072NHJ4WHoG4pg==" + }, "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -6844,16 +6898,19 @@ }, "dependencies": { "tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } }, "async-listener": { "version": "0.6.10", @@ -6865,9 +6922,9 @@ }, "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, @@ -6892,6 +6949,11 @@ "safe-buffer": "5.1.2" } }, + "basic-ftp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz", + "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -6905,7 +6967,7 @@ "bodec": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz", - "integrity": "sha1-vIUVVUMPI8n3ZQp172TGqUw0GMw=" + "integrity": "sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==" }, "brace-expansion": { "version": "1.1.11", @@ -6953,11 +7015,6 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, "c8": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.0.tgz", @@ -7246,11 +7303,6 @@ "safe-buffer": "~5.1.1" } }, - "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==" - }, "corser": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", @@ -7275,17 +7327,17 @@ "culvert": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz", - "integrity": "sha1-lQL18BVKLVoioCPnn3HMk2+m728=" + "integrity": "sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==" }, "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz", + "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==" }, "dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" }, "debug": { "version": "4.3.3", @@ -7313,7 +7365,8 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "default-require-extensions": { "version": "3.0.0", @@ -7342,21 +7395,15 @@ } }, "degenerator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", - "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "requires": { - "ast-types": "^0.13.2", - "escodegen": "^1.8.1", - "esprima": "^4.0.0", - "vm2": "^3.9.8" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" } }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, "didyoumean2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/didyoumean2/-/didyoumean2-4.2.0.tgz", @@ -7473,52 +7520,14 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "requires": { "esprima": "^4.0.1", - "estraverse": "^4.2.0", + "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1", "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - } } }, "eslint": { @@ -7588,9 +7597,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -7692,14 +7701,6 @@ "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "eslint-utils": { @@ -7753,14 +7754,6 @@ "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "esrecurse": { @@ -7770,20 +7763,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" }, "esutils": { "version": "2.0.3", @@ -7793,7 +7778,7 @@ "eventemitter2": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha1-YZegldX7a1folC9v1+qtY6CclFI=" + "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==" }, "eventemitter3": { "version": "4.0.7", @@ -7807,9 +7792,9 @@ "dev": true }, "fast-json-patch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.0.tgz", - "integrity": "sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" }, "fast-json-stable-stringify": { "version": "2.1.0", @@ -7820,7 +7805,8 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fast-url-parser": { "version": "1.1.3", @@ -7842,7 +7828,7 @@ "fclone": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha1-EOhdo4v+p/xZk0HClu4ddyZu5kA=" + "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==" }, "file-entry-cache": { "version": "6.0.1", @@ -7853,11 +7839,6 @@ "flat-cache": "^3.0.4" } }, - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7950,19 +7931,10 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - } - }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "functional-red-black-tree": { "version": "1.0.1", @@ -7982,9 +7954,9 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true }, "get-intrinsic": { @@ -8014,18 +7986,24 @@ } }, "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", + "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==", "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.0", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -8039,7 +8017,7 @@ "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "requires": { "graceful-fs": "^4.1.6" } @@ -8054,12 +8032,12 @@ "git-node-fs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz", - "integrity": "sha1-SbIV4kLr5Dqkx1Ybu6SZUhdSCA8=" + "integrity": "sha512-bLQypt14llVXBg0S0u8q8HmU7g9p3ysH+NvVlae5vILuUvs759665HvmR5+wb04KjHyjFcDRxdYb4kyNnluMUQ==" }, "git-sha1": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz", - "integrity": "sha1-WZrBkrcYdYJeE6RF86bgURjC90U=" + "integrity": "sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg==" }, "glob": { "version": "7.2.0", @@ -8166,6 +8144,14 @@ } } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -8185,18 +8171,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -8211,6 +8185,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "requires": { "@tootallnate/once": "1", "agent-base": "6", @@ -8241,6 +8216,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -8322,9 +8298,9 @@ } }, "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, "is-bigint": { "version": "1.0.4", @@ -8360,11 +8336,11 @@ "dev": true }, "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-date-object": { @@ -8487,11 +8463,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -8526,9 +8497,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -8583,7 +8554,7 @@ "js-git": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz", - "integrity": "sha1-UvplWrYYd9bxB578ZTS1VPMeVEQ=", + "integrity": "sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==", "requires": { "bodec": "^0.1.0", "culvert": "^0.1.2", @@ -8635,13 +8606,13 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "optional": true }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -8657,9 +8628,9 @@ } }, "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "requires": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -8670,14 +8641,7 @@ "lodash.isstring": "^4.0.1", "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "semver": "^7.5.4" } }, "jwa": { @@ -8702,7 +8666,7 @@ "lazy": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=" + "integrity": "sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==" }, "leven": { "version": "3.1.0", @@ -8819,12 +8783,9 @@ } }, "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" }, "make-dir": { "version": "3.1.0", @@ -8836,9 +8797,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -8867,9 +8828,9 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mocha": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.1.tgz", - "integrity": "sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -8885,9 +8846,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -8918,9 +8879,9 @@ } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -8991,7 +8952,7 @@ "module-details-from-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is=" + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" }, "ms": { "version": "2.1.2", @@ -9004,9 +8965,9 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, "natural-compare": { @@ -9072,7 +9033,7 @@ "nssocket": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.6.0.tgz", - "integrity": "sha1-Wflvb/MhVm8zxw99vu7N/cBxVPo=", + "integrity": "sha512-a9GSOIql5IqgWJR3F/JXG4KpJTA3Z53Cj0MeMvGpglytB1nxE4PdFNC0jINe27CS7cGivoynwc054EzCcT3M3w==", "requires": { "eventemitter2": "~0.4.14", "lazy": "~1.0.11" @@ -9081,7 +9042,7 @@ "eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" + "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==" } } }, @@ -9340,29 +9301,64 @@ "dev": true }, "pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", + "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==", "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + } } }, "pac-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", - "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz", + "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==", "requires": { - "degenerator": "^3.0.1", - "ip": "^1.1.5", - "netmask": "^2.0.1" + "degenerator": "^5.0.0", + "ip": "^1.1.8", + "netmask": "^2.0.2" } }, "package-hash": { @@ -9380,7 +9376,7 @@ "pako": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" }, "parent-module": { "version": "1.0.1", @@ -9431,9 +9427,9 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pidusage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.0.tgz", - "integrity": "sha512-8VJLToXhj+RYZGNVw8oxc7dS54iCQXUJ+MDFHezQ/fwF5B8W4OWodAMboc1wb08S/4LiHwAmkT4ohf/d3YPPsw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", + "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", "requires": { "safe-buffer": "^5.2.1" }, @@ -9506,9 +9502,9 @@ } }, "pm2": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-5.2.0.tgz", - "integrity": "sha512-PO5hMVhQ85cTszFM++6v07Me9hPJMkFbHjkFigtMMk+La8ty2wCi2dlBTeZYJDhPUSjK8Ccltpq2buNRcyMOTw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-5.3.0.tgz", + "integrity": "sha512-xscmQiAAf6ArVmKhjKTeeN8+Td7ZKnuZFFPw1DGkdFPR/0Iyx+m+1+OpCdf9+HQopX3VPc9/wqPQHqVOfHum9w==", "requires": { "@pm2/agent": "~2.0.0", "@pm2/io": "~5.0.0", @@ -9517,11 +9513,11 @@ "async": "~3.2.0", "blessed": "0.1.81", "chalk": "3.0.0", - "chokidar": "^3.5.1", + "chokidar": "^3.5.3", "cli-tableau": "^2.0.0", "commander": "2.15.1", "croner": "~4.1.92", - "dayjs": "~1.8.25", + "dayjs": "~1.11.5", "debug": "^4.3.1", "enquirer": "2.3.6", "eventemitter2": "5.0.1", @@ -9536,12 +9532,17 @@ "pm2-sysmonit": "^1.2.8", "promptly": "^2", "semver": "^7.2", - "source-map-support": "0.5.19", + "source-map-support": "0.5.21", "sprintf-js": "1.1.2", "vizion": "~2.2.1", "yamljs": "0.3.0" }, "dependencies": { + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -9607,6 +9608,12 @@ "tx2": "~1.0.4" }, "dependencies": { + "async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "optional": true + }, "pidusage": { "version": "2.0.21", "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz", @@ -9634,14 +9641,6 @@ "mkdirp": "^0.5.5" }, "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -9684,18 +9683,54 @@ } }, "proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", + "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + } } }, "proxy-from-env": { @@ -9726,17 +9761,6 @@ "safe-buffer": "^5.1.0" } }, - "raw-body": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.0.tgz", - "integrity": "sha512-XpyZ6O7PVu3ItMQl0LslfsRoKxMOxi3SzDkrOtxMES5AqLFpYjQCryxI4LGygUN2jL+RgFsPkMPPlG7cg/47+A==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", @@ -9745,17 +9769,6 @@ "mute-stream": "~0.0.4" } }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -9790,13 +9803,13 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-in-the-middle": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz", - "integrity": "sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", + "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", "requires": { "debug": "^4.1.1", "module-details-from-path": "^1.0.3", - "resolve": "^1.12.0" + "resolve": "^1.22.1" } }, "require-main-filename": { @@ -9811,11 +9824,11 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { - "is-core-module": "^2.8.1", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -9861,9 +9874,9 @@ "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=" }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" }, @@ -9898,11 +9911,6 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -9944,22 +9952,47 @@ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" }, "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "requires": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + } } }, "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz", + "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==", "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + } } }, "source-map": { @@ -9968,9 +10001,9 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9995,11 +10028,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, "steno": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/steno/-/steno-2.1.0.tgz", @@ -10014,11 +10042,6 @@ "stubs": "^3.0.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -10089,9 +10112,9 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "systeminformation": { - "version": "5.11.4", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.11.4.tgz", - "integrity": "sha512-rh7bjpjP5whUaTknim5CiGdAiKZcgWhmbmxjzBRXDWqUc/k67bz2OP+03DdcX6/SN/CDSAi/NeUwM5o2gjHJoA==", + "version": "5.21.20", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.20.tgz", + "integrity": "sha512-AyS1fNc+MDoAJtFknFbbo587H8h6yejJwM+H9rVusnOToIEkiMehMyD5JM7o3j55Cto20MawIZrcgNMgd4BfOQ==", "optional": true }, "teeny-request": { @@ -10146,11 +10169,6 @@ "is-number": "^7.0.0" } }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -10177,7 +10195,7 @@ "tv4": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=" + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==" }, "tx2": { "version": "1.0.5", @@ -10243,11 +10261,6 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -10310,25 +10323,6 @@ "git-node-fs": "^1.0.0", "ini": "^1.3.5", "js-git": "^0.7.8" - }, - "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - } - } - }, - "vm2": { - "version": "3.9.8", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.8.tgz", - "integrity": "sha512-/1PYg/BwdKzMPo8maOZ0heT7DLI0DAFTm7YQaz/Lim9oIaFZsJs3EdtalvXuBfZwczNwsYhju75NW4d6E+4q+w==", - "requires": { - "acorn": "^8.7.0", - "acorn-walk": "^8.2.0" } }, "webidl-conversions": { @@ -10394,9 +10388,10 @@ "dev": true }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true }, "workerpool": { "version": "6.2.0", @@ -10437,21 +10432,11 @@ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "requires": {} }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=" - }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, "yamljs": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", diff --git a/package.json b/package.json index 3861229..a5e8980 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hack.chat-v2", - "version": "2.2.0", + "version": "2.2.1", "type": "module", "description": "a minimal distraction free chat application", "main": "main.mjs", @@ -27,15 +27,16 @@ "test": "npm run lint && c8 mocha --exit ./test/*.test.js", "makedocs": "jsdoc -c jsdoc.json" }, - "author": "Marzavec", + "author": "marzavec", "license": "MIT", "dependencies": { + "ascii-captcha": "^0.0.3", "enquirer": "^2.3.6", "hackchat-server": "^2.2.27", "http-server": "^14.1.0", - "jsonwebtoken": "^8.5.1", + "jsonwebtoken": "^9.0.2", "lowdb": "^3.0.0", - "pm2": "^5.2.0" + "pm2": "^5.3.0" }, "devDependencies": { "c8": "^7.11.0", diff --git a/scripts/config.js b/scripts/config.js index eb8e875..89d3d80 100644 --- a/scripts/config.js +++ b/scripts/config.js @@ -18,8 +18,6 @@ const SessionLocation = './session.key'; const SaltLocation = './salt.key'; const AppConfigLocation = './config.json'; -const TripLength = 10; - // default configuration options const defaultConfig = { adminTrip: '', @@ -107,7 +105,7 @@ const checkPermissions = async () => { const sha = crypto.createHash('sha256'); sha.update(password + salt); - config.data.adminTrip = sha.digest('base64').substr(0, TripLength); + config.data.adminTrip = sha.digest('base64').substr(0, 6); await config.write(); } else { diff --git a/test/changenick.test.js b/test/changenick.test.js index 09c5fea..cdc6c39 100644 --- a/test/changenick.test.js +++ b/test/changenick.test.js @@ -91,6 +91,20 @@ describe('Checking changenick module', () => { expect(resp).to.be.true; }); + + it('should prevent admin impersonation', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'changenick', + nick: 'admin', + }, + }); + + expect(resp).to.be.true; + }); it('should not update if there is no change', async () => { const resp = await importedModule.run({ diff --git a/test/chat.test.js b/test/chat.test.js index 9615572..dfeaa90 100644 --- a/test/chat.test.js +++ b/test/chat.test.js @@ -121,6 +121,23 @@ describe('Checking chat module', () => { expect(resp).to.be.true; }); + it('should reject too long of customId', async () => { + const newPayload = { ...mockPayload }; + newPayload.customId = '1234567890'; + + const newSocket = { ...mocks.plebSocket }; + newSocket.color = '000000'; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: newSocket, + payload: newPayload, + }); + + expect(resp).to.be.false; + }); + it('should initialize hooks', async () => { expect(() => importedModule.initHooks(mocks.server)).not.to.throw(); }); @@ -195,4 +212,15 @@ describe('Checking chat module', () => { expect(resp).to.be.an('object'); }); + + it('should cleanup old active messages', async () => { + importedModule.ACTIVE_MESSAGES.push({ + customId: '1234', + userid: 1234, + sent: 0, + toDelete: false, + }); + + expect(() => importedModule.cleanActiveMessages()).not.to.throw(); + }); }); \ No newline at end of file diff --git a/test/disablecaptcha.test.js b/test/disablecaptcha.test.js new file mode 100644 index 0000000..079dc08 --- /dev/null +++ b/test/disablecaptcha.test.js @@ -0,0 +1,100 @@ +import { expect } from 'chai'; +import mocks from './mockImports.js'; + +const modulePath = '../commands/mod/disablecaptcha.js'; +let importedModule; + +const mockPayload = { + cmd: 'disablecaptcha', +} + +const mockChannelPayload = { + cmd: 'disablecaptcha', + channel: 'test', +} + +describe('Checking disablecaptcha module', () => { + // module meta data + it('should be importable', async () => { + importedModule = await import(modulePath); + expect(importedModule).to.not.be.a('string'); + }); + + it('should be named', async () => { + expect(importedModule.info.name).to.be.a('string'); + }); + + it('should be categorized', async () => { + expect(importedModule.info.category).to.be.a('string'); + }); + + it('should be described', async () => { + expect(importedModule.info.description).to.be.a('string'); + }); + + it('should be documented', async () => { + expect(importedModule.info.usage).to.be.a('string'); + }); + + it('should be invokable', async () => { + expect(importedModule.run).to.be.a('function'); + }); + + it('should initialize', async () => { + mocks.core.captchas = undefined; + const resp = importedModule.init(mocks.core); + + expect(mocks.core.captchas).to.be.an('object'); + }); + + // module main function + it('should be invokable only by a mod', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: mockPayload, + }); + + expect(resp).to.be.false; + }); + + it('should accept a channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChannelPayload, + }); + + expect(resp).to.be.true; + }); + + it('should accept no channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + expect(resp).to.be.true; + }); + + it('should fail on missing channel data', async () => { + const origChannel = mocks.authedSocket.channel; + mocks.authedSocket.channel = undefined; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + mocks.authedSocket.channel = origChannel; + + expect(resp).to.be.false; + }); + +}); \ No newline at end of file diff --git a/test/dumb.test.js b/test/dumb.test.js index 2c463c3..0608dd1 100644 --- a/test/dumb.test.js +++ b/test/dumb.test.js @@ -191,25 +191,30 @@ describe('Checking dumb module', () => { expect(resp).to.be.false; }); - it('should shadow block invite attempts', async () => { - mocks.core.muzzledHashes['testHash'] = true; + it('should shadow block chat attempts, checking for allies', async () => { + mocks.core.muzzledHashes['testHash'] = { + dumb: true, + allies: [1234], + }; mocks.plebSocket.hcProtocol = 1; + const newSocket = Object.assign({}, mocks.plebSocket); + newSocket.hash = 'cantcatchme'; - const resp = importedModule.inviteCheck({ + const resp = importedModule.chatCheck({ core: mocks.core, server: mocks.server, - socket: mocks.plebSocket, + socket: newSocket, payload: { cmd: 'chat', - text: [], + text: 'test', channel: 'cake', }, }); - expect(resp).to.be.true; + expect(resp).to.be.an('object'); }); - it('should shadow block invite attempts with ratelimiting', async () => { + it('should ratelimit invites', async () => { const oldRL = mocks.server.police.frisk; mocks.server.police.frisk = () => true; @@ -221,9 +226,9 @@ describe('Checking dumb module', () => { server: mocks.server, socket: mocks.plebSocket, payload: { - cmd: 'chat', - text: [], - channel: 'cake', + cmd: 'invite', + userid: 12, + channel: 'test', }, }); @@ -232,7 +237,7 @@ describe('Checking dumb module', () => { expect(resp).to.be.true; }); - it('should verify userid params on shadow block invite attempts', async () => { + it('should validate v2 clients userid param', async () => { mocks.core.muzzledHashes['testHash'] = true; mocks.plebSocket.hcProtocol = 2; @@ -241,17 +246,16 @@ describe('Checking dumb module', () => { server: mocks.server, socket: mocks.plebSocket, payload: { - cmd: 'chat', - userid: '1234', - text: [], - channel: 'cake', + cmd: 'invite', + userid: 'test', + channel: 1, }, }); expect(resp).to.be.true; }); - it('should verify channel params on shadow block invite attempts', async () => { + it('should validate v2 clients channel param', async () => { mocks.core.muzzledHashes['testHash'] = true; mocks.plebSocket.hcProtocol = 2; @@ -260,16 +264,123 @@ describe('Checking dumb module', () => { server: mocks.server, socket: mocks.plebSocket, payload: { - cmd: 'chat', - userid: 1234, - text: [], - channel: false, + cmd: 'invite', + userid: 12, + channel: 1, }, }); expect(resp).to.be.true; }); + it('should give warning if user is missing', async () => { + const origFindSockets = mocks.server.findSockets; + mocks.server.findSockets = () => false; + mocks.core.muzzledHashes['testHash'] = true; + mocks.plebSocket.hcProtocol = 2; + + const resp = importedModule.inviteCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'invite', + userid: 12, + channel: 'test', + }, + }); + + mocks.server.findSockets = origFindSockets; + + expect(resp).to.be.true; + }); + + it('should handle v2 output', async () => { + const origFindSockets = mocks.server.findSockets; + mocks.server.findSockets = () => [mocks.plebSocket]; + mocks.core.muzzledHashes['testHash'] = true; + mocks.plebSocket.hcProtocol = 2; + + const resp = importedModule.inviteCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'invite', + userid: 12, + channel: 'test', + }, + }); + + mocks.server.findSockets = origFindSockets; + + expect(resp).to.be.false; + }); + + it('should validate v1 clients channel', async () => { + const origPlebSocket = {...mocks.plebSocket}; + mocks.core.muzzledHashes['testHash'] = true; + mocks.plebSocket.hcProtocol = 1; + mocks.plebSocket.channel = undefined; + + const resp = importedModule.inviteCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'invite', + nick: 'test', + channel: 1, + }, + }); + + mocks.plebSocket = origPlebSocket; + + expect(resp).to.be.true; + }); + + it('should validate v1 clients nick param', async () => { + const origPlebSocket = {...mocks.plebSocket}; + mocks.core.muzzledHashes['testHash'] = true; + mocks.plebSocket.hcProtocol = 1; + + const resp = importedModule.inviteCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'invite', + nick: 0, + channel: 'test', + }, + }); + + mocks.plebSocket = origPlebSocket; + + expect(resp).to.be.true; + }); + + it('should handle v1 output', async () => { + const origPlebSocket = {...mocks.plebSocket}; + mocks.core.muzzledHashes['testHash'] = true; + mocks.plebSocket.hcProtocol = 1; + + const resp = importedModule.inviteCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'invite', + nick: 'test', + channel: 'test', + }, + }); + + mocks.plebSocket = origPlebSocket; + + expect(resp).to.be.false; + }); + it('should accept an allies param', async () => { mockPayload.allies = [1234, 5678]; const resp = await importedModule.run({ diff --git a/test/enablecaptcha.test.js b/test/enablecaptcha.test.js new file mode 100644 index 0000000..677bf50 --- /dev/null +++ b/test/enablecaptcha.test.js @@ -0,0 +1,222 @@ +import { expect } from 'chai'; +import mocks from './mockImports.js'; + +const modulePath = '../commands/mod/enablecaptcha.js'; +let importedModule; + +const targetChannel = 'test'; + +const mockPayload = { + cmd: 'enablecaptcha', +} + +const mockChannelPayload = { + cmd: 'enablecaptcha', + channel: targetChannel, +} + +const mockBadChatPayload = { + cmd: 'chat', + text: {}, +} + +const mockChatPayload = { + cmd: 'chat', + text: 'asdf', +} + +const mockJoinPayload = { + cmd: 'join', + nick: 'test#test', + channel: 'test', +} + +describe('Checking enablecaptcha module', () => { + // module meta data + it('should be importable', async () => { + importedModule = await import(modulePath); + expect(importedModule).to.not.be.a('string'); + }); + + it('should be named', async () => { + expect(importedModule.info.name).to.be.a('string'); + }); + + it('should be categorized', async () => { + expect(importedModule.info.category).to.be.a('string'); + }); + + it('should be described', async () => { + expect(importedModule.info.description).to.be.a('string'); + }); + + it('should be documented', async () => { + expect(importedModule.info.usage).to.be.a('string'); + }); + + it('should be invokable', async () => { + expect(importedModule.run).to.be.a('function'); + }); + + it('should initialize', async () => { + mocks.core.captchas = undefined; + const resp = importedModule.init(mocks.core); + + expect(mocks.core.captchas).to.be.an('object'); + }); + + // module main function + it('should be invokable only by a mod', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: mockPayload, + }); + + expect(resp).to.be.false; + }); + + it('should accept a channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChannelPayload, + }); + + expect(resp).to.be.true; + }); + + it('should accept no channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + expect(resp).to.be.true; + }); + + it('should fail on missing channel data', async () => { + const origChannel = mocks.authedSocket.channel; + mocks.authedSocket.channel = undefined; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + mocks.authedSocket.channel = origChannel; + + expect(resp).to.be.false; + }); + + it('should fail if already enabled', async () => { + const origCaptchas = mocks.core.captchas; + mocks.core.captchas = { [mocks.authedSocket.channel]: true }; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + mocks.core.captchas = origCaptchas; + + expect(resp).to.be.true; + }); + + it('should initialize hooks', async () => { + expect(() => importedModule.initHooks(mocks.server)).not.to.throw(); + }); + + it('should reject chat if not text', async () => { + const resp = await importedModule.chatCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockBadChatPayload, + }); + + expect(resp).to.be.false; + }); + + it('should return if channel is not enabled', async () => { + const resp = await importedModule.chatCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChatPayload, + }); + + expect(resp).to.be.an('object'); + }); + + it('should disconnect on failed captcha', async () => { + mocks.authedSocket.captcha = {}; + mocks.authedSocket.captcha.awaiting = true; + + const resp = await importedModule.chatCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChatPayload, + }); + + expect(resp).to.be.false; + }); + + it('should join with correct phrase', async () => { + mocks.authedSocket.captcha = {}; + mocks.authedSocket.captcha.awaiting = true; + mocks.authedSocket.captcha.solution = mockChatPayload.text; + + const resp = await importedModule.chatCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChatPayload, + }); + + expect(resp).to.be.false; + }); + + it('should handle legacy clients', async () => { + mocks.authedSocket.captcha = {}; + mocks.authedSocket.captcha.awaiting = true; + mocks.authedSocket.captcha.solution = mockChatPayload.text; + + const origProtocol = mocks.authedSocket.hcProtocol; + mocks.authedSocket.hcProtocol = 1; + + const resp = await importedModule.chatCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChatPayload, + }); + + mocks.authedSocket.hcProtocol = origProtocol; + + expect(resp).to.be.false; + }); + + it('should hook join commands', async () => { + mocks.core.captchas = {}; + + const resp = await importedModule.joinCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockJoinPayload, + }); + + expect(resp).to.be.an('object'); + }); + +}); \ No newline at end of file diff --git a/test/join.test.js b/test/join.test.js index 2da3bca..6867d2d 100644 --- a/test/join.test.js +++ b/test/join.test.js @@ -139,6 +139,25 @@ describe('Checking join module', () => { expect(resp).to.be.true; }); + it('should prevent admin impersonation', async () => { + const newSocket = Object.assign({}, mocks.authedSocket); + newSocket.channel = undefined; + newSocket.hcProtocol = undefined; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: newSocket, + payload: { + cmd: 'join', + nick: 'admin#test', + channel: 'cake', + }, + }); + + expect(resp).to.be.true; + }); + it('should prevent two of the same name in the same channel', async () => { const newSocket = Object.assign({}, mocks.authedSocket); newSocket.channel = undefined; diff --git a/test/lockroom.test.js b/test/lockroom.test.js new file mode 100644 index 0000000..aab81ee --- /dev/null +++ b/test/lockroom.test.js @@ -0,0 +1,413 @@ +import { expect } from 'chai'; +import mocks from './mockImports.js'; + +const modulePath = '../commands/mod/lockroom.js'; +let importedModule; + +const targetChannel = 'test'; + +const mockPayload = { + cmd: 'lockroom', +} + +const mockChannelPayload = { + cmd: 'lockroom', + channel: targetChannel, +} + +const mockBadChatPayload = { + cmd: 'chat', + text: {}, +} + +const mockChatPayload = { + cmd: 'chat', + text: 'asdf', +} + +const mockJoinPayload = { + cmd: 'join', + nick: 'test#test', + channel: 'test', +} + +const timeout = (ms) => { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +describe('Checking lockroom module', () => { + // module meta data + it('should be importable', async () => { + importedModule = await import(modulePath); + expect(importedModule).to.not.be.a('string'); + }); + + it('should be named', async () => { + expect(importedModule.info.name).to.be.a('string'); + }); + + it('should be categorized', async () => { + expect(importedModule.info.category).to.be.a('string'); + }); + + it('should be described', async () => { + expect(importedModule.info.description).to.be.a('string'); + }); + + it('should be documented', async () => { + expect(importedModule.info.usage).to.be.a('string'); + }); + + it('should be invokable', async () => { + expect(importedModule.run).to.be.a('function'); + }); + + it('should initialize', async () => { + mocks.core.locked = undefined; + const resp = importedModule.init(mocks.core); + + expect(mocks.core.locked).to.be.an('object'); + }); + + // module main function + it('should be invokable only by a mod', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: mockPayload, + }); + + expect(resp).to.be.false; + }); + + it('should accept a channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChannelPayload, + }); + + expect(resp).to.be.true; + }); + + it('should accept no channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + expect(resp).to.be.true; + }); + + it('should fail on missing channel data', async () => { + const origChannel = mocks.authedSocket.channel; + mocks.authedSocket.channel = undefined; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + mocks.authedSocket.channel = origChannel; + + expect(resp).to.be.false; + }); + + it('should fail if already enabled', async () => { + mocks.core.locked = { test: true }; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChannelPayload, + }); + + mocks.core.locked = {}; + + expect(resp).to.be.true; + }); + + it('should initialize hooks', async () => { + expect(() => importedModule.initHooks(mocks.server)).not.to.throw(); + }); + + // change nick hook checks + it('should prevent name changes in purgatory channel', async () => { + const origChannel = mocks.authedSocket.channel; + mocks.authedSocket.channel = 'purgatory'; + + const resp = await importedModule.changeNickCheck({ + socket: mocks.authedSocket, + payload: { + cmd: 'changenick', + nick: 'test', + }, + }); + + mocks.authedSocket.channel = origChannel; + + expect(resp).to.be.false; + }); + + it('should ignore name changes in other channels', async () => { + const resp = await importedModule.changeNickCheck({ + socket: mocks.authedSocket, + payload: { + cmd: 'changenick', + nick: 'test', + }, + }); + + expect(resp).to.be.an('object'); + }); + + // whisper hook checks + it('should prevent whispers in purgatory channel', async () => { + const origChannel = mocks.authedSocket.channel; + mocks.authedSocket.channel = 'purgatory'; + + const resp = await importedModule.whisperCheck({ + socket: mocks.authedSocket, + payload: { + cmd: 'whisper', + }, + }); + + mocks.authedSocket.channel = origChannel; + + expect(resp).to.be.false; + }); + + it('should ignore whispers in other channels', async () => { + const resp = await importedModule.whisperCheck({ + socket: mocks.authedSocket, + payload: { + cmd: 'whisper', + }, + }); + + expect(resp).to.be.an('object'); + }); + + // chat hook checks + it('should prevent chats in purgatory channel', async () => { + const plebSocket = { ...mocks.plebSocket }; + plebSocket.channel = 'purgatory'; + + const resp = await importedModule.chatCheck({ + socket: plebSocket, + payload: { + cmd: 'chat', + text: 'test', + }, + }); + + expect(resp).to.be.false; + }); + + it('should allow mods to speak though', async () => { + const origChannel = mocks.authedSocket.channel; + mocks.authedSocket.channel = 'purgatory'; + + const resp = await importedModule.chatCheck({ + socket: mocks.authedSocket, + payload: { + cmd: 'chat', + text: 'test', + }, + }); + + mocks.authedSocket.channel = origChannel; + + expect(resp).to.be.an('object'); + }); + + it('should ignore chats in other channels', async () => { + const resp = await importedModule.chatCheck({ + socket: mocks.authedSocket, + payload: { + cmd: 'chat', + text: 'test', + }, + }); + + expect(resp).to.be.an('object'); + }); + + // invite hook checks + it('should prevent invites in purgatory channel', async () => { + const plebSocket = { ...mocks.plebSocket }; + plebSocket.channel = 'purgatory'; + + const resp = await importedModule.inviteCheck({ + socket: plebSocket, + payload: { + cmd: 'chat', + text: 'test', + }, + }); + + expect(resp).to.be.false; + }); + + it('should ignore invites in other channels', async () => { + const resp = await importedModule.inviteCheck({ + socket: mocks.authedSocket, + payload: { + cmd: 'chat', + text: 'test', + }, + }); + + expect(resp).to.be.an('object'); + }); + + // join hook checks + it('should ignore join if no lock record', async () => { + mocks.core.locked = {}; + + const resp = await importedModule.joinCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'join', + channel: 'test', + nick: 'test', + pass: 'test', + }, + }); + + expect(resp).to.be.an('object'); + }); + + it('should ignore join if not locked or purgatory', async () => { + mocks.core.locked = { test: false }; + + const resp = await importedModule.joinCheck({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'join', + channel: 'test', + nick: 'test', + pass: 'test', + }, + }); + + expect(resp).to.be.an('object'); + }); + + it('should allow v2 into purgatory', async () => { + const plebSocket = { ...mocks.plebSocket }; + plebSocket.channel = 'used'; + mocks.core.locked = {}; + + const resp = await importedModule.joinCheck({ + core: mocks.core, + server: mocks.server, + socket: plebSocket, + payload: { + cmd: 'join', + channel: 'purgatory', + nick: 'test', + }, + }); + + expect(resp).to.be.true; + }); + + it('should allow v1 into purgatory', async () => { + const plebSocket = { ...mocks.plebSocket }; + plebSocket.channel = undefined; + plebSocket.hcProtocol = undefined; + mocks.core.locked = {}; + + const resp = await importedModule.joinCheck({ + core: mocks.core, + server: mocks.server, + socket: plebSocket, + payload: { + cmd: 'join', + channel: 'purgatory', + nick: 'thisnameistoolongandwillberejected', + }, + }); + + expect(resp).to.be.true; + }); + + it('should wait for the timeout to run', async () => { + const mockServer = { ...mocks.server }; + const plebSocket = { ...mocks.plebSocket }; + + plebSocket.channel = undefined; + plebSocket.hcProtocol = undefined; + mocks.core.locked = {}; + + mockServer.reply = () => {}; + + await importedModule.joinCheck({ + core: mocks.core, + server: mockServer, + socket: plebSocket, + payload: { + cmd: 'join', + channel: 'purgatory', + nick: 'test', + }, + }); + }); + + it('should do channel checking', async () => { + const plebSocket = { ...mocks.plebSocket }; + plebSocket.channel = undefined; + plebSocket.hcProtocol = undefined; + plebSocket.banned = true; + mocks.core.locked = {}; + + const resp = await importedModule.joinCheck({ + core: mocks.core, + server: mocks.server, + socket: plebSocket, + payload: { + cmd: 'join', + channel: 'purgatory', + nick: 'test', + pass: 'test', + }, + }); + + expect(resp).to.be.true; + }); + + it('should use dante if not needed', async () => { + const mockServer = { ...mocks.server }; + const plebSocket = { ...mocks.plebSocket }; + + plebSocket.channel = undefined; + plebSocket.hcProtocol = undefined; + mocks.core.locked = { lockedChan: true }; + + mockServer.reply = () => {}; + + const resp = await importedModule.joinCheck({ + core: mocks.core, + server: mockServer, + socket: plebSocket, + payload: { + cmd: 'join', + channel: 'lockedChan', + nick: 'test', + }, + }); + }); +}); \ No newline at end of file diff --git a/test/mockImports.js b/test/mockImports.js index 48df539..5b9627b 100644 --- a/test/mockImports.js +++ b/test/mockImports.js @@ -1,6 +1,7 @@ const mocks = { core: { sessionKey: 'test', + appConfig: { data: { globalMods: [], @@ -15,18 +16,23 @@ const mocks = { }, write: async () => '', }, + muzzledHashes: [], + stats: { increment: () => 1, decrement: () => 1, get: () => 1, set: () => 1, }, + dynamicImports: { reloadDirCache: () => '', }, + commands: { reloadCommands: () => '', + handleCommand: () => '', commands: [], categoriesList: ['test'], all: () => [{ @@ -56,10 +62,12 @@ const mocks = { } }, }, + configManager: { save: () => true, }, }, + server : { police: { addresses: [], @@ -85,6 +93,7 @@ const mocks = { }], getSocketHash: () => 'test', }, + plebSocket: { level: 100, address: '127.0.0.1', @@ -97,6 +106,7 @@ const mocks = { uType: 'user', userid: 1234, }, + authedSocket: { level: 9999999, address: '127.0.0.1', diff --git a/test/speak.test.js b/test/speak.test.js index 1215b9c..4806771 100644 --- a/test/speak.test.js +++ b/test/speak.test.js @@ -68,4 +68,60 @@ describe('Checking speak module', () => { expect(resp).to.be.true; }); + it('should accept payload.ip as a string', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: { + cmd: 'speak', + ip: '127.0.0.1', + }, + }); + + expect(resp).to.be.true; + }); + + it('should accept payload.hash as a string', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: { + cmd: 'speak', + hash: 'pretendthisisahash', + }, + }); + + expect(resp).to.be.true; + }); + + it('should unmuzzle all if payload.ip is *', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: { + cmd: 'speak', + ip: '*', + }, + }); + + expect(resp).to.be.true; + }); + + it('should unmuzzle all if payload.hash is *', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: { + cmd: 'speak', + hash: '*', + }, + }); + + expect(resp).to.be.true; + }); + }); \ No newline at end of file diff --git a/test/text.test.js b/test/text.test.js new file mode 100644 index 0000000..2a1cbdf --- /dev/null +++ b/test/text.test.js @@ -0,0 +1,19 @@ +import { expect } from 'chai'; +import mocks from './mockImports.js'; + +const modulePath = '../commands/utility/_Text.js'; +let importedModule; + +describe('Checking _Text module', () => { + // module meta data + it('should be importable', async () => { + importedModule = await import(modulePath); + expect(importedModule).to.not.be.a('string'); + }); + + it('should return null if not text', () => { + const resp = importedModule.parseText([]); + + expect(resp).to.be.null; + }); +}); \ No newline at end of file diff --git a/test/uac.test.js b/test/uac.test.js index f64bada..be017e1 100644 --- a/test/uac.test.js +++ b/test/uac.test.js @@ -42,7 +42,7 @@ describe('Checking UAC module', () => { it('should return admin level labels', async () => { const newConfig = Object.assign({}, mocks.core.appConfig.data); - newConfig.adminTrip = 'Tt8H7clbL9'; + newConfig.adminTrip = 'Tt8H7c'; const resp = importedModule.getUserPerms('test', 'salt', newConfig, 'cake'); expect(resp).to.be.an('object'); }); @@ -50,7 +50,7 @@ describe('Checking UAC module', () => { it('should return mod level labels', async () => { const newConfig = Object.assign({}, mocks.core.appConfig.data); newConfig.globalMods = [{ - trip: 'Tt8H7clbL9', + trip: 'Tt8H7c', }]; const resp = importedModule.getUserPerms('test', 'salt', newConfig, 'cake'); expect(resp).to.be.an('object'); diff --git a/test/unlockroom.test.js b/test/unlockroom.test.js new file mode 100644 index 0000000..7836d3b --- /dev/null +++ b/test/unlockroom.test.js @@ -0,0 +1,113 @@ +import { expect } from 'chai'; +import mocks from './mockImports.js'; + +const modulePath = '../commands/mod/unlockroom.js'; +let importedModule; + +const mockPayload = { + cmd: 'unlockroom', +} + +const mockChannelPayload = { + cmd: 'unlockroom', + channel: 'test', +} + +describe('Checking unlockroom module', () => { + // module meta data + it('should be importable', async () => { + importedModule = await import(modulePath); + expect(importedModule).to.not.be.a('string'); + }); + + it('should be named', async () => { + expect(importedModule.info.name).to.be.a('string'); + }); + + it('should be categorized', async () => { + expect(importedModule.info.category).to.be.a('string'); + }); + + it('should be described', async () => { + expect(importedModule.info.description).to.be.a('string'); + }); + + it('should be documented', async () => { + expect(importedModule.info.usage).to.be.a('string'); + }); + + it('should be invokable', async () => { + expect(importedModule.run).to.be.a('function'); + }); + + it('should initialize', async () => { + mocks.core.locked = undefined; + const resp = importedModule.init(mocks.core); + + expect(mocks.core.locked).to.be.an('object'); + }); + + // module main function + it('should be invokable only by a mod', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: mockPayload, + }); + + expect(resp).to.be.false; + }); + + it('should accept a channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockChannelPayload, + }); + + expect(resp).to.be.true; + }); + + it('should accept no channel param', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + expect(resp).to.be.true; + }); + + it('should fail on missing channel data', async () => { + const origChannel = mocks.authedSocket.channel; + mocks.authedSocket.channel = undefined; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + mocks.authedSocket.channel = origChannel; + + expect(resp).to.be.false; + }); + + it('should unlock if locked', async () => { + mocks.core.locked = { [mocks.authedSocket.channel]: true }; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.authedSocket, + payload: mockPayload, + }); + + expect(resp).to.be.true; + }); + +}); \ No newline at end of file diff --git a/test/updateMessage.test.js b/test/updateMessage.test.js new file mode 100644 index 0000000..42dea79 --- /dev/null +++ b/test/updateMessage.test.js @@ -0,0 +1,233 @@ +import { expect } from 'chai'; +import mocks from './mockImports.js'; + +const modulePath = '../commands/core/updateMessage.js'; +let importedModule; + +const mockPayload = { + cmd: 'updateMessage', +} + +const mockChannelPayload = { + cmd: 'updateMessage', + channel: 'test', +} + +describe('Checking unlockroom module', () => { + // module meta data + it('should be importable', async () => { + importedModule = await import(modulePath); + expect(importedModule).to.not.be.a('string'); + }); + + it('should be named', async () => { + expect(importedModule.info.name).to.be.a('string'); + }); + + it('should be categorized', async () => { + expect(importedModule.info.category).to.be.a('string'); + }); + + it('should be described', async () => { + expect(importedModule.info.description).to.be.a('string'); + }); + + it('should be documented', async () => { + expect(importedModule.info.usage).to.be.a('string'); + }); + + it('should be invokable', async () => { + expect(importedModule.run).to.be.a('function'); + }); + + // module main function + it('should default the mode param if missing', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + customId: '1234', + text: 'test', + }, + }); + + expect(resp).to.be.false; + }); + + it('should reject if mode is invalid', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + customId: '1234', + text: 'test', + mode: 'poop', + }, + }); + + expect(resp).to.be.false; + }); + + it('should reject if customId is missing', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + text: 'test', + mode: 'overwrite', + }, + }); + + expect(resp).to.be.false; + }); + + it('should reject if customId is not text', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + text: 'test', + customId: {}, + mode: 'overwrite', + }, + }); + + expect(resp).to.be.false; + }); + + it('should reject if customId is not too long', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + text: 'test', + customId: `A`.repeat(importedModule.MAX_MESSAGE_ID_LENGTH * 2), + mode: 'overwrite', + }, + }); + + expect(resp).to.be.false; + }); + + it('should reject if text is not text', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + text: {}, + customId: `A`, + mode: 'overwrite', + }, + }); + + expect(resp).to.be.false; + }); + + it('should change text to null if empty', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + text: '', + customId: `A`, + mode: 'overwrite', + }, + }); + + expect(resp).to.be.false; + }); + + it('should otherwise reject empty text', async () => { + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + text: '', + customId: `A`, + mode: 'prepend', + }, + }); + + expect(resp).to.be.false; + }); + + it('should delete active message records', async () => { + const chatModule = await import('../commands/core/chat.js'); + + chatModule.ACTIVE_MESSAGES.push({ + customId: 'asdf', + userid: 1234, + sent: 0, + toDelete: false, + }); + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: mocks.plebSocket, + payload: { + cmd: 'updateMessage', + text: 'a', + customId: 'asdf', + mode: 'complete', + }, + }); + + expect(resp).to.be.true; + }); + + it('should mark if sent by mod', async () => { + const newSocket = { ...mocks.authedSocket }; + newSocket.level = 999999; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: newSocket, + payload: { + cmd: 'updateMessage', + text: 'a', + customId: 'asdf', + mode: 'append', + }, + }); + + expect(resp).to.be.true; + }); + + it('should mark if sent by admin', async () => { + const newSocket = { ...mocks.authedSocket }; + newSocket.level = 9999999; + + const resp = await importedModule.run({ + core: mocks.core, + server: mocks.server, + socket: newSocket, + payload: { + cmd: 'updateMessage', + text: 'a', + customId: 'asdf', + mode: 'append', + }, + }); + + expect(resp).to.be.true; + }); + +}); \ No newline at end of file