diff --git a/backend/package.json b/backend/package.json index 4ee7e76b..84bd7b9a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -45,7 +45,7 @@ "dotenv": "^4.0.0", "emoji-regex": "^8.0.0", "escape-string-regexp": "^1.0.5", - "express": "^4.17.0", + "express": "^4.19.2", "fp-ts": "^2.0.1", "humanize-duration": "^3.15.0", "js-yaml": "^3.13.1", @@ -55,7 +55,7 @@ "lodash": "^4.17.21", "moment-timezone": "^0.5.21", "multer": "^1.4.5-lts.1", - "mysql2": "^3.9.3", + "mysql2": "^3.9.8", "parse-color": "^1.0.0", "passport": "^0.6.0", "passport-custom": "^1.0.5", diff --git a/backend/src/api/guilds/importExport.ts b/backend/src/api/guilds/importExport.ts index 28db0e6a..73d8af2f 100644 --- a/backend/src/api/guilds/importExport.ts +++ b/backend/src/api/guilds/importExport.ts @@ -35,7 +35,7 @@ const caseData = z.object({ is_hidden: z.boolean(), pp_id: z.nullable(z.string()), pp_name: z.nullable(z.string()), - + log_message_id: z.string().optional(), notes: z.array(caseNoteData), }); @@ -168,7 +168,7 @@ export function initGuildsImportExportAPI(guildRouter: express.Router) { is_hidden: theCase.is_hidden, pp_id: theCase.pp_id, pp_name: theCase.pp_name, - + log_message_id: theCase.log_message_id ?? undefined, notes: theCase.notes.map((note) => ({ mod_id: note.mod_id, mod_name: note.mod_name, diff --git a/backend/src/index.ts b/backend/src/index.ts index 06fc7cf6..f19d314d 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -44,7 +44,15 @@ import { availableGuildPlugins, availableGlobalPlugins } from "./plugins/availab import { setProfiler } from "./profiler.js"; import { logRateLimit } from "./rateLimitStats.js"; import { startUptimeCounter } from "./uptime.js"; -import { MINUTES, SECONDS, errorMessage, isDiscordAPIError, isDiscordHTTPError, sleep, successMessage } from "./utils.js"; +import { + MINUTES, + SECONDS, + errorMessage, + isDiscordAPIError, + isDiscordHTTPError, + sleep, + successMessage, +} from "./utils.js"; import { DecayingCounter } from "./utils/DecayingCounter.js"; import { enableProfiling } from "./utils/easyProfiler.js"; import { loadYamlSafely } from "./utils/loadYamlSafely.js"; diff --git a/backend/src/migrations/1573248462469-MoveStarboardsToConfig.ts b/backend/src/migrations/1573248462469-MoveStarboardsToConfig.ts index e1f967b1..881fc3e7 100644 --- a/backend/src/migrations/1573248462469-MoveStarboardsToConfig.ts +++ b/backend/src/migrations/1573248462469-MoveStarboardsToConfig.ts @@ -3,18 +3,24 @@ import { MigrationInterface, QueryRunner, Table, TableColumn } from "typeorm"; export class MoveStarboardsToConfig1573248462469 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { // Create a new column for the channel's id - await queryRunner.addColumn("starboard_messages", new TableColumn({ - name: "starboard_channel_id", - type: "bigint", - unsigned: true, - })); + await queryRunner.addColumn( + "starboard_messages", + new TableColumn({ + name: "starboard_channel_id", + type: "bigint", + unsigned: true, + }), + ); // Since we are removing the guild_id with the starboards table, we might want it here - await queryRunner.addColumn("starboard_messages", new TableColumn({ - name: "guild_id", - type: "bigint", - unsigned: true, - })); + await queryRunner.addColumn( + "starboard_messages", + new TableColumn({ + name: "guild_id", + type: "bigint", + unsigned: true, + }), + ); // Migrate the old starboard_id to the new starboard_channel_id await queryRunner.query(` @@ -43,11 +49,14 @@ export class MoveStarboardsToConfig1573248462469 implements MigrationInterface { await queryRunner.dropColumn("starboard_messages", "starboard_channel_id"); await queryRunner.dropColumn("starboard_messages", "guild_id"); - await queryRunner.addColumn("starboard_messages", new TableColumn({ - name: "starboard_id", - type: "int", - unsigned: true, - })); + await queryRunner.addColumn( + "starboard_messages", + new TableColumn({ + name: "starboard_id", + type: "int", + unsigned: true, + }), + ); await queryRunner.query(` ALTER TABLE starboard_messages diff --git a/backend/src/migrations/1596994103885-AddCaseNotesForeignKey.ts b/backend/src/migrations/1596994103885-AddCaseNotesForeignKey.ts index b9813a93..93d2dd5c 100644 --- a/backend/src/migrations/1596994103885-AddCaseNotesForeignKey.ts +++ b/backend/src/migrations/1596994103885-AddCaseNotesForeignKey.ts @@ -1,5 +1,4 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; -import { TableForeignKey } from "typeorm"; +import { MigrationInterface, QueryRunner, TableForeignKey } from "typeorm"; export class AddCaseNotesForeignKey1596994103885 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { diff --git a/backend/src/migrations/1597015567215-AddLogMessageIdToCases.ts b/backend/src/migrations/1597015567215-AddLogMessageIdToCases.ts index cdb0bb97..2ffae66d 100644 --- a/backend/src/migrations/1597015567215-AddLogMessageIdToCases.ts +++ b/backend/src/migrations/1597015567215-AddLogMessageIdToCases.ts @@ -1,5 +1,4 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; -import { TableColumn } from "typeorm"; +import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"; export class AddLogMessageIdToCases1597015567215 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { diff --git a/backend/src/migrations/1597109357201-CreateMemberTimezonesTable.ts b/backend/src/migrations/1597109357201-CreateMemberTimezonesTable.ts index a826fc60..972ec533 100644 --- a/backend/src/migrations/1597109357201-CreateMemberTimezonesTable.ts +++ b/backend/src/migrations/1597109357201-CreateMemberTimezonesTable.ts @@ -1,5 +1,4 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; -import { Table } from "typeorm"; +import { MigrationInterface, QueryRunner, Table } from "typeorm"; export class CreateMemberTimezonesTable1597109357201 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { diff --git a/backend/src/migrations/1617363975046-UpdateCounterTriggers.ts b/backend/src/migrations/1617363975046-UpdateCounterTriggers.ts index 2eae7cfe..35997345 100644 --- a/backend/src/migrations/1617363975046-UpdateCounterTriggers.ts +++ b/backend/src/migrations/1617363975046-UpdateCounterTriggers.ts @@ -1,5 +1,4 @@ -import { MigrationInterface, QueryRunner, TableColumn, TableIndex } from "typeorm"; -import { TableForeignKey } from "typeorm"; +import { MigrationInterface, QueryRunner, TableColumn, TableForeignKey, TableIndex } from "typeorm"; export class UpdateCounterTriggers1617363975046 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { diff --git a/backend/src/plugins/Censor/util/applyFiltersToMsg.ts b/backend/src/plugins/Censor/util/applyFiltersToMsg.ts index fc363f18..e1cf25a0 100644 --- a/backend/src/plugins/Censor/util/applyFiltersToMsg.ts +++ b/backend/src/plugins/Censor/util/applyFiltersToMsg.ts @@ -1,11 +1,17 @@ -import { Embed, Invite } from "discord.js"; +import { Invite } from "discord.js"; import escapeStringRegexp from "escape-string-regexp"; import { GuildPluginData } from "knub"; import cloneDeep from "lodash/cloneDeep.js"; import { allowTimeout } from "../../../RegExpRunner.js"; import { ZalgoRegex } from "../../../data/Zalgo.js"; import { ISavedMessageEmbedData, SavedMessage } from "../../../data/entities/SavedMessage.js"; -import { getInviteCodesInString, getUrlsInString, isGuildInvite, resolveInvite, resolveMember } from "../../../utils.js"; +import { + getInviteCodesInString, + getUrlsInString, + isGuildInvite, + resolveInvite, + resolveMember, +} from "../../../utils.js"; import { CensorPluginType } from "../types.js"; import { censorMessage } from "./censorMessage.js"; diff --git a/backend/src/plugins/GuildConfigReloader/types.ts b/backend/src/plugins/GuildConfigReloader/types.ts index 15222e7d..f9c0ad79 100644 --- a/backend/src/plugins/GuildConfigReloader/types.ts +++ b/backend/src/plugins/GuildConfigReloader/types.ts @@ -1,7 +1,7 @@ import { BasePluginType } from "knub"; +import { z } from "zod"; import { Configs } from "../../data/Configs.js"; import Timeout = NodeJS.Timeout; -import { z } from "zod"; export const zGuildConfigReloaderPlugin = z.strictObject({}); diff --git a/backend/src/plugins/GuildMemberCache/types.ts b/backend/src/plugins/GuildMemberCache/types.ts index 3e7a7654..3ad89f53 100644 --- a/backend/src/plugins/GuildMemberCache/types.ts +++ b/backend/src/plugins/GuildMemberCache/types.ts @@ -1,6 +1,6 @@ import { BasePluginType } from "knub"; -import { GuildMemberCache } from "../../data/GuildMemberCache.js"; import { z } from "zod"; +import { GuildMemberCache } from "../../data/GuildMemberCache.js"; export const zGuildMemberCacheConfig = z.strictObject({}); diff --git a/backend/src/plugins/InternalPoster/types.ts b/backend/src/plugins/InternalPoster/types.ts index baf20d3d..c0c99c55 100644 --- a/backend/src/plugins/InternalPoster/types.ts +++ b/backend/src/plugins/InternalPoster/types.ts @@ -1,8 +1,8 @@ import { WebhookClient } from "discord.js"; import { BasePluginType } from "knub"; +import { z } from "zod"; import { Queue } from "../../Queue.js"; import { Webhooks } from "../../data/Webhooks.js"; -import { z } from "zod"; export const zInternalPosterConfig = z.strictObject({}); diff --git a/backend/src/plugins/Logs/LogsPlugin.ts b/backend/src/plugins/Logs/LogsPlugin.ts index 9fc3e142..d45b86dc 100644 --- a/backend/src/plugins/Logs/LogsPlugin.ts +++ b/backend/src/plugins/Logs/LogsPlugin.ts @@ -30,7 +30,7 @@ import { import { LogsThreadCreateEvt, LogsThreadDeleteEvt, LogsThreadUpdateEvt } from "./events/LogsThreadModifyEvts.js"; import { LogsGuildMemberUpdateEvt } from "./events/LogsUserUpdateEvts.js"; import { LogsVoiceStateUpdateEvt } from "./events/LogsVoiceChannelEvts.js"; -import { FORMAT_NO_TIMESTAMP, LogsPluginType, zLogsConfig } from "./types.js"; +import { LogsPluginType, zLogsConfig } from "./types.js"; import { getLogMessage } from "./util/getLogMessage.js"; import { log } from "./util/log.js"; import { onMessageDelete } from "./util/onMessageDelete.js"; diff --git a/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts b/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts index a712c60e..1952d021 100644 --- a/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts +++ b/backend/src/plugins/Logs/logFunctions/logMessageDelete.ts @@ -12,7 +12,7 @@ import { userToTemplateSafeUser, } from "../../../utils/templateSafeObjects.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; -import { FORMAT_NO_TIMESTAMP, LogsPluginType } from "../types.js"; +import { LogsPluginType } from "../types.js"; import { log } from "../util/log.js"; export interface LogMessageDeleteData { diff --git a/backend/src/plugins/Logs/types.ts b/backend/src/plugins/Logs/types.ts index 95754015..11eadbd1 100644 --- a/backend/src/plugins/Logs/types.ts +++ b/backend/src/plugins/Logs/types.ts @@ -6,7 +6,7 @@ import { GuildCases } from "../../data/GuildCases.js"; import { GuildLogs } from "../../data/GuildLogs.js"; import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { LogType } from "../../data/LogType.js"; -import { keys, zBoundedCharacters, zMessageContent, zRegex, zSnowflake } from "../../utils.js"; +import { zBoundedCharacters, zMessageContent, zRegex, zSnowflake } from "../../utils.js"; import { MessageBuffer } from "../../utils/MessageBuffer.js"; import { TemplateSafeCase, diff --git a/backend/src/plugins/Logs/util/getLogMessage.ts b/backend/src/plugins/Logs/util/getLogMessage.ts index 65d5a06c..30c92087 100644 --- a/backend/src/plugins/Logs/util/getLogMessage.ts +++ b/backend/src/plugins/Logs/util/getLogMessage.ts @@ -25,7 +25,7 @@ import { TemplateSafeUser, } from "../../../utils/templateSafeObjects.js"; import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.js"; -import { FORMAT_NO_TIMESTAMP, ILogTypeData, LogsPluginType, TLogChannel } from "../types.js"; +import { ILogTypeData, LogsPluginType, TLogChannel } from "../types.js"; export async function getLogMessage( pluginData: GuildPluginData, diff --git a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts index 895c9ab1..ead63597 100644 --- a/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts +++ b/backend/src/plugins/MessageSaver/MessageSaverPlugin.ts @@ -2,7 +2,12 @@ import { PluginOptions, guildPlugin } from "knub"; import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { SaveMessagesToDBCmd } from "./commands/SaveMessagesToDB.js"; import { SavePinsToDBCmd } from "./commands/SavePinsToDB.js"; -import { MessageCreateEvt, MessageDeleteBulkEvt, MessageDeleteEvt, MessageUpdateEvt } from "./events/SaveMessagesEvts.js"; +import { + MessageCreateEvt, + MessageDeleteBulkEvt, + MessageDeleteEvt, + MessageUpdateEvt, +} from "./events/SaveMessagesEvts.js"; import { MessageSaverPluginType, zMessageSaverConfig } from "./types.js"; const defaultOptions: PluginOptions = { diff --git a/backend/src/plugins/ModActions/commands/CasesUserCmd.ts b/backend/src/plugins/ModActions/commands/CasesUserCmd.ts index d45ffb63..c836c079 100644 --- a/backend/src/plugins/ModActions/commands/CasesUserCmd.ts +++ b/backend/src/plugins/ModActions/commands/CasesUserCmd.ts @@ -3,7 +3,14 @@ import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { sendErrorMessage } from "../../../pluginUtils.js"; import { CasesPlugin } from "../../../plugins/Cases/CasesPlugin.js"; -import { UnknownUser, chunkArray, emptyEmbedValue, renderUsername, resolveMember, resolveUser } from "../../../utils.js"; +import { + UnknownUser, + chunkArray, + emptyEmbedValue, + renderUsername, + resolveMember, + resolveUser, +} from "../../../utils.js"; import { asyncMap } from "../../../utils/async.js"; import { createPaginatedMessage } from "../../../utils/createPaginatedMessage.js"; import { getGuildPrefix } from "../../../utils/getGuildPrefix.js"; @@ -95,7 +102,7 @@ export const CasesUserCmd = modActionsCmd({ // Compact view (= regular message with a preview of each case) const casesPlugin = pluginData.getPlugin(CasesPlugin); - const totalPages = Math.max(Math.ceil(cases.length / casesPerPage), 1); + const totalPages = Math.max(Math.ceil(casesToDisplay.length / casesPerPage), 1); const prefix = getGuildPrefix(pluginData); createPaginatedMessage( @@ -103,16 +110,16 @@ export const CasesUserCmd = modActionsCmd({ msg.channel, totalPages, async (page) => { - const chunkedCases = chunkArray(cases, casesPerPage)[page - 1]; + const chunkedCases = chunkArray(casesToDisplay, casesPerPage)[page - 1]; const lines = await asyncMap(chunkedCases, (c) => casesPlugin.getCaseSummary(c, true, msg.author.id)); const isLastPage = page === totalPages; const firstCaseNum = (page - 1) * casesPerPage + 1; - const lastCaseNum = isLastPage ? cases.length : page * casesPerPage; + const lastCaseNum = isLastPage ? casesToDisplay.length : page * casesPerPage; const title = totalPages === 1 ? `Cases for ${userName} (${lines.length} total)` - : `Most recent cases ${firstCaseNum}-${lastCaseNum} of ${cases.length} for ${userName}`; + : `Most recent cases ${firstCaseNum}-${lastCaseNum} of ${casesToDisplay.length} for ${userName}`; const embed = { author: { diff --git a/backend/src/plugins/ModActions/functions/kickMember.ts b/backend/src/plugins/ModActions/functions/kickMember.ts index eddf802e..527f6163 100644 --- a/backend/src/plugins/ModActions/functions/kickMember.ts +++ b/backend/src/plugins/ModActions/functions/kickMember.ts @@ -3,7 +3,13 @@ import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { LogType } from "../../../data/LogType.js"; import { renderTemplate, TemplateParseError, TemplateSafeValueContainer } from "../../../templateFormatter.js"; -import { createUserNotificationError, notifyUser, resolveUser, ucfirst, UserNotificationResult } from "../../../utils.js"; +import { + createUserNotificationError, + notifyUser, + resolveUser, + ucfirst, + UserNotificationResult, +} from "../../../utils.js"; import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js"; import { LogsPlugin } from "../../Logs/LogsPlugin.js"; diff --git a/backend/src/plugins/ModActions/functions/warnMember.ts b/backend/src/plugins/ModActions/functions/warnMember.ts index 056e26db..a7a8f531 100644 --- a/backend/src/plugins/ModActions/functions/warnMember.ts +++ b/backend/src/plugins/ModActions/functions/warnMember.ts @@ -2,7 +2,13 @@ import { GuildMember, Snowflake } from "discord.js"; import { GuildPluginData } from "knub"; import { CaseTypes } from "../../../data/CaseTypes.js"; import { TemplateParseError, TemplateSafeValueContainer, renderTemplate } from "../../../templateFormatter.js"; -import { UserNotificationResult, createUserNotificationError, notifyUser, resolveUser, ucfirst } from "../../../utils.js"; +import { + UserNotificationResult, + createUserNotificationError, + notifyUser, + resolveUser, + ucfirst, +} from "../../../utils.js"; import { userToTemplateSafeUser } from "../../../utils/templateSafeObjects.js"; import { waitForButtonConfirm } from "../../../utils/waitForInteraction.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js"; diff --git a/backend/src/plugins/Phisherman/functions/getDomainInfo.ts b/backend/src/plugins/Phisherman/functions/getDomainInfo.ts index f2913194..b8fabcb8 100644 --- a/backend/src/plugins/Phisherman/functions/getDomainInfo.ts +++ b/backend/src/plugins/Phisherman/functions/getDomainInfo.ts @@ -1,5 +1,9 @@ import { GuildPluginData } from "knub"; -import { getPhishermanDomainInfo, phishermanDomainIsSafe, trackPhishermanCaughtDomain } from "../../../data/Phisherman.js"; +import { + getPhishermanDomainInfo, + phishermanDomainIsSafe, + trackPhishermanCaughtDomain, +} from "../../../data/Phisherman.js"; import { PhishermanDomainInfo } from "../../../data/types/phisherman.js"; import { PhishermanPluginType } from "../types.js"; diff --git a/backend/src/plugins/Utility/commands/HelpCmd.ts b/backend/src/plugins/Utility/commands/HelpCmd.ts index a1be304b..4c103e19 100644 --- a/backend/src/plugins/Utility/commands/HelpCmd.ts +++ b/backend/src/plugins/Utility/commands/HelpCmd.ts @@ -1,5 +1,6 @@ import { LoadedGuildPlugin, PluginCommandDefinition } from "knub"; import { commandTypeHelpers as ct } from "../../../commandTypes.js"; +import { env } from "../../../env.js"; import { createChunkedMessage } from "../../../utils.js"; import { utilityCmd } from "../types.js"; @@ -62,7 +63,7 @@ export const HelpCmd = utilityCmd({ let snippet = `**${prefix}${trigger}**`; if (description) snippet += `\n${description}`; if (usage) snippet += `\nBasic usage: \`${usage}\``; - snippet += `\n`; + snippet += `\n<${env.DASHBOARD_URL}/docs/plugins/${plugin.blueprint.name}/usage#command-${commandSlug}>`; return snippet; }); diff --git a/backend/src/templateFormatter.test.ts b/backend/src/templateFormatter.test.ts index f906e054..0d7bd993 100644 --- a/backend/src/templateFormatter.test.ts +++ b/backend/src/templateFormatter.test.ts @@ -1,5 +1,10 @@ import test from "ava"; -import { parseTemplate, renderParsedTemplate, renderTemplate, TemplateSafeValueContainer } from "./templateFormatter.js"; +import { + parseTemplate, + renderParsedTemplate, + renderTemplate, + TemplateSafeValueContainer, +} from "./templateFormatter.js"; test("Parses plain string templates correctly", (t) => { const result = parseTemplate("foo bar baz"); diff --git a/backend/src/utils.ts b/backend/src/utils.ts index b898fbe4..214d3f20 100644 --- a/backend/src/utils.ts +++ b/backend/src/utils.ts @@ -286,8 +286,10 @@ export type StrictMessageContent = { }; export type MessageContent = string | StrictMessageContent; -export const zMessageContent = z.union([zBoundedCharacters(0, 4000), zStrictMessageContent]) as z.ZodType; - +export const zMessageContent = z.union([ + zBoundedCharacters(0, 4000), + zStrictMessageContent, +]) as z.ZodType; export function validateAndParseMessageContent(input: unknown): StrictMessageContent { if (input == null) { diff --git a/dashboard/src/components/docs/PluginConfiguration.vue b/dashboard/src/components/docs/PluginConfiguration.vue index cfa4c46a..e725ab8e 100644 --- a/dashboard/src/components/docs/PluginConfiguration.vue +++ b/dashboard/src/components/docs/PluginConfiguration.vue @@ -54,7 +54,7 @@ - channel: "109672661671505920" config: can_kick: false - # Don't allow kicking on any trhead + # Don't allow kicking on any thread - is_thread: true config: can_kick: false diff --git a/package-lock.json b/package-lock.json index 236ebffb..4f9e92a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "dotenv": "^4.0.0", "emoji-regex": "^8.0.0", "escape-string-regexp": "^1.0.5", - "express": "^4.17.0", + "express": "^4.19.2", "fp-ts": "^2.0.1", "humanize-duration": "^3.15.0", "js-yaml": "^3.13.1", @@ -49,7 +49,7 @@ "lodash": "^4.17.21", "moment-timezone": "^0.5.21", "multer": "^1.4.5-lts.1", - "mysql2": "^3.9.3", + "mysql2": "^3.9.8", "parse-color": "^1.0.0", "passport": "^0.6.0", "passport-custom": "^1.0.5", @@ -6047,12 +6047,12 @@ "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -6060,7 +6060,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -6171,12 +6171,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -7647,9 +7647,9 @@ } }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -9432,13 +9432,14 @@ } }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -9734,6 +9735,25 @@ "node": ">=6" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esniff/node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, "node_modules/espree": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", @@ -9903,16 +9923,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -10237,9 +10257,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -10462,9 +10482,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -12876,14 +12896,6 @@ "set-cookie-parser": "^2.4.1" } }, - "node_modules/light-my-request/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -13661,9 +13673,9 @@ } }, "node_modules/mysql2": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.3.tgz", - "integrity": "sha512-+ZaoF0llESUy7BffccHG+urErHcWPZ/WuzYAA9TEeLaDYyke3/3D+VQDzK9xzRnXpd0eMtRf0WNOeo4Q1Baung==", + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.8.tgz", + "integrity": "sha512-+5JKNjPuks1FNMoy9TYpl77f+5frbTklz7eb3XDwbpsERRLEeXiW2PDEkakYF50UuKU2qwfGnyXpKYvukv8mGA==", "dependencies": { "denque": "^2.1.0", "generate-function": "^2.3.1", @@ -18174,9 +18186,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -22321,9 +22333,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dev": true, "dependencies": { "colorette": "^2.0.10",