3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-03-15 05:41:51 +00:00

Merge remote-tracking branch 'origin' into next

This commit is contained in:
Dragory 2024-08-11 21:44:16 +03:00
commit cb2306e522
No known key found for this signature in database
26 changed files with 163 additions and 96 deletions

View file

@ -45,7 +45,7 @@
"dotenv": "^4.0.0", "dotenv": "^4.0.0",
"emoji-regex": "^8.0.0", "emoji-regex": "^8.0.0",
"escape-string-regexp": "^1.0.5", "escape-string-regexp": "^1.0.5",
"express": "^4.17.0", "express": "^4.19.2",
"fp-ts": "^2.0.1", "fp-ts": "^2.0.1",
"humanize-duration": "^3.15.0", "humanize-duration": "^3.15.0",
"js-yaml": "^3.13.1", "js-yaml": "^3.13.1",
@ -55,7 +55,7 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"moment-timezone": "^0.5.21", "moment-timezone": "^0.5.21",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"mysql2": "^3.9.3", "mysql2": "^3.9.8",
"parse-color": "^1.0.0", "parse-color": "^1.0.0",
"passport": "^0.6.0", "passport": "^0.6.0",
"passport-custom": "^1.0.5", "passport-custom": "^1.0.5",

View file

@ -35,7 +35,7 @@ const caseData = z.object({
is_hidden: z.boolean(), is_hidden: z.boolean(),
pp_id: z.nullable(z.string()), pp_id: z.nullable(z.string()),
pp_name: z.nullable(z.string()), pp_name: z.nullable(z.string()),
log_message_id: z.string().optional(),
notes: z.array(caseNoteData), notes: z.array(caseNoteData),
}); });
@ -168,7 +168,7 @@ export function initGuildsImportExportAPI(guildRouter: express.Router) {
is_hidden: theCase.is_hidden, is_hidden: theCase.is_hidden,
pp_id: theCase.pp_id, pp_id: theCase.pp_id,
pp_name: theCase.pp_name, pp_name: theCase.pp_name,
log_message_id: theCase.log_message_id ?? undefined,
notes: theCase.notes.map((note) => ({ notes: theCase.notes.map((note) => ({
mod_id: note.mod_id, mod_id: note.mod_id,
mod_name: note.mod_name, mod_name: note.mod_name,

View file

@ -44,7 +44,15 @@ import { availableGuildPlugins, availableGlobalPlugins } from "./plugins/availab
import { setProfiler } from "./profiler.js"; import { setProfiler } from "./profiler.js";
import { logRateLimit } from "./rateLimitStats.js"; import { logRateLimit } from "./rateLimitStats.js";
import { startUptimeCounter } from "./uptime.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 { DecayingCounter } from "./utils/DecayingCounter.js";
import { enableProfiling } from "./utils/easyProfiler.js"; import { enableProfiling } from "./utils/easyProfiler.js";
import { loadYamlSafely } from "./utils/loadYamlSafely.js"; import { loadYamlSafely } from "./utils/loadYamlSafely.js";

View file

@ -3,18 +3,24 @@ import { MigrationInterface, QueryRunner, Table, TableColumn } from "typeorm";
export class MoveStarboardsToConfig1573248462469 implements MigrationInterface { export class MoveStarboardsToConfig1573248462469 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> { public async up(queryRunner: QueryRunner): Promise<any> {
// Create a new column for the channel's id // Create a new column for the channel's id
await queryRunner.addColumn("starboard_messages", new TableColumn({ await queryRunner.addColumn(
"starboard_messages",
new TableColumn({
name: "starboard_channel_id", name: "starboard_channel_id",
type: "bigint", type: "bigint",
unsigned: true, unsigned: true,
})); }),
);
// Since we are removing the guild_id with the starboards table, we might want it here // Since we are removing the guild_id with the starboards table, we might want it here
await queryRunner.addColumn("starboard_messages", new TableColumn({ await queryRunner.addColumn(
"starboard_messages",
new TableColumn({
name: "guild_id", name: "guild_id",
type: "bigint", type: "bigint",
unsigned: true, unsigned: true,
})); }),
);
// Migrate the old starboard_id to the new starboard_channel_id // Migrate the old starboard_id to the new starboard_channel_id
await queryRunner.query(` 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", "starboard_channel_id");
await queryRunner.dropColumn("starboard_messages", "guild_id"); await queryRunner.dropColumn("starboard_messages", "guild_id");
await queryRunner.addColumn("starboard_messages", new TableColumn({ await queryRunner.addColumn(
"starboard_messages",
new TableColumn({
name: "starboard_id", name: "starboard_id",
type: "int", type: "int",
unsigned: true, unsigned: true,
})); }),
);
await queryRunner.query(` await queryRunner.query(`
ALTER TABLE starboard_messages ALTER TABLE starboard_messages

View file

@ -1,5 +1,4 @@
import { MigrationInterface, QueryRunner } from "typeorm"; import { MigrationInterface, QueryRunner, TableForeignKey } from "typeorm";
import { TableForeignKey } from "typeorm";
export class AddCaseNotesForeignKey1596994103885 implements MigrationInterface { export class AddCaseNotesForeignKey1596994103885 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> { public async up(queryRunner: QueryRunner): Promise<any> {

View file

@ -1,5 +1,4 @@
import { MigrationInterface, QueryRunner } from "typeorm"; import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";
import { TableColumn } from "typeorm";
export class AddLogMessageIdToCases1597015567215 implements MigrationInterface { export class AddLogMessageIdToCases1597015567215 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> { public async up(queryRunner: QueryRunner): Promise<any> {

View file

@ -1,5 +1,4 @@
import { MigrationInterface, QueryRunner } from "typeorm"; import { MigrationInterface, QueryRunner, Table } from "typeorm";
import { Table } from "typeorm";
export class CreateMemberTimezonesTable1597109357201 implements MigrationInterface { export class CreateMemberTimezonesTable1597109357201 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<any> { public async up(queryRunner: QueryRunner): Promise<any> {

View file

@ -1,5 +1,4 @@
import { MigrationInterface, QueryRunner, TableColumn, TableIndex } from "typeorm"; import { MigrationInterface, QueryRunner, TableColumn, TableForeignKey, TableIndex } from "typeorm";
import { TableForeignKey } from "typeorm";
export class UpdateCounterTriggers1617363975046 implements MigrationInterface { export class UpdateCounterTriggers1617363975046 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> { public async up(queryRunner: QueryRunner): Promise<void> {

View file

@ -1,11 +1,17 @@
import { Embed, Invite } from "discord.js"; import { Invite } from "discord.js";
import escapeStringRegexp from "escape-string-regexp"; import escapeStringRegexp from "escape-string-regexp";
import { GuildPluginData } from "knub"; import { GuildPluginData } from "knub";
import cloneDeep from "lodash/cloneDeep.js"; import cloneDeep from "lodash/cloneDeep.js";
import { allowTimeout } from "../../../RegExpRunner.js"; import { allowTimeout } from "../../../RegExpRunner.js";
import { ZalgoRegex } from "../../../data/Zalgo.js"; import { ZalgoRegex } from "../../../data/Zalgo.js";
import { ISavedMessageEmbedData, SavedMessage } from "../../../data/entities/SavedMessage.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 { CensorPluginType } from "../types.js";
import { censorMessage } from "./censorMessage.js"; import { censorMessage } from "./censorMessage.js";

View file

@ -1,7 +1,7 @@
import { BasePluginType } from "knub"; import { BasePluginType } from "knub";
import { z } from "zod";
import { Configs } from "../../data/Configs.js"; import { Configs } from "../../data/Configs.js";
import Timeout = NodeJS.Timeout; import Timeout = NodeJS.Timeout;
import { z } from "zod";
export const zGuildConfigReloaderPlugin = z.strictObject({}); export const zGuildConfigReloaderPlugin = z.strictObject({});

View file

@ -1,6 +1,6 @@
import { BasePluginType } from "knub"; import { BasePluginType } from "knub";
import { GuildMemberCache } from "../../data/GuildMemberCache.js";
import { z } from "zod"; import { z } from "zod";
import { GuildMemberCache } from "../../data/GuildMemberCache.js";
export const zGuildMemberCacheConfig = z.strictObject({}); export const zGuildMemberCacheConfig = z.strictObject({});

View file

@ -1,8 +1,8 @@
import { WebhookClient } from "discord.js"; import { WebhookClient } from "discord.js";
import { BasePluginType } from "knub"; import { BasePluginType } from "knub";
import { z } from "zod";
import { Queue } from "../../Queue.js"; import { Queue } from "../../Queue.js";
import { Webhooks } from "../../data/Webhooks.js"; import { Webhooks } from "../../data/Webhooks.js";
import { z } from "zod";
export const zInternalPosterConfig = z.strictObject({}); export const zInternalPosterConfig = z.strictObject({});

View file

@ -30,7 +30,7 @@ import {
import { LogsThreadCreateEvt, LogsThreadDeleteEvt, LogsThreadUpdateEvt } from "./events/LogsThreadModifyEvts.js"; import { LogsThreadCreateEvt, LogsThreadDeleteEvt, LogsThreadUpdateEvt } from "./events/LogsThreadModifyEvts.js";
import { LogsGuildMemberUpdateEvt } from "./events/LogsUserUpdateEvts.js"; import { LogsGuildMemberUpdateEvt } from "./events/LogsUserUpdateEvts.js";
import { LogsVoiceStateUpdateEvt } from "./events/LogsVoiceChannelEvts.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 { getLogMessage } from "./util/getLogMessage.js";
import { log } from "./util/log.js"; import { log } from "./util/log.js";
import { onMessageDelete } from "./util/onMessageDelete.js"; import { onMessageDelete } from "./util/onMessageDelete.js";

View file

@ -12,7 +12,7 @@ import {
userToTemplateSafeUser, userToTemplateSafeUser,
} from "../../../utils/templateSafeObjects.js"; } from "../../../utils/templateSafeObjects.js";
import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.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"; import { log } from "../util/log.js";
export interface LogMessageDeleteData { export interface LogMessageDeleteData {

View file

@ -6,7 +6,7 @@ import { GuildCases } from "../../data/GuildCases.js";
import { GuildLogs } from "../../data/GuildLogs.js"; import { GuildLogs } from "../../data/GuildLogs.js";
import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { GuildSavedMessages } from "../../data/GuildSavedMessages.js";
import { LogType } from "../../data/LogType.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 { MessageBuffer } from "../../utils/MessageBuffer.js";
import { import {
TemplateSafeCase, TemplateSafeCase,

View file

@ -25,7 +25,7 @@ import {
TemplateSafeUser, TemplateSafeUser,
} from "../../../utils/templateSafeObjects.js"; } from "../../../utils/templateSafeObjects.js";
import { TimeAndDatePlugin } from "../../TimeAndDate/TimeAndDatePlugin.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<TLogType extends keyof ILogTypeData>( export async function getLogMessage<TLogType extends keyof ILogTypeData>(
pluginData: GuildPluginData<LogsPluginType>, pluginData: GuildPluginData<LogsPluginType>,

View file

@ -2,7 +2,12 @@ import { PluginOptions, guildPlugin } from "knub";
import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { GuildSavedMessages } from "../../data/GuildSavedMessages.js";
import { SaveMessagesToDBCmd } from "./commands/SaveMessagesToDB.js"; import { SaveMessagesToDBCmd } from "./commands/SaveMessagesToDB.js";
import { SavePinsToDBCmd } from "./commands/SavePinsToDB.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"; import { MessageSaverPluginType, zMessageSaverConfig } from "./types.js";
const defaultOptions: PluginOptions<MessageSaverPluginType> = { const defaultOptions: PluginOptions<MessageSaverPluginType> = {

View file

@ -3,7 +3,14 @@ import { commandTypeHelpers as ct } from "../../../commandTypes.js";
import { CaseTypes } from "../../../data/CaseTypes.js"; import { CaseTypes } from "../../../data/CaseTypes.js";
import { sendErrorMessage } from "../../../pluginUtils.js"; import { sendErrorMessage } from "../../../pluginUtils.js";
import { CasesPlugin } from "../../../plugins/Cases/CasesPlugin.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 { asyncMap } from "../../../utils/async.js";
import { createPaginatedMessage } from "../../../utils/createPaginatedMessage.js"; import { createPaginatedMessage } from "../../../utils/createPaginatedMessage.js";
import { getGuildPrefix } from "../../../utils/getGuildPrefix.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) // Compact view (= regular message with a preview of each case)
const casesPlugin = pluginData.getPlugin(CasesPlugin); 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); const prefix = getGuildPrefix(pluginData);
createPaginatedMessage( createPaginatedMessage(
@ -103,16 +110,16 @@ export const CasesUserCmd = modActionsCmd({
msg.channel, msg.channel,
totalPages, totalPages,
async (page) => { 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 lines = await asyncMap(chunkedCases, (c) => casesPlugin.getCaseSummary(c, true, msg.author.id));
const isLastPage = page === totalPages; const isLastPage = page === totalPages;
const firstCaseNum = (page - 1) * casesPerPage + 1; const firstCaseNum = (page - 1) * casesPerPage + 1;
const lastCaseNum = isLastPage ? cases.length : page * casesPerPage; const lastCaseNum = isLastPage ? casesToDisplay.length : page * casesPerPage;
const title = const title =
totalPages === 1 totalPages === 1
? `Cases for ${userName} (${lines.length} total)` ? `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 = { const embed = {
author: { author: {

View file

@ -3,7 +3,13 @@ import { GuildPluginData } from "knub";
import { CaseTypes } from "../../../data/CaseTypes.js"; import { CaseTypes } from "../../../data/CaseTypes.js";
import { LogType } from "../../../data/LogType.js"; import { LogType } from "../../../data/LogType.js";
import { renderTemplate, TemplateParseError, TemplateSafeValueContainer } from "../../../templateFormatter.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 { userToTemplateSafeUser } from "../../../utils/templateSafeObjects.js";
import { CasesPlugin } from "../../Cases/CasesPlugin.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js";
import { LogsPlugin } from "../../Logs/LogsPlugin.js"; import { LogsPlugin } from "../../Logs/LogsPlugin.js";

View file

@ -2,7 +2,13 @@ import { GuildMember, Snowflake } from "discord.js";
import { GuildPluginData } from "knub"; import { GuildPluginData } from "knub";
import { CaseTypes } from "../../../data/CaseTypes.js"; import { CaseTypes } from "../../../data/CaseTypes.js";
import { TemplateParseError, TemplateSafeValueContainer, renderTemplate } from "../../../templateFormatter.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 { userToTemplateSafeUser } from "../../../utils/templateSafeObjects.js";
import { waitForButtonConfirm } from "../../../utils/waitForInteraction.js"; import { waitForButtonConfirm } from "../../../utils/waitForInteraction.js";
import { CasesPlugin } from "../../Cases/CasesPlugin.js"; import { CasesPlugin } from "../../Cases/CasesPlugin.js";

View file

@ -1,5 +1,9 @@
import { GuildPluginData } from "knub"; 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 { PhishermanDomainInfo } from "../../../data/types/phisherman.js";
import { PhishermanPluginType } from "../types.js"; import { PhishermanPluginType } from "../types.js";

View file

@ -1,5 +1,6 @@
import { LoadedGuildPlugin, PluginCommandDefinition } from "knub"; import { LoadedGuildPlugin, PluginCommandDefinition } from "knub";
import { commandTypeHelpers as ct } from "../../../commandTypes.js"; import { commandTypeHelpers as ct } from "../../../commandTypes.js";
import { env } from "../../../env.js";
import { createChunkedMessage } from "../../../utils.js"; import { createChunkedMessage } from "../../../utils.js";
import { utilityCmd } from "../types.js"; import { utilityCmd } from "../types.js";
@ -62,7 +63,7 @@ export const HelpCmd = utilityCmd({
let snippet = `**${prefix}${trigger}**`; let snippet = `**${prefix}${trigger}**`;
if (description) snippet += `\n${description}`; if (description) snippet += `\n${description}`;
if (usage) snippet += `\nBasic usage: \`${usage}\``; if (usage) snippet += `\nBasic usage: \`${usage}\``;
snippet += `\n<https://zeppelin.gg/docs/plugins/${plugin.blueprint.name}/usage#command-${commandSlug}>`; snippet += `\n<${env.DASHBOARD_URL}/docs/plugins/${plugin.blueprint.name}/usage#command-${commandSlug}>`;
return snippet; return snippet;
}); });

View file

@ -1,5 +1,10 @@
import test from "ava"; 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) => { test("Parses plain string templates correctly", (t) => {
const result = parseTemplate("foo bar baz"); const result = parseTemplate("foo bar baz");

View file

@ -286,8 +286,10 @@ export type StrictMessageContent = {
}; };
export type MessageContent = string | StrictMessageContent; export type MessageContent = string | StrictMessageContent;
export const zMessageContent = z.union([zBoundedCharacters(0, 4000), zStrictMessageContent]) as z.ZodType<MessageContent>; export const zMessageContent = z.union([
zBoundedCharacters(0, 4000),
zStrictMessageContent,
]) as z.ZodType<MessageContent>;
export function validateAndParseMessageContent(input: unknown): StrictMessageContent { export function validateAndParseMessageContent(input: unknown): StrictMessageContent {
if (input == null) { if (input == null) {

View file

@ -54,7 +54,7 @@
- channel: "109672661671505920" - channel: "109672661671505920"
config: config:
can_kick: false can_kick: false
# Don't allow kicking on any trhead # Don't allow kicking on any thread
- is_thread: true - is_thread: true
config: config:
can_kick: false can_kick: false

102
package-lock.json generated
View file

@ -39,7 +39,7 @@
"dotenv": "^4.0.0", "dotenv": "^4.0.0",
"emoji-regex": "^8.0.0", "emoji-regex": "^8.0.0",
"escape-string-regexp": "^1.0.5", "escape-string-regexp": "^1.0.5",
"express": "^4.17.0", "express": "^4.19.2",
"fp-ts": "^2.0.1", "fp-ts": "^2.0.1",
"humanize-duration": "^3.15.0", "humanize-duration": "^3.15.0",
"js-yaml": "^3.13.1", "js-yaml": "^3.13.1",
@ -49,7 +49,7 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"moment-timezone": "^0.5.21", "moment-timezone": "^0.5.21",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"mysql2": "^3.9.3", "mysql2": "^3.9.8",
"parse-color": "^1.0.0", "parse-color": "^1.0.0",
"passport": "^0.6.0", "passport": "^0.6.0",
"passport-custom": "^1.0.5", "passport-custom": "^1.0.5",
@ -6047,12 +6047,12 @@
"integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ=="
}, },
"node_modules/body-parser": { "node_modules/body-parser": {
"version": "1.20.1", "version": "1.20.2",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
"dependencies": { "dependencies": {
"bytes": "3.1.2", "bytes": "3.1.2",
"content-type": "~1.0.4", "content-type": "~1.0.5",
"debug": "2.6.9", "debug": "2.6.9",
"depd": "2.0.0", "depd": "2.0.0",
"destroy": "1.2.0", "destroy": "1.2.0",
@ -6060,7 +6060,7 @@
"iconv-lite": "0.4.24", "iconv-lite": "0.4.24",
"on-finished": "2.4.1", "on-finished": "2.4.1",
"qs": "6.11.0", "qs": "6.11.0",
"raw-body": "2.5.1", "raw-body": "2.5.2",
"type-is": "~1.6.18", "type-is": "~1.6.18",
"unpipe": "1.0.0" "unpipe": "1.0.0"
}, },
@ -6171,12 +6171,12 @@
} }
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.1.1"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=8"
@ -7647,9 +7647,9 @@
} }
}, },
"node_modules/cookie": { "node_modules/cookie": {
"version": "0.5.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
"engines": { "engines": {
"node": ">= 0.6" "node": ">= 0.6"
} }
@ -9432,13 +9432,14 @@
} }
}, },
"node_modules/es5-ext": { "node_modules/es5-ext": {
"version": "0.10.62", "version": "0.10.64",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
"integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
"hasInstallScript": true, "hasInstallScript": true,
"dependencies": { "dependencies": {
"es6-iterator": "^2.0.3", "es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.3", "es6-symbol": "^3.1.3",
"esniff": "^2.0.1",
"next-tick": "^1.1.0" "next-tick": "^1.1.0"
}, },
"engines": { "engines": {
@ -9734,6 +9735,25 @@
"node": ">=6" "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": { "node_modules/espree": {
"version": "9.5.2", "version": "9.5.2",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
@ -9903,16 +9923,16 @@
} }
}, },
"node_modules/express": { "node_modules/express": {
"version": "4.18.2", "version": "4.19.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
"dependencies": { "dependencies": {
"accepts": "~1.3.8", "accepts": "~1.3.8",
"array-flatten": "1.1.1", "array-flatten": "1.1.1",
"body-parser": "1.20.1", "body-parser": "1.20.2",
"content-disposition": "0.5.4", "content-disposition": "0.5.4",
"content-type": "~1.0.4", "content-type": "~1.0.4",
"cookie": "0.5.0", "cookie": "0.6.0",
"cookie-signature": "1.0.6", "cookie-signature": "1.0.6",
"debug": "2.6.9", "debug": "2.6.9",
"depd": "2.0.0", "depd": "2.0.0",
@ -10237,9 +10257,9 @@
} }
}, },
"node_modules/fill-range": { "node_modules/fill-range": {
"version": "7.0.1", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
@ -10462,9 +10482,9 @@
"dev": true "dev": true
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.5", "version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
"integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -12876,14 +12896,6 @@
"set-cookie-parser": "^2.4.1" "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": { "node_modules/lines-and-columns": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@ -13661,9 +13673,9 @@
} }
}, },
"node_modules/mysql2": { "node_modules/mysql2": {
"version": "3.9.3", "version": "3.9.8",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.3.tgz", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.9.8.tgz",
"integrity": "sha512-+ZaoF0llESUy7BffccHG+urErHcWPZ/WuzYAA9TEeLaDYyke3/3D+VQDzK9xzRnXpd0eMtRf0WNOeo4Q1Baung==", "integrity": "sha512-+5JKNjPuks1FNMoy9TYpl77f+5frbTklz7eb3XDwbpsERRLEeXiW2PDEkakYF50UuKU2qwfGnyXpKYvukv8mGA==",
"dependencies": { "dependencies": {
"denque": "^2.1.0", "denque": "^2.1.0",
"generate-function": "^2.3.1", "generate-function": "^2.3.1",
@ -18174,9 +18186,9 @@
} }
}, },
"node_modules/raw-body": { "node_modules/raw-body": {
"version": "2.5.1", "version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"dependencies": { "dependencies": {
"bytes": "3.1.2", "bytes": "3.1.2",
"http-errors": "2.0.0", "http-errors": "2.0.0",
@ -22321,9 +22333,9 @@
} }
}, },
"node_modules/webpack-dev-middleware": { "node_modules/webpack-dev-middleware": {
"version": "5.3.3", "version": "5.3.4",
"resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz",
"integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"colorette": "^2.0.10", "colorette": "^2.0.10",