diff --git a/bot.js b/bot.js
index f4010789..08a382f1 100644
--- a/bot.js
+++ b/bot.js
@@ -149,6 +149,19 @@ class DiscordHaloBot extends Client {
});
}
+ /**
+ * Sends a discord message on the bot's behalf to the health log channel
+ * @param {Object} args
+ * @param {EmbedBase} args.embed Singular embed object to be sent in message
+ * @returns {Promise} Promise which resolves to the sent message
+ */
+ async logHealth({ embed, ...options }) {
+ return (await this.channels.fetch(this.config.channels.log_health)).send({
+ embeds: [embed],
+ ...options,
+ });
+ }
+
/**
* Sends a discord message on the bot's behalf to a public log channel
* @param {Object} args
diff --git a/classes/HaloWatcher.js b/classes/HaloWatcher.js
index e2bd0776..12fe079e 100644
--- a/classes/HaloWatcher.js
+++ b/classes/HaloWatcher.js
@@ -16,7 +16,7 @@
import { EventEmitter } from 'node:events';
import { setIntervalAsync } from 'set-interval-async/fixed';
-import { Firebase, Halo, handle401, Logger } from '.';
+import { Firebase, Halo, handle401, HealthManager, Logger } from '.';
import { CLASS_ANNOUNCEMENTS, USER_GRADES, USER_INBOX } from '../caches';
export class HaloWatcher extends EventEmitter {
@@ -24,9 +24,18 @@ export class HaloWatcher extends EventEmitter {
super();
//create intervals
- setIntervalAsync(async () => await this.#watchForAnnouncements(), 20000);
- setIntervalAsync(async () => await this.#watchForGrades(), 20000);
- setIntervalAsync(async () => await this.#watchForInboxMessages(), 20000);
+ setIntervalAsync(async () => {
+ await this.#watchForAnnouncements();
+ HealthManager.record('ANNOUNCEMENTS');
+ }, 20000);
+ setIntervalAsync(async () => {
+ await this.#watchForGrades();
+ HealthManager.record('GRADES');
+ }, 20000);
+ setIntervalAsync(async () => {
+ await this.#watchForInboxMessages();
+ HealthManager.record('INBOX_MESSAGES');
+ }, 20000);
}
/**
diff --git a/classes/HealthManager.js b/classes/HealthManager.js
new file mode 100644
index 00000000..74d93157
--- /dev/null
+++ b/classes/HealthManager.js
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 Elijah Olmos
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import bot from '../bot';
+import { Logger, EmbedBase } from '.';
+
+export class HealthManager {
+ static #records = new Map();
+
+ static record(event) {
+ this.#records.set(event, Date.now());
+ Logger.health(`recorded event: ${event}`);
+ }
+
+ static publishLogs() {
+ const flags = [];
+ // find all records that are older than 2min
+ const fields = Array.from(this.#records).map(([event, date]) => {
+ if (date < Date.now() - 120000) flags.push(event);
+ return {
+ name: `\`${event}\``,
+ value: bot.formatTimestamp(date, 'R'),
+ inline: true,
+ };
+ });
+
+ const embed = new EmbedBase({
+ title: 'Health Report',
+ description: `Discord API Latency: ${bot.ws.ping}ms`,
+ fields: [
+ ...(!!flags.length
+ ? [
+ {
+ name: 'Flags',
+ value: flags.map((flag) => `\`${flag}\``).join('\n'),
+ },
+ ]
+ : []),
+ ...fields,
+ ],
+ });
+ !!flags.length && embed.Error();
+ bot.logHealth({ embed, ...(!!flags.length && { content: '<@!139120967208271872> unhealthy status' }) });
+ }
+}
diff --git a/classes/Logger.js b/classes/Logger.js
index 6a561d5f..fc0dbb58 100644
--- a/classes/Logger.js
+++ b/classes/Logger.js
@@ -22,14 +22,17 @@ import { serializeError } from 'serialize-error';
export class Logger {
static async log(content, type = 'log') {
- const timestamp = `[${chalk.white(moment().format('YYYY-MM-DD HH:mm:ss'))}]`;
+ const date = moment();
+ const timestamp = `[${chalk.white(date.format('YYYY-MM-DD HH:mm:ss'))}]`;
type !== 'error' && !!content && content.constructor === Object && (content = JSON.stringify(content));
switch (type) {
case 'log': {
- //create file first, if it does not exist
- await fs.mkdir('./' + path.relative(process.cwd(), 'log/'), { recursive: true });
+ //create dir first, if it does not exist
+ await fs.mkdir('./' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/`), {
+ recursive: true,
+ });
fs.appendFile(
- './' + path.relative(process.cwd(), 'log/log.log'),
+ './' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/log.log`),
`[${moment().format('YYYY-MM-DD HH:mm:ss')}]: ${content}\n`
);
return console.log(`${timestamp} [${chalk.bgBlue(` ${type.toUpperCase()} `)}]: ${content}`);
@@ -38,19 +41,23 @@ export class Logger {
return console.log(`${timestamp} [${chalk.black.bgYellow(type.toUpperCase())}]: ${content}`);
}
case 'error': {
- //create file first, if it does not exist
- await fs.mkdir('./' + path.relative(process.cwd(), 'log/'), { recursive: true });
+ //create dir first, if it does not exist
+ await fs.mkdir('./' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/`), {
+ recursive: true,
+ });
fs.appendFile(
- './' + path.relative(process.cwd(), 'log/error.log'),
+ './' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/error.log`),
`[${moment().format('YYYY-MM-DD HH:mm:ss')}]: ${JSON.stringify(serializeError(content))}\n`
);
return console.log(`${timestamp} [${chalk.bgRed(type.toUpperCase())}]: ${content}`);
}
case 'debug': {
- //create file first, if it does not exist
- await fs.mkdir('./' + path.relative(process.cwd(), 'log/'), { recursive: true });
+ //create dir first, if it does not exist
+ await fs.mkdir('./' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/`), {
+ recursive: true,
+ });
fs.appendFile(
- './' + path.relative(process.cwd(), 'log/debug.log'),
+ './' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/debug.log`),
`[${moment().format('YYYY-MM-DD HH:mm:ss')}]: ${content}\n`
);
return console.log(`${timestamp} [${chalk.green(type.toUpperCase())}]: ${content}`);
@@ -65,41 +72,52 @@ export class Logger {
return console.log(`${timestamp} [${chalk.black.bgGreen(type.toUpperCase())}]: ${content}`);
}
case 'uninstall': {
- //create file first, if it does not exist
- await fs.mkdir('./' + path.relative(process.cwd(), 'log/'), { recursive: true });
+ //create dir first, if it does not exist
+ await fs.mkdir('./' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/`), {
+ recursive: true,
+ });
fs.appendFile(
- './' + path.relative(process.cwd(), 'log/uninstall.log'),
+ './' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/uninstall.log`),
`[${moment().format('YYYY-MM-DD HH:mm:ss')}]: ${content}\n`
);
return console.log(`${timestamp} [${chalk.yellow(type.toUpperCase())}]: ${content}`);
}
case 'unauth': {
- //create file first, if it does not exist
- await fs.mkdir('./' + path.relative(process.cwd(), 'log/'), { recursive: true });
+ //create dir first, if it does not exist
+ await fs.mkdir('./' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/`), {
+ recursive: true,
+ });
fs.appendFile(
- './' + path.relative(process.cwd(), 'log/unauth.log'),
+ './' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/unauth.log`),
`[${moment().format('YYYY-MM-DD HH:mm:ss')}]: ${content}\n`
);
return; //don't output to console
}
case 'cookie': {
- //create file first, if it does not exist
- await fs.mkdir('./' + path.relative(process.cwd(), 'log/'), { recursive: true });
+ //create dir first, if it does not exist
+ await fs.mkdir('./' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/`), {
+ recursive: true,
+ });
fs.appendFile(
- './' + path.relative(process.cwd(), 'log/cookie.log'),
+ './' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/cookie.log`),
`[${moment().format('YYYY-MM-DD HH:mm:ss')}]: ${content}\n`
);
return console.log(`${timestamp} [${chalk.grey(type.toUpperCase())}]: ${content}`);
}
case 'cron': {
- //create file first, if it does not exist
- await fs.mkdir('./' + path.relative(process.cwd(), 'log/'), { recursive: true });
+ //create dir first, if it does not exist
+ await fs.mkdir('./' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/`), {
+ recursive: true,
+ });
fs.appendFile(
- './' + path.relative(process.cwd(), 'log/cron.log'),
+ './' + path.relative(process.cwd(), `log/${date.format('YYYY-MM-DD')}/cron.log`),
`[${moment().format('YYYY-MM-DD HH:mm:ss')}]: ${content}\n`
);
return console.log(`${timestamp} [${chalk.bgYellow(type.toUpperCase())}]: ${content}`);
}
+ case 'health': {
+ return console.log(`${timestamp} [${chalk.black.bgGreen(type.toUpperCase())}]: ${content}`);
+ }
default:
throw new TypeError('Unknown log type');
}
@@ -144,4 +162,8 @@ export class Logger {
static cron(content) {
return this.log(content, 'cron');
}
+
+ static health(content) {
+ return this.log(content, 'health');
+ }
}
diff --git a/classes/components/EmbedBase.js b/classes/components/EmbedBase.js
index cffd644c..6fa576eb 100644
--- a/classes/components/EmbedBase.js
+++ b/classes/components/EmbedBase.js
@@ -136,8 +136,7 @@ export class EmbedBase extends MessageEmbed {
this.description &&= truncate(this.description.trim(), { length: 4095, omission: '\u2026' });
// I'd like to split the embeds before slicing fields, if possible
this.fields = this.fields
- .map((f) => this.splitField(f))
- .flat()
+ .flatMap((f) => this.splitField(f))
.slice(0, 25)
.map((f) => ({
...f,
diff --git a/classes/index.js b/classes/index.js
index 22ace06a..2551095d 100644
--- a/classes/index.js
+++ b/classes/index.js
@@ -32,3 +32,4 @@ export * from './services/GradeService';
export * from './services/InboxMessageService';
export * from './services/401Service';
export * as Encrypt from './services/EncryptionService';
+export * from './HealthManager';
diff --git a/classes/services/AnnouncementService.js b/classes/services/AnnouncementService.js
index bf48013a..01085c6d 100644
--- a/classes/services/AnnouncementService.js
+++ b/classes/services/AnnouncementService.js
@@ -14,6 +14,7 @@
* along with this program. If not, see .
*/
+import { decode } from 'html-entities';
import { EmbedBase, Firebase, Logger } from '..';
import bot from '../../bot';
@@ -92,10 +93,15 @@ export class AnnouncementService {
fields: [
{
name: 'Message',
- value: announcement.content
- .replaceAll('
', '\n')
- .replaceAll('
', '\n') //this is kinda hacky ngl
- .replace(/<\/?[^>]+(>|$)/g, ''),
+ value: decode(
+ announcement.content
+ .replaceAll('
', '\n')
+ .replaceAll('
', '\n') //this is kinda hacky ngl
+ .replaceAll('
', '\n\t\u2022 ')
+ .replaceAll('', '\n')
+ .replaceAll('', '\n')
+ .replace(/<\/?[^>]+(>|$)/g, '')
+ ),
},
//TODO: cleanup dry code
...(!!announcement.resources.filter(({ kind }) => kind !== 'URL').length
diff --git a/classes/services/GradeService.js b/classes/services/GradeService.js
index 7b64f9d8..4bf6b587 100644
--- a/classes/services/GradeService.js
+++ b/classes/services/GradeService.js
@@ -14,6 +14,7 @@
* along with this program. If not, see .
*/
+import { decode } from 'html-entities';
import { round } from 'lodash-es';
import { EmbedBase, Firebase, Logger } from '..';
import bot from '../../bot';
@@ -106,10 +107,15 @@ export class GradeService {
{
name: `Feedback:`,
value: !!finalComment?.comment
- ? finalComment.comment
- .replaceAll('
', '\n')
- .replaceAll('', '\n') //this is kinda hacky ngl
- .replace(/<\/?[^>]+(>|$)/g, '')
+ ? decode(
+ finalComment.comment
+ .replaceAll('
', '\n')
+ .replaceAll('
', '\n') //this is kinda hacky ngl
+ .replaceAll('
', '\n\t\u2022 ')
+ .replaceAll('', '\n')
+ .replaceAll('', '\n')
+ .replace(/<\/?[^>]+(>|$)/g, '')
+ )
: 'None',
},
...(show_overall_grade
diff --git a/classes/services/InboxMessageService.js b/classes/services/InboxMessageService.js
index 81c72b34..ed68b840 100644
--- a/classes/services/InboxMessageService.js
+++ b/classes/services/InboxMessageService.js
@@ -14,7 +14,8 @@
* along with this program. If not, see .
*/
-import { EmbedBase, Firebase, Logger } from '..';
+import { decode } from 'html-entities';
+import { EmbedBase, Logger } from '..';
import bot from '../../bot';
export class InboxMessageService {
@@ -79,10 +80,15 @@ export class InboxMessageService {
content: `New message received from **${firstName} ${lastName}**:`,
embeds: [
new EmbedBase({
- description: inbox_message.content
- .replaceAll('
', '\n')
- .replaceAll('', '\n') //this is kinda hacky ngl
- .replace(/<\/?[^>]+(>|$)/g, ''),
+ description: decode(
+ inbox_message.content
+ .replaceAll('
', '\n')
+ .replaceAll('
', '\n') //this is kinda hacky ngl
+ .replaceAll('
', '\n\t\u2022 ')
+ .replaceAll('', '\n')
+ .replaceAll('', '\n')
+ .replace(/<\/?[^>]+(>|$)/g, '')
+ ),
fields: [
...(!!inbox_message.resources.filter(({ kind }) => kind !== 'URL').length
? [
diff --git a/commands/development/test.js b/commands/development/test.js
index 4feb1789..c154601b 100644
--- a/commands/development/test.js
+++ b/commands/development/test.js
@@ -15,7 +15,7 @@
*/
import bot from '../../bot';
-import { Command, Firebase, Halo } from '../../classes';
+import { Command, Firebase, Halo, HealthManager } from '../../classes';
class test extends Command {
constructor() {
@@ -28,8 +28,7 @@ class test extends Command {
async run({ intr }) {
try {
- const cookie = await Firebase.getUserCookie(intr.user.id);
-
+ HealthManager.publishLogs();
// const feedback = await Halo.getGradeFeedback({
// cookie,
// assessment_id: '1454f632-ab98-4900-8858-452160a85b9c',
diff --git a/config.js b/config.js
index 04ce39cd..ed76a27b 100644
--- a/config.js
+++ b/config.js
@@ -52,6 +52,7 @@ export default {
connection_log: '932058303779983470',
cron_log: '1029803136367476807',
log_401: '1036438412011507773',
+ log_health: '1077445943865131018',
},
events: {},
emoji: {},
@@ -98,6 +99,7 @@ export default {
connection_log: '932058303779983470',
cron_log: '1029803136367476807',
log_401: '1036438412011507773',
+ log_health: '1077445943865131018',
},
events: {},
emoji: {},
diff --git a/events/cron/publishHealthLogs.js b/events/cron/publishHealthLogs.js
new file mode 100644
index 00000000..944e5a9c
--- /dev/null
+++ b/events/cron/publishHealthLogs.js
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 Elijah Olmos
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { CronEvent, HealthManager } from '../../classes';
+
+export default class extends CronEvent {
+ constructor() {
+ super({
+ name: 'publishHealthLogs',
+ schedule: '0 * * * *', //every hour
+ });
+ }
+
+ run() {
+ HealthManager.publishLogs();
+ }
+}
diff --git a/package.json b/package.json
index f10d63a9..ebc82f8d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "halo-discord-bot",
- "version": "2.5.2",
+ "version": "2.5.3",
"author": "Elijah Olmos",
"license": "AGPL-3.0-only",
"main": "index.js",
@@ -32,6 +32,7 @@
"dotenv": "16.0.3",
"firebase-admin": "11.5.0",
"graphql-request": "5.1.0",
+ "html-entities": "2.3.3",
"klaw": "4.1.0",
"lodash-es": "4.17.21",
"moment": "2.29.4",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index fc7b432a..97e8fd47 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,7 @@ specifiers:
express: 4.18.2
firebase-admin: 11.5.0
graphql-request: 5.1.0
+ html-entities: 2.3.3
klaw: 4.1.0
lodash-es: 4.17.21
moment: 2.29.4
@@ -23,6 +24,7 @@ dependencies:
dotenv: 16.0.3
firebase-admin: 11.5.0
graphql-request: 5.1.0_graphql@16.6.0
+ html-entities: 2.3.3
klaw: 4.1.0
lodash-es: 4.17.21
moment: 2.29.4
@@ -48,17 +50,17 @@ packages:
dev: false
optional: true
- /@babel/parser/7.20.13:
- resolution: {integrity: sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==}
+ /@babel/parser/7.21.1:
+ resolution: {integrity: sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.20.7
+ '@babel/types': 7.21.0
dev: false
optional: true
- /@babel/types/7.20.7:
- resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==}
+ /@babel/types/7.21.0:
+ resolution: {integrity: sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.19.4
@@ -75,8 +77,8 @@ packages:
'@sapphire/shapeshift': 3.8.1
discord-api-types: 0.36.3
fast-deep-equal: 3.1.3
- ts-mixer: 6.0.2
- tslib: 2.4.1
+ ts-mixer: 6.0.3
+ tslib: 2.5.0
dev: false
/@discordjs/collection/0.7.0:
@@ -100,63 +102,63 @@ packages:
resolution: {integrity: sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==}
dev: false
- /@firebase/component/0.6.1:
- resolution: {integrity: sha512-yvKthG0InjFx9aOPnh6gk0lVNfNVEtyq3LwXgZr+hOwD0x/CtXq33XCpqv0sQj5CA4FdMy8OO+y9edI+ZUw8LA==}
+ /@firebase/component/0.6.3:
+ resolution: {integrity: sha512-rnhq5SOsB5nuJphZF50iwqnBiuuyg9kdnlUn1rBrKfu7/cUVJZF5IG1cWrL0rXXyiZW1WBI/J2pmTvVO8dStGQ==}
dependencies:
- '@firebase/util': 1.9.0
- tslib: 2.4.1
+ '@firebase/util': 1.9.2
+ tslib: 2.5.0
dev: false
- /@firebase/database-compat/0.3.1:
- resolution: {integrity: sha512-sI7LNh0C8PCq9uUKjrBKLbZvqHTSjsf2LeZRxin+rHVegomjsOAYk9OzYwxETWh3URhpMkCM8KcTl7RVwAldog==}
+ /@firebase/database-compat/0.3.3:
+ resolution: {integrity: sha512-r+L9jTbvsnb7sD+xz6UKU39DgBWqB2pyjzPNdBeriGC9Ssa2MAZe0bIqjCQg51RRXYc/aa/zK1Q2/4uesZeVgQ==}
dependencies:
- '@firebase/component': 0.6.1
- '@firebase/database': 0.14.1
- '@firebase/database-types': 0.10.1
+ '@firebase/component': 0.6.3
+ '@firebase/database': 0.14.3
+ '@firebase/database-types': 0.10.3
'@firebase/logger': 0.4.0
- '@firebase/util': 1.9.0
- tslib: 2.4.1
+ '@firebase/util': 1.9.2
+ tslib: 2.5.0
dev: false
- /@firebase/database-types/0.10.1:
- resolution: {integrity: sha512-UgUx9VakTHbP2WrVUdYrUT2ofTFVfWjGW2O1fwuvvMyo6WSnuSyO5nB1u0cyoMPvO25dfMIUVerfK7qFfwGL3Q==}
+ /@firebase/database-types/0.10.3:
+ resolution: {integrity: sha512-Hu34CDhHYZsd2eielr0jeaWrTJk8Hz0nd7WsnYDnXtQX4i49ppgPesUzPdXVBdIBLJmT0ZZRvT7qWHknkOT+zg==}
dependencies:
'@firebase/app-types': 0.9.0
- '@firebase/util': 1.9.0
+ '@firebase/util': 1.9.2
dev: false
- /@firebase/database/0.14.1:
- resolution: {integrity: sha512-iX6/p7hoxUMbYAGZD+D97L05xQgpkslF2+uJLZl46EdaEfjVMEwAdy7RS/grF96kcFZFg502LwPYTXoIdrZqOA==}
+ /@firebase/database/0.14.3:
+ resolution: {integrity: sha512-J76W6N7JiVkLaAtPyjaGRkrsIu9pi6iZikuGGtGjqvV19vkn7oiL4Hbo5uTYCMd4waTUWoL9iI08eX184W+5GQ==}
dependencies:
'@firebase/auth-interop-types': 0.2.1
- '@firebase/component': 0.6.1
+ '@firebase/component': 0.6.3
'@firebase/logger': 0.4.0
- '@firebase/util': 1.9.0
+ '@firebase/util': 1.9.2
faye-websocket: 0.11.4
- tslib: 2.4.1
+ tslib: 2.5.0
dev: false
/@firebase/logger/0.4.0:
resolution: {integrity: sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==}
dependencies:
- tslib: 2.4.1
+ tslib: 2.5.0
dev: false
- /@firebase/util/1.9.0:
- resolution: {integrity: sha512-oeoq/6Sr9btbwUQs5HPfeww97bf7qgBbkknbDTXpRaph2LZ23O9XLCE5tJy856SBmGQfO4xBZP8dyryLLM2nSQ==}
+ /@firebase/util/1.9.2:
+ resolution: {integrity: sha512-9l0uMGPGw3GsoD5khjMmYCCcMq/OR/OOSViiWMN+s2Q0pxM+fYzrii1H+r8qC/uoMjSVXomjLZt0vZIyryCqtQ==}
dependencies:
- tslib: 2.4.1
+ tslib: 2.5.0
dev: false
- /@google-cloud/firestore/6.4.2:
- resolution: {integrity: sha512-f7xFwINJveaqTFcgy0G4o2CBPm0Gv9lTGQ4dQt+7skwaHs3ytdue9ma8oQZYXKNoWcAoDIMQ929Dk0KOIocxFg==}
+ /@google-cloud/firestore/6.4.3:
+ resolution: {integrity: sha512-78Ymo6DCQ1t33UWK5TuV98ZbbinC1PwNLsfWIjQTaqSbQydvVfQrG3EsOk+WKKMSwdjEqqnehJ5V1FXb7S1iQQ==}
engines: {node: '>=12.0.0'}
requiresBuild: true
dependencies:
fast-deep-equal: 3.1.3
functional-red-black-tree: 1.0.1
- google-gax: 3.5.2
- protobufjs: 7.1.2
+ google-gax: 3.5.7
+ protobufjs: 7.2.2
transitivePeerDependencies:
- encoding
- supports-color
@@ -184,8 +186,8 @@ packages:
dev: false
optional: true
- /@google-cloud/storage/6.9.0:
- resolution: {integrity: sha512-0mn9DUe3dtyTWLsWLplQP3gzPolJ5kD4PwHuzeD3ye0SAQ+oFfDbT8d+vNZxqyvddL2c6uNP72TKETN2PQxDKg==}
+ /@google-cloud/storage/6.9.3:
+ resolution: {integrity: sha512-ucbHoDvjXlcR/DrJNQlCFnQSaO7pXHTPGs3Gt2TQtPQ+b7Y6DR0ztIt/CEeH+O03I41g9e+T2N1SOOVq5UyaKQ==}
engines: {node: '>=12'}
requiresBuild: true
dependencies:
@@ -204,7 +206,7 @@ packages:
mime-types: 2.1.35
p-limit: 3.1.0
retry-request: 5.0.2
- teeny-request: 8.0.2
+ teeny-request: 8.0.3
uuid: 8.3.2
transitivePeerDependencies:
- encoding
@@ -220,28 +222,36 @@ packages:
graphql: 16.6.0
dev: false
- /@grpc/grpc-js/1.7.3:
- resolution: {integrity: sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==}
+ /@grpc/grpc-js/1.8.10:
+ resolution: {integrity: sha512-x7QS+gJq8WaS1OJYFJkmeoX2PHhi3b5TR5TqR9a8NJv6VyedFecp3LgAUmuJSQZlwoAODpCKRtu4HzG1srNjiA==}
engines: {node: ^8.13.0 || >=10.10.0}
dependencies:
- '@grpc/proto-loader': 0.7.4
- '@types/node': 18.11.18
+ '@grpc/proto-loader': 0.7.5
+ '@types/node': 18.14.0
dev: false
optional: true
- /@grpc/proto-loader/0.7.4:
- resolution: {integrity: sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==}
+ /@grpc/proto-loader/0.7.5:
+ resolution: {integrity: sha512-mfcTuMbFowq1wh/Rn5KQl6qb95M21Prej3bewD9dUQMurYGVckGO/Pbe2Ocwto6sD05b/mxZLspvqwx60xO2Rg==}
engines: {node: '>=6'}
hasBin: true
dependencies:
'@types/long': 4.0.2
lodash.camelcase: 4.3.0
long: 4.0.0
- protobufjs: 7.1.2
+ protobufjs: 7.2.2
yargs: 16.2.0
dev: false
optional: true
+ /@jsdoc/salty/0.2.3:
+ resolution: {integrity: sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==}
+ engines: {node: '>=v12.0.0'}
+ dependencies:
+ lodash: 4.17.21
+ dev: false
+ optional: true
+
/@protobufjs/aspromise/1.1.2:
resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
dev: false
@@ -318,36 +328,44 @@ packages:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
'@types/connect': 3.4.35
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
dev: false
/@types/connect/3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
dev: false
- /@types/express-serve-static-core/4.17.32:
- resolution: {integrity: sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==}
+ /@types/express-serve-static-core/4.17.33:
+ resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==}
dependencies:
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
dev: false
- /@types/express/4.17.15:
- resolution: {integrity: sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==}
+ /@types/express/4.17.17:
+ resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
dependencies:
'@types/body-parser': 1.19.2
- '@types/express-serve-static-core': 4.17.32
+ '@types/express-serve-static-core': 4.17.33
'@types/qs': 6.9.7
'@types/serve-static': 1.15.0
dev: false
+ /@types/glob/8.0.1:
+ resolution: {integrity: sha512-8bVUjXZvJacUFkJXHdyZ9iH1Eaj5V7I8c4NdH5sQJsdXkqT4CA5Dhb4yb4VE/3asyx4L9ayZr1NIhTsWHczmMw==}
+ dependencies:
+ '@types/minimatch': 5.1.2
+ '@types/node': 18.14.0
+ dev: false
+ optional: true
+
/@types/jsonwebtoken/9.0.1:
resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==}
dependencies:
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
dev: false
/@types/linkify-it/3.0.2:
@@ -377,15 +395,20 @@ packages:
resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
dev: false
+ /@types/minimatch/5.1.2:
+ resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+ dev: false
+ optional: true
+
/@types/node-fetch/2.6.2:
resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==}
dependencies:
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
form-data: 3.0.1
dev: false
- /@types/node/18.11.18:
- resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
+ /@types/node/18.14.0:
+ resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==}
dev: false
/@types/qs/6.9.7:
@@ -396,17 +419,25 @@ packages:
resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
dev: false
+ /@types/rimraf/3.0.2:
+ resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==}
+ dependencies:
+ '@types/glob': 8.0.1
+ '@types/node': 18.14.0
+ dev: false
+ optional: true
+
/@types/serve-static/1.15.0:
resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==}
dependencies:
'@types/mime': 3.0.1
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
dev: false
/@types/ws/8.5.4:
resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==}
dependencies:
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
dev: false
/abort-controller/3.0.0:
@@ -425,17 +456,17 @@ packages:
negotiator: 0.6.3
dev: true
- /acorn-jsx/5.3.2_acorn@8.8.1:
+ /acorn-jsx/5.3.2_acorn@8.8.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- acorn: 8.8.1
+ acorn: 8.8.2
dev: false
optional: true
- /acorn/8.8.1:
- resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
+ /acorn/8.8.2:
+ resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: false
@@ -524,7 +555,7 @@ packages:
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
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
@@ -644,8 +675,8 @@ packages:
safe-buffer: 5.2.1
dev: true
- /content-type/1.0.4:
- resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==}
+ /content-type/1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
dev: true
@@ -706,8 +737,8 @@ packages:
dev: false
optional: true
- /define-properties/1.1.4:
- resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==}
+ /define-properties/1.2.0:
+ resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
engines: {node: '>= 0.4'}
dependencies:
has-property-descriptors: 1.0.0
@@ -755,8 +786,8 @@ packages:
'@types/ws': 8.5.4
discord-api-types: 0.33.5
form-data: 4.0.0
- node-fetch: 2.6.8
- ws: 8.12.0
+ node-fetch: 2.6.9
+ ws: 8.12.1
transitivePeerDependencies:
- bufferutil
- encoding
@@ -855,8 +886,8 @@ packages:
resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- acorn: 8.8.1
- acorn-jsx: 5.3.2_acorn@8.8.1
+ acorn: 8.8.2
+ acorn-jsx: 5.3.2_acorn@8.8.2
eslint-visitor-keys: 3.3.0
dev: false
optional: true
@@ -905,7 +936,7 @@ packages:
array-flatten: 1.1.1
body-parser: 1.20.1
content-disposition: 0.5.4
- content-type: 1.0.4
+ content-type: 1.0.5
cookie: 0.5.0
cookie-signature: 1.0.6
debug: 2.6.9
@@ -991,16 +1022,16 @@ packages:
engines: {node: '>=14'}
dependencies:
'@fastify/busboy': 1.2.1
- '@firebase/database-compat': 0.3.1
- '@firebase/database-types': 0.10.1
- '@types/node': 18.11.18
+ '@firebase/database-compat': 0.3.3
+ '@firebase/database-types': 0.10.3
+ '@types/node': 18.14.0
jsonwebtoken: 9.0.0
jwks-rsa: 3.0.1
node-forge: 1.3.1
uuid: 9.0.0
optionalDependencies:
- '@google-cloud/firestore': 6.4.2
- '@google-cloud/storage': 6.9.0
+ '@google-cloud/firestore': 6.4.3
+ '@google-cloud/storage': 6.9.3
transitivePeerDependencies:
- encoding
- supports-color
@@ -1063,7 +1094,7 @@ packages:
extend: 3.0.2
https-proxy-agent: 5.0.1
is-stream: 2.0.1
- node-fetch: 2.6.8
+ node-fetch: 2.6.9
transitivePeerDependencies:
- encoding
- supports-color
@@ -1138,24 +1169,25 @@ packages:
dev: false
optional: true
- /google-gax/3.5.2:
- resolution: {integrity: sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==}
+ /google-gax/3.5.7:
+ resolution: {integrity: sha512-taDGwR9Ry5y6NkcPYKe0B3wr7rCwaImZZIuWajUcFe9Y8L71eBtaq0+ZJ62JByzr/2cJkd9EN1rr52rD6V/UDA==}
engines: {node: '>=12'}
hasBin: true
dependencies:
- '@grpc/grpc-js': 1.7.3
- '@grpc/proto-loader': 0.7.4
+ '@grpc/grpc-js': 1.8.10
+ '@grpc/proto-loader': 0.7.5
'@types/long': 4.0.2
+ '@types/rimraf': 3.0.2
abort-controller: 3.0.0
duplexify: 4.1.2
fast-text-encoding: 1.0.6
google-auth-library: 8.7.0
is-stream-ended: 0.1.4
- node-fetch: 2.6.8
+ node-fetch: 2.6.9
object-hash: 3.0.0
proto3-json-serializer: 1.1.0
- protobufjs: 7.1.2
- protobufjs-cli: 1.0.2_protobufjs@7.1.2
+ protobufjs: 7.2.2
+ protobufjs-cli: 1.1.1_protobufjs@7.2.2
retry-request: 5.0.2
transitivePeerDependencies:
- encoding
@@ -1236,6 +1268,10 @@ packages:
engines: {node: '>=8'}
dev: false
+ /html-entities/2.3.3:
+ resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==}
+ dev: false
+
/http-errors/2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
@@ -1308,7 +1344,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.2
- define-properties: 1.1.4
+ define-properties: 1.2.0
dev: false
/is-stream-ended/0.1.4:
@@ -1322,8 +1358,8 @@ packages:
dev: false
optional: true
- /jose/4.11.2:
- resolution: {integrity: sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==}
+ /jose/4.12.0:
+ resolution: {integrity: sha512-wW1u3cK81b+SFcHjGC8zw87yuyUweEFe0UJirrXEw1NasW00eF7sZjeG3SLBGz001ozxQ46Y9sofDvhBmWFtXQ==}
dev: false
/js2xmlparser/4.0.2:
@@ -1333,12 +1369,13 @@ packages:
dev: false
optional: true
- /jsdoc/3.6.11:
- resolution: {integrity: sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==}
+ /jsdoc/4.0.2:
+ resolution: {integrity: sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==}
engines: {node: '>=12.0.0'}
hasBin: true
dependencies:
- '@babel/parser': 7.20.13
+ '@babel/parser': 7.21.1
+ '@jsdoc/salty': 0.2.3
'@types/markdown-it': 12.2.3
bluebird: 3.7.2
catharsis: 0.9.0
@@ -1346,12 +1383,11 @@ packages:
js2xmlparser: 4.0.2
klaw: 3.0.0
markdown-it: 12.3.2
- markdown-it-anchor: 8.6.6_2zb4u3vubltivolgu556vv4aom
+ markdown-it-anchor: 8.6.7_2zb4u3vubltivolgu556vv4aom
marked: 4.2.12
mkdirp: 1.0.4
requizzle: 0.2.4
strip-json-comments: 3.1.1
- taffydb: 2.6.2
underscore: 1.13.6
dev: false
optional: true
@@ -1394,12 +1430,12 @@ packages:
resolution: {integrity: sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==}
engines: {node: '>=14'}
dependencies:
- '@types/express': 4.17.15
+ '@types/express': 4.17.17
'@types/jsonwebtoken': 9.0.1
debug: 4.3.4
- jose: 4.11.2
+ jose: 4.12.0
limiter: 1.1.5
- lru-memoizer: 2.1.4
+ lru-memoizer: 2.2.0
transitivePeerDependencies:
- supports-color
dev: false
@@ -1496,8 +1532,8 @@ packages:
yallist: 4.0.0
dev: false
- /lru-memoizer/2.1.4:
- resolution: {integrity: sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==}
+ /lru-memoizer/2.2.0:
+ resolution: {integrity: sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==}
dependencies:
lodash.clonedeep: 4.5.0
lru-cache: 4.0.2
@@ -1507,8 +1543,8 @@ packages:
resolution: {integrity: sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw==}
dev: false
- /markdown-it-anchor/8.6.6_2zb4u3vubltivolgu556vv4aom:
- resolution: {integrity: sha512-jRW30YGywD2ESXDc+l17AiritL0uVaSnWsb26f+68qaW9zgbIIr1f4v2Nsvc0+s0Z2N3uX6t/yAw7BwCQ1wMsA==}
+ /markdown-it-anchor/8.6.7_2zb4u3vubltivolgu556vv4aom:
+ resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==}
peerDependencies:
'@types/markdown-it': '*'
markdown-it: '*'
@@ -1599,8 +1635,8 @@ packages:
dev: false
optional: true
- /minimist/1.2.7:
- resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+ /minimist/1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: false
optional: true
@@ -1643,8 +1679,8 @@ packages:
whatwg-url: 5.0.0
dev: false
- /node-fetch/2.6.8:
- resolution: {integrity: sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==}
+ /node-fetch/2.6.9:
+ resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==}
engines: {node: 4.x || >=6.0.0}
peerDependencies:
encoding: ^0.1.0
@@ -1742,12 +1778,12 @@ packages:
resolution: {integrity: sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==}
engines: {node: '>=12.0.0'}
dependencies:
- protobufjs: 7.1.2
+ protobufjs: 7.2.2
dev: false
optional: true
- /protobufjs-cli/1.0.2_protobufjs@7.1.2:
- resolution: {integrity: sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==}
+ /protobufjs-cli/1.1.1_protobufjs@7.2.2:
+ resolution: {integrity: sha512-VPWMgIcRNyQwWUv8OLPyGQ/0lQY/QTQAVN5fh+XzfDwsVw1FZ2L3DM/bcBf8WPiRz2tNpaov9lPZfNcmNo6LXA==}
engines: {node: '>=12.0.0'}
hasBin: true
peerDependencies:
@@ -1758,17 +1794,17 @@ packages:
espree: 9.4.1
estraverse: 5.3.0
glob: 8.1.0
- jsdoc: 3.6.11
- minimist: 1.2.7
- protobufjs: 7.1.2
+ jsdoc: 4.0.2
+ minimist: 1.2.8
+ protobufjs: 7.2.2
semver: 7.3.8
tmp: 0.2.1
uglify-js: 3.17.4
dev: false
optional: true
- /protobufjs/7.1.2:
- resolution: {integrity: sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==}
+ /protobufjs/7.2.2:
+ resolution: {integrity: sha512-++PrQIjrom+bFDPpfmqXfAGSQs40116JRrqqyf53dymUMvvb5d/LMRyicRoF1AUKoXVS1/IgJXlEgcpr4gTF3Q==}
engines: {node: '>=12.0.0'}
requiresBuild: true
dependencies:
@@ -1782,7 +1818,7 @@ packages:
'@protobufjs/path': 1.1.2
'@protobufjs/pool': 1.1.0
'@protobufjs/utf8': 1.1.0
- '@types/node': 18.11.18
+ '@types/node': 18.14.0
long: 5.2.1
dev: false
optional: true
@@ -2029,18 +2065,13 @@ packages:
dev: false
optional: true
- /taffydb/2.6.2:
- resolution: {integrity: sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==}
- dev: false
- optional: true
-
- /teeny-request/8.0.2:
- resolution: {integrity: sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==}
+ /teeny-request/8.0.3:
+ resolution: {integrity: sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==}
engines: {node: '>=12'}
dependencies:
http-proxy-agent: 5.0.0
https-proxy-agent: 5.0.1
- node-fetch: 2.6.8
+ node-fetch: 2.6.9
stream-events: 1.0.5
uuid: 9.0.0
transitivePeerDependencies:
@@ -2076,12 +2107,12 @@ packages:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
dev: false
- /ts-mixer/6.0.2:
- resolution: {integrity: sha512-zvHx3VM83m2WYCE8XL99uaM7mFwYSkjR2OZti98fabHrwkjsCvgwChda5xctein3xGOyaQhtTeDq/1H/GNvF3A==}
+ /ts-mixer/6.0.3:
+ resolution: {integrity: sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==}
dev: false
- /tslib/2.4.1:
- resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
+ /tslib/2.5.0:
+ resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
dev: false
/type-check/0.3.2:
@@ -2198,8 +2229,8 @@ packages:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: false
- /ws/8.12.0:
- resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==}
+ /ws/8.12.1:
+ resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1