diff --git a/package.json b/package.json index 15a8259..da11819 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "@birthdayybot/util", "version": "1.0.0", - "author": "@nikolaischunk", + "author": "@swiizyy", "license": "Apache-2.0", "private": true, "main": "dist/main.js", "type": "module", "imports": { + "#api/*": "./dist/api/*.js", "#lib/*": "./dist/lib/*.js" }, "scripts": { @@ -25,7 +26,7 @@ "@discordjs/builders": "^1.6.3", "@discordjs/collection": "^1.5.1", "@discordjs/core": "^0.6.0", - "@prisma/client": "^5.0.0", + "@prisma/client": "^5.12.1", "@sapphire/async-queue": "^1.5.0", "@sapphire/duration": "^1.1.0", "@sapphire/result": "^2.6.4", @@ -37,6 +38,7 @@ "@skyra/shared-http-pieces": "^1.0.3", "@skyra/start-banner": "^2.0.0", "discord-api-types": "^0.37.43", + "fastify": "^4.26.2", "gradient-string": "^2.0.2", "limax": "^4.1.0", "tslib": "^2.6.0" @@ -59,7 +61,7 @@ "lint-staged": "^13.2.3", "prettier": "^2.8.8", "pretty-quick": "^3.1.3", - "prisma": "^5.0.0", + "prisma": "^5.12.1", "typescript": "^5.1.6" }, "resolutions": { diff --git a/prisma/migrations/20240411105032_inital/migration.sql b/prisma/migrations/20240411105032_inital/migration.sql new file mode 100644 index 0000000..23b9bd2 --- /dev/null +++ b/prisma/migrations/20240411105032_inital/migration.sql @@ -0,0 +1,9 @@ +-- CreateTable +CREATE TABLE "guild" ( + "id" BIGINT NOT NULL, + "maximum_announcement_length" SMALLINT NOT NULL DEFAULT 0, + "maximum_giveable_birthday_roles" SMALLINT NOT NULL DEFAULT 1, + "maximum_birthday_list_amount" SMALLINT NOT NULL DEFAULT 10, + + CONSTRAINT "guild_pkey" PRIMARY KEY ("id") +); diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 77860f3..46f9ad3 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,87 +1,35 @@ generator client { - provider = "prisma-client-js" + provider = "prisma-client-js" } datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} - -model User { - // The user's Discord ID - id BigInt @id - - // Whether or not they have currently subscribed to a premium plan - premium Boolean @default(false) - - // The tier of the user - tier Tiers @default(Free) - - // Maximum usage guild Premium - // @tier 1 (Premium) - // @tier 3 (Supporter) - maximumPremium Int @default(0) @map("maximum_premium") @db.SmallInt - - createdAt DateTime @default(now()) @map("created_at") - updatedAt DateTime @updatedAt @map("updated_at") - - transactions Transaction[] - guild Guild[] - - @@index([id]) - @@map("user") + provider = "postgresql" + url = env("DATABASE_URL") } model Guild { - // The guild's Discord ID - id BigInt @id - - // The guild's name on Discord - name String? @db.Text - - // The Discord ID of the user who activated the premium - userId BigInt @map("user_id") - - // The tier of the guild - tier Tiers @default(Free) - - // Whether or not they have currently subscribed to a premium plan - premium Boolean @default(false) - - createdAt DateTime @default(now()) @map("created_at") - updatedAt DateTime @updatedAt @map("updated_at") - - user User @relation(fields: [userId], references: [id], onDelete: NoAction) - - @@index([id]) - @@map("guild") -} - -model Transaction { - // This is the transaction ID from the payment provider - id Int @id - - // The user's Discord ID - userId BigInt @map("user_id") - - // The amount of money that was paid - amount Int - - // The tier of the transaction - tier Tiers @default(Free) - - createdAt DateTime @default(now()) @map("created_at") - updatedAt DateTime @updatedAt @map("updated_at") - - user User @relation(fields: [userId], references: [id]) - - @@index([id]) - @@map("transaction") -} - -enum Tiers { - Free - Premium - Supporter - CustomBot + // The guild's Discord ID + id BigInt @id + + /// The maximum amount of characters for the announcement message + /// @tier 1 (128) + /// @tier 2 (256) + /// @tier 3 (512) + /// @default 0 + maximumAnnouncementLength Int @default(0) @map("maximum_announcement_length") @db.SmallInt + /// The maximum amount of roles that the bot can give to the user + /// @tier 1 (3) + /// @tier 2 (5) + /// @tier 3 (10) + /// @default 1 + maximumGiveableBirthdayRoles Int @default(1) @map("maximum_giveable_birthday_roles") @db.SmallInt + + /// The maximum birthday amount that can be seen in advance with the /birthdayy list command + /// @tier 1 (30) + /// @tier 2 (50) + /// @tier 3 (100) + /// @default 10 + maximumBirthdayListAmount Int @default(10) @map("maximum_birthday_list_amount") @db.SmallInt + + @@map("guild") } diff --git a/src/.env b/src/.env index 23c590c..ea2c4e7 100644 --- a/src/.env +++ b/src/.env @@ -16,10 +16,13 @@ SENTRY_DSN= HTTP_ADDRESS=0.0.0.0 HTTP_PORT=3000 -# The Redis server configuration -REDIS_PORT=8287 -REDIS_PASSWORD=redis -REDIS_HOST=localhost -REDIS_DB=0 +API_ADDRESS=0.0.0.0 +API_PORT=3001 +CLIENT_OWNERS="696324357940838492 267614892821970945" + +INTERNAL_API_TOKEN= + +# The database URL for Prisma, needs to be copied in a local `.env` at the root +# for Prisma's operations to work. DATABASE_URL="postgresql://user:password@localhost:5432/database?schema=public" diff --git a/src/api/routes/_load.ts b/src/api/routes/_load.ts new file mode 100644 index 0000000..76cde5e --- /dev/null +++ b/src/api/routes/_load.ts @@ -0,0 +1,4 @@ +import '#api/routes/guilds/[...id]'; +import '#api/routes/index'; +import "#api/routes/webhooks/vote"; + diff --git a/src/api/routes/guilds/[...id].ts b/src/api/routes/guilds/[...id].ts new file mode 100644 index 0000000..2244746 --- /dev/null +++ b/src/api/routes/guilds/[...id].ts @@ -0,0 +1,45 @@ +import { container } from '@sapphire/pieces'; +import { isNullish, isNullishOrEmpty } from '@sapphire/utilities'; + +container.server.route({ + url: '/guilds/:id', + method: 'GET', + handler: async (request, reply) => { + if (isNullishOrEmpty(request.headers.authorization)) { + return reply.code(401).send({ success: false, message: 'Missing authorization' }); + } + + const mappings = getMappings(request.headers.authorization); + if (!mappings) { + return reply.code(403).send({ success: false, message: 'Missing access to this resource' }); + } + + if (typeof request.params !== 'object' || isNullish(request.params) || !('id' in request.params)) { + return reply.code(400).send({ success: false, message: 'Missing parameters' }); + } + + let id: bigint; + try { + id = BigInt(request.params.id as string); + } catch { + return reply.code(400).send({ success: false, message: 'Invalid Guild ID' }); + } + + const data = await container.prisma.guild.findFirst({ where: { id }, select: mappings.properties }); + return reply.code(200).send(data ?? mappings.defaults); + } +}); + +const Mappings = { + properties: { maximumAnnouncementLength: true, maximumGiveableBirthdayRoles: true, maximumBirthdayListAmount: true}, + defaults: { maximumAnnouncementLength: 0, maximumGiveableBirthdayRoles: 1, maximumBirthdayListAmount: 10} +} as const; + +function getMappings(token: string) { + switch (token) { + case process.env.INTERNAL_API_TOKEN: + return Mappings; + default: + return null; + } +} diff --git a/src/api/routes/index.ts b/src/api/routes/index.ts new file mode 100644 index 0000000..a3f9fa0 --- /dev/null +++ b/src/api/routes/index.ts @@ -0,0 +1,7 @@ +import { container } from '@sapphire/pieces'; + +container.server.route({ + url: '/', + method: 'GET', + handler: () => ({ data: 'Hello world' }) +}); diff --git a/src/api/routes/webhooks/vote.ts b/src/api/routes/webhooks/vote.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/commands/config.ts b/src/commands/config.ts new file mode 100644 index 0000000..83ebea8 --- /dev/null +++ b/src/commands/config.ts @@ -0,0 +1,118 @@ +import { SlashCommandIntegerOption, SlashCommandStringOption } from '@discordjs/builders'; +import { codeBlock, isNullish } from '@sapphire/utilities'; +import { envParseArray } from '@skyra/env-utilities'; +import { Command, RegisterCommand, RegisterSubCommand } from '@skyra/http-framework'; +import { blue, bold, red, yellow } from '@skyra/logger'; +import { MessageFlags, PermissionFlagsBits } from 'discord-api-types/v10'; + +@RegisterCommand((builder) => + builder + .setName('config') + .setDescription("Manage a guild's features") + .setDMPermission(false) + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) +) +export class UserCommand extends Command { + @RegisterSubCommand((builder) => builder.setName('get').setDescription("Gets a guild's features").addStringOption(getGuildOption)) + public async get(interaction: Command.ChatInputInteraction, options: Options) { + if (!UserCommand.ClientOwners.includes(interaction.user.id)) { + return interaction.reply({ content: 'You cannot use this command.', flags: MessageFlags.Ephemeral }); + } + + const data = await this.container.prisma.guild.findFirst({ where: { id: BigInt(options.guild) } }); + if (isNullish(data)) { + return interaction.reply({ content: 'There is no data recorded for that guild.', flags: MessageFlags.Ephemeral }); + } + + const lines = [ + `${bold('Guild ID')}: ${bold(blue(data.id.toString().padStart(19, ' ')))}`, + `${bold('Maximum Announcement Length')}: ${formatRange(data.maximumAnnouncementLength, 128, 512)}`, + `${bold('Maximum Giveable Birthday Roles')}: ${formatRange(data.maximumGiveableBirthdayRoles, 1, 5)}`, + `${bold('Maximum Birthday List Amount')}: ${formatRange(data.maximumBirthdayListAmount, 10, 50)}` + ]; + return interaction.reply({ content: codeBlock('ansi', lines.join('\n')), flags: MessageFlags.Ephemeral }); + } + + @RegisterSubCommand((builder) => + builder + .setName('set') + .setDescription("Updates a guild's features") + .addStringOption(getGuildOption) + .addIntegerOption(getIntegerOption(128, 512, 'maximum-announcement-length', 'The maximum announcement length')) + .addIntegerOption(getIntegerOption(1, 5, 'maximum-giveable-birthday-roles', 'The maximum giveable birthday roles')) + .addIntegerOption(getIntegerOption(10, 50, 'maximum-birthday-list-amount', 'The maximum birthday list amount')) + ) + public async set(interaction: Command.ChatInputInteraction, options: SetOptions) { + if (!UserCommand.ClientOwners.includes(interaction.user.id)) { + return interaction.reply({ content: 'You cannot use this command.', flags: MessageFlags.Ephemeral }); + } + + const id = BigInt(options.guild); + const data = { + maximumAnnouncementLength: options['maximum-announcement-length'], + maximumGiveableBirthdayRoles: options['maximum-giveable-birthday-roles'], + maximumBirthdayListAmount: options['maximum-birthday-list-amount'] + }; + try { + await this.container.prisma.guild.upsert({ + where: { id }, + create: { id, ...data }, + update: data + }); + return interaction.reply({ content: 'Updated.', flags: MessageFlags.Ephemeral }); + } catch (error) { + this.container.logger.error(error); + + return interaction.reply({ + content: 'I was not able to update the configuration, please check my logs and/or try again later.', + flags: MessageFlags.Ephemeral + }); + } + } + + @RegisterSubCommand((builder) => builder.setName('reset').setDescription("Resets a guild's features").addStringOption(getGuildOption)) + public async reset(interaction: Command.ChatInputInteraction, options: Options) { + if (!UserCommand.ClientOwners.includes(interaction.user.id)) { + return interaction.reply({ content: 'You cannot use this command.', flags: MessageFlags.Ephemeral }); + } + + const data = await this.container.prisma.guild.delete({ where: { id: BigInt(options.guild) } }); + const content = isNullish(data) ? 'There is no data recorded for that guild.' : "Successfully deleted the specified guild's data."; + return interaction.reply({ content, flags: MessageFlags.Ephemeral }); + } + + private static readonly ClientOwners = envParseArray('CLIENT_OWNERS'); +} + +interface Options { + guild: string; +} + +interface SetOptions extends Options { + 'maximum-announcement-length': number; + 'maximum-giveable-birthday-roles': number; + 'maximum-birthday-list-amount': number; +} + +function getGuildOption() { + return new SlashCommandStringOption() + .setName('guild') + .setDescription('The ID of the guild to manage') + .setMinLength(17) + .setMaxLength(19) + .setRequired(true); +} + +function getIntegerOption(min: number, max: number, name: string, description: string) { + return new SlashCommandIntegerOption().setName(name).setDescription(`${description} (${min}-${max})`).setMinValue(min).setMaxValue(max); +} + +function formatRange(value: number, min: number, max: number) { + if (value === min) return `${blue(format(value))} → ${red(format(max))}`; + if (value === max) return `${yellow(format(min))} ← ${blue(format(value))}`; + return `${yellow(format(min))} ← ${blue(format(value))} → ${red(format(max))}`; +} + +function format(value: number) { + return value.toString().padStart(3, ' '); +} diff --git a/src/lib/setup/all.ts b/src/lib/setup/all.ts index 759774e..8bc2120 100644 --- a/src/lib/setup/all.ts +++ b/src/lib/setup/all.ts @@ -1,14 +1,23 @@ -import { setup as envRun } from '@skyra/env-utilities'; +import { setup as envSetup } from '@skyra/env-utilities'; import { initializeSentry, setInvite, setRepository } from '@skyra/shared-http-pieces'; + +import '@skyra/shared-http-pieces/register'; + +envSetup(new URL('../../../src/.env', import.meta.url)); +setInvite('948377113457745990', '326417868864'); +setRepository('https://github.com/BirthdayyBot/util'); +initializeSentry(); + + +import '#lib/setup/api'; +import '#lib/setup/fastify'; import '#lib/setup/logger'; import '#lib/setup/prisma'; -import '@skyra/shared-http-pieces/register'; -export function setup() { - envRun(new URL('../../../src/.env', import.meta.url)); - setRepository('iriss'); - setInvite('948377113457745990', '326417868864'); - initializeSentry(); + +export async function setup() { + // Load all routes + await import('#api/routes/_load'); } diff --git a/src/lib/setup/api.ts b/src/lib/setup/api.ts index 2a4f5f0..b32436e 100644 --- a/src/lib/setup/api.ts +++ b/src/lib/setup/api.ts @@ -1,9 +1,7 @@ import { API } from '@discordjs/core/http-only'; import { container } from '@skyra/http-framework'; -export function setupAPI(): void { - container.api = new API(container.rest); -} +container.api = new API(container.rest); declare module '@sapphire/pieces' { interface Container { diff --git a/src/lib/setup/fastify.ts b/src/lib/setup/fastify.ts new file mode 100644 index 0000000..2c2a882 --- /dev/null +++ b/src/lib/setup/fastify.ts @@ -0,0 +1,12 @@ +import { container } from '@skyra/http-framework'; +import fastify from 'fastify'; + +const server = fastify(); + +container.server = server; + +declare module '@sapphire/pieces' { + interface Container { + server: typeof server; + } +} diff --git a/src/lib/types/augments.d.ts b/src/lib/types/augments.d.ts index 653aaf7..db7d9ca 100644 --- a/src/lib/types/augments.d.ts +++ b/src/lib/types/augments.d.ts @@ -1,4 +1,4 @@ -import type { IntegerString } from '@skyra/env-utilities'; +import type { ArrayString, IntegerString } from '@skyra/env-utilities'; declare module '@skyra/env-utilities' { interface Env { @@ -12,5 +12,12 @@ declare module '@skyra/env-utilities' { HTTP_PORT: IntegerString; REGISTRY_GUILD_ID: string; + + API_ADDRESS: string; + API_PORT: IntegerString; + + CLIENT_OWNERS: ArrayString; + + INTERNAL_API_TOKEN: string; } } diff --git a/src/locales/en-US/shared.json b/src/locales/en-US/shared.json index 48d18fc..ac1a987 100644 --- a/src/locales/en-US/shared.json +++ b/src/locales/en-US/shared.json @@ -2,5 +2,6 @@ "enabled": "Enabled", "disabled": "Disabled", "unset": "Unset", - "none": "None" + "none": "None", + "infoEmbedDescription": "Util is a private bot that manages the operation limits of the BirthdayyBot. This is an HTTP only bot built on top of [Skyra HTTP Framework](https://www.npmjs.com/package/@skyra/http-framework)." } diff --git a/src/main.ts b/src/main.ts index de607e5..32b7d7e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,4 @@ import { setup } from '#lib/setup/all'; -import { setupAPI } from '#lib/setup/api'; import { registerCommands } from '#lib/utilities/register-commands'; import { envParseInteger, envParseString } from '@skyra/env-utilities'; import { Client, container } from '@skyra/http-framework'; @@ -7,16 +6,21 @@ import { init, load } from '@skyra/http-framework-i18n'; import { createBanner } from '@skyra/start-banner'; import gradient from 'gradient-string'; -setup(); +await setup(); await load(new URL('../src/locales', import.meta.url)); await init({ fallbackLng: 'en-US', returnNull: false, returnEmptyString: false }); const client = new Client(); -setupAPI(); await client.load(); +await container.server.listen({ + host: envParseString('API_ADDRESS'), + port: envParseInteger('API_PORT') +}); + void registerCommands(); + const address = envParseString('HTTP_ADDRESS', '0.0.0.0'); const port = envParseInteger('HTTP_PORT', 3000); await client.listen({ address, port }); diff --git a/src/tsconfig.json b/src/tsconfig.json index 7bc3593..9f252dd 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -7,7 +7,8 @@ "composite": true, "tsBuildInfoFile": "../dist/tsconfig.tsbuildinfo", "paths": { - "#lib/*": ["lib/*"] + "#lib/*": ["lib/*"], + "#api/*": ["api/*"] } }, "include": ["."] diff --git a/yarn.lock b/yarn.lock index d26f6bb..3508306 100644 --- a/yarn.lock +++ b/yarn.lock @@ -57,7 +57,7 @@ __metadata: "@discordjs/builders": ^1.6.3 "@discordjs/collection": ^1.5.1 "@discordjs/core": ^0.6.0 - "@prisma/client": ^5.0.0 + "@prisma/client": ^5.12.1 "@sapphire/async-queue": ^1.5.0 "@sapphire/duration": ^1.1.0 "@sapphire/eslint-config": ^5.0.0 @@ -80,13 +80,14 @@ __metadata: eslint: ^8.45.0 eslint-config-prettier: ^8.8.0 eslint-plugin-prettier: ^4.2.1 + fastify: ^4.26.2 gradient-string: ^2.0.2 husky: ^8.0.3 limax: ^4.1.0 lint-staged: ^13.2.3 prettier: ^2.8.8 pretty-quick: ^3.1.3 - prisma: ^5.0.0 + prisma: ^5.12.1 tslib: ^2.6.0 typescript: ^5.1.6 languageName: unknown @@ -425,6 +426,42 @@ __metadata: languageName: node linkType: hard +"@fastify/ajv-compiler@npm:^3.5.0": + version: 3.5.0 + resolution: "@fastify/ajv-compiler@npm:3.5.0" + dependencies: + ajv: ^8.11.0 + ajv-formats: ^2.1.1 + fast-uri: ^2.0.0 + checksum: 5e5b16469f8d586473d0b32e3a9cf38c0d86ef2a6fb7ea12ed7f3665642bd8eb2dde9adcc317814369cb5a58210bfdac35996fa87d1cc23e88bbc799f0b128b0 + languageName: node + linkType: hard + +"@fastify/error@npm:^3.3.0, @fastify/error@npm:^3.4.0": + version: 3.4.1 + resolution: "@fastify/error@npm:3.4.1" + checksum: 2c2e98c33327884c0927a73e8c3b8f162acbf1e4d058bacb68bca0c3607f36d6fde8c376fde45b2097e724d450266f8bb29134305fa24aabd200f83f087c7321 + languageName: node + linkType: hard + +"@fastify/fast-json-stringify-compiler@npm:^4.3.0": + version: 4.3.0 + resolution: "@fastify/fast-json-stringify-compiler@npm:4.3.0" + dependencies: + fast-json-stringify: ^5.7.0 + checksum: 2734afabe2539d3e15d2bd9f8dfee756d9cd969f7303dc085dd91c744ff61742bb0d3ebd3b561cf3c32be54567048a634b4962f943eb6bd9ed3fbd71cbf6a4fa + languageName: node + linkType: hard + +"@fastify/merge-json-schemas@npm:^0.1.0": + version: 0.1.1 + resolution: "@fastify/merge-json-schemas@npm:0.1.1" + dependencies: + fast-deep-equal: ^3.1.3 + checksum: d5b976f82e6d5d30a603345a29edb176a14866b98dd4d30aabe6e58a91dfc34fb1c2dd97289bdd7f4d1e11675c9dbb9382138968742d2ac8c6fdcc5f7bd08b97 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.10": version: 0.11.10 resolution: "@humanwhocodes/config-array@npm:0.11.10" @@ -515,31 +552,61 @@ __metadata: languageName: node linkType: hard -"@prisma/client@npm:^5.0.0": - version: 5.0.0 - resolution: "@prisma/client@npm:5.0.0" - dependencies: - "@prisma/engines-version": 4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584 +"@prisma/client@npm:^5.12.1": + version: 5.12.1 + resolution: "@prisma/client@npm:5.12.1" peerDependencies: prisma: "*" peerDependenciesMeta: prisma: optional: true - checksum: 332c2af44e880ffc9dd1223992bf6f45910094c7a3a540cbbfdda45d6caf3e82998376338abdf85e34a12f1082ae932f2385d6396c62fe4bba7ec6b84de54466 + checksum: fcea460faf6256fdb6e948bad87a6fe881dffdc6e1f83f6a34297d17b289b88982bc19c999acf56a6e9de6edda6c46aefe452a069f0aef2ef083329a30ab5508 languageName: node linkType: hard -"@prisma/engines-version@npm:4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584": - version: 4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584 - resolution: "@prisma/engines-version@npm:4.17.0-26.6b0aef69b7cdfc787f822ecd7cdc76d5f1991584" - checksum: 8fcbceef3b554ee7fa404bead50be5286412a097b21723272aff298b289caf2802b01b84bb85c4c9f3b592eeac114c8d6e79db083f271dc8c54f453b4a515233 +"@prisma/debug@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/debug@npm:5.12.1" + checksum: f61e1fafc810959d0ec0f332519cff7937955bba54301f6cf780d4cccfb32e43e7e4bc85b669749a4378fffd20d1ec71780e75b9030fc6b8230948194bfacfd3 languageName: node linkType: hard -"@prisma/engines@npm:5.0.0": - version: 5.0.0 - resolution: "@prisma/engines@npm:5.0.0" - checksum: 31271d85c29709059f91051d4cef7acf874014ba0128b674ca2f842e5fac61d3011e9db246dfa67ba4803081d36dbc9e31492716bab677128588343c92117b2b +"@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab": + version: 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + resolution: "@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + checksum: d227b5eb99932d078b1ffb44aa6049bd88e261b581468a7b881dce16cf32c42dead15c09d07c3af06a7eef4054f3a6cf0d555dd66e3120d445d28ea67935853d + languageName: node + linkType: hard + +"@prisma/engines@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/engines@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/fetch-engine": 5.12.1 + "@prisma/get-platform": 5.12.1 + checksum: d216b20c97d2391e1f4411198c0f25e5515bbae2bb4ae7430686983ee53e54ad914365e21407dd02756d4750382ccf35fdb33b50b38db926e6c6466440a41d6c + languageName: node + linkType: hard + +"@prisma/fetch-engine@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/fetch-engine@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/get-platform": 5.12.1 + checksum: a1790042581ebaf96504c514dc4d321957ca3636ce61160624f89ee5d2b1691965b2566990749c6df08f6cd02cfd6f7b80646b6fd7fa6f5b883a8a21ab9bf91d + languageName: node + linkType: hard + +"@prisma/get-platform@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/get-platform@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + checksum: 3aa901767e343763a7841ddff7a954cafc20b826ebde26bea142d3615b6f260f5fc70fc6e0b96bcc5c3d1e789ba2f9d1651dd242baaff264f401622c119a356c languageName: node linkType: hard @@ -1155,6 +1222,22 @@ __metadata: languageName: node linkType: hard +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + +"abstract-logging@npm:^2.0.1": + version: 2.0.1 + resolution: "abstract-logging@npm:2.0.1" + checksum: 6967d15e5abbafd17f56eaf30ba8278c99333586fa4f7935fd80e93cfdc006c37fcc819c5d63ee373a12e6cb2d0417f7c3c6b9e42b957a25af9937d26749415e + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -1199,6 +1282,34 @@ __metadata: languageName: node linkType: hard +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + +"ajv-formats@npm:^3.0.1": + version: 3.0.1 + resolution: "ajv-formats@npm:3.0.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: f4e1fe232d67fcafc02eafe373a7a9962351e0439dd0736647ca75c93c3da23b430b6502c255ab4315410ae330d4f3013ac9fe226c40b2524ca93a58e786d086 + languageName: node + linkType: hard + "ajv@npm:^6.10.0, ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -1211,7 +1322,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.11.0": +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: @@ -1264,6 +1375,13 @@ __metadata: languageName: node linkType: hard +"archy@npm:^1.0.0": + version: 1.0.0 + resolution: "archy@npm:1.0.0" + checksum: 504ae7af655130bab9f471343cfdb054feaec7d8e300e13348bc9fe9e660f83d422e473069584f73233c701ae37d1c8452ff2522f2a20c38849e0f406f1732ac + languageName: node + linkType: hard + "arg@npm:^4.1.0": version: 4.1.3 resolution: "arg@npm:4.1.3" @@ -1327,6 +1445,25 @@ __metadata: languageName: node linkType: hard +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 + languageName: node + linkType: hard + +"avvio@npm:^8.3.0": + version: 8.3.0 + resolution: "avvio@npm:8.3.0" + dependencies: + "@fastify/error": ^3.3.0 + archy: ^1.0.0 + debug: ^4.0.0 + fastq: ^1.17.1 + checksum: cba04eebda50ca0c60868dbaa4309b322662684bc1474f0b96c4458b82511edeb8ff8e3524a49a9e23e1e7f8d41d6d40bdc1fdaa41075280dd9b06f98dddc11d + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -1397,6 +1534,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 + languageName: node + linkType: hard + "bulk-replace@npm:0.0.1": version: 0.0.1 resolution: "bulk-replace@npm:0.0.1" @@ -1707,6 +1854,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:^0.6.0": + version: 0.6.0 + resolution: "cookie@npm:0.6.0" + checksum: f56a7d32a07db5458e79c726b77e3c2eff655c36792f2b6c58d351fb5f61531e5b1ab7f46987150136e366c65213cbe31729e02a3eaed630c3bf7334635fb410 + languageName: node + linkType: hard + "cosmiconfig-typescript-loader@npm:^4.0.0": version: 4.3.0 resolution: "cosmiconfig-typescript-loader@npm:4.3.0" @@ -1774,7 +1928,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -2153,6 +2307,20 @@ __metadata: languageName: node linkType: hard +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + "execa@npm:^4.0.0": version: 4.1.0 resolution: "execa@npm:4.1.0" @@ -2224,6 +2392,20 @@ __metadata: languageName: node linkType: hard +"fast-content-type-parse@npm:^1.1.0": + version: 1.1.0 + resolution: "fast-content-type-parse@npm:1.1.0" + checksum: c8c995b60ed30c4914aa255f012347f63fffa0c258039977b2080bb5c951dc6ef68a9243eac8ab456190642be44a31a7ada6e74d846e04f4667d40ebf778b94e + languageName: node + linkType: hard + +"fast-decode-uri-component@npm:^1.0.1": + version: 1.0.1 + resolution: "fast-decode-uri-component@npm:1.0.1" + checksum: 427a48fe0907e76f0e9a2c228e253b4d8a8ab21d130ee9e4bb8339c5ba4086235cf9576831f7b20955a752eae4b525a177ff9d5825dd8d416e7726939194fbee + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -2258,6 +2440,21 @@ __metadata: languageName: node linkType: hard +"fast-json-stringify@npm:^5.7.0, fast-json-stringify@npm:^5.8.0": + version: 5.14.1 + resolution: "fast-json-stringify@npm:5.14.1" + dependencies: + "@fastify/merge-json-schemas": ^0.1.0 + ajv: ^8.10.0 + ajv-formats: ^3.0.1 + fast-deep-equal: ^3.1.3 + fast-uri: ^2.1.0 + json-schema-ref-resolver: ^1.0.1 + rfdc: ^1.2.0 + checksum: a25a073849d6c886b40a6ed2c9ce37858ead79ac7d7ccd8ba7c93ca54c60ad916e8015661651697e31af6ff07baf5521b7ef2b63abe923bbe446c53caa272812 + languageName: node + linkType: hard + "fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" @@ -2265,6 +2462,62 @@ __metadata: languageName: node linkType: hard +"fast-querystring@npm:^1.0.0": + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" + dependencies: + fast-decode-uri-component: ^1.0.1 + checksum: 7149f82ee9ac39a9c08c7ffe435b9f6deade76ae5e3675fe1835720513e8c4bc541e666b4b7b1c0c07e08f369dcf4828d00f2bee39889a90a168e1439cf27b0b + languageName: node + linkType: hard + +"fast-redact@npm:^3.1.1": + version: 3.5.0 + resolution: "fast-redact@npm:3.5.0" + checksum: ef03f0d1849da074a520a531ad299bf346417b790a643931ab4e01cb72275c8d55b60dc8512fb1f1818647b696790edefaa96704228db9f012da935faa1940af + languageName: node + linkType: hard + +"fast-uri@npm:^2.0.0, fast-uri@npm:^2.1.0": + version: 2.3.0 + resolution: "fast-uri@npm:2.3.0" + checksum: 92c8975a60cf0bb5344197559b1a89b8743b9ff9254aeea217d7df63606d79e8673a0d892eee7b953c4b62bf3b900b95cbfe64f0285dde41e7bd2f111123f48b + languageName: node + linkType: hard + +"fastify@npm:^4.26.2": + version: 4.26.2 + resolution: "fastify@npm:4.26.2" + dependencies: + "@fastify/ajv-compiler": ^3.5.0 + "@fastify/error": ^3.4.0 + "@fastify/fast-json-stringify-compiler": ^4.3.0 + abstract-logging: ^2.0.1 + avvio: ^8.3.0 + fast-content-type-parse: ^1.1.0 + fast-json-stringify: ^5.8.0 + find-my-way: ^8.0.0 + light-my-request: ^5.11.0 + pino: ^8.17.0 + process-warning: ^3.0.0 + proxy-addr: ^2.0.7 + rfdc: ^1.3.0 + secure-json-parse: ^2.7.0 + semver: ^7.5.4 + toad-cache: ^3.3.0 + checksum: b865e0063e43fbdeffb9743c2fe6dc390ebcb8589a8ea1b28b3ba350e5cf3a55b7617568a9bf89afe4f207e6c044d574af0a1fe3889d4a388c59ec537517eca8 + languageName: node + linkType: hard + +"fastq@npm:^1.17.1": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: ^1.0.4 + checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.15.0 resolution: "fastq@npm:1.15.0" @@ -2312,6 +2565,17 @@ __metadata: languageName: node linkType: hard +"find-my-way@npm:^8.0.0": + version: 8.1.0 + resolution: "find-my-way@npm:8.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + fast-querystring: ^1.0.0 + safe-regex2: ^2.0.0 + checksum: 000620e1ea48ca8fd6c0cb0e47ca7ea61587037fb4e69017bb83de619c2c88149e4ac9279d854f35d04de89020f3a2b9fa978be5e39bcfbaee16c6547de01df1 + languageName: node + linkType: hard + "find-node-modules@npm:^2.1.2": version: 2.1.3 resolution: "find-node-modules@npm:2.1.3" @@ -2378,6 +2642,13 @@ __metadata: languageName: node linkType: hard +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 + languageName: node + linkType: hard + "fs-extra@npm:9.1.0": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" @@ -2779,6 +3050,13 @@ __metadata: languageName: node linkType: hard +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -2974,6 +3252,15 @@ __metadata: languageName: node linkType: hard +"json-schema-ref-resolver@npm:^1.0.1": + version: 1.0.1 + resolution: "json-schema-ref-resolver@npm:1.0.1" + dependencies: + fast-deep-equal: ^3.1.3 + checksum: b4215cd58b2f5233d433c9f110e91b29d41c1efcb24534a0493be3cdded35acbba7f0b04e53848e6d5c748981dcddb3d09b1cdc3ec8806fce861694a2a94bec3 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -3041,6 +3328,17 @@ __metadata: languageName: node linkType: hard +"light-my-request@npm:^5.11.0": + version: 5.13.0 + resolution: "light-my-request@npm:5.13.0" + dependencies: + cookie: ^0.6.0 + process-warning: ^3.0.0 + set-cookie-parser: ^2.4.1 + checksum: d0264c43813d4c9e3802d8292821ccee214ec793ce8b9b8f7433d005de1a220483782c64eb83494c2307e2b4e3eb3ca506f6eebd087ec022b43f770e1826f2d8 + languageName: node + linkType: hard + "lilconfig@npm:2.1.0": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" @@ -3497,6 +3795,13 @@ __metadata: languageName: node linkType: hard +"on-exit-leak-free@npm:^2.1.0": + version: 2.1.2 + resolution: "on-exit-leak-free@npm:2.1.2" + checksum: 6ce7acdc7b9ceb51cf029b5239cbf41937ee4c8dcd9d4e475e1777b41702564d46caa1150a744e00da0ac6d923ab83471646a39a4470f97481cf6e2d8d253c3f + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -3726,6 +4031,44 @@ __metadata: languageName: node linkType: hard +"pino-abstract-transport@npm:^1.1.0": + version: 1.1.0 + resolution: "pino-abstract-transport@npm:1.1.0" + dependencies: + readable-stream: ^4.0.0 + split2: ^4.0.0 + checksum: cc84caabee5647b5753ae484d5f63a1bca0f6e1791845e2db2b6d830a561c2b5dd1177720f68d78994c8a93aecc69f2729e6ac2bc871a1bf5bb4b0ec17210668 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^6.0.0": + version: 6.2.2 + resolution: "pino-std-serializers@npm:6.2.2" + checksum: aeb0662edc46ec926de9961ed4780a4f0586bb7c37d212cd469c069639e7816887a62c5093bc93f260a4e0900322f44fc8ab1343b5a9fa2864a888acccdb22a4 + languageName: node + linkType: hard + +"pino@npm:^8.17.0": + version: 8.20.0 + resolution: "pino@npm:8.20.0" + dependencies: + atomic-sleep: ^1.0.0 + fast-redact: ^3.1.1 + on-exit-leak-free: ^2.1.0 + pino-abstract-transport: ^1.1.0 + pino-std-serializers: ^6.0.0 + process-warning: ^3.0.0 + quick-format-unescaped: ^4.0.3 + real-require: ^0.2.0 + safe-stable-stringify: ^2.3.1 + sonic-boom: ^3.7.0 + thread-stream: ^2.0.0 + bin: + pino: bin.js + checksum: 51206e0547b5507e2284795241c7855e5200a9df4d60ab610bbb736af3c51303f1b5a89a1cbcf273432614849cff3562c30871b706ed67b11e15e30b885006bb + languageName: node + linkType: hard + "pinyin-pro@npm:^3.14.0": version: 3.15.4 resolution: "pinyin-pro@npm:3.15.4" @@ -3785,14 +4128,38 @@ __metadata: languageName: node linkType: hard -"prisma@npm:^5.0.0": - version: 5.0.0 - resolution: "prisma@npm:5.0.0" +"prisma@npm:^5.12.1": + version: 5.12.1 + resolution: "prisma@npm:5.12.1" dependencies: - "@prisma/engines": 5.0.0 + "@prisma/engines": 5.12.1 bin: prisma: build/index.js - checksum: fdc62377853d25b4db664c736fd0b08d2b0c6db5752e6f6c6ec3bda77634cfb79e6f49d52d4b8f54ddb8ec9c28fc3fb0c13f95caf61085447d0929e258af9284 + checksum: 6f20237779456d61fb908fbba355b3fb64f8c8a6f141bb4800d78b945261f58f3a7e83b2ba1c635dcdef69d6cd3d03400bd4153a253e2c2a2b331bdfd50dd0cd + languageName: node + linkType: hard + +"process-warning@npm:^3.0.0": + version: 3.0.0 + resolution: "process-warning@npm:3.0.0" + checksum: 1fc2eb4524041de3c18423334cc8b4e36bec5ad5472640ca1a936122c6e01da0864c1a4025858ef89aea93eabe7e77db93ccea225b10858617821cb6a8719efe + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"proxy-addr@npm:^2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 languageName: node linkType: hard @@ -3827,6 +4194,13 @@ __metadata: languageName: node linkType: hard +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd + languageName: node + linkType: hard + "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" @@ -3868,6 +4242,19 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^4.0.0": + version: 4.5.2 + resolution: "readable-stream@npm:4.5.2" + dependencies: + abort-controller: ^3.0.0 + buffer: ^6.0.3 + events: ^3.3.0 + process: ^0.11.10 + string_decoder: ^1.3.0 + checksum: c4030ccff010b83e4f33289c535f7830190773e274b3fcb6e2541475070bdfd69c98001c3b0cb78763fc00c8b62f514d96c2b10a8bd35d5ce45203a25fa1d33a + languageName: node + linkType: hard + "readable-web-to-node-stream@npm:^3.0.2": version: 3.0.2 resolution: "readable-web-to-node-stream@npm:3.0.2" @@ -3877,6 +4264,13 @@ __metadata: languageName: node linkType: hard +"real-require@npm:^0.2.0": + version: 0.2.0 + resolution: "real-require@npm:0.2.0" + checksum: fa060f19f2f447adf678d1376928c76379dce5f72bd334da301685ca6cdcb7b11356813332cc243c88470796bc2e2b1e2917fc10df9143dd93c2ea608694971d + languageName: node + linkType: hard + "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -3977,6 +4371,13 @@ __metadata: languageName: node linkType: hard +"ret@npm:~0.2.0": + version: 0.2.2 + resolution: "ret@npm:0.2.2" + checksum: 774964bb413a3525e687bca92d81c1cd75555ec33147c32ecca22f3d06409e35df87952cfe3d57afff7650a0f7e42139cf60cb44e94c29dde390243bc1941f16 + languageName: node + linkType: hard + "reusify@npm:^1.0.4": version: 1.0.4 resolution: "reusify@npm:1.0.4" @@ -3984,6 +4385,13 @@ __metadata: languageName: node linkType: hard +"rfdc@npm:^1.2.0": + version: 1.3.1 + resolution: "rfdc@npm:1.3.1" + checksum: d5d1e930aeac7e0e0a485f97db1356e388bdbeff34906d206fe524dd5ada76e95f186944d2e68307183fdc39a54928d4426bbb6734851692cfe9195efba58b79 + languageName: node + linkType: hard + "rfdc@npm:^1.3.0": version: 1.3.0 resolution: "rfdc@npm:1.3.0" @@ -4043,6 +4451,22 @@ __metadata: languageName: node linkType: hard +"safe-regex2@npm:^2.0.0": + version: 2.0.0 + resolution: "safe-regex2@npm:2.0.0" + dependencies: + ret: ~0.2.0 + checksum: f5e182fca040dedd50ae052ea0eb035d9903b2db71243d5d8b43299735857288ef2ab52546a368d9c6fd1333b2a0d039297925e78ffc14845354f3f6158af7c2 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.3.1": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -4050,6 +4474,13 @@ __metadata: languageName: node linkType: hard +"secure-json-parse@npm:^2.7.0": + version: 2.7.0 + resolution: "secure-json-parse@npm:2.7.0" + checksum: d9d7d5a01fc6db6115744ba23cf9e67ecfe8c524d771537c062ee05ad5c11b64c730bc58c7f33f60bd6877f96b86f0ceb9ea29644e4040cb757f6912d4dd6737 + languageName: node + linkType: hard + "semver@npm:2 || 3 || 4 || 5": version: 5.7.1 resolution: "semver@npm:5.7.1" @@ -4081,6 +4512,13 @@ __metadata: languageName: node linkType: hard +"set-cookie-parser@npm:^2.4.1": + version: 2.6.0 + resolution: "set-cookie-parser@npm:2.6.0" + checksum: bf11ebc594c53d84588f1b4c04f1b8ce14e0498b1c011b3d76b5c6d5aac481bbc3f7c5260ec4ce99bdc1d9aed19f9fc315e73166a36ca74d0f12349a73f6bdc9 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -4143,6 +4581,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^3.7.0": + version: 3.8.1 + resolution: "sonic-boom@npm:3.8.1" + dependencies: + atomic-sleep: ^1.0.0 + checksum: 79c90d7a2f928489fd3d4b68d8f8d747a426ca6ccf83c3b102b36f899d4524463dd310982ab7ab6d6bcfd34b7c7c281ad25e495ad71fbff8fd6fa86d6273fc6b + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -4193,6 +4640,13 @@ __metadata: languageName: node linkType: hard +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 05d54102546549fe4d2455900699056580cca006c0275c334611420f854da30ac999230857a85fdd9914dc2109ae50f80fda43d2a445f2aa86eccdc1dfce779d + languageName: node + linkType: hard + "streamsearch@npm:^1.1.0": version: 1.1.0 resolution: "streamsearch@npm:1.1.0" @@ -4229,7 +4683,7 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:^1.1.1": +"string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: @@ -4352,6 +4806,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^2.0.0": + version: 2.4.1 + resolution: "thread-stream@npm:2.4.1" + dependencies: + real-require: ^0.2.0 + checksum: 8b28e11eab2f805f963e6b6b23afab5523079575c4fc79c16eb29aa1c13d7931289762ebbc1268b3373d3f35ce795bd291df8e2d51eb45779ecaaecd06873459 + languageName: node + linkType: hard + "through2@npm:^4.0.0": version: 4.0.2 resolution: "through2@npm:4.0.2" @@ -4410,6 +4873,13 @@ __metadata: languageName: node linkType: hard +"toad-cache@npm:^3.3.0": + version: 3.7.0 + resolution: "toad-cache@npm:3.7.0" + checksum: d0f2092ab2c0f3355d3537c41b13888a12996f38080e6c39907e715eb382d997ccf61baab9e8eda3f202b6c07e304728106be3631c9fe3b6c001aaf15b7bdb8f + languageName: node + linkType: hard + "token-types@npm:^5.0.1": version: 5.0.1 resolution: "token-types@npm:5.0.1"