From a347ff8eb6b8b7a7ebde15dfd92af70f28159970 Mon Sep 17 00:00:00 2001 From: Naomi Carrigan Date: Mon, 10 Feb 2025 20:56:50 -0800 Subject: [PATCH 1/3] feat: use our logging package --- package.json | 1 + pnpm-lock.yaml | 8 ++++++++ prod.env | 3 ++- src/index.ts | 4 ++-- src/server/serve.ts | 12 ++++++++---- src/utils/logHandler.ts | 31 ------------------------------- src/utils/logger.ts | 12 ++++++++++++ 7 files changed, 33 insertions(+), 38 deletions(-) delete mode 100644 src/utils/logHandler.ts create mode 100644 src/utils/logger.ts diff --git a/package.json b/package.json index 6c8bfad..75464d4 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "@anthropic-ai/sdk": "0.36.3", + "@nhcarrigan/logger": "1.0.0", "discord.js": "14.18.0", "fastify": "5.2.1", "winston": "3.17.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4088b55..9a457ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@anthropic-ai/sdk': specifier: 0.36.3 version: 0.36.3 + '@nhcarrigan/logger': + specifier: 1.0.0 + version: 1.0.0 discord.js: specifier: 14.18.0 version: 14.18.0 @@ -347,6 +350,9 @@ packages: typescript: '>=5' vitest: '>=2' + '@nhcarrigan/logger@1.0.0': + resolution: {integrity: sha512-2e19Bie+ZKb6yKPKjhawqsENkhHatYkvBAmFZx9eToOXdOca+CYi51tldRMtejg6e0+4hOOf2bo5zdBQKmH0dw==} + '@nhcarrigan/typescript-config@4.0.0': resolution: {integrity: sha512-969HVha7A/Sg77fuMwOm6p14a+7C5iE6g55OD71srqwKIgksQl+Ex/hAI/pyzTQFDQ/FBJbpnHlR4Ov25QV/rw==} engines: {node: '20', pnpm: '9'} @@ -2588,6 +2594,8 @@ snapshots: - eslint-import-resolver-webpack - supports-color + '@nhcarrigan/logger@1.0.0': {} + '@nhcarrigan/typescript-config@4.0.0(typescript@5.7.3)': dependencies: typescript: 5.7.3 diff --git a/prod.env b/prod.env index 859ad8d..7a38565 100644 --- a/prod.env +++ b/prod.env @@ -1,2 +1,3 @@ DISCORD_TOKEN="op://Environment Variables - Naomi/Cordelia Taryne/discord_token" -AI_TOKEN="op://Environment Variables - Naomi/Cordelia Taryne/ai_token" \ No newline at end of file +AI_TOKEN="op://Environment Variables - Naomi/Cordelia Taryne/ai_token" +LOG_TOKEN="op://Environment Variables - Naomi/Alert Server/api_auth" diff --git a/src/index.ts b/src/index.ts index 22396d5..498abf1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,7 +12,7 @@ import { proofread } from "./modules/proofread.js"; import { query } from "./modules/query.js"; import { summarise } from "./modules/summarise.js"; import { instantiateServer } from "./server/serve.js"; -import { logHandler } from "./utils/logHandler.js"; +import { logger } from "./utils/logger.js"; const commands: Record< string, @@ -42,7 +42,7 @@ client.on(Events.InteractionCreate, (interaction) => { }); client.on(Events.ClientReady, () => { - logHandler.info("Bot is ready."); + void logger.log("debug", "Bot is ready."); }); instantiateServer(); diff --git a/src/server/serve.ts b/src/server/serve.ts index 9e63e7b..d72e477 100644 --- a/src/server/serve.ts +++ b/src/server/serve.ts @@ -5,7 +5,7 @@ */ import fastify from "fastify"; -import { logHandler } from "../utils/logHandler.js"; +import { logger } from "../utils/logger.js"; const html = ` @@ -60,12 +60,16 @@ export const instantiateServer = (): void => { server.listen({ port: 5002 }, (error) => { if (error) { - logHandler.error(error); + void logger.error("instantiate server", error); return; } - logHandler.info("Server listening on port 5002."); + void logger.log("debug", "Server listening on port 5002."); }); } catch (error) { - logHandler.error(error); + if (error instanceof Error) { + void logger.error("instantiate server", error); + return; + } + void logger.error("instantiate server", new Error("Unknown error")); } }; diff --git a/src/utils/logHandler.ts b/src/utils/logHandler.ts deleted file mode 100644 index 88d9274..0000000 --- a/src/utils/logHandler.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @copyright nhcarrigan - * @license Naomi's Public License - * @author Naomi Carrigan - */ -import { createLogger, format, transports, config } from "winston"; - -const { combine, timestamp, colorize, printf } = format; - -/** - * Standard log handler, using winston to wrap and format - * messages. Call with `logHandler.log(level, message)`. - * @param {string} level - The log level to use. - * @param {string} message - The message to log. - */ -export const logHandler = createLogger({ - exitOnError: false, - format: combine( - timestamp({ - format: "YYYY-MM-DD HH:mm:ss", - }), - colorize(), - printf((info) => { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions -- Winston properties... - return `${info.level}: ${info.timestamp}: ${info.message}`; - }), - ), - level: "silly", - levels: config.npm.levels, - transports: [ new transports.Console() ], -}); diff --git a/src/utils/logger.ts b/src/utils/logger.ts new file mode 100644 index 0000000..b79db16 --- /dev/null +++ b/src/utils/logger.ts @@ -0,0 +1,12 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ + +import { Logger } from "@nhcarrigan/logger"; + +export const logger = new Logger( + "Cordelia Taryne", + process.env.LOG_TOKEN ?? "", +); -- 2.47.2 From 8c72375761cc696615b8f47131ebc52ad413c7b1 Mon Sep 17 00:00:00 2001 From: Naomi Carrigan Date: Mon, 10 Feb 2025 21:07:52 -0800 Subject: [PATCH 2/3] feat: log token usage --- src/index.ts | 8 ++++++++ src/modules/alt.ts | 4 ++++ src/modules/evaluate.ts | 4 ++++ src/modules/mood.ts | 4 ++++ src/modules/proofread.ts | 4 ++++ src/modules/query.ts | 4 ++++ src/modules/summarise.ts | 4 ++++ src/utils/calculateCost.ts | 30 ++++++++++++++++++++++++++++++ 8 files changed, 62 insertions(+) create mode 100644 src/utils/calculateCost.ts diff --git a/src/index.ts b/src/index.ts index 498abf1..ac1965f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,6 +41,14 @@ client.on(Events.InteractionCreate, (interaction) => { } }); +client.on(Events.EntitlementCreate, (entitlement) => { + void logger.log("info", `User ${entitlement.userId} has subscribed!`); +}); + +client.on(Events.EntitlementDelete, (entitlement) => { + void logger.log("info", `User ${entitlement.userId} has unsubscribed... :c`); +}); + client.on(Events.ClientReady, () => { void logger.log("debug", "Bot is ready."); }); diff --git a/src/modules/alt.ts b/src/modules/alt.ts index 93dd413..8bcaea2 100644 --- a/src/modules/alt.ts +++ b/src/modules/alt.ts @@ -6,6 +6,7 @@ import { MessageFlags, type ChatInputCommandInteraction } from "discord.js"; import { personality } from "../config/personality.js"; import { ai } from "../utils/ai.js"; +import { calculateCost } from "../utils/calculateCost.js"; import { isSubscribed } from "../utils/isSubscribed.js"; import type { ImageBlockParam } from "@anthropic-ai/sdk/resources/index.js"; @@ -109,4 +110,7 @@ export const alt = async( response?.text ?? "I'm sorry, I don't have an answer for that. Please try again later.", ); + + const { usage } = messages; + await calculateCost(usage, interaction.user.username, "alt-text"); }; diff --git a/src/modules/evaluate.ts b/src/modules/evaluate.ts index 8ac2981..0605917 100644 --- a/src/modules/evaluate.ts +++ b/src/modules/evaluate.ts @@ -6,6 +6,7 @@ import { MessageFlags, type ChatInputCommandInteraction } from "discord.js"; import { personality } from "../config/personality.js"; import { ai } from "../utils/ai.js"; +import { calculateCost } from "../utils/calculateCost.js"; import { isSubscribed } from "../utils/isSubscribed.js"; /** @@ -40,4 +41,7 @@ export const evaluate = async( response?.text ?? "I'm sorry, I don't have an answer for that. Please try again later.", ); + + const { usage } = messages; + await calculateCost(usage, interaction.user.username, "evaluate"); }; diff --git a/src/modules/mood.ts b/src/modules/mood.ts index 42d2d17..3d0dbc3 100644 --- a/src/modules/mood.ts +++ b/src/modules/mood.ts @@ -6,6 +6,7 @@ import { MessageFlags, type ChatInputCommandInteraction } from "discord.js"; import { personality } from "../config/personality.js"; import { ai } from "../utils/ai.js"; +import { calculateCost } from "../utils/calculateCost.js"; import { isSubscribed } from "../utils/isSubscribed.js"; /** @@ -41,4 +42,7 @@ export const mood = async( response?.text ?? "I'm sorry, I don't have an answer for that. Please try again later.", ); + + const { usage } = messages; + await calculateCost(usage, interaction.user.username, "mood"); }; diff --git a/src/modules/proofread.ts b/src/modules/proofread.ts index 71f5af6..56dd70d 100644 --- a/src/modules/proofread.ts +++ b/src/modules/proofread.ts @@ -6,6 +6,7 @@ import { MessageFlags, type ChatInputCommandInteraction } from "discord.js"; import { personality } from "../config/personality.js"; import { ai } from "../utils/ai.js"; +import { calculateCost } from "../utils/calculateCost.js"; import { isSubscribed } from "../utils/isSubscribed.js"; /** @@ -41,4 +42,7 @@ export const proofread = async( response?.text ?? "I'm sorry, I don't have an answer for that. Please try again later.", ); + + const { usage } = messages; + await calculateCost(usage, interaction.user.username, "proofread"); }; diff --git a/src/modules/query.ts b/src/modules/query.ts index 68566d9..30c9df0 100644 --- a/src/modules/query.ts +++ b/src/modules/query.ts @@ -6,6 +6,7 @@ import { MessageFlags, type ChatInputCommandInteraction } from "discord.js"; import { personality } from "../config/personality.js"; import { ai } from "../utils/ai.js"; +import { calculateCost } from "../utils/calculateCost.js"; import { isSubscribed } from "../utils/isSubscribed.js"; /** @@ -41,4 +42,7 @@ export const query = async( response?.text ?? "I'm sorry, I don't have an answer for that. Please try again later.", ); + + const { usage } = messages; + await calculateCost(usage, interaction.user.username, "query"); }; diff --git a/src/modules/summarise.ts b/src/modules/summarise.ts index c58b84d..6b2d824 100644 --- a/src/modules/summarise.ts +++ b/src/modules/summarise.ts @@ -6,6 +6,7 @@ import { MessageFlags, type ChatInputCommandInteraction } from "discord.js"; import { personality } from "../config/personality.js"; import { ai } from "../utils/ai.js"; +import { calculateCost } from "../utils/calculateCost.js"; import { isSubscribed } from "../utils/isSubscribed.js"; /** @@ -41,4 +42,7 @@ export const summarise = async( response?.text ?? "I'm sorry, I don't have an answer for that. Please try again later.", ); + + const { usage } = messages; + await calculateCost(usage, interaction.user.username, "summarise"); }; diff --git a/src/utils/calculateCost.ts b/src/utils/calculateCost.ts new file mode 100644 index 0000000..2d90245 --- /dev/null +++ b/src/utils/calculateCost.ts @@ -0,0 +1,30 @@ +/** + * @copyright nhcarrigan + * @license Naomi's Public License + * @author Naomi Carrigan + */ +import { logger } from "./logger.js"; +import type { Usage } from "@anthropic-ai/sdk/resources/index.js"; + +/** + * Calculates the cost of a command run by a user, and sends to + * our logging service. + * @param usage -- The usage payload from Anthropic. + * @param uuid -- The Discord ID of the user who ran the command. + * @param command -- The command that was run. + */ +export const calculateCost = async( + usage: Usage, + uuid: string, + command: string, +): Promise => { + const inputCost = usage.input_tokens * (3 / 1_000_000); + const outputCost = usage.output_tokens * (15 / 1_000_000); + const totalCost = inputCost + outputCost; + await logger.log( + "info", + `User ${uuid} ran \`${command}\` which accepted ${usage.input_tokens.toString()} and generated ${usage.output_tokens.toString()}. + + Total cost: ${totalCost.toLocaleString("en-GB", { currency: "USD", style: "currency" })}`, + ); +}; -- 2.47.2 From f466230c799cbce839e906f4e5ba702d937c549b Mon Sep 17 00:00:00 2001 From: Naomi Carrigan Date: Mon, 10 Feb 2025 21:09:52 -0800 Subject: [PATCH 3/3] chore: don't need winston anymore --- package.json | 3 +- pnpm-lock.yaml | 198 ------------------------------------------------- 2 files changed, 1 insertion(+), 200 deletions(-) diff --git a/package.json b/package.json index 75464d4..5a054c1 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ "@anthropic-ai/sdk": "0.36.3", "@nhcarrigan/logger": "1.0.0", "discord.js": "14.18.0", - "fastify": "5.2.1", - "winston": "3.17.0" + "fastify": "5.2.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9a457ec..f2a4f6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,9 +20,6 @@ importers: fastify: specifier: 5.2.1 version: 5.2.1 - winston: - specifier: 3.17.0 - version: 3.17.0 devDependencies: '@nhcarrigan/eslint-config': specifier: 5.1.0 @@ -53,13 +50,6 @@ packages: resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@colors/colors@1.6.0': - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} - engines: {node: '>=0.1.90'} - - '@dabh/diagnostics@2.0.3': - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} - '@discordjs/builders@1.10.1': resolution: {integrity: sha512-OWo1fY4ztL1/M/DUyRPShB4d/EzVfuUvPTRRHRIt/YxBrUYSz0a+JicD5F5zHFoNs2oTuWavxCOVFV1UljHTng==} engines: {node: '>=16.11.0'} @@ -512,9 +502,6 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/triple-beam@1.3.5': - resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@types/ws@8.5.14': resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} @@ -758,9 +745,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -840,28 +824,13 @@ packages: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} - - colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -958,9 +927,6 @@ packages: electron-to-chromium@1.5.97: resolution: {integrity: sha512-HKLtaH02augM7ZOdYRuO19rWDeY+QSJ1VxnXFa/XDFLf07HvM90pALIJFgrO+UVaajI3+aJMMpojoUTLZyQ7JQ==} - enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -1179,9 +1145,6 @@ packages: fastq@1.19.0: resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} - fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1209,9 +1172,6 @@ packages: flatted@3.3.2: resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - for-each@0.3.4: resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==} engines: {node: '>= 0.4'} @@ -1343,9 +1303,6 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -1361,9 +1318,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -1436,10 +1390,6 @@ packages: resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -1523,9 +1473,6 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} - levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -1553,10 +1500,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - logform@2.7.0: - resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} - engines: {node: '>= 12.0.0'} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -1670,9 +1613,6 @@ packages: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} - one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1813,10 +1753,6 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} @@ -1881,9 +1817,6 @@ packages: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -1957,9 +1890,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -1993,9 +1923,6 @@ packages: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -2021,9 +1948,6 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -2048,9 +1972,6 @@ packages: resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} - text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} @@ -2083,10 +2004,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} - engines: {node: '>= 14.0.0'} - ts-api-utils@1.4.3: resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} @@ -2168,9 +2085,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -2283,14 +2197,6 @@ packages: engines: {node: '>=8'} hasBin: true - winston-transport@4.9.0: - resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} - engines: {node: '>= 12.0.0'} - - winston@3.17.0: - resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} - engines: {node: '>= 12.0.0'} - word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -2333,14 +2239,6 @@ snapshots: '@babel/helper-validator-identifier@7.25.9': {} - '@colors/colors@1.6.0': {} - - '@dabh/diagnostics@2.0.3': - dependencies: - colorspace: 1.1.4 - enabled: 2.0.0 - kuler: 2.0.0 - '@discordjs/builders@1.10.1': dependencies: '@discordjs/formatters': 0.6.0 @@ -2715,8 +2613,6 @@ snapshots: '@types/normalize-package-data@2.4.4': {} - '@types/triple-beam@1.3.5': {} - '@types/ws@8.5.14': dependencies: '@types/node': 22.13.1 @@ -3041,8 +2937,6 @@ snapshots: async-function@1.0.0: {} - async@3.2.6: {} - asynckit@0.4.0: {} atomic-sleep@1.0.0: {} @@ -3124,33 +3018,12 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - - color@3.2.1: - dependencies: - color-convert: 1.9.3 - color-string: 1.9.1 - - colorspace@1.1.4: - dependencies: - color: 3.2.1 - text-hex: 1.0.0 - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -3253,8 +3126,6 @@ snapshots: electron-to-chromium@1.5.97: {} - enabled@2.0.0: {} - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -3658,8 +3529,6 @@ snapshots: dependencies: reusify: 1.0.4 - fecha@4.2.3: {} - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -3691,8 +3560,6 @@ snapshots: flatted@3.3.2: {} - fn.name@1.1.0: {} - for-each@0.3.4: dependencies: is-callable: 1.2.7 @@ -3826,8 +3693,6 @@ snapshots: indent-string@4.0.0: {} - inherits@2.0.4: {} - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -3844,8 +3709,6 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} - is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -3923,8 +3786,6 @@ snapshots: dependencies: call-bound: 1.0.3 - is-stream@2.0.1: {} - is-string@1.1.1: dependencies: call-bound: 1.0.3 @@ -4005,8 +3866,6 @@ snapshots: dependencies: json-buffer: 3.0.1 - kuler@2.0.0: {} - levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -4034,15 +3893,6 @@ snapshots: lodash@4.17.21: {} - logform@2.7.0: - dependencies: - '@colors/colors': 1.6.0 - '@types/triple-beam': 1.3.5 - fecha: 4.2.3 - ms: 2.1.3 - safe-stable-stringify: 2.5.0 - triple-beam: 1.4.1 - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -4146,10 +3996,6 @@ snapshots: on-exit-leak-free@2.1.2: {} - one-time@1.0.0: - dependencies: - fn.name: 1.1.0 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4288,12 +4134,6 @@ snapshots: parse-json: 5.2.0 type-fest: 0.6.0 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - real-require@0.2.0: {} reflect.getprototypeof@1.0.10: @@ -4383,8 +4223,6 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 - safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -4470,10 +4308,6 @@ snapshots: siginfo@2.0.0: {} - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - slash@3.0.0: {} slashes@3.0.12: {} @@ -4505,8 +4339,6 @@ snapshots: split2@4.2.0: {} - stack-trace@0.0.10: {} - stackback@0.0.2: {} std-env@3.8.0: {} @@ -4555,10 +4387,6 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - strip-bom@3.0.0: {} strip-indent@3.0.0: @@ -4578,8 +4406,6 @@ snapshots: '@pkgr/core': 0.1.1 tslib: 2.8.1 - text-hex@1.0.0: {} - thread-stream@3.1.0: dependencies: real-require: 0.2.0 @@ -4602,8 +4428,6 @@ snapshots: tr46@0.0.3: {} - triple-beam@1.4.1: {} - ts-api-utils@1.4.3(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -4691,8 +4515,6 @@ snapshots: dependencies: punycode: 2.3.1 - util-deprecate@1.0.2: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -4824,26 +4646,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - winston-transport@4.9.0: - dependencies: - logform: 2.7.0 - readable-stream: 3.6.2 - triple-beam: 1.4.1 - - winston@3.17.0: - dependencies: - '@colors/colors': 1.6.0 - '@dabh/diagnostics': 2.0.3 - async: 3.2.6 - is-stream: 2.0.1 - logform: 2.7.0 - one-time: 1.0.0 - readable-stream: 3.6.2 - safe-stable-stringify: 2.5.0 - stack-trace: 0.0.10 - triple-beam: 1.4.1 - winston-transport: 4.9.0 - word-wrap@1.2.5: {} ws@8.18.0: {} -- 2.47.2