From 99c40c208296c723f5d1a89d1f6c38564bef5829 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Thu, 11 Aug 2022 18:16:57 +0200 Subject: [PATCH 01/23] Make fosscord read config from json if CONFIG_PATH is set --- util/src/util/Config.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/util/src/util/Config.ts b/util/src/util/Config.ts index 97a73858a..925cb2434 100644 --- a/util/src/util/Config.ts +++ b/util/src/util/Config.ts @@ -3,7 +3,7 @@ import path from "path"; import fs from "fs"; // TODO: yaml instead of json -// const overridePath = path.join(process.cwd(), "config.json"); +const overridePath = process.env.CONFIG_PATH ?? ""; let config: ConfigValue; let pairs: ConfigEntity[]; @@ -18,12 +18,14 @@ export const Config = { config = pairsToConfig(pairs); config = (config || {}).merge(DefaultConfigOptions); - // try { - // const overrideConfig = JSON.parse(fs.readFileSync(overridePath, { encoding: "utf8" })); - // config = overrideConfig.merge(config); - // } catch (error) { - // fs.writeFileSync(overridePath, JSON.stringify(config, null, 4)); - // } + if(process.env.CONFIG_PATH) + try { + const overrideConfig = JSON.parse(fs.readFileSync(overridePath, { encoding: "utf8" })); + config = overrideConfig.merge(config); + } catch (error) { + fs.writeFileSync(overridePath, JSON.stringify(config, null, 4)); + } + return this.set(config); }, @@ -50,7 +52,8 @@ function applyConfig(val: ConfigValue) { pair.value = obj; return pair.save(); } - // fs.writeFileSync(overridePath, JSON.stringify(val, null, 4)); + if(process.env.CONFIG_PATH) + fs.writeFileSync(overridePath, JSON.stringify(val, null, 4)); return apply(val); } From 34ca1a8a6c1b195c45f13ebd3b29064a9623af6f Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Thu, 11 Aug 2022 23:11:48 +0200 Subject: [PATCH 02/23] Make ConfigValue a directory, move defaults to those classes instead of a separate object --- gateway/src/opcodes/VoiceStateUpdate.ts | 2 +- util/src/config/Config.ts | 22 + util/src/config/index.ts | 2 + util/src/config/types/ApiConfiguration.ts | 5 + util/src/config/types/ClientConfiguration.ts | 8 + .../src/config/types/DefaultsConfiguration.ts | 5 + .../src/config/types/EndpointConfiguration.ts | 5 + util/src/config/types/GeneralConfiguration.ts | 12 + util/src/config/types/GifConfiguration.ts | 5 + util/src/config/types/GuildConfiguration.ts | 6 + util/src/config/types/KafkaConfiguration.ts | 5 + util/src/config/types/LimitConfigurations.ts | 9 + util/src/config/types/LoginConfiguration.ts | 3 + util/src/config/types/MetricsConfiguration.ts | 3 + .../src/config/types/RabbitMQConfiguration.ts | 3 + util/src/config/types/RegionConfiguration.ts | 16 + .../src/config/types/RegisterConfiguration.ts | 18 + .../src/config/types/SecurityConfiguration.ts | 17 + util/src/config/types/SentryConfiguration.ts | 8 + .../src/config/types/TemplateConfiguration.ts | 6 + util/src/config/types/index.ts | 18 + .../client/ClientReleaseConfiguration.ts | 4 + .../types/subconfigurations/client/index.ts | 1 + .../defaults/GuildDefaults.ts | 8 + .../types/subconfigurations/defaults/index.ts | 1 + .../types/subconfigurations/guild/AutoJoin.ts | 5 + .../subconfigurations/guild/Discovery.ts | 6 + .../types/subconfigurations/guild/index.ts | 2 + .../config/types/subconfigurations/index.ts | 8 + .../subconfigurations/kafka/KafkaBroker.ts | 4 + .../types/subconfigurations/kafka/index.ts | 1 + .../subconfigurations/limits/ChannelLimits.ts | 5 + .../subconfigurations/limits/GuildLimits.ts | 8 + .../subconfigurations/limits/MessageLimits.ts | 8 + .../subconfigurations/limits/RateLimits.ts | 18 + .../subconfigurations/limits/UserLimits.ts | 5 + .../types/subconfigurations/limits/index.ts | 6 + .../limits/ratelimits/Auth.ts | 12 + .../limits/ratelimits/RateLimitOptions.ts | 6 + .../limits/ratelimits/Route.ts | 19 + .../limits/ratelimits/index.ts | 3 + .../types/subconfigurations/region/Region.ts | 12 + .../types/subconfigurations/region/index.ts | 1 + .../subconfigurations/register/DateOfBirth.ts | 4 + .../types/subconfigurations/register/Email.ts | 7 + .../subconfigurations/register/Password.ts | 7 + .../types/subconfigurations/register/index.ts | 3 + .../subconfigurations/security/Captcha.ts | 6 + .../subconfigurations/security/TwoFactor.ts | 3 + .../types/subconfigurations/security/index.ts | 2 + util/src/entities/Config.ts | 406 +----------------- util/src/util/Config.ts | 14 +- 52 files changed, 364 insertions(+), 409 deletions(-) create mode 100644 util/src/config/Config.ts create mode 100644 util/src/config/index.ts create mode 100644 util/src/config/types/ApiConfiguration.ts create mode 100644 util/src/config/types/ClientConfiguration.ts create mode 100644 util/src/config/types/DefaultsConfiguration.ts create mode 100644 util/src/config/types/EndpointConfiguration.ts create mode 100644 util/src/config/types/GeneralConfiguration.ts create mode 100644 util/src/config/types/GifConfiguration.ts create mode 100644 util/src/config/types/GuildConfiguration.ts create mode 100644 util/src/config/types/KafkaConfiguration.ts create mode 100644 util/src/config/types/LimitConfigurations.ts create mode 100644 util/src/config/types/LoginConfiguration.ts create mode 100644 util/src/config/types/MetricsConfiguration.ts create mode 100644 util/src/config/types/RabbitMQConfiguration.ts create mode 100644 util/src/config/types/RegionConfiguration.ts create mode 100644 util/src/config/types/RegisterConfiguration.ts create mode 100644 util/src/config/types/SecurityConfiguration.ts create mode 100644 util/src/config/types/SentryConfiguration.ts create mode 100644 util/src/config/types/TemplateConfiguration.ts create mode 100644 util/src/config/types/index.ts create mode 100644 util/src/config/types/subconfigurations/client/ClientReleaseConfiguration.ts create mode 100644 util/src/config/types/subconfigurations/client/index.ts create mode 100644 util/src/config/types/subconfigurations/defaults/GuildDefaults.ts create mode 100644 util/src/config/types/subconfigurations/defaults/index.ts create mode 100644 util/src/config/types/subconfigurations/guild/AutoJoin.ts create mode 100644 util/src/config/types/subconfigurations/guild/Discovery.ts create mode 100644 util/src/config/types/subconfigurations/guild/index.ts create mode 100644 util/src/config/types/subconfigurations/index.ts create mode 100644 util/src/config/types/subconfigurations/kafka/KafkaBroker.ts create mode 100644 util/src/config/types/subconfigurations/kafka/index.ts create mode 100644 util/src/config/types/subconfigurations/limits/ChannelLimits.ts create mode 100644 util/src/config/types/subconfigurations/limits/GuildLimits.ts create mode 100644 util/src/config/types/subconfigurations/limits/MessageLimits.ts create mode 100644 util/src/config/types/subconfigurations/limits/RateLimits.ts create mode 100644 util/src/config/types/subconfigurations/limits/UserLimits.ts create mode 100644 util/src/config/types/subconfigurations/limits/index.ts create mode 100644 util/src/config/types/subconfigurations/limits/ratelimits/Auth.ts create mode 100644 util/src/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts create mode 100644 util/src/config/types/subconfigurations/limits/ratelimits/Route.ts create mode 100644 util/src/config/types/subconfigurations/limits/ratelimits/index.ts create mode 100644 util/src/config/types/subconfigurations/region/Region.ts create mode 100644 util/src/config/types/subconfigurations/region/index.ts create mode 100644 util/src/config/types/subconfigurations/register/DateOfBirth.ts create mode 100644 util/src/config/types/subconfigurations/register/Email.ts create mode 100644 util/src/config/types/subconfigurations/register/Password.ts create mode 100644 util/src/config/types/subconfigurations/register/index.ts create mode 100644 util/src/config/types/subconfigurations/security/Captcha.ts create mode 100644 util/src/config/types/subconfigurations/security/TwoFactor.ts create mode 100644 util/src/config/types/subconfigurations/security/index.ts diff --git a/gateway/src/opcodes/VoiceStateUpdate.ts b/gateway/src/opcodes/VoiceStateUpdate.ts index d62425f32..8c430d568 100644 --- a/gateway/src/opcodes/VoiceStateUpdate.ts +++ b/gateway/src/opcodes/VoiceStateUpdate.ts @@ -7,12 +7,12 @@ import { emitEvent, Guild, Member, - Region, VoiceServerUpdateEvent, VoiceState, VoiceStateUpdateEvent, } from "@fosscord/util"; import { OrmUtils } from "@fosscord/util"; +import { Region } from "@fosscord/util/src/config"; // TODO: check if a voice server is setup // Notice: Bot users respect the voice channel's user limit, if set. When the voice channel is full, you will not receive the Voice State Update or Voice Server Update events in response to your own Voice State Update. Having MANAGE_CHANNELS permission bypasses this limit and allows you to join regardless of the channel being full or not. diff --git a/util/src/config/Config.ts b/util/src/config/Config.ts new file mode 100644 index 000000000..b703040f7 --- /dev/null +++ b/util/src/config/Config.ts @@ -0,0 +1,22 @@ +import { ApiConfiguration, ClientConfiguration, DefaultsConfiguration, EndpointConfiguration, GeneralConfiguration, GifConfiguration, GuildConfiguration, KafkaConfiguration, LimitsConfiguration, LoginConfiguration, MetricsConfiguration, RabbitMQConfiguration, RegionConfiguration, RegisterConfiguration, SecurityConfiguration, SentryConfiguration, TemplateConfiguration } from "../config"; + +export class ConfigValue { + gateway: EndpointConfiguration = new EndpointConfiguration(); + cdn: EndpointConfiguration = new EndpointConfiguration(); + api: ApiConfiguration = new ApiConfiguration(); + general: GeneralConfiguration = new GeneralConfiguration(); + limits: LimitsConfiguration = new LimitsConfiguration(); + security: SecurityConfiguration = new SecurityConfiguration(); + login: LoginConfiguration = new LoginConfiguration(); + register: RegisterConfiguration = new RegisterConfiguration(); + regions: RegionConfiguration = new RegionConfiguration(); + guild: GuildConfiguration = new GuildConfiguration(); + gif: GifConfiguration = new GifConfiguration(); + rabbitmq: RabbitMQConfiguration = new RabbitMQConfiguration(); + kafka: KafkaConfiguration = new KafkaConfiguration(); + templates: TemplateConfiguration = new TemplateConfiguration(); + client: ClientConfiguration = new ClientConfiguration(); + metrics: MetricsConfiguration = new MetricsConfiguration(); + sentry: SentryConfiguration = new SentryConfiguration(); + defaults: DefaultsConfiguration = new DefaultsConfiguration(); +} \ No newline at end of file diff --git a/util/src/config/index.ts b/util/src/config/index.ts new file mode 100644 index 000000000..0a9b58ae3 --- /dev/null +++ b/util/src/config/index.ts @@ -0,0 +1,2 @@ +export * from "./Config"; +export * from "./types/index"; diff --git a/util/src/config/types/ApiConfiguration.ts b/util/src/config/types/ApiConfiguration.ts new file mode 100644 index 000000000..16b1efbab --- /dev/null +++ b/util/src/config/types/ApiConfiguration.ts @@ -0,0 +1,5 @@ +export class ApiConfiguration { + defaultVersion: string = "9"; + activeVersions: string[] = ["6", "7", "8", "9"]; + useFosscordEnhancements: boolean = true; +} \ No newline at end of file diff --git a/util/src/config/types/ClientConfiguration.ts b/util/src/config/types/ClientConfiguration.ts new file mode 100644 index 000000000..1adda1e20 --- /dev/null +++ b/util/src/config/types/ClientConfiguration.ts @@ -0,0 +1,8 @@ +import { ClientReleaseConfiguration } from "."; + +export class ClientConfiguration { + //classes + releases: ClientReleaseConfiguration = new ClientReleaseConfiguration(); + //base types + useTestClient: boolean = true; +} \ No newline at end of file diff --git a/util/src/config/types/DefaultsConfiguration.ts b/util/src/config/types/DefaultsConfiguration.ts new file mode 100644 index 000000000..c3171a014 --- /dev/null +++ b/util/src/config/types/DefaultsConfiguration.ts @@ -0,0 +1,5 @@ +import { GuildDefaults } from "."; + +export class DefaultsConfiguration { + guild: GuildDefaults = new GuildDefaults(); +} \ No newline at end of file diff --git a/util/src/config/types/EndpointConfiguration.ts b/util/src/config/types/EndpointConfiguration.ts new file mode 100644 index 000000000..87baea31b --- /dev/null +++ b/util/src/config/types/EndpointConfiguration.ts @@ -0,0 +1,5 @@ +export class EndpointConfiguration { + endpointClient: string | null = null; + endpointPrivate: string | null = null; + endpointPublic: string | null = null; +} \ No newline at end of file diff --git a/util/src/config/types/GeneralConfiguration.ts b/util/src/config/types/GeneralConfiguration.ts new file mode 100644 index 000000000..55848b44a --- /dev/null +++ b/util/src/config/types/GeneralConfiguration.ts @@ -0,0 +1,12 @@ +import { Snowflake } from "../../util"; + +export class GeneralConfiguration { + instanceName: string = "Fosscord Instance"; + instanceDescription: string | null = "This is a Fosscord instance made in the pre-release days"; + frontPage: string | null = null; + tosPage: string | null = null; + correspondenceEmail: string | null = "noreply@localhost.local"; + correspondenceUserID: string | null = null; + image: string | null = null; + instanceId: string = Snowflake.generate(); +} \ No newline at end of file diff --git a/util/src/config/types/GifConfiguration.ts b/util/src/config/types/GifConfiguration.ts new file mode 100644 index 000000000..6a2d520dc --- /dev/null +++ b/util/src/config/types/GifConfiguration.ts @@ -0,0 +1,5 @@ +export class GifConfiguration { + enabled: boolean = true; + provider: "tenor" = "tenor"; // more coming soon + apiKey?: string = "LIVDSRZULELA"; +} \ No newline at end of file diff --git a/util/src/config/types/GuildConfiguration.ts b/util/src/config/types/GuildConfiguration.ts new file mode 100644 index 000000000..3d43b3684 --- /dev/null +++ b/util/src/config/types/GuildConfiguration.ts @@ -0,0 +1,6 @@ +import { DiscoveryConfiguration, AutoJoinConfiguration } from "."; + +export class GuildConfiguration { + discovery: DiscoveryConfiguration = new DiscoveryConfiguration(); + autoJoin: AutoJoinConfiguration = new AutoJoinConfiguration(); +} diff --git a/util/src/config/types/KafkaConfiguration.ts b/util/src/config/types/KafkaConfiguration.ts new file mode 100644 index 000000000..7932f49e1 --- /dev/null +++ b/util/src/config/types/KafkaConfiguration.ts @@ -0,0 +1,5 @@ +import { KafkaBroker } from "."; + +export class KafkaConfiguration { + brokers: KafkaBroker[] | null = null; +} \ No newline at end of file diff --git a/util/src/config/types/LimitConfigurations.ts b/util/src/config/types/LimitConfigurations.ts new file mode 100644 index 000000000..bcc2e7e27 --- /dev/null +++ b/util/src/config/types/LimitConfigurations.ts @@ -0,0 +1,9 @@ +import { ChannelLimits, GuildLimits, MessageLimits, RateLimits, UserLimits } from "."; + +export class LimitsConfiguration { + user: UserLimits = new UserLimits(); + guild: GuildLimits = new GuildLimits(); + message: MessageLimits = new MessageLimits(); + channel: ChannelLimits = new ChannelLimits(); + rate: RateLimits = new RateLimits(); +} \ No newline at end of file diff --git a/util/src/config/types/LoginConfiguration.ts b/util/src/config/types/LoginConfiguration.ts new file mode 100644 index 000000000..255c94512 --- /dev/null +++ b/util/src/config/types/LoginConfiguration.ts @@ -0,0 +1,3 @@ +export class LoginConfiguration { + requireCaptcha: boolean = false; +} \ No newline at end of file diff --git a/util/src/config/types/MetricsConfiguration.ts b/util/src/config/types/MetricsConfiguration.ts new file mode 100644 index 000000000..d7cd4937e --- /dev/null +++ b/util/src/config/types/MetricsConfiguration.ts @@ -0,0 +1,3 @@ +export class MetricsConfiguration { + timeout: number = 30000; +} \ No newline at end of file diff --git a/util/src/config/types/RabbitMQConfiguration.ts b/util/src/config/types/RabbitMQConfiguration.ts new file mode 100644 index 000000000..ce4a91236 --- /dev/null +++ b/util/src/config/types/RabbitMQConfiguration.ts @@ -0,0 +1,3 @@ +export class RabbitMQConfiguration { + host: string | null = null; +} \ No newline at end of file diff --git a/util/src/config/types/RegionConfiguration.ts b/util/src/config/types/RegionConfiguration.ts new file mode 100644 index 000000000..09d9271c8 --- /dev/null +++ b/util/src/config/types/RegionConfiguration.ts @@ -0,0 +1,16 @@ +import { Region } from "."; + +export class RegionConfiguration { + default: string = "fosscord"; + useDefaultAsOptimal: boolean = true; + available: Region[] = [ + { + id: "fosscord", + name: "Fosscord", + endpoint: "127.0.0.1:3004", + vip: false, + custom: false, + deprecated: false, + }, + ]; +} \ No newline at end of file diff --git a/util/src/config/types/RegisterConfiguration.ts b/util/src/config/types/RegisterConfiguration.ts new file mode 100644 index 000000000..a0dc97c5d --- /dev/null +++ b/util/src/config/types/RegisterConfiguration.ts @@ -0,0 +1,18 @@ +import { DateOfBirthConfiguration, EmailConfiguration, PasswordConfiguration } from "."; + +export class RegisterConfiguration { + //classes + email: EmailConfiguration = new EmailConfiguration(); + dateOfBirth: DateOfBirthConfiguration = new DateOfBirthConfiguration(); + password: PasswordConfiguration = new PasswordConfiguration(); + //base types + disabled: boolean = false; + requireCaptcha: boolean = true; + requireInvite: boolean = false; + guestsRequireInvite: boolean = true; + allowNewRegistration: boolean = true; + allowMultipleAccounts: boolean = true; + blockProxies: boolean = true; + incrementingDiscriminators: boolean = false; // random otherwise + defaultRights: string = "0"; +} diff --git a/util/src/config/types/SecurityConfiguration.ts b/util/src/config/types/SecurityConfiguration.ts new file mode 100644 index 000000000..405b86aca --- /dev/null +++ b/util/src/config/types/SecurityConfiguration.ts @@ -0,0 +1,17 @@ +import crypto from "crypto"; +import { CaptchaConfiguration, TwoFactorConfiguration } from "."; + +export class SecurityConfiguration { + //classes + captcha: CaptchaConfiguration = new CaptchaConfiguration(); + twoFactor: TwoFactorConfiguration = new TwoFactorConfiguration(); + //base types + autoUpdate: boolean | number = true; + requestSignature: string = crypto.randomBytes(32).toString("base64"); + jwtSecret: string = crypto.randomBytes(256).toString("base64"); + // header to get the real user ip address + // X-Forwarded-For for nginx/reverse proxies + // CF-Connecting-IP for cloudflare + forwadedFor: string | null = null; + ipdataApiKey: string | null = "eca677b284b3bac29eb72f5e496aa9047f26543605efe99ff2ce35c9"; +} diff --git a/util/src/config/types/SentryConfiguration.ts b/util/src/config/types/SentryConfiguration.ts new file mode 100644 index 000000000..836094a1f --- /dev/null +++ b/util/src/config/types/SentryConfiguration.ts @@ -0,0 +1,8 @@ +import { hostname } from "os"; + +export class SentryConfiguration { + enabled: boolean = false; + endpoint: string = "https://05e8e3d005f34b7d97e920ae5870a5e5@sentry.thearcanebrony.net/6"; + traceSampleRate: number = 1.0; + environment: string = hostname(); +} \ No newline at end of file diff --git a/util/src/config/types/TemplateConfiguration.ts b/util/src/config/types/TemplateConfiguration.ts new file mode 100644 index 000000000..4a9aa8f2c --- /dev/null +++ b/util/src/config/types/TemplateConfiguration.ts @@ -0,0 +1,6 @@ +export class TemplateConfiguration { + enabled: boolean = true; + allowTemplateCreation: boolean = true; + allowDiscordTemplates: boolean = true; + allowRaws: boolean = true; +} \ No newline at end of file diff --git a/util/src/config/types/index.ts b/util/src/config/types/index.ts new file mode 100644 index 000000000..608503a0c --- /dev/null +++ b/util/src/config/types/index.ts @@ -0,0 +1,18 @@ +export * from "./ApiConfiguration"; +export * from "./ClientConfiguration"; +export * from "./DefaultsConfiguration"; +export * from "./EndpointConfiguration"; +export * from "./GeneralConfiguration"; +export * from "./GifConfiguration"; +export * from "./GuildConfiguration"; +export * from "./KafkaConfiguration"; +export * from "./LimitConfigurations"; +export * from "./LoginConfiguration"; +export * from "./MetricsConfiguration"; +export * from "./RabbitMQConfiguration"; +export * from "./RegionConfiguration"; +export * from "./RegisterConfiguration"; +export * from "./SecurityConfiguration"; +export * from "./SentryConfiguration"; +export * from "./TemplateConfiguration"; +export * from "./subconfigurations/index"; diff --git a/util/src/config/types/subconfigurations/client/ClientReleaseConfiguration.ts b/util/src/config/types/subconfigurations/client/ClientReleaseConfiguration.ts new file mode 100644 index 000000000..54e7f365d --- /dev/null +++ b/util/src/config/types/subconfigurations/client/ClientReleaseConfiguration.ts @@ -0,0 +1,4 @@ +export class ClientReleaseConfiguration { + useLocalRelease: boolean = true; //TODO + upstreamVersion: string = "0.0.264"; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/client/index.ts b/util/src/config/types/subconfigurations/client/index.ts new file mode 100644 index 000000000..96bbb0ca3 --- /dev/null +++ b/util/src/config/types/subconfigurations/client/index.ts @@ -0,0 +1 @@ +export * from "./ClientReleaseConfiguration"; diff --git a/util/src/config/types/subconfigurations/defaults/GuildDefaults.ts b/util/src/config/types/subconfigurations/defaults/GuildDefaults.ts new file mode 100644 index 000000000..d6ff76972 --- /dev/null +++ b/util/src/config/types/subconfigurations/defaults/GuildDefaults.ts @@ -0,0 +1,8 @@ +export class GuildDefaults { + maxPresences: number = 250000; + maxVideoChannelUsers: number = 200; + afkTimeout: number = 300; + defaultMessageNotifications: number = 1; + explicitContentFilter: number = 0; + test: number = 123; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/defaults/index.ts b/util/src/config/types/subconfigurations/defaults/index.ts new file mode 100644 index 000000000..f40c5cd2f --- /dev/null +++ b/util/src/config/types/subconfigurations/defaults/index.ts @@ -0,0 +1 @@ +export * from "./GuildDefaults"; diff --git a/util/src/config/types/subconfigurations/guild/AutoJoin.ts b/util/src/config/types/subconfigurations/guild/AutoJoin.ts new file mode 100644 index 000000000..47dfe5ec2 --- /dev/null +++ b/util/src/config/types/subconfigurations/guild/AutoJoin.ts @@ -0,0 +1,5 @@ +export class AutoJoinConfiguration { + enabled: boolean = true; + guilds: string[] = []; + canLeave: boolean = true; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/guild/Discovery.ts b/util/src/config/types/subconfigurations/guild/Discovery.ts new file mode 100644 index 000000000..59d8a8aeb --- /dev/null +++ b/util/src/config/types/subconfigurations/guild/Discovery.ts @@ -0,0 +1,6 @@ +export class DiscoveryConfiguration { + showAllGuilds: boolean = false; + useRecommendation: boolean = false; // TODO: Recommendation, privacy concern? + offset: number = 0; + limit: number = 24; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/guild/index.ts b/util/src/config/types/subconfigurations/guild/index.ts new file mode 100644 index 000000000..e9614856e --- /dev/null +++ b/util/src/config/types/subconfigurations/guild/index.ts @@ -0,0 +1,2 @@ +export * from "./AutoJoin"; +export * from "./Discovery"; diff --git a/util/src/config/types/subconfigurations/index.ts b/util/src/config/types/subconfigurations/index.ts new file mode 100644 index 000000000..bfbadc929 --- /dev/null +++ b/util/src/config/types/subconfigurations/index.ts @@ -0,0 +1,8 @@ +export * from "./client/index"; +export * from "./defaults/index"; +export * from "./guild/index"; +export * from "./kafka/index"; +export * from "./limits/index"; +export * from "./region/index"; +export * from "./register/index"; +export * from "./security/index"; diff --git a/util/src/config/types/subconfigurations/kafka/KafkaBroker.ts b/util/src/config/types/subconfigurations/kafka/KafkaBroker.ts new file mode 100644 index 000000000..4f9a5e51c --- /dev/null +++ b/util/src/config/types/subconfigurations/kafka/KafkaBroker.ts @@ -0,0 +1,4 @@ +export interface KafkaBroker { + ip: string; + port: number; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/kafka/index.ts b/util/src/config/types/subconfigurations/kafka/index.ts new file mode 100644 index 000000000..2c6339500 --- /dev/null +++ b/util/src/config/types/subconfigurations/kafka/index.ts @@ -0,0 +1 @@ +export * from "./KafkaBroker"; diff --git a/util/src/config/types/subconfigurations/limits/ChannelLimits.ts b/util/src/config/types/subconfigurations/limits/ChannelLimits.ts new file mode 100644 index 000000000..2f8f94859 --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/ChannelLimits.ts @@ -0,0 +1,5 @@ +export class ChannelLimits { + maxPins: number = 500; + maxTopic: number = 1024; + maxWebhooks: number = 100; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/GuildLimits.ts b/util/src/config/types/subconfigurations/limits/GuildLimits.ts new file mode 100644 index 000000000..91ad39ae6 --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/GuildLimits.ts @@ -0,0 +1,8 @@ +export class GuildLimits { + maxRoles: number = 1000; + maxEmojis: number = 2000; + maxMembers: number = 25000000; + maxChannels: number = 65535; + maxChannelsInCategory: number = 65535; + hideOfflineMember: number = 3; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/MessageLimits.ts b/util/src/config/types/subconfigurations/limits/MessageLimits.ts new file mode 100644 index 000000000..51576b901 --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/MessageLimits.ts @@ -0,0 +1,8 @@ +export class MessageLimits { + maxCharacters: number = 1048576; + maxTTSCharacters: number = 160; + maxReactions: number = 2048; + maxAttachmentSize: number = 1024 * 1024 * 1024; + maxBulkDelete: number = 1000; + maxEmbedDownloadSize: number = 1024 * 1024 * 5; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/RateLimits.ts b/util/src/config/types/subconfigurations/limits/RateLimits.ts new file mode 100644 index 000000000..25e7a1e09 --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/RateLimits.ts @@ -0,0 +1,18 @@ +import { RouteRateLimit, RateLimitOptions } from "."; + +export class RateLimits { + disabled: boolean = true; + ip: Omit = { + count: 500, + window: 5 + }; + global: RateLimitOptions = { + count: 250, + window: 5 + }; + error: RateLimitOptions = { + count: 10, + window: 5 + }; + routes: RouteRateLimit; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/UserLimits.ts b/util/src/config/types/subconfigurations/limits/UserLimits.ts new file mode 100644 index 000000000..0d10e0b35 --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/UserLimits.ts @@ -0,0 +1,5 @@ +export class UserLimits { + maxGuilds: number = 1048576; + maxUsername: number = 127; + maxFriends: number = 5000; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/index.ts b/util/src/config/types/subconfigurations/limits/index.ts new file mode 100644 index 000000000..0b7304f63 --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/index.ts @@ -0,0 +1,6 @@ +export * from "./ChannelLimits"; +export * from "./GuildLimits"; +export * from "./MessageLimits"; +export * from "./RateLimits"; +export * from "./UserLimits"; +export * from "./ratelimits/index"; diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/Auth.ts b/util/src/config/types/subconfigurations/limits/ratelimits/Auth.ts new file mode 100644 index 000000000..df171044a --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/ratelimits/Auth.ts @@ -0,0 +1,12 @@ +import { RateLimitOptions } from "./RateLimitOptions"; + +export class AuthRateLimit { + login: RateLimitOptions = { + count: 5, + window: 60 + }; + register: RateLimitOptions = { + count: 2, + window: 60 * 60 * 12 + }; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts b/util/src/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts new file mode 100644 index 000000000..7089e28ef --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts @@ -0,0 +1,6 @@ +export interface RateLimitOptions { + bot?: number; + count: number; + window: number; + onyIp?: boolean; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/Route.ts b/util/src/config/types/subconfigurations/limits/ratelimits/Route.ts new file mode 100644 index 000000000..3012a8a8d --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/ratelimits/Route.ts @@ -0,0 +1,19 @@ +import { AuthRateLimit } from "."; +import { RateLimitOptions } from "./RateLimitOptions"; + +export class RouteRateLimit { + guild: RateLimitOptions = { + count: 5, + window: 5 + }; + webhook: RateLimitOptions = { + count: 10, + window: 5 + }; + channel: RateLimitOptions = { + count: 10, + window: 5 + }; + auth: AuthRateLimit; + // TODO: rate limit configuration for all routes +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/index.ts b/util/src/config/types/subconfigurations/limits/ratelimits/index.ts new file mode 100644 index 000000000..432eb6011 --- /dev/null +++ b/util/src/config/types/subconfigurations/limits/ratelimits/index.ts @@ -0,0 +1,3 @@ +export * from "./Auth"; +export * from "./RateLimitOptions"; +export * from "./Route"; diff --git a/util/src/config/types/subconfigurations/region/Region.ts b/util/src/config/types/subconfigurations/region/Region.ts new file mode 100644 index 000000000..a8717e1fe --- /dev/null +++ b/util/src/config/types/subconfigurations/region/Region.ts @@ -0,0 +1,12 @@ +export interface Region { + id: string; + name: string; + endpoint: string; + location?: { + latitude: number; + longitude: number; + }; + vip: boolean; + custom: boolean; + deprecated: boolean; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/region/index.ts b/util/src/config/types/subconfigurations/region/index.ts new file mode 100644 index 000000000..2beb8de7f --- /dev/null +++ b/util/src/config/types/subconfigurations/region/index.ts @@ -0,0 +1 @@ +export * from "./Region"; diff --git a/util/src/config/types/subconfigurations/register/DateOfBirth.ts b/util/src/config/types/subconfigurations/register/DateOfBirth.ts new file mode 100644 index 000000000..5a3c4e9de --- /dev/null +++ b/util/src/config/types/subconfigurations/register/DateOfBirth.ts @@ -0,0 +1,4 @@ +export class DateOfBirthConfiguration { + required: boolean = true; + minimum: number = 13; // in years +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/register/Email.ts b/util/src/config/types/subconfigurations/register/Email.ts new file mode 100644 index 000000000..115d49e08 --- /dev/null +++ b/util/src/config/types/subconfigurations/register/Email.ts @@ -0,0 +1,7 @@ +export class EmailConfiguration { + required: boolean = false; + allowlist: boolean = false; + blocklist: boolean = true; + domains: string[] = [];// TODO: efficiently save domain blocklist in database + // domains: fs.readFileSync(__dirname + "/blockedEmailDomains.txt", { encoding: "utf8" }).split("\n"), +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/register/Password.ts b/util/src/config/types/subconfigurations/register/Password.ts new file mode 100644 index 000000000..977473ac4 --- /dev/null +++ b/util/src/config/types/subconfigurations/register/Password.ts @@ -0,0 +1,7 @@ +export class PasswordConfiguration { + required: boolean = false; + minLength: number = 8; + minNumbers: number = 2; + minUpperCase: number =2; + minSymbols: number = 0; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/register/index.ts b/util/src/config/types/subconfigurations/register/index.ts new file mode 100644 index 000000000..d97381200 --- /dev/null +++ b/util/src/config/types/subconfigurations/register/index.ts @@ -0,0 +1,3 @@ +export * from "./DateOfBirth"; +export * from "./Email"; +export * from "./Password"; diff --git a/util/src/config/types/subconfigurations/security/Captcha.ts b/util/src/config/types/subconfigurations/security/Captcha.ts new file mode 100644 index 000000000..ad6aa7629 --- /dev/null +++ b/util/src/config/types/subconfigurations/security/Captcha.ts @@ -0,0 +1,6 @@ +export class CaptchaConfiguration { + enabled: boolean = false; + service: "recaptcha" | "hcaptcha" | null = null; // TODO: hcaptcha, custom + sitekey: string | null = null; + secret: string | null = null; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/security/TwoFactor.ts b/util/src/config/types/subconfigurations/security/TwoFactor.ts new file mode 100644 index 000000000..33a47385f --- /dev/null +++ b/util/src/config/types/subconfigurations/security/TwoFactor.ts @@ -0,0 +1,3 @@ +export class TwoFactorConfiguration { + generateBackupCodes: boolean = true; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/security/index.ts b/util/src/config/types/subconfigurations/security/index.ts new file mode 100644 index 000000000..17619589d --- /dev/null +++ b/util/src/config/types/subconfigurations/security/index.ts @@ -0,0 +1,2 @@ +export * from "./Captcha"; +export * from "./TwoFactor"; diff --git a/util/src/entities/Config.ts b/util/src/entities/Config.ts index 901a5e549..606fe9013 100644 --- a/util/src/entities/Config.ts +++ b/util/src/entities/Config.ts @@ -1,9 +1,5 @@ import { Column, Entity } from "typeorm"; import { BaseClassWithoutId, PrimaryIdColumn } from "./BaseClass"; -import crypto from "crypto"; -import { Snowflake } from "../util/Snowflake"; -import { SessionsReplace } from ".."; -import { hostname } from "os"; @Entity("config") export class ConfigEntity extends BaseClassWithoutId { @@ -12,404 +8,4 @@ export class ConfigEntity extends BaseClassWithoutId { @Column({ type: "simple-json", nullable: true }) value: number | boolean | null | string | undefined; -} - -export interface RateLimitOptions { - bot?: number; - count: number; - window: number; - onyIp?: boolean; -} - -export interface Region { - id: string; - name: string; - endpoint: string; - location?: { - latitude: number; - longitude: number; - }; - vip: boolean; - custom: boolean; - deprecated: boolean; -} - -export interface KafkaBroker { - ip: string; - port: number; -} - -export interface ConfigValue { - gateway: { - endpointClient: string | null; - endpointPrivate: string | null; - endpointPublic: string | null; - }; - cdn: { - endpointClient: string | null; - endpointPublic: string | null; - endpointPrivate: string | null; - }; - api: { - defaultVersion: string; - activeVersions: string[]; - useFosscordEnhancements: boolean; - }; - general: { - instanceName: string; - instanceDescription: string | null; - frontPage: string | null; - tosPage: string | null; - correspondenceEmail: string | null; - correspondenceUserID: string | null; - image: string | null; - instanceId: string; - }; - limits: { - user: { - maxGuilds: number; - maxUsername: number; - maxFriends: number; - }; - guild: { - maxRoles: number; - maxEmojis: number; - maxMembers: number; - maxChannels: number; - maxChannelsInCategory: number; - hideOfflineMember: number; - }; - message: { - maxCharacters: number; - maxTTSCharacters: number; - maxReactions: number; - maxAttachmentSize: number; - maxBulkDelete: number; - maxEmbedDownloadSize: number; - }; - channel: { - maxPins: number; - maxTopic: number; - maxWebhooks: number; - }; - rate: { - disabled: boolean; - ip: Omit; - global: RateLimitOptions; - error: RateLimitOptions; - routes: { - guild: RateLimitOptions; - webhook: RateLimitOptions; - channel: RateLimitOptions; - auth: { - login: RateLimitOptions; - register: RateLimitOptions; - }; - // TODO: rate limit configuration for all routes - }; - }; - }; - security: { - autoUpdate: boolean | number; - requestSignature: string; - jwtSecret: string; - forwadedFor: string | null; // header to get the real user ip address - captcha: { - enabled: boolean; - service: "recaptcha" | "hcaptcha" | null; // TODO: hcaptcha, custom - sitekey: string | null; - secret: string | null; - }; - ipdataApiKey: string | null; - twoFactor: { - generateBackupCodes: boolean; - }; - }; - login: { - requireCaptcha: boolean; - }; - register: { - defaultRights: string; - email: { - required: boolean; - allowlist: boolean; - blocklist: boolean; - domains: string[]; - }; - dateOfBirth: { - required: boolean; - minimum: number; // in years - }; - disabled: boolean; - requireCaptcha: boolean; - requireInvite: boolean; - guestsRequireInvite: boolean; - allowNewRegistration: boolean; - allowMultipleAccounts: boolean; - blockProxies: boolean; - password: { - required: boolean; - minLength: number; - minNumbers: number; - minUpperCase: number; - minSymbols: number; - }; - incrementingDiscriminators: boolean; // random otherwise - }; - regions: { - default: string; - useDefaultAsOptimal: boolean; - available: Region[]; - }; - guild: { - discovery: { - showAllGuilds: boolean; - useRecommendation: boolean; // TODO: Recommendation, privacy concern? - offset: number; - limit: number; - }; - autoJoin: { - enabled: boolean; - guilds: string[]; - canLeave: boolean; - }; - }; - gif: { - enabled: boolean; - provider: "tenor"; // more coming soon - apiKey?: string; - }; - rabbitmq: { - host: string | null; - }; - kafka: { - brokers: KafkaBroker[] | null; - }; - templates: { - enabled: Boolean; - allowTemplateCreation: Boolean; - allowDiscordTemplates: Boolean; - allowRaws: Boolean; - }, - client: { - useTestClient: Boolean; - releases: { - useLocalRelease: Boolean; //TODO - upstreamVersion: string; - } - }, - metrics: { - timeout: number; - }, - sentry: { - enabled: boolean; - endpoint: string; - traceSampleRate: number; - environment: string; - } -} - -export const DefaultConfigOptions: ConfigValue = { - gateway: { - endpointClient: null, - endpointPrivate: null, - endpointPublic: null, - }, - cdn: { - endpointClient: null, - endpointPrivate: null, - endpointPublic: null, - }, - api: { - defaultVersion: "9", - activeVersions: ["6", "7", "8", "9"], - useFosscordEnhancements: true, - }, - general: { - instanceName: "Fosscord Instance", - instanceDescription: "This is a Fosscord instance made in pre-release days", - frontPage: null, - tosPage: null, - correspondenceEmail: "noreply@localhost.local", - correspondenceUserID: null, - image: null, - instanceId: Snowflake.generate(), - }, - limits: { - user: { - maxGuilds: 1048576, - maxUsername: 127, - maxFriends: 5000, - }, - guild: { - maxRoles: 1000, - maxEmojis: 2000, - maxMembers: 25000000, - maxChannels: 65535, - maxChannelsInCategory: 65535, - hideOfflineMember: 3, - }, - message: { - maxCharacters: 1048576, - maxTTSCharacters: 160, - maxReactions: 2048, - maxAttachmentSize: 1024 * 1024 * 1024, - maxEmbedDownloadSize: 1024 * 1024 * 5, - maxBulkDelete: 1000, - }, - channel: { - maxPins: 500, - maxTopic: 1024, - maxWebhooks: 100, - }, - rate: { - disabled: true, - ip: { - count: 500, - window: 5, - }, - global: { - count: 250, - window: 5, - }, - error: { - count: 10, - window: 5, - }, - routes: { - guild: { - count: 5, - window: 5, - }, - webhook: { - count: 10, - window: 5, - }, - channel: { - count: 10, - window: 5, - }, - auth: { - login: { - count: 5, - window: 60, - }, - register: { - count: 2, - window: 60 * 60 * 12, - }, - }, - }, - }, - }, - security: { - autoUpdate: true, - requestSignature: crypto.randomBytes(32).toString("base64"), - jwtSecret: crypto.randomBytes(256).toString("base64"), - forwadedFor: null, - // forwadedFor: "X-Forwarded-For" // nginx/reverse proxy - // forwadedFor: "CF-Connecting-IP" // cloudflare: - captcha: { - enabled: false, - service: null, - sitekey: null, - secret: null, - }, - ipdataApiKey: "eca677b284b3bac29eb72f5e496aa9047f26543605efe99ff2ce35c9", - twoFactor: { - generateBackupCodes: true, - }, - }, - login: { - requireCaptcha: false, - }, - register: { - email: { - required: false, - allowlist: false, - blocklist: true, - domains: [], // TODO: efficiently save domain blocklist in database - // domains: fs.readFileSync(__dirname + "/blockedEmailDomains.txt", { encoding: "utf8" }).split("\n"), - }, - dateOfBirth: { - required: true, - minimum: 13, - }, - disabled: false, - requireInvite: false, - guestsRequireInvite: true, - requireCaptcha: true, - allowNewRegistration: true, - allowMultipleAccounts: true, - blockProxies: true, - password: { - required: false, - minLength: 8, - minNumbers: 2, - minUpperCase: 2, - minSymbols: 0, - }, - incrementingDiscriminators: false, - defaultRights: "0" - }, - regions: { - default: "fosscord", - useDefaultAsOptimal: true, - available: [ - { - id: "fosscord", - name: "Fosscord", - endpoint: "127.0.0.1:3004", - vip: false, - custom: false, - deprecated: false, - }, - ], - }, - guild: { - discovery: { - showAllGuilds: false, - useRecommendation: false, - offset: 0, - limit: 24, - }, - autoJoin: { - enabled: true, - canLeave: true, - guilds: [], - }, - }, - gif: { - enabled: true, - provider: "tenor", - apiKey: "LIVDSRZULELA", - }, - rabbitmq: { - host: null, - }, - kafka: { - brokers: null, - }, - templates: { - enabled: true, - allowTemplateCreation: true, - allowDiscordTemplates: true, - allowRaws: false - }, - client: { - useTestClient: true, - releases: { - useLocalRelease: true, - upstreamVersion: "0.0.264" - } - }, - metrics: { - timeout: 30000 - }, - sentry: { - enabled: false, - endpoint: "https://05e8e3d005f34b7d97e920ae5870a5e5@sentry.thearcanebrony.net/6", - traceSampleRate: 1.0, - environment: hostname() - } -}; +} \ No newline at end of file diff --git a/util/src/util/Config.ts b/util/src/util/Config.ts index 925cb2434..0b55ca4b0 100644 --- a/util/src/util/Config.ts +++ b/util/src/util/Config.ts @@ -1,6 +1,7 @@ -import { ConfigValue, ConfigEntity, DefaultConfigOptions } from "../entities/Config"; -import path from "path"; +import { ConfigEntity } from "../entities/Config"; import fs from "fs"; +import { ConfigValue } from "../config"; +import { OrmUtils } from "."; // TODO: yaml instead of json const overridePath = process.env.CONFIG_PATH ?? ""; @@ -14,9 +15,11 @@ let pairs: ConfigEntity[]; export const Config = { init: async function init() { if (config) return config; + console.log('[Config] Loading configuration...') pairs = await ConfigEntity.find(); config = pairsToConfig(pairs); - config = (config || {}).merge(DefaultConfigOptions); + //config = (config || {}).merge(new ConfigValue()); + config = OrmUtils.mergeDeep(new ConfigValue(), config) if(process.env.CONFIG_PATH) try { @@ -30,6 +33,11 @@ export const Config = { return this.set(config); }, get: function get() { + if(!config) { + if(/--debug|--inspect/.test(process.execArgv.join(' '))) + console.log("Oops.. trying to get config without config existing... Returning defaults... (Is the database still initialising?)"); + return new ConfigValue(); + } return config; }, set: function set(val: Partial) { From 44859db499f080e3a341f3e7fa5e44611fc2f887 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 12 Aug 2022 01:46:42 +0200 Subject: [PATCH 03/23] Push local state... --- api/assets/schemas.json | 13716 +--------------- api/client_test/index.html | 149 +- api/src/routes/auth/register.ts | 1 + api/src/routes/guilds/#guild_id/index.ts | 1 + api/src/routes/users/@me/settings.ts | 4 +- bundle/scripts/db_migrations.sh | 14 +- bundle/scripts/gen_index.js | 34 + bundle/scripts/update_schemas.js | 9 + bundle/scripts/utils.js | 3 +- gateway/src/opcodes/Identify.ts | 7 +- gateway/src/opcodes/VoiceStateUpdate.ts | 5 + .../src/config/types/DefaultsConfiguration.ts | 3 +- .../defaults/UserDefaults.ts | 5 + .../types/subconfigurations/defaults/index.ts | 1 + util/src/entities/Guild.ts | 20 +- util/src/entities/User.ts | 158 +- util/src/entities/UserSettings.ts | 119 + util/src/entities/index.ts | 1 + util/src/interfaces/Event.ts | 4 +- .../mariadb/1660258393551-CodeCleanup3.ts | 232 + .../mariadb/1660260587556-CodeCleanup4.ts | 39 + .../postgres/1660257815436-CodeCleanup2.ts | 59 + .../postgres/1660258372154-CodeCleanup3.ts | 19 + .../postgres/1660260565996-CodeCleanup4.ts | 33 + .../sqlite/1660257576211-CodeCleanup1.ts | 326 + .../sqlite/1660257795259-CodeCleanup2.ts | 572 + .../sqlite/1660258351379-CodeCleanup3.ts | 231 + .../sqlite/1660260539853-CodeCleanup4.ts | 459 + .../sqlite/1660260672914-CodeCleanup4.ts | 459 + 29 files changed, 2865 insertions(+), 13818 deletions(-) create mode 100644 bundle/scripts/gen_index.js create mode 100644 bundle/scripts/update_schemas.js create mode 100644 util/src/config/types/subconfigurations/defaults/UserDefaults.ts create mode 100644 util/src/entities/UserSettings.ts create mode 100644 util/src/migrations/mariadb/1660258393551-CodeCleanup3.ts create mode 100644 util/src/migrations/mariadb/1660260587556-CodeCleanup4.ts create mode 100644 util/src/migrations/postgres/1660257815436-CodeCleanup2.ts create mode 100644 util/src/migrations/postgres/1660258372154-CodeCleanup3.ts create mode 100644 util/src/migrations/postgres/1660260565996-CodeCleanup4.ts create mode 100644 util/src/migrations/sqlite/1660257576211-CodeCleanup1.ts create mode 100644 util/src/migrations/sqlite/1660257795259-CodeCleanup2.ts create mode 100644 util/src/migrations/sqlite/1660258351379-CodeCleanup3.ts create mode 100644 util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts create mode 100644 util/src/migrations/sqlite/1660260672914-CodeCleanup4.ts diff --git a/api/assets/schemas.json b/api/assets/schemas.json index c7aadd986..00819e7cc 100644 --- a/api/assets/schemas.json +++ b/api/assets/schemas.json @@ -1,4 +1,103 @@ { + "ts.server.TypingInstallerResponse": { + "type": "object", + "properties": { + "kind": { + "enum": [ + "action::invalidate", + "action::packageInstalled", + "action::set", + "event::beginInstallTypes", + "event::endInstallTypes", + "event::initializationFailed", + "event::typesRegistry" + ], + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "kind" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "ts.server.PackageInstalledResponse": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "action::packageInstalled" + ] + }, + "success": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "projectName": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "kind", + "message", + "projectName", + "success" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "ts.server.InitializationFailedResponse": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "event::initializationFailed" + ] + }, + "message": { + "type": "string" + }, + "stack": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "kind", + "message" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "ts.server.ProjectResponse": { + "type": "object", + "properties": { + "projectName": { + "type": "string" + }, + "kind": { + "enum": [ + "action::invalidate", + "action::packageInstalled", + "action::set", + "event::beginInstallTypes", + "event::endInstallTypes", + "event::initializationFailed", + "event::typesRegistry" + ], + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "kind", + "projectName" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, "MessageCreateSchema": { "type": "object", "properties": { @@ -225,183 +324,6 @@ } }, "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] } }, "$schema": "http://json-schema.org/draft-07/schema#" @@ -424,312 +346,9 @@ }, "additionalProperties": false, "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, "Record": { "type": "object", "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] } }, "$schema": "http://json-schema.org/draft-07/schema#" @@ -761,315 +380,6 @@ "login", "password" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "TotpSchema": { @@ -1099,315 +409,6 @@ "code", "ticket" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "RegisterSchema": { @@ -1444,6 +445,9 @@ }, "captcha_key": { "type": "string" + }, + "promotional_email_opt_in": { + "type": "boolean" } }, "additionalProperties": false, @@ -1451,315 +455,6 @@ "consent", "username" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "ChannelModifySchema": { @@ -1861,140 +556,6 @@ }, "additionalProperties": false, "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, "ChannelPermissionOverwriteType": { "enum": [ 0, @@ -2002,171 +563,6 @@ 2 ], "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] } }, "$schema": "http://json-schema.org/draft-07/schema#" @@ -2203,315 +599,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "MessageAcknowledgeSchema": { @@ -2525,315 +612,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "BulkDeleteSchema": { @@ -2850,315 +628,6 @@ "required": [ "messages" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "ChannelPermissionOverwriteSchema": { @@ -3185,140 +654,6 @@ "type" ], "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, "ChannelPermissionOverwriteType": { "enum": [ 0, @@ -3326,171 +661,6 @@ 2 ], "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] } }, "$schema": "http://json-schema.org/draft-07/schema#" @@ -3510,315 +680,6 @@ "after", "before" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "WebhookCreateSchema": { @@ -3837,315 +698,6 @@ "avatar", "name" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "GatewayBotResponse": { @@ -4188,315 +740,6 @@ "shards", "url" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "GatewayResponse": { @@ -4510,315 +753,6 @@ "required": [ "url" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "BanCreateSchema": { @@ -4832,315 +766,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "BanRegistrySchema": { @@ -5172,315 +797,6 @@ "id", "user_id" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "BanModeratorSchema": { @@ -5509,315 +825,6 @@ "id", "user_id" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "ChannelReorderSchema": { @@ -5843,315 +850,6 @@ "id" ] }, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "EmojiCreateSchema": { @@ -6180,315 +878,6 @@ "required": [ "image" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "EmojiModifySchema": { @@ -6505,315 +894,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "GuildCreateSchema": { @@ -6853,148 +933,6 @@ "name" ], "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, "ChannelModifySchema": { "type": "object", "properties": { @@ -7094,71 +1032,13 @@ }, "additionalProperties": false }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] + "ChannelPermissionOverwriteType": { + "enum": [ + 0, + 1, + 2 + ], + "type": "number" } }, "$schema": "http://json-schema.org/draft-07/schema#" @@ -7234,315 +1114,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "MemberChangeSchema": { @@ -7556,315 +1127,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "MemberNickChangeSchema": { @@ -7878,315 +1140,6 @@ "required": [ "nick" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "PruneSchema": { @@ -8200,315 +1153,6 @@ "required": [ "days" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "RoleModifySchema": { @@ -8540,315 +1184,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "RolePositionUpdateSchema": { @@ -8869,315 +1204,6 @@ "position" ] }, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "ModifyGuildStickerSchema": { @@ -9202,315 +1228,6 @@ "name", "tags" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "TemplateCreateSchema": { @@ -9527,315 +1244,6 @@ "required": [ "name" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "TemplateModifySchema": { @@ -9852,315 +1260,6 @@ "required": [ "name" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "VanityUrlSchema": { @@ -10173,315 +1272,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "VoiceStateUpdateSchema": { @@ -10514,315 +1304,6 @@ "required": [ "channel_id" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "GuildUpdateWelcomeScreenSchema": { @@ -10862,315 +1343,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "WidgetModifySchema": { @@ -11188,315 +1360,6 @@ "channel_id", "enabled" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "GuildTemplateCreateSchema": { @@ -11516,315 +1379,6 @@ "required": [ "name" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "UserProfileResponse": { @@ -11851,247 +1405,6 @@ "user" ], "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, "UserPublic": { "type": "object", "properties": { @@ -12190,315 +1503,6 @@ "required": [ "object" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "DmChannelCreateSchema": { @@ -12518,315 +1522,6 @@ "required": [ "recipients" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "UserModifySchema": { @@ -12837,6 +1532,9 @@ "maxLength": 100, "type": "string" }, + "discriminator": { + "type": "string" + }, "avatar": { "type": [ "null", @@ -12867,315 +1565,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "MfaCodesSchema": { @@ -13192,315 +1581,6 @@ "required": [ "password" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "TotpDisableSchema": { @@ -13514,347 +1594,11 @@ "required": [ "code" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "TotpEnableSchema": { "type": "object", "properties": { - "username": { - "minLength": 1, - "maxLength": 100, - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "avatar": { - "type": [ - "null", - "string" - ] - }, - "bio": { - "maxLength": 1024, - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": [ - "null", - "string" - ] - }, "password": { "type": "string" }, @@ -13869,315 +1613,6 @@ "required": [ "password" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "RelationshipPutSchema": { @@ -14194,315 +1629,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "RelationshipPostSchema": { @@ -14520,315 +1646,6 @@ "discriminator", "username" ], - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" }, "UserSettingsSchema": { @@ -15004,315 +1821,6 @@ } }, "additionalProperties": false, - "definitions": { - "Embed": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "type": { - "enum": [ - "article", - "gifv", - "image", - "link", - "rich", - "video" - ], - "type": "string" - }, - "description": { - "type": "string" - }, - "url": { - "type": "string" - }, - "timestamp": { - "type": "string", - "format": "date-time" - }, - "color": { - "type": "integer" - }, - "footer": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "text" - ] - }, - "image": { - "$ref": "#/definitions/EmbedImage" - }, - "thumbnail": { - "$ref": "#/definitions/EmbedImage" - }, - "video": { - "$ref": "#/definitions/EmbedImage" - }, - "provider": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "author": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "url": { - "type": "string" - }, - "icon_url": { - "type": "string" - }, - "proxy_icon_url": { - "type": "string" - } - }, - "additionalProperties": false - }, - "fields": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "inline": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "value" - ] - } - } - }, - "additionalProperties": false - }, - "EmbedImage": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "proxy_url": { - "type": "string" - }, - "height": { - "type": "integer" - }, - "width": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "Record": { - "type": "object", - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - }, - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, "$schema": "http://json-schema.org/draft-07/schema#" } } \ No newline at end of file diff --git a/api/client_test/index.html b/api/client_test/index.html index f58a4bca5..c35c14d2b 100644 --- a/api/client_test/index.html +++ b/api/client_test/index.html @@ -1,81 +1,84 @@ - - - - Discord Test Client - - - - - - - -
- - - - - - - - - + }, 1000) + + const settings = JSON.parse(localStorage.getItem("UserSettingsStore")); + if (settings && settings.locale.length <= 2) { + // fix client locale wrong and client not loading at all + settings.locale = "en-US"; + localStorage.setItem("UserSettingsStore", JSON.stringify(settings)); + } + + + + + + + + + + \ No newline at end of file diff --git a/api/src/routes/auth/register.ts b/api/src/routes/auth/register.ts index 2baef98e8..5a3d27e97 100644 --- a/api/src/routes/auth/register.ts +++ b/api/src/routes/auth/register.ts @@ -30,6 +30,7 @@ export interface RegisterSchema { date_of_birth?: Date; // "2000-04-03" gift_code_sku_id?: string; captcha_key?: string; + promotional_email_opt_in?: boolean; } router.post("/", route({ body: "RegisterSchema" }), async (req: Request, res: Response) => { diff --git a/api/src/routes/guilds/#guild_id/index.ts b/api/src/routes/guilds/#guild_id/index.ts index abece88e4..8d61f7537 100644 --- a/api/src/routes/guilds/#guild_id/index.ts +++ b/api/src/routes/guilds/#guild_id/index.ts @@ -21,6 +21,7 @@ export interface GuildUpdateSchema extends Omit { diff --git a/api/src/routes/users/@me/settings.ts b/api/src/routes/users/@me/settings.ts index 70f8a2187..d832575fa 100644 --- a/api/src/routes/users/@me/settings.ts +++ b/api/src/routes/users/@me/settings.ts @@ -10,8 +10,8 @@ router.patch("/", route({ body: "UserSettingsSchema" }), async (req: Request, re const body = req.body as UserSettings; if (body.locale === "en") body.locale = "en-US"; // fix discord client crash on unkown locale - const user = await User.findOneOrFail({ where: { id: req.user_id, bot: false } }); - user.settings = { ...user.settings, ...body }; + const user = await User.findOneOrFail({ where: { id: req.user_id, bot: false }, relations: ["settings"] }); + user.settings = { ...user.settings, ...body } as UserSettings; await user.save(); res.sendStatus(204); diff --git a/bundle/scripts/db_migrations.sh b/bundle/scripts/db_migrations.sh index b0e1131c1..83f15a2ba 100755 --- a/bundle/scripts/db_migrations.sh +++ b/bundle/scripts/db_migrations.sh @@ -1,5 +1,13 @@ #!/bin/sh -read -p "Enter migration filename: " FILENAME + +if [ ! -z "$1" ] +then + FILENAME="$1" + echo "Using filename: $FILENAME" +else + read -p "Enter migration filename: " FILENAME +fi + [ -f ".env" ] && ( mv .env .env.tmp source .env.tmp @@ -8,8 +16,8 @@ read -p "Enter migration filename: " FILENAME make_migration() { echo "Creating migrations for $2" mkdir "../util/src/migrations/$2" - npm run build clean logerrors pretty-errors - THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle +# npm run build clean logerrors pretty-errors +# THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle THREADS=1 DATABASE="$1" DB_MIGRATE=a npx typeorm-ts-node-commonjs migration:generate "../util/src/migrations/$2/$FILENAME" -d ../util/src/util/Database.ts -p npm run build clean logerrors pretty-errors THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle diff --git a/bundle/scripts/gen_index.js b/bundle/scripts/gen_index.js new file mode 100644 index 000000000..71c64a9f7 --- /dev/null +++ b/bundle/scripts/gen_index.js @@ -0,0 +1,34 @@ +const path = require("path"); +const fs = require("fs"); +const { execIn, getLines, parts } = require('./utils'); + +if (!process.argv[2] || !fs.existsSync(process.argv[2])) { + console.log("Please pass a directory that exists!"); + process.exit(1); +} +console.log(`// ${process.argv[2]}/index.ts`) +const recurse = process.argv.includes("--recursive") + +const files = fs.readdirSync(process.argv[2]).filter(x => x.endsWith('.ts') && x != 'index.ts'); + +let output = ''; + +files.forEach(x => output += `export * from "./${x.replaceAll('.ts','')}";\n`) + +const dirs = fs.readdirSync(process.argv[2]).filter(x => { + try { + fs.readdirSync(path.join(process.argv[2], x)); + return true; + } catch (e) { + return false; + } +}); +dirs.forEach(x => { + output += `export * from "./${x}/index";\n` +}) +console.log(output); +fs.writeFileSync(path.join(process.argv[2], "index.ts"), output) + +dirs.forEach(x => { + if(recurse) console.log(execIn([process.argv[0], process.argv[1], `"${path.join(process.argv[2], x)}"`, "--recursive"].join(' '), process.cwd())) +}) \ No newline at end of file diff --git a/bundle/scripts/update_schemas.js b/bundle/scripts/update_schemas.js new file mode 100644 index 000000000..516b95920 --- /dev/null +++ b/bundle/scripts/update_schemas.js @@ -0,0 +1,9 @@ +const path = require("path"); +const fs = require("fs"); +const { env } = require("process"); +const { execSync } = require("child_process"); +const { argv, stdout, exit } = require("process"); + +const { execIn, getLines, parts } = require("./utils"); + +execIn("node scripts/generate_schema.js", path.join("..", "..", "api")); \ No newline at end of file diff --git a/bundle/scripts/utils.js b/bundle/scripts/utils.js index bf960532f..f4b1ad7f6 100644 --- a/bundle/scripts/utils.js +++ b/bundle/scripts/utils.js @@ -28,13 +28,14 @@ function copyRecursiveSync(src, dest) { } } -function execIn(cmd, workdir) { +function execIn(cmd, workdir, opts) { try { return execSync(cmd, { cwd: workdir, shell: true, env: process.env, encoding: "utf-8", + ...opts }); } catch (error) { return error.stdout; diff --git a/gateway/src/opcodes/Identify.ts b/gateway/src/opcodes/Identify.ts index 03fff7967..4e2755921 100644 --- a/gateway/src/opcodes/Identify.ts +++ b/gateway/src/opcodes/Identify.ts @@ -18,6 +18,7 @@ import { PrivateSessionProjection, MemberPrivateProjection, PresenceUpdateEvent, + UserSettings, } from "@fosscord/util"; import { Send } from "../util/Send"; import { CLOSECODES, OPCODES } from "../util/Constants"; @@ -56,7 +57,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { await Promise.all([ User.findOneOrFail({ where: { id: this.user_id }, - relations: ["relationships", "relationships.to"], + relations: ["relationships", "relationships.to", "settings"], select: [...PrivateUserProjection, "relationships"], }), ReadState.find({ where: { user_id: this.user_id } }), @@ -101,6 +102,10 @@ export async function onIdentify(this: WebSocket, data: Payload) { ]); if (!user) return this.close(CLOSECODES.Authentication_failed); + if (!user.settings) { + user.settings = new UserSettings(); + await user.settings.save(); + } if (!identify.intents) identify.intents = BigInt("0x6ffffffff"); this.intents = new Intents(identify.intents); diff --git a/gateway/src/opcodes/VoiceStateUpdate.ts b/gateway/src/opcodes/VoiceStateUpdate.ts index 8c430d568..845a75c08 100644 --- a/gateway/src/opcodes/VoiceStateUpdate.ts +++ b/gateway/src/opcodes/VoiceStateUpdate.ts @@ -20,6 +20,11 @@ export async function onVoiceStateUpdate(this: WebSocket, data: Payload) { check.call(this, VoiceStateUpdateSchema, data.d); const body = data.d as VoiceStateUpdateSchema; + if(body.guild_id == null) { + console.log(`[Gateway] VoiceStateUpdate called with guild_id == null by user ${this.user_id}!`); + return; + } + let voiceState: VoiceState; try { voiceState = await VoiceState.findOneOrFail({ diff --git a/util/src/config/types/DefaultsConfiguration.ts b/util/src/config/types/DefaultsConfiguration.ts index c3171a014..9b02a5901 100644 --- a/util/src/config/types/DefaultsConfiguration.ts +++ b/util/src/config/types/DefaultsConfiguration.ts @@ -1,5 +1,6 @@ -import { GuildDefaults } from "."; +import { GuildDefaults, UserDefaults } from "."; export class DefaultsConfiguration { guild: GuildDefaults = new GuildDefaults(); + user: UserDefaults = new UserDefaults(); } \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/defaults/UserDefaults.ts b/util/src/config/types/subconfigurations/defaults/UserDefaults.ts new file mode 100644 index 000000000..4481c0119 --- /dev/null +++ b/util/src/config/types/subconfigurations/defaults/UserDefaults.ts @@ -0,0 +1,5 @@ +export class UserDefaults { + premium: boolean = false; + premium_type: number = 2; + verified: boolean = true; +} \ No newline at end of file diff --git a/util/src/config/types/subconfigurations/defaults/index.ts b/util/src/config/types/subconfigurations/defaults/index.ts index f40c5cd2f..50258d1c5 100644 --- a/util/src/config/types/subconfigurations/defaults/index.ts +++ b/util/src/config/types/subconfigurations/defaults/index.ts @@ -1 +1,2 @@ export * from "./GuildDefaults"; +export * from "./UserDefaults"; diff --git a/util/src/entities/Guild.ts b/util/src/entities/Guild.ts index 77a04350d..d146e5776 100644 --- a/util/src/entities/Guild.ts +++ b/util/src/entities/Guild.ts @@ -53,7 +53,7 @@ export class Guild extends BaseClass { afk_channel?: Channel; @Column({ nullable: true }) - afk_timeout?: number; + afk_timeout?: number = Config.get().defaults.guild.afkTimeout; // * commented out -> use owner instead // application id of the guild creator if it is bot-created @@ -71,7 +71,7 @@ export class Guild extends BaseClass { banner?: string; @Column({ nullable: true }) - default_message_notifications?: number; + default_message_notifications?: number = Config.get().defaults.guild.defaultMessageNotifications; @Column({ nullable: true }) description?: string; @@ -80,7 +80,7 @@ export class Guild extends BaseClass { discovery_splash?: string; @Column({ nullable: true }) - explicit_content_filter?: number; + explicit_content_filter?: number = Config.get().defaults.guild.explicitContentFilter; @Column({ type: "simple-array" }) features: string[]; //TODO use enum @@ -96,19 +96,19 @@ export class Guild extends BaseClass { large?: boolean; @Column({ nullable: true }) - max_members?: number; // e.g. default 100.000 + max_members?: number = Config.get().limits.guild.maxMembers; // e.g. default 100.000 @Column({ nullable: true }) - max_presences?: number; + max_presences?: number = Config.get().defaults.guild.maxPresences; @Column({ nullable: true }) - max_video_channel_users?: number; // ? default: 25, is this max 25 streaming or watching + max_video_channel_users?: number = Config.get().defaults.guild.maxVideoChannelUsers; // ? default: 25, is this max 25 streaming or watching @Column({ nullable: true }) - member_count?: number; + member_count?: number = 0; @Column({ nullable: true }) - presence_count?: number; // users online + presence_count?: number = 0; // users online @OneToMany(() => Member, (member: Member) => member.guild, { cascade: true, @@ -278,6 +278,10 @@ export class Guild extends BaseClass { // only for developer portal permissions?: number; + //new guild settings, 11/08/2022: + @Column({ nullable: true }) + premium_progress_bar_enabled: boolean = false; + static async createGuild(body: { name?: string; icon?: string | null; diff --git a/util/src/entities/User.ts b/util/src/entities/User.ts index a9f00b0d1..6edcda970 100644 --- a/util/src/entities/User.ts +++ b/util/src/entities/User.ts @@ -1,11 +1,11 @@ -import { Column, Entity, FindOneOptions, FindOptionsSelectByString, JoinColumn, OneToMany } from "typeorm"; +import { Column, Entity, FindOneOptions, FindOptionsSelectByString, JoinColumn, OneToMany, OneToOne } from "typeorm"; import { OrmUtils } from "../util/imports/OrmUtils"; import { BaseClass } from "./BaseClass"; import { BitField } from "../util/BitField"; import { Relationship } from "./Relationship"; import { ConnectedAccount } from "./ConnectedAccount"; import { Config, FieldErrors, Snowflake, trimSpecial } from ".."; -import { Member, Session } from "."; +import { Member, Session, UserSettings } from "."; export enum PublicUserEnum { username, @@ -83,28 +83,28 @@ export class User extends BaseClass { phone?: string; // phone number of the user @Column({ select: false }) - desktop: boolean; // if the user has desktop app installed + desktop: boolean = false; // if the user has desktop app installed @Column({ select: false }) - mobile: boolean; // if the user has mobile app installed + mobile: boolean = false; // if the user has mobile app installed @Column() - premium: boolean; // if user bought individual premium + premium: boolean = Config.get().defaults.user.premium; // if user bought individual premium @Column() - premium_type: number; // individual premium level + premium_type: number = Config.get().defaults.user.premium_type; // individual premium level @Column() - bot: boolean; // if user is bot + bot: boolean = false; // if user is bot @Column() bio: string; // short description of the user (max 190 chars -> should be configurable) @Column() - system: boolean; // shouldn't be used, the api sends this field type true, if the generated message comes from a system generated author + system: boolean = false; // shouldn't be used, the api sends this field type true, if the generated message comes from a system generated author @Column({ select: false }) - nsfw_allowed: boolean; // if the user can do age-restricted actions (NSFW channels/guilds/commands) + nsfw_allowed: boolean = true; // if the user can do age-restricted actions (NSFW channels/guilds/commands) // TODO: depending on age @Column({ select: false }) mfa_enabled: boolean; // if multi factor authentication is enabled @@ -116,31 +116,31 @@ export class User extends BaseClass { totp_last_ticket?: string; @Column() - created_at: Date; // registration date + created_at: Date = new Date(); // registration date @Column({ nullable: true }) - premium_since: Date; // premium date + premium_since: Date = new Date(); // premium date @Column({ select: false }) - verified: boolean; // if the user is offically verified + verified: boolean = Config.get().defaults.user.verified; // if the user is offically verified @Column() - disabled: boolean; // if the account is disabled + disabled: boolean = false; // if the account is disabled @Column() - deleted: boolean; // if the user was deleted + deleted: boolean = false; // if the user was deleted @Column({ nullable: true, select: false }) email?: string; // email of the user @Column() - flags: string; // UserFlags + flags: string = "0"; // UserFlags // TODO: generate @Column() - public_flags: number; + public_flags: number = 0; @Column({ type: "bigint" }) - rights: string; // Rights + rights: string = Config.get().register.defaultRights; // Rights @OneToMany(() => Session, (session: Session) => session.user) sessions: Session[]; @@ -166,17 +166,28 @@ export class User extends BaseClass { }; @Column({ type: "simple-array", select: false }) - fingerprints: string[]; // array of fingerprints -> used to prevent multiple accounts + fingerprints: string[] = []; // array of fingerprints -> used to prevent multiple accounts - @Column({ type: "simple-json", select: false }) + + @OneToOne(()=> UserSettings, { + cascade: true, + orphanedRowAction: "delete", + eager: false + }) + @JoinColumn() settings: UserSettings; // workaround to prevent fossord-unaware clients from deleting settings not used by them @Column({ type: "simple-json", select: false }) - extended_settings: string; + extended_settings: string = "{}"; @Column({ type: "simple-json" }) - notes: { [key: string]: string }; //key is ID of user + notes: { [key: string]: string } = {}; //key is ID of user + + async save(): Promise { + await this.settings.save(); + return this.save(); + } toPublicUser() { const user: any = {}; @@ -256,40 +267,20 @@ export class User extends BaseClass { const language = req?.language === "en" ? "en-US" : req?.language || "en-US"; const user = OrmUtils.mergeDeep(new User(), { - created_at: new Date(), + //required: username: username, discriminator, id: Snowflake.generate(), - bot: false, - system: false, - premium_since: new Date(), - desktop: false, - mobile: false, - premium: true, - premium_type: 2, - bio: "", - mfa_enabled: false, - totp_secret: "", - totp_backup_codes: [], - verified: true, - disabled: false, - deleted: false, email: email, - rights: Config.get().register.defaultRights, // TODO: grant rights correctly, as 0 actually stands for no rights at all - nsfw_allowed: true, // TODO: depending on age - public_flags: "0", - flags: "0", // TODO: generate data: { hash: password, valid_tokens_since: new Date(), }, - settings: { ...defaultSettings, locale: language }, - extended_settings: {}, - fingerprints: [], - notes: {}, + settings: { ...new UserSettings(), locale: language } }); await user.save(); + await user.settings.save(); setImmediate(async () => { if (Config.get().guild.autoJoin.enabled) { @@ -303,85 +294,6 @@ export class User extends BaseClass { } } -export const defaultSettings: UserSettings = { - afk_timeout: 3600, - allow_accessibility_detection: true, - animate_emoji: true, - animate_stickers: 0, - contact_sync_enabled: false, - convert_emoticons: false, - custom_status: null, - default_guilds_restricted: false, - detect_platform_accounts: false, - developer_mode: true, - disable_games_tab: true, - enable_tts_command: false, - explicit_content_filter: 0, - friend_source_flags: { all: true }, - gateway_connected: false, - gif_auto_play: true, - guild_folders: [], - guild_positions: [], - inline_attachment_media: true, - inline_embed_media: true, - locale: "en-US", - message_display_compact: false, - native_phone_integration_enabled: true, - render_embeds: true, - render_reactions: true, - restricted_guilds: [], - show_current_game: true, - status: "online", - stream_notifications_enabled: false, - theme: "dark", - timezone_offset: 0, // TODO: timezone from request -}; - -export interface UserSettings { - afk_timeout: number; - allow_accessibility_detection: boolean; - animate_emoji: boolean; - animate_stickers: number; - contact_sync_enabled: boolean; - convert_emoticons: boolean; - custom_status: { - emoji_id?: string; - emoji_name?: string; - expires_at?: number; - text?: string; - } | null; - default_guilds_restricted: boolean; - detect_platform_accounts: boolean; - developer_mode: boolean; - disable_games_tab: boolean; - enable_tts_command: boolean; - explicit_content_filter: number; - friend_source_flags: { all: boolean }; - gateway_connected: boolean; - gif_auto_play: boolean; - // every top guild is displayed as a "folder" - guild_folders: { - color: number; - guild_ids: string[]; - id: number; - name: string; - }[]; - guild_positions: string[]; // guild ids ordered by position - inline_attachment_media: boolean; - inline_embed_media: boolean; - locale: string; // en_US - message_display_compact: boolean; - native_phone_integration_enabled: boolean; - render_embeds: boolean; - render_reactions: boolean; - restricted_guilds: string[]; - show_current_game: boolean; - status: "online" | "offline" | "dnd" | "idle" | "invisible"; - stream_notifications_enabled: boolean; - theme: "dark" | "white"; // dark - timezone_offset: number; // e.g -60 -} - export const CUSTOM_USER_FLAG_OFFSET = BigInt(1) << BigInt(32); export class UserFlags extends BitField { diff --git a/util/src/entities/UserSettings.ts b/util/src/entities/UserSettings.ts new file mode 100644 index 000000000..ef6f95afa --- /dev/null +++ b/util/src/entities/UserSettings.ts @@ -0,0 +1,119 @@ +import { Column, Entity, JoinColumn } from "typeorm"; +import { BaseClassWithoutId, PrimaryIdColumn } from "."; + +@Entity("user_settings") +export class UserSettings extends BaseClassWithoutId { + @PrimaryIdColumn() + id: string; + + @Column({ nullable: true }) + afk_timeout: number = 3600; + + @Column({ nullable: true }) + allow_accessibility_detection: boolean = true; + + @Column({ nullable: true }) + animate_emoji: boolean = true; + + @Column({ nullable: true }) + animate_stickers: number = 0; + + @Column({ nullable: true }) + contact_sync_enabled: boolean = false; + + @Column({ nullable: true }) + convert_emoticons: boolean = false; + + @Column({ nullable: true, type: "simple-json" }) + custom_status: CustomStatus | null = null; + + @Column({ nullable: true }) + default_guilds_restricted: boolean = false; + + @Column({ nullable: true }) + detect_platform_accounts: boolean = false; + + @Column({ nullable: true }) + developer_mode: boolean = true; + + @Column({ nullable: true }) + disable_games_tab: boolean = true; + + @Column({ nullable: true }) + enable_tts_command: boolean = false; + + @Column({ nullable: true }) + explicit_content_filter: number = 0; + + @Column({ nullable: true, type: "simple-json" }) + friend_source_flags: FriendSourceFlags = { all: true }; + + @Column({ nullable: true }) + gateway_connected: boolean = false; + + @Column({ nullable: true }) + gif_auto_play: boolean = false; + + @Column({ nullable: true, type: "simple-json" }) + guild_folders: GuildFolder[] = []; // every top guild is displayed as a "folder" + + @Column({ nullable: true, type: "simple-json" }) + guild_positions: string[] = []; // guild ids ordered by position + + @Column({ nullable: true }) + inline_attachment_media: boolean = true; + + @Column({ nullable: true }) + inline_embed_media: boolean = true; + + @Column({ nullable: true }) + locale: string = "en-US"; // en_US + + @Column({ nullable: true }) + message_display_compact: boolean = false; + + @Column({ nullable: true }) + native_phone_integration_enabled: boolean = true; + + @Column({ nullable: true }) + render_embeds: boolean = true; + + @Column({ nullable: true }) + render_reactions: boolean = true; + + @Column({ nullable: true, type: "simple-json" }) + restricted_guilds: string[] = []; + + @Column({ nullable: true }) + show_current_game: boolean = true; + + @Column({ nullable: true }) + status: "online" | "offline" | "dnd" | "idle" | "invisible" = "online"; + + @Column({ nullable: true }) + stream_notifications_enabled: boolean = false; + + @Column({ nullable: true }) + theme: "dark" | "white" = "dark"; // dark + + @Column({ nullable: true }) + timezone_offset: number = 0; // e.g -60 +} + +interface CustomStatus { + emoji_id?: string; + emoji_name?: string; + expires_at?: number; + text?: string; +} + +interface GuildFolder { + color: number; + guild_ids: string[]; + id: number; + name: string; +} + +interface FriendSourceFlags { + all: boolean +} \ No newline at end of file diff --git a/util/src/entities/index.ts b/util/src/entities/index.ts index c439a4b76..c6f12022b 100644 --- a/util/src/entities/index.ts +++ b/util/src/entities/index.ts @@ -30,3 +30,4 @@ export * from "./Webhook"; export * from "./ClientRelease"; export * from "./BackupCodes"; export * from "./Note"; +export * from "./UserSettings"; diff --git a/util/src/interfaces/Event.ts b/util/src/interfaces/Event.ts index f3391c4f7..be66c62f0 100644 --- a/util/src/interfaces/Event.ts +++ b/util/src/interfaces/Event.ts @@ -1,4 +1,4 @@ -import { PublicUser, User, UserSettings } from "../entities/User"; +import { PublicUser, User } from "../entities/User"; import { Channel } from "../entities/Channel"; import { Guild } from "../entities/Guild"; import { Member, PublicMember, UserGuildSettings } from "../entities/Member"; @@ -12,7 +12,7 @@ import { Interaction } from "./Interaction"; import { ConnectedAccount } from "../entities/ConnectedAccount"; import { Relationship, RelationshipType } from "../entities/Relationship"; import { Presence } from "./Presence"; -import { Sticker } from ".."; +import { Sticker, UserSettings } from ".."; import { Activity, Status } from "."; export interface Event { diff --git a/util/src/migrations/mariadb/1660258393551-CodeCleanup3.ts b/util/src/migrations/mariadb/1660258393551-CodeCleanup3.ts new file mode 100644 index 000000000..87d075e44 --- /dev/null +++ b/util/src/migrations/mariadb/1660258393551-CodeCleanup3.ts @@ -0,0 +1,232 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup31660258393551 implements MigrationInterface { + name = 'CodeCleanup31660258393551' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`applications\` DROP FOREIGN KEY \`FK_2ce5a55796fe4c2f77ece57a647\` + `); + await queryRunner.query(` + DROP INDEX \`REL_2ce5a55796fe4c2f77ece57a64\` ON \`applications\` + `); + await queryRunner.query(` + CREATE TABLE \`user_settings\` ( + \`id\` varchar(255) NOT NULL, + \`afk_timeout\` int NULL, + \`allow_accessibility_detection\` tinyint NULL, + \`animate_emoji\` tinyint NULL, + \`animate_stickers\` int NULL, + \`contact_sync_enabled\` tinyint NULL, + \`convert_emoticons\` tinyint NULL, + \`custom_status\` text NULL, + \`default_guilds_restricted\` tinyint NULL, + \`detect_platform_accounts\` tinyint NULL, + \`developer_mode\` tinyint NULL, + \`disable_games_tab\` tinyint NULL, + \`enable_tts_command\` tinyint NULL, + \`explicit_content_filter\` int NULL, + \`friend_source_flags\` text NULL, + \`gateway_connected\` tinyint NULL, + \`gif_auto_play\` tinyint NULL, + \`guild_folders\` text NULL, + \`guild_positions\` text NULL, + \`inline_attachment_media\` tinyint NULL, + \`inline_embed_media\` tinyint NULL, + \`locale\` varchar(255) NULL, + \`message_display_compact\` tinyint NULL, + \`native_phone_integration_enabled\` tinyint NULL, + \`render_embeds\` tinyint NULL, + \`render_reactions\` tinyint NULL, + \`restricted_guilds\` text NULL, + \`show_current_game\` tinyint NULL, + \`status\` varchar(255) NULL, + \`stream_notifications_enabled\` tinyint NULL, + \`theme\` varchar(255) NULL, + \`timezone_offset\` int NULL, + PRIMARY KEY (\`id\`) + ) ENGINE = InnoDB + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP COLUMN \`settings\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`type\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`hook\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`redirect_uris\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`rpc_application_state\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`store_application_state\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`verification_state\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`interactions_endpoint_url\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`integration_public\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`integration_require_code_grant\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`discoverability_state\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`discovery_eligibility_flags\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`tags\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`install_params\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`bot_user_id\` + `); + await queryRunner.query(` + ALTER TABLE \`guilds\` + ADD \`premium_progress_bar_enabled\` tinyint NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`rpc_origins\` text NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`primary_sku_id\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`slug\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`guild_id\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` CHANGE \`description\` \`description\` varchar(255) NOT NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`flags\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`flags\` varchar(255) NOT NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD CONSTRAINT \`FK_e5bf78cdbbe9ba91062d74c5aba\` FOREIGN KEY (\`guild_id\`) REFERENCES \`guilds\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`applications\` DROP FOREIGN KEY \`FK_e5bf78cdbbe9ba91062d74c5aba\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`flags\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`flags\` int NOT NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` CHANGE \`description\` \`description\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`guild_id\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`slug\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`primary_sku_id\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` DROP COLUMN \`rpc_origins\` + `); + await queryRunner.query(` + ALTER TABLE \`guilds\` DROP COLUMN \`premium_progress_bar_enabled\` + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`bot_user_id\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`install_params\` text NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`tags\` text NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`discovery_eligibility_flags\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`discoverability_state\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`integration_require_code_grant\` tinyint NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`integration_public\` tinyint NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`interactions_endpoint_url\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`verification_state\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`store_application_state\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`rpc_application_state\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`redirect_uris\` text NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`hook\` tinyint NOT NULL + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD \`type\` text NULL + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD \`settings\` text NOT NULL + `); + await queryRunner.query(` + DROP TABLE \`user_settings\` + `); + await queryRunner.query(` + CREATE UNIQUE INDEX \`REL_2ce5a55796fe4c2f77ece57a64\` ON \`applications\` (\`bot_user_id\`) + `); + await queryRunner.query(` + ALTER TABLE \`applications\` + ADD CONSTRAINT \`FK_2ce5a55796fe4c2f77ece57a647\` FOREIGN KEY (\`bot_user_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION + `); + } + +} diff --git a/util/src/migrations/mariadb/1660260587556-CodeCleanup4.ts b/util/src/migrations/mariadb/1660260587556-CodeCleanup4.ts new file mode 100644 index 000000000..98da67dbf --- /dev/null +++ b/util/src/migrations/mariadb/1660260587556-CodeCleanup4.ts @@ -0,0 +1,39 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup41660260587556 implements MigrationInterface { + name = 'CodeCleanup41660260587556' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`users\` + ADD \`settingsId\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` (\`settingsId\`) + `); + await queryRunner.query(` + CREATE UNIQUE INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD CONSTRAINT \`FK_76ba283779c8441fd5ff819c8cf\` FOREIGN KEY (\`settingsId\`) REFERENCES \`user_settings\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`users\` DROP FOREIGN KEY \`FK_76ba283779c8441fd5ff819c8cf\` + `); + await queryRunner.query(` + DROP INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP COLUMN \`settingsId\` + `); + } + +} diff --git a/util/src/migrations/postgres/1660257815436-CodeCleanup2.ts b/util/src/migrations/postgres/1660257815436-CodeCleanup2.ts new file mode 100644 index 000000000..511c2f5a4 --- /dev/null +++ b/util/src/migrations/postgres/1660257815436-CodeCleanup2.ts @@ -0,0 +1,59 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup21660257815436 implements MigrationInterface { + name = 'CodeCleanup21660257815436' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "user_settings" ( + "id" character varying NOT NULL, + "afk_timeout" integer, + "allow_accessibility_detection" boolean, + "animate_emoji" boolean, + "animate_stickers" integer, + "contact_sync_enabled" boolean, + "convert_emoticons" boolean, + "custom_status" text, + "default_guilds_restricted" boolean, + "detect_platform_accounts" boolean, + "developer_mode" boolean, + "disable_games_tab" boolean, + "enable_tts_command" boolean, + "explicit_content_filter" integer, + "friend_source_flags" text, + "gateway_connected" boolean, + "gif_auto_play" boolean, + "guild_folders" text, + "guild_positions" text, + "inline_attachment_media" boolean, + "inline_embed_media" boolean, + "locale" character varying, + "message_display_compact" boolean, + "native_phone_integration_enabled" boolean, + "render_embeds" boolean, + "render_reactions" boolean, + "restricted_guilds" text, + "show_current_game" boolean, + "status" character varying, + "stream_notifications_enabled" boolean, + "theme" character varying, + "timezone_offset" integer, + CONSTRAINT "PK_00f004f5922a0744d174530d639" PRIMARY KEY ("id") + ) + `); + await queryRunner.query(` + ALTER TABLE "guilds" + ADD "premium_progress_bar_enabled" boolean + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "guilds" DROP COLUMN "premium_progress_bar_enabled" + `); + await queryRunner.query(` + DROP TABLE "user_settings" + `); + } + +} diff --git a/util/src/migrations/postgres/1660258372154-CodeCleanup3.ts b/util/src/migrations/postgres/1660258372154-CodeCleanup3.ts new file mode 100644 index 000000000..e2823a54c --- /dev/null +++ b/util/src/migrations/postgres/1660258372154-CodeCleanup3.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup31660258372154 implements MigrationInterface { + name = 'CodeCleanup31660258372154' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" DROP COLUMN "settings" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + ADD "settings" text NOT NULL + `); + } + +} diff --git a/util/src/migrations/postgres/1660260565996-CodeCleanup4.ts b/util/src/migrations/postgres/1660260565996-CodeCleanup4.ts new file mode 100644 index 000000000..0aaf7197c --- /dev/null +++ b/util/src/migrations/postgres/1660260565996-CodeCleanup4.ts @@ -0,0 +1,33 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup41660260565996 implements MigrationInterface { + name = 'CodeCleanup41660260565996' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + ADD "settingsId" character varying + `); + await queryRunner.query(` + ALTER TABLE "users" + ADD CONSTRAINT "UQ_76ba283779c8441fd5ff819c8cf" UNIQUE ("settingsId") + `); + await queryRunner.query(` + ALTER TABLE "users" + ADD CONSTRAINT "FK_76ba283779c8441fd5ff819c8cf" FOREIGN KEY ("settingsId") REFERENCES "user_settings"("id") ON DELETE NO ACTION ON UPDATE NO ACTION + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" DROP CONSTRAINT "FK_76ba283779c8441fd5ff819c8cf" + `); + await queryRunner.query(` + ALTER TABLE "users" DROP CONSTRAINT "UQ_76ba283779c8441fd5ff819c8cf" + `); + await queryRunner.query(` + ALTER TABLE "users" DROP COLUMN "settingsId" + `); + } + +} diff --git a/util/src/migrations/sqlite/1660257576211-CodeCleanup1.ts b/util/src/migrations/sqlite/1660257576211-CodeCleanup1.ts new file mode 100644 index 000000000..5a61db0d0 --- /dev/null +++ b/util/src/migrations/sqlite/1660257576211-CodeCleanup1.ts @@ -0,0 +1,326 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup11660257576211 implements MigrationInterface { + name = 'CodeCleanup11660257576211' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "user_settings" ( + "id" varchar PRIMARY KEY NOT NULL, + "afk_timeout" integer, + "allow_accessibility_detection" boolean, + "animate_emoji" boolean, + "animate_stickers" integer, + "contact_sync_enabled" boolean, + "convert_emoticons" boolean, + "custom_status" text, + "default_guilds_restricted" boolean, + "detect_platform_accounts" boolean, + "developer_mode" boolean, + "disable_games_tab" boolean, + "enable_tts_command" boolean, + "explicit_content_filter" integer, + "friend_source_flags" text, + "gateway_connected" boolean, + "gif_auto_play" boolean, + "guild_folders" text, + "guild_positions" text, + "inline_attachment_media" boolean, + "inline_embed_media" boolean, + "locale" varchar, + "message_display_compact" boolean, + "native_phone_integration_enabled" boolean, + "render_embeds" boolean, + "render_reactions" boolean, + "restricted_guilds" text, + "show_current_game" boolean, + "status" varchar, + "stream_notifications_enabled" boolean, + "theme" varchar, + "timezone_offset" integer + ) + `); + await queryRunner.query(` + CREATE TABLE "temporary_guilds" ( + "id" varchar PRIMARY KEY NOT NULL, + "afk_channel_id" varchar, + "afk_timeout" integer, + "banner" varchar, + "default_message_notifications" integer, + "description" varchar, + "discovery_splash" varchar, + "explicit_content_filter" integer, + "features" text NOT NULL, + "primary_category_id" integer, + "icon" varchar, + "large" boolean, + "max_members" integer, + "max_presences" integer, + "max_video_channel_users" integer, + "member_count" integer, + "presence_count" integer, + "template_id" varchar, + "mfa_level" integer, + "name" varchar NOT NULL, + "owner_id" varchar, + "preferred_locale" varchar, + "premium_subscription_count" integer, + "premium_tier" integer, + "public_updates_channel_id" varchar, + "rules_channel_id" varchar, + "region" varchar, + "splash" varchar, + "system_channel_id" varchar, + "system_channel_flags" integer, + "unavailable" boolean, + "verification_level" integer, + "welcome_screen" text NOT NULL, + "widget_channel_id" varchar, + "widget_enabled" boolean, + "nsfw_level" integer, + "nsfw" boolean, + "parent" varchar, + "premium_progress_bar_enabled" boolean NOT NULL, + CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY ("widget_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY ("system_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY ("rules_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY ("public_updates_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY ("template_id") REFERENCES "templates" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY ("afk_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_guilds"( + "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent" + ) + SELECT "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent" + FROM "guilds" + `); + await queryRunner.query(` + DROP TABLE "guilds" + `); + await queryRunner.query(` + ALTER TABLE "temporary_guilds" + RENAME TO "guilds" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "guilds" + RENAME TO "temporary_guilds" + `); + await queryRunner.query(` + CREATE TABLE "guilds" ( + "id" varchar PRIMARY KEY NOT NULL, + "afk_channel_id" varchar, + "afk_timeout" integer, + "banner" varchar, + "default_message_notifications" integer, + "description" varchar, + "discovery_splash" varchar, + "explicit_content_filter" integer, + "features" text NOT NULL, + "primary_category_id" integer, + "icon" varchar, + "large" boolean, + "max_members" integer, + "max_presences" integer, + "max_video_channel_users" integer, + "member_count" integer, + "presence_count" integer, + "template_id" varchar, + "mfa_level" integer, + "name" varchar NOT NULL, + "owner_id" varchar, + "preferred_locale" varchar, + "premium_subscription_count" integer, + "premium_tier" integer, + "public_updates_channel_id" varchar, + "rules_channel_id" varchar, + "region" varchar, + "splash" varchar, + "system_channel_id" varchar, + "system_channel_flags" integer, + "unavailable" boolean, + "verification_level" integer, + "welcome_screen" text NOT NULL, + "widget_channel_id" varchar, + "widget_enabled" boolean, + "nsfw_level" integer, + "nsfw" boolean, + "parent" varchar, + CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY ("widget_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY ("system_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY ("rules_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY ("public_updates_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY ("template_id") REFERENCES "templates" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY ("afk_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "guilds"( + "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent" + ) + SELECT "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent" + FROM "temporary_guilds" + `); + await queryRunner.query(` + DROP TABLE "temporary_guilds" + `); + await queryRunner.query(` + DROP TABLE "user_settings" + `); + } + +} diff --git a/util/src/migrations/sqlite/1660257795259-CodeCleanup2.ts b/util/src/migrations/sqlite/1660257795259-CodeCleanup2.ts new file mode 100644 index 000000000..536982565 --- /dev/null +++ b/util/src/migrations/sqlite/1660257795259-CodeCleanup2.ts @@ -0,0 +1,572 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup21660257795259 implements MigrationInterface { + name = 'CodeCleanup21660257795259' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "temporary_guilds" ( + "id" varchar PRIMARY KEY NOT NULL, + "afk_channel_id" varchar, + "afk_timeout" integer, + "banner" varchar, + "default_message_notifications" integer, + "description" varchar, + "discovery_splash" varchar, + "explicit_content_filter" integer, + "features" text NOT NULL, + "primary_category_id" integer, + "icon" varchar, + "large" boolean, + "max_members" integer, + "max_presences" integer, + "max_video_channel_users" integer, + "member_count" integer, + "presence_count" integer, + "template_id" varchar, + "mfa_level" integer, + "name" varchar NOT NULL, + "owner_id" varchar, + "preferred_locale" varchar, + "premium_subscription_count" integer, + "premium_tier" integer, + "public_updates_channel_id" varchar, + "rules_channel_id" varchar, + "region" varchar, + "splash" varchar, + "system_channel_id" varchar, + "system_channel_flags" integer, + "unavailable" boolean, + "verification_level" integer, + "welcome_screen" text NOT NULL, + "widget_channel_id" varchar, + "widget_enabled" boolean, + "nsfw_level" integer, + "nsfw" boolean, + "parent" varchar, + "premium_progress_bar_enabled" boolean NOT NULL, + CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY ("afk_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY ("template_id") REFERENCES "templates" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY ("public_updates_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY ("rules_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY ("system_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY ("widget_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_guilds"( + "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + ) + SELECT "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + FROM "guilds" + `); + await queryRunner.query(` + DROP TABLE "guilds" + `); + await queryRunner.query(` + ALTER TABLE "temporary_guilds" + RENAME TO "guilds" + `); + await queryRunner.query(` + CREATE TABLE "temporary_guilds" ( + "id" varchar PRIMARY KEY NOT NULL, + "afk_channel_id" varchar, + "afk_timeout" integer, + "banner" varchar, + "default_message_notifications" integer, + "description" varchar, + "discovery_splash" varchar, + "explicit_content_filter" integer, + "features" text NOT NULL, + "primary_category_id" integer, + "icon" varchar, + "large" boolean, + "max_members" integer, + "max_presences" integer, + "max_video_channel_users" integer, + "member_count" integer, + "presence_count" integer, + "template_id" varchar, + "mfa_level" integer, + "name" varchar NOT NULL, + "owner_id" varchar, + "preferred_locale" varchar, + "premium_subscription_count" integer, + "premium_tier" integer, + "public_updates_channel_id" varchar, + "rules_channel_id" varchar, + "region" varchar, + "splash" varchar, + "system_channel_id" varchar, + "system_channel_flags" integer, + "unavailable" boolean, + "verification_level" integer, + "welcome_screen" text NOT NULL, + "widget_channel_id" varchar, + "widget_enabled" boolean, + "nsfw_level" integer, + "nsfw" boolean, + "parent" varchar, + "premium_progress_bar_enabled" boolean, + CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY ("afk_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY ("template_id") REFERENCES "templates" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY ("public_updates_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY ("rules_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY ("system_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY ("widget_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_guilds"( + "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + ) + SELECT "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + FROM "guilds" + `); + await queryRunner.query(` + DROP TABLE "guilds" + `); + await queryRunner.query(` + ALTER TABLE "temporary_guilds" + RENAME TO "guilds" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "guilds" + RENAME TO "temporary_guilds" + `); + await queryRunner.query(` + CREATE TABLE "guilds" ( + "id" varchar PRIMARY KEY NOT NULL, + "afk_channel_id" varchar, + "afk_timeout" integer, + "banner" varchar, + "default_message_notifications" integer, + "description" varchar, + "discovery_splash" varchar, + "explicit_content_filter" integer, + "features" text NOT NULL, + "primary_category_id" integer, + "icon" varchar, + "large" boolean, + "max_members" integer, + "max_presences" integer, + "max_video_channel_users" integer, + "member_count" integer, + "presence_count" integer, + "template_id" varchar, + "mfa_level" integer, + "name" varchar NOT NULL, + "owner_id" varchar, + "preferred_locale" varchar, + "premium_subscription_count" integer, + "premium_tier" integer, + "public_updates_channel_id" varchar, + "rules_channel_id" varchar, + "region" varchar, + "splash" varchar, + "system_channel_id" varchar, + "system_channel_flags" integer, + "unavailable" boolean, + "verification_level" integer, + "welcome_screen" text NOT NULL, + "widget_channel_id" varchar, + "widget_enabled" boolean, + "nsfw_level" integer, + "nsfw" boolean, + "parent" varchar, + "premium_progress_bar_enabled" boolean NOT NULL, + CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY ("afk_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY ("template_id") REFERENCES "templates" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY ("public_updates_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY ("rules_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY ("system_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY ("widget_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "guilds"( + "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + ) + SELECT "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + FROM "temporary_guilds" + `); + await queryRunner.query(` + DROP TABLE "temporary_guilds" + `); + await queryRunner.query(` + ALTER TABLE "guilds" + RENAME TO "temporary_guilds" + `); + await queryRunner.query(` + CREATE TABLE "guilds" ( + "id" varchar PRIMARY KEY NOT NULL, + "afk_channel_id" varchar, + "afk_timeout" integer, + "banner" varchar, + "default_message_notifications" integer, + "description" varchar, + "discovery_splash" varchar, + "explicit_content_filter" integer, + "features" text NOT NULL, + "primary_category_id" integer, + "icon" varchar, + "large" boolean, + "max_members" integer, + "max_presences" integer, + "max_video_channel_users" integer, + "member_count" integer, + "presence_count" integer, + "template_id" varchar, + "mfa_level" integer, + "name" varchar NOT NULL, + "owner_id" varchar, + "preferred_locale" varchar, + "premium_subscription_count" integer, + "premium_tier" integer, + "public_updates_channel_id" varchar, + "rules_channel_id" varchar, + "region" varchar, + "splash" varchar, + "system_channel_id" varchar, + "system_channel_flags" integer, + "unavailable" boolean, + "verification_level" integer, + "welcome_screen" text NOT NULL, + "widget_channel_id" varchar, + "widget_enabled" boolean, + "nsfw_level" integer, + "nsfw" boolean, + "parent" varchar, + "premium_progress_bar_enabled" boolean NOT NULL, + CONSTRAINT "FK_f591a66b8019d87b0fe6c12dad6" FOREIGN KEY ("afk_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_e2a2f873a64a5cf62526de42325" FOREIGN KEY ("template_id") REFERENCES "templates" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_fc1a451727e3643ca572a3bb394" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_8d450b016dc8bec35f36729e4b0" FOREIGN KEY ("public_updates_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_95828668aa333460582e0ca6396" FOREIGN KEY ("rules_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_cfc3d3ad260f8121c95b31a1fce" FOREIGN KEY ("system_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_9d1d665379eefde7876a17afa99" FOREIGN KEY ("widget_channel_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "guilds"( + "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + ) + SELECT "id", + "afk_channel_id", + "afk_timeout", + "banner", + "default_message_notifications", + "description", + "discovery_splash", + "explicit_content_filter", + "features", + "primary_category_id", + "icon", + "large", + "max_members", + "max_presences", + "max_video_channel_users", + "member_count", + "presence_count", + "template_id", + "mfa_level", + "name", + "owner_id", + "preferred_locale", + "premium_subscription_count", + "premium_tier", + "public_updates_channel_id", + "rules_channel_id", + "region", + "splash", + "system_channel_id", + "system_channel_flags", + "unavailable", + "verification_level", + "welcome_screen", + "widget_channel_id", + "widget_enabled", + "nsfw_level", + "nsfw", + "parent", + "premium_progress_bar_enabled" + FROM "temporary_guilds" + `); + await queryRunner.query(` + DROP TABLE "temporary_guilds" + `); + } + +} diff --git a/util/src/migrations/sqlite/1660258351379-CodeCleanup3.ts b/util/src/migrations/sqlite/1660258351379-CodeCleanup3.ts new file mode 100644 index 000000000..13fba6dde --- /dev/null +++ b/util/src/migrations/sqlite/1660258351379-CodeCleanup3.ts @@ -0,0 +1,231 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup31660258351379 implements MigrationInterface { + name = 'CodeCleanup31660258351379' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "temporary_users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + FROM "users" + `); + await queryRunner.query(` + DROP TABLE "users" + `); + await queryRunner.query(` + ALTER TABLE "temporary_users" + RENAME TO "users" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + RENAME TO "temporary_users" + `); + await queryRunner.query(` + CREATE TABLE "users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "settings" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL + ) + `); + await queryRunner.query(` + INSERT INTO "users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + FROM "temporary_users" + `); + await queryRunner.query(` + DROP TABLE "temporary_users" + `); + } + +} diff --git a/util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts b/util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts new file mode 100644 index 000000000..d3f2a40db --- /dev/null +++ b/util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts @@ -0,0 +1,459 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup41660260539853 implements MigrationInterface { + name = 'CodeCleanup41660260539853' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "temporary_users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId") + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + FROM "users" + `); + await queryRunner.query(` + DROP TABLE "users" + `); + await queryRunner.query(` + ALTER TABLE "temporary_users" + RENAME TO "users" + `); + await queryRunner.query(` + CREATE TABLE "temporary_users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId"), + CONSTRAINT "FK_76ba283779c8441fd5ff819c8cf" FOREIGN KEY ("settingsId") REFERENCES "user_settings" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + FROM "users" + `); + await queryRunner.query(` + DROP TABLE "users" + `); + await queryRunner.query(` + ALTER TABLE "temporary_users" + RENAME TO "users" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + RENAME TO "temporary_users" + `); + await queryRunner.query(` + CREATE TABLE "users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId") + ) + `); + await queryRunner.query(` + INSERT INTO "users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + FROM "temporary_users" + `); + await queryRunner.query(` + DROP TABLE "temporary_users" + `); + await queryRunner.query(` + ALTER TABLE "users" + RENAME TO "temporary_users" + `); + await queryRunner.query(` + CREATE TABLE "users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL + ) + `); + await queryRunner.query(` + INSERT INTO "users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + FROM "temporary_users" + `); + await queryRunner.query(` + DROP TABLE "temporary_users" + `); + } + +} diff --git a/util/src/migrations/sqlite/1660260672914-CodeCleanup4.ts b/util/src/migrations/sqlite/1660260672914-CodeCleanup4.ts new file mode 100644 index 000000000..33f4df035 --- /dev/null +++ b/util/src/migrations/sqlite/1660260672914-CodeCleanup4.ts @@ -0,0 +1,459 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup41660260672914 implements MigrationInterface { + name = 'CodeCleanup41660260672914' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "temporary_users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId") + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + FROM "users" + `); + await queryRunner.query(` + DROP TABLE "users" + `); + await queryRunner.query(` + ALTER TABLE "temporary_users" + RENAME TO "users" + `); + await queryRunner.query(` + CREATE TABLE "temporary_users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId"), + CONSTRAINT "FK_76ba283779c8441fd5ff819c8cf" FOREIGN KEY ("settingsId") REFERENCES "user_settings" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + FROM "users" + `); + await queryRunner.query(` + DROP TABLE "users" + `); + await queryRunner.query(` + ALTER TABLE "temporary_users" + RENAME TO "users" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + RENAME TO "temporary_users" + `); + await queryRunner.query(` + CREATE TABLE "users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId") + ) + `); + await queryRunner.query(` + INSERT INTO "users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + FROM "temporary_users" + `); + await queryRunner.query(` + DROP TABLE "temporary_users" + `); + await queryRunner.query(` + ALTER TABLE "users" + RENAME TO "temporary_users" + `); + await queryRunner.query(` + CREATE TABLE "users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL + ) + `); + await queryRunner.query(` + INSERT INTO "users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes" + FROM "temporary_users" + `); + await queryRunner.query(` + DROP TABLE "temporary_users" + `); + } + +} From 1d52b0d0721094d7f8dfaabddedd9f08a5e456a5 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 12 Aug 2022 03:24:51 +0200 Subject: [PATCH 04/23] Fix updated client stuff... --- api/assets/schemas.json | 162 +++++-- api/src/routes/channels/#channel_id/index.ts | 2 + .../routes/channels/#channel_id/invites.ts | 2 +- .../routes/channels/#channel_id/webhooks.ts | 3 +- api/src/util/handlers/route.ts | 5 + bundle/package.json | 3 +- bundle/scripts/update_schemas.js | 2 +- env-vars.md | 3 +- gateway/src/opcodes/Identify.ts | 3 +- util/src/entities/BaseClass.ts | 2 +- util/src/entities/Channel.ts | 7 + util/src/entities/User.ts | 6 +- .../mariadb/1660265930624-CodeCleanup5.ts | 53 ++ .../postgres/1660265907544-CodeCleanup5.ts | 26 + .../sqlite/1660260539853-CodeCleanup4.ts | 459 ------------------ 15 files changed, 218 insertions(+), 520 deletions(-) create mode 100644 util/src/migrations/mariadb/1660265930624-CodeCleanup5.ts create mode 100644 util/src/migrations/postgres/1660265907544-CodeCleanup5.ts delete mode 100644 util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts diff --git a/api/assets/schemas.json b/api/assets/schemas.json index 00819e7cc..d8576514a 100644 --- a/api/assets/schemas.json +++ b/api/assets/schemas.json @@ -552,6 +552,12 @@ }, "default_auto_archive_duration": { "type": "integer" + }, + "flags": { + "type": "integer" + }, + "default_thread_rate_limit_per_user": { + "type": "integer" } }, "additionalProperties": false, @@ -695,7 +701,6 @@ }, "additionalProperties": false, "required": [ - "avatar", "name" ], "$schema": "http://json-schema.org/draft-07/schema#" @@ -1028,6 +1033,12 @@ }, "default_auto_archive_duration": { "type": "integer" + }, + "flags": { + "type": "integer" + }, + "default_thread_rate_limit_per_user": { + "type": "integer" } }, "additionalProperties": false @@ -1094,6 +1105,9 @@ "preferred_locale": { "type": "string" }, + "premium_progress_bar_enabled": { + "type": "boolean" + }, "region": { "type": "string" }, @@ -1651,6 +1665,9 @@ "UserSettingsSchema": { "type": "object", "properties": { + "id": { + "type": "string" + }, "afk_timeout": { "type": "integer" }, @@ -1672,22 +1689,7 @@ "custom_status": { "anyOf": [ { - "type": "object", - "properties": { - "emoji_id": { - "type": "string" - }, - "emoji_name": { - "type": "string" - }, - "expires_at": { - "type": "integer" - }, - "text": { - "type": "string" - } - }, - "additionalProperties": false + "$ref": "#/definitions/CustomStatus" }, { "type": "null" @@ -1713,16 +1715,7 @@ "type": "integer" }, "friend_source_flags": { - "type": "object", - "properties": { - "all": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "all" - ] + "$ref": "#/definitions/FriendSourceFlags" }, "gateway_connected": { "type": "boolean" @@ -1733,31 +1726,7 @@ "guild_folders": { "type": "array", "items": { - "type": "object", - "properties": { - "color": { - "type": "integer" - }, - "guild_ids": { - "type": "array", - "items": { - "type": "string" - } - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "color", - "guild_ids", - "id", - "name" - ] + "$ref": "#/definitions/GuildFolder" } }, "guild_positions": { @@ -1818,9 +1787,98 @@ }, "timezone_offset": { "type": "integer" + }, + "hasId": { + "description": "Checks if entity has an id.\nIf entity composite compose ids, it will check them all.", + "type": "object", + "additionalProperties": false + }, + "save": { + "description": "Saves current entity in the database.\nIf entity does not exist in the database then inserts, otherwise updates.", + "type": "object", + "additionalProperties": false + }, + "remove": { + "description": "Removes current entity from the database.", + "type": "object", + "additionalProperties": false + }, + "softRemove": { + "description": "Records the delete date of current entity.", + "type": "object", + "additionalProperties": false + }, + "recover": { + "description": "Recovers a given entity in the database.", + "type": "object", + "additionalProperties": false + }, + "reload": { + "description": "Reloads entity data from the database.", + "type": "object", + "additionalProperties": false } }, "additionalProperties": false, + "definitions": { + "CustomStatus": { + "type": "object", + "properties": { + "emoji_id": { + "type": "string" + }, + "emoji_name": { + "type": "string" + }, + "expires_at": { + "type": "integer" + }, + "text": { + "type": "string" + } + }, + "additionalProperties": false + }, + "FriendSourceFlags": { + "type": "object", + "properties": { + "all": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "all" + ] + }, + "GuildFolder": { + "type": "object", + "properties": { + "color": { + "type": "integer" + }, + "guild_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "id": { + "type": "integer" + }, + "name": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "color", + "guild_ids", + "id", + "name" + ] + } + }, "$schema": "http://json-schema.org/draft-07/schema#" } } \ No newline at end of file diff --git a/api/src/routes/channels/#channel_id/index.ts b/api/src/routes/channels/#channel_id/index.ts index 68b52be68..70c34f051 100644 --- a/api/src/routes/channels/#channel_id/index.ts +++ b/api/src/routes/channels/#channel_id/index.ts @@ -71,6 +71,8 @@ export interface ChannelModifySchema { nsfw?: boolean; rtc_region?: string; default_auto_archive_duration?: number; + flags?: number; + default_thread_rate_limit_per_user?: number; } router.patch("/", route({ body: "ChannelModifySchema", permission: "MANAGE_CHANNELS" }), async (req: Request, res: Response) => { diff --git a/api/src/routes/channels/#channel_id/invites.ts b/api/src/routes/channels/#channel_id/invites.ts index a53b1de4c..c0279f496 100644 --- a/api/src/routes/channels/#channel_id/invites.ts +++ b/api/src/routes/channels/#channel_id/invites.ts @@ -36,7 +36,7 @@ router.post("/", route({ body: "InviteCreateSchema", permission: "CREATE_INSTANT const invite = await OrmUtils.mergeDeep(new Invite(),{ code: random(), - temporary: req.body.temporary, + temporary: req.body.temporary || true, uses: 0, max_uses: req.body.max_uses, max_age: req.body.max_age, diff --git a/api/src/routes/channels/#channel_id/webhooks.ts b/api/src/routes/channels/#channel_id/webhooks.ts index 8f0e0a7fb..00bf46197 100644 --- a/api/src/routes/channels/#channel_id/webhooks.ts +++ b/api/src/routes/channels/#channel_id/webhooks.ts @@ -12,7 +12,7 @@ export interface WebhookCreateSchema { * @maxLength 80 */ name: string; - avatar: string; + avatar?: string; } //TODO: implement webhooks router.get("/", route({}), async (req: Request, res: Response) => { @@ -36,6 +36,7 @@ router.post("/", route({ body: "WebhookCreateSchema", permission: "MANAGE_WEBHOO if (name === "clyde") throw new HTTPError("Invalid name", 400); // TODO: save webhook in database and send response + res.json(new Webhook()); }); export default router; diff --git a/api/src/util/handlers/route.ts b/api/src/util/handlers/route.ts index eaf7dc91f..f8130f3cb 100644 --- a/api/src/util/handlers/route.ts +++ b/api/src/util/handlers/route.ts @@ -117,6 +117,11 @@ export function route(opts: RouteOptions) { const valid = validate(normalizeBody(req.body)); if (!valid) { const fields: Record = {}; + if(process.env.LOG_INVALID_BODY) { + console.log(`Got invalid request: ${req.method} ${req.originalUrl}`) + console.log(req.body) + validate.errors?.forEach(x => console.log(x.params)) + } validate.errors?.forEach((x) => (fields[x.instancePath.slice(1)] = { code: x.keyword, message: x.message || "" })); throw FieldErrors(fields); } diff --git a/bundle/package.json b/bundle/package.json index b67598b8f..7431a96fa 100644 --- a/bundle/package.json +++ b/bundle/package.json @@ -9,10 +9,11 @@ "depcheck": "node scripts/depcheck.js", "syncdeps": "node scripts/install.js", "build": "node scripts/build.js", + "genschemas": "node scripts/update_schemas.js", "start": "node scripts/build.js && node --enable-source-maps dist/bundle/src/start.js", "start:bundle": "node --enable-source-maps dist/bundle/src/start.js", "start:bundle:dbg": "node --enable-source-maps --inspect dist/bundle/src/start.js", - "start:bundle:vscode-dbg": "npm run build clean logerrors pretty-errors && node --enable-source-maps --inspect dist/bundle/src/start.js", + "start:bundle:vscode-dbg": "npm run genschemas && npm run build clean logerrors pretty-errors && node --enable-source-maps --inspect dist/bundle/src/start.js", "test": "echo \"Error: no test specified\" && exit 1", "migrate": "cd ../util/ && npm i && node --require ts-node/register node_modules/typeorm/cli.js -f ../util/ormconfig.json migration:run", "tsnode": "npx ts-node --transpile-only -P tsnode.tsconfig.json src/start.ts" diff --git a/bundle/scripts/update_schemas.js b/bundle/scripts/update_schemas.js index 516b95920..a018120b9 100644 --- a/bundle/scripts/update_schemas.js +++ b/bundle/scripts/update_schemas.js @@ -6,4 +6,4 @@ const { argv, stdout, exit } = require("process"); const { execIn, getLines, parts } = require("./utils"); -execIn("node scripts/generate_schema.js", path.join("..", "..", "api")); \ No newline at end of file +execIn("node scripts/generate_schema.js", path.join("..", "api")); \ No newline at end of file diff --git a/env-vars.md b/env-vars.md index c24ea1a21..6c56c1844 100644 --- a/env-vars.md +++ b/env-vars.md @@ -14,4 +14,5 @@ |STORAGE\_BUCKET|s3 bucket name|S3 bucket name| |DB\_UNSAFE|any|Ignores migrations for database, enabled if defined| |DB\_VERBOSE|any|Log database queries, enabled if defined| -|DB\_MIGRATE|any|Exit fosscord after connecting to and migrating database, used internally| \ No newline at end of file +|DB\_MIGRATE|any|Exit fosscord after connecting to and migrating database, used internally| +|LOG\_INVALID\_BODY|any|Log request method, path and body if invalid| diff --git a/gateway/src/opcodes/Identify.ts b/gateway/src/opcodes/Identify.ts index 4e2755921..ce4385a3a 100644 --- a/gateway/src/opcodes/Identify.ts +++ b/gateway/src/opcodes/Identify.ts @@ -102,8 +102,9 @@ export async function onIdentify(this: WebSocket, data: Payload) { ]); if (!user) return this.close(CLOSECODES.Authentication_failed); - if (!user.settings) { + if (!user.settings) { //settings may not exist after updating... user.settings = new UserSettings(); + user.settings.id = user.id; await user.settings.save(); } diff --git a/util/src/entities/BaseClass.ts b/util/src/entities/BaseClass.ts index c872e7f18..aecc2465f 100644 --- a/util/src/entities/BaseClass.ts +++ b/util/src/entities/BaseClass.ts @@ -1,5 +1,5 @@ import "reflect-metadata"; -import { BaseEntity, EntityMetadata, ObjectIdColumn, PrimaryColumn, FindOptionsWhere, Generated, SaveOptions } from "typeorm"; +import { BaseEntity, ObjectIdColumn, PrimaryColumn, SaveOptions } from "typeorm"; import { Snowflake } from "../util/Snowflake"; export class BaseClassWithoutId extends BaseEntity { diff --git a/util/src/entities/Channel.ts b/util/src/entities/Channel.ts index ade0fb398..a576d7af5 100644 --- a/util/src/entities/Channel.ts +++ b/util/src/entities/Channel.ts @@ -151,6 +151,13 @@ export class Channel extends BaseClass { }) webhooks?: Webhook[]; + @Column({ nullable: true }) + flags?: number = 0; + + @Column({ nullable: true }) + default_thread_rate_limit_per_user?: number = 0; + + // TODO: DM channel static async createChannel( channel: Partial, diff --git a/util/src/entities/User.ts b/util/src/entities/User.ts index 6edcda970..61343e818 100644 --- a/util/src/entities/User.ts +++ b/util/src/entities/User.ts @@ -185,8 +185,10 @@ export class User extends BaseClass { notes: { [key: string]: string } = {}; //key is ID of user async save(): Promise { - await this.settings.save(); - return this.save(); + if(!this.settings) this.settings = new UserSettings(); + this.settings.id = this.id; + //await this.settings.save(); + return super.save(); } toPublicUser() { diff --git a/util/src/migrations/mariadb/1660265930624-CodeCleanup5.ts b/util/src/migrations/mariadb/1660265930624-CodeCleanup5.ts new file mode 100644 index 000000000..04f8e6af4 --- /dev/null +++ b/util/src/migrations/mariadb/1660265930624-CodeCleanup5.ts @@ -0,0 +1,53 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup51660265930624 implements MigrationInterface { + name = 'CodeCleanup51660265930624' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`users\` + ADD \`settingsId\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` (\`settingsId\`) + `); + await queryRunner.query(` + ALTER TABLE \`channels\` + ADD \`flags\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`channels\` + ADD \`default_thread_rate_limit_per_user\` int NULL + `); + await queryRunner.query(` + CREATE UNIQUE INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD CONSTRAINT \`FK_76ba283779c8441fd5ff819c8cf\` FOREIGN KEY (\`settingsId\`) REFERENCES \`user_settings\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`users\` DROP FOREIGN KEY \`FK_76ba283779c8441fd5ff819c8cf\` + `); + await queryRunner.query(` + DROP INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` + `); + await queryRunner.query(` + ALTER TABLE \`channels\` DROP COLUMN \`default_thread_rate_limit_per_user\` + `); + await queryRunner.query(` + ALTER TABLE \`channels\` DROP COLUMN \`flags\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP COLUMN \`settingsId\` + `); + } + +} diff --git a/util/src/migrations/postgres/1660265907544-CodeCleanup5.ts b/util/src/migrations/postgres/1660265907544-CodeCleanup5.ts new file mode 100644 index 000000000..157d686a6 --- /dev/null +++ b/util/src/migrations/postgres/1660265907544-CodeCleanup5.ts @@ -0,0 +1,26 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class CodeCleanup51660265907544 implements MigrationInterface { + name = 'CodeCleanup51660265907544' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "channels" + ADD "flags" integer + `); + await queryRunner.query(` + ALTER TABLE "channels" + ADD "default_thread_rate_limit_per_user" integer + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "channels" DROP COLUMN "default_thread_rate_limit_per_user" + `); + await queryRunner.query(` + ALTER TABLE "channels" DROP COLUMN "flags" + `); + } + +} diff --git a/util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts b/util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts deleted file mode 100644 index d3f2a40db..000000000 --- a/util/src/migrations/sqlite/1660260539853-CodeCleanup4.ts +++ /dev/null @@ -1,459 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class CodeCleanup41660260539853 implements MigrationInterface { - name = 'CodeCleanup41660260539853' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - CREATE TABLE "temporary_users" ( - "id" varchar PRIMARY KEY NOT NULL, - "username" varchar NOT NULL, - "discriminator" varchar NOT NULL, - "avatar" varchar, - "accent_color" integer, - "banner" varchar, - "phone" varchar, - "desktop" boolean NOT NULL, - "mobile" boolean NOT NULL, - "premium" boolean NOT NULL, - "premium_type" integer NOT NULL, - "bot" boolean NOT NULL, - "bio" varchar NOT NULL, - "system" boolean NOT NULL, - "nsfw_allowed" boolean NOT NULL, - "mfa_enabled" boolean NOT NULL, - "totp_secret" varchar, - "totp_last_ticket" varchar, - "created_at" datetime NOT NULL, - "premium_since" datetime, - "verified" boolean NOT NULL, - "disabled" boolean NOT NULL, - "deleted" boolean NOT NULL, - "email" varchar, - "flags" varchar NOT NULL, - "public_flags" integer NOT NULL, - "rights" bigint NOT NULL, - "data" text NOT NULL, - "fingerprints" text NOT NULL, - "extended_settings" text NOT NULL, - "notes" text NOT NULL, - "settingsId" varchar, - CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId") - ) - `); - await queryRunner.query(` - INSERT INTO "temporary_users"( - "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes" - ) - SELECT "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes" - FROM "users" - `); - await queryRunner.query(` - DROP TABLE "users" - `); - await queryRunner.query(` - ALTER TABLE "temporary_users" - RENAME TO "users" - `); - await queryRunner.query(` - CREATE TABLE "temporary_users" ( - "id" varchar PRIMARY KEY NOT NULL, - "username" varchar NOT NULL, - "discriminator" varchar NOT NULL, - "avatar" varchar, - "accent_color" integer, - "banner" varchar, - "phone" varchar, - "desktop" boolean NOT NULL, - "mobile" boolean NOT NULL, - "premium" boolean NOT NULL, - "premium_type" integer NOT NULL, - "bot" boolean NOT NULL, - "bio" varchar NOT NULL, - "system" boolean NOT NULL, - "nsfw_allowed" boolean NOT NULL, - "mfa_enabled" boolean NOT NULL, - "totp_secret" varchar, - "totp_last_ticket" varchar, - "created_at" datetime NOT NULL, - "premium_since" datetime, - "verified" boolean NOT NULL, - "disabled" boolean NOT NULL, - "deleted" boolean NOT NULL, - "email" varchar, - "flags" varchar NOT NULL, - "public_flags" integer NOT NULL, - "rights" bigint NOT NULL, - "data" text NOT NULL, - "fingerprints" text NOT NULL, - "extended_settings" text NOT NULL, - "notes" text NOT NULL, - "settingsId" varchar, - CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId"), - CONSTRAINT "FK_76ba283779c8441fd5ff819c8cf" FOREIGN KEY ("settingsId") REFERENCES "user_settings" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION - ) - `); - await queryRunner.query(` - INSERT INTO "temporary_users"( - "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes", - "settingsId" - ) - SELECT "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes", - "settingsId" - FROM "users" - `); - await queryRunner.query(` - DROP TABLE "users" - `); - await queryRunner.query(` - ALTER TABLE "temporary_users" - RENAME TO "users" - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE "users" - RENAME TO "temporary_users" - `); - await queryRunner.query(` - CREATE TABLE "users" ( - "id" varchar PRIMARY KEY NOT NULL, - "username" varchar NOT NULL, - "discriminator" varchar NOT NULL, - "avatar" varchar, - "accent_color" integer, - "banner" varchar, - "phone" varchar, - "desktop" boolean NOT NULL, - "mobile" boolean NOT NULL, - "premium" boolean NOT NULL, - "premium_type" integer NOT NULL, - "bot" boolean NOT NULL, - "bio" varchar NOT NULL, - "system" boolean NOT NULL, - "nsfw_allowed" boolean NOT NULL, - "mfa_enabled" boolean NOT NULL, - "totp_secret" varchar, - "totp_last_ticket" varchar, - "created_at" datetime NOT NULL, - "premium_since" datetime, - "verified" boolean NOT NULL, - "disabled" boolean NOT NULL, - "deleted" boolean NOT NULL, - "email" varchar, - "flags" varchar NOT NULL, - "public_flags" integer NOT NULL, - "rights" bigint NOT NULL, - "data" text NOT NULL, - "fingerprints" text NOT NULL, - "extended_settings" text NOT NULL, - "notes" text NOT NULL, - "settingsId" varchar, - CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId") - ) - `); - await queryRunner.query(` - INSERT INTO "users"( - "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes", - "settingsId" - ) - SELECT "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes", - "settingsId" - FROM "temporary_users" - `); - await queryRunner.query(` - DROP TABLE "temporary_users" - `); - await queryRunner.query(` - ALTER TABLE "users" - RENAME TO "temporary_users" - `); - await queryRunner.query(` - CREATE TABLE "users" ( - "id" varchar PRIMARY KEY NOT NULL, - "username" varchar NOT NULL, - "discriminator" varchar NOT NULL, - "avatar" varchar, - "accent_color" integer, - "banner" varchar, - "phone" varchar, - "desktop" boolean NOT NULL, - "mobile" boolean NOT NULL, - "premium" boolean NOT NULL, - "premium_type" integer NOT NULL, - "bot" boolean NOT NULL, - "bio" varchar NOT NULL, - "system" boolean NOT NULL, - "nsfw_allowed" boolean NOT NULL, - "mfa_enabled" boolean NOT NULL, - "totp_secret" varchar, - "totp_last_ticket" varchar, - "created_at" datetime NOT NULL, - "premium_since" datetime, - "verified" boolean NOT NULL, - "disabled" boolean NOT NULL, - "deleted" boolean NOT NULL, - "email" varchar, - "flags" varchar NOT NULL, - "public_flags" integer NOT NULL, - "rights" bigint NOT NULL, - "data" text NOT NULL, - "fingerprints" text NOT NULL, - "extended_settings" text NOT NULL, - "notes" text NOT NULL - ) - `); - await queryRunner.query(` - INSERT INTO "users"( - "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes" - ) - SELECT "id", - "username", - "discriminator", - "avatar", - "accent_color", - "banner", - "phone", - "desktop", - "mobile", - "premium", - "premium_type", - "bot", - "bio", - "system", - "nsfw_allowed", - "mfa_enabled", - "totp_secret", - "totp_last_ticket", - "created_at", - "premium_since", - "verified", - "disabled", - "deleted", - "email", - "flags", - "public_flags", - "rights", - "data", - "fingerprints", - "extended_settings", - "notes" - FROM "temporary_users" - `); - await queryRunner.query(` - DROP TABLE "temporary_users" - `); - } - -} From dd0a6e9709a8b8a8d18b0a8d85c3a2a2b4921ba5 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 12 Aug 2022 10:37:42 +0200 Subject: [PATCH 05/23] Move some invite defaults into class --- api/src/routes/channels/#channel_id/invites.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/api/src/routes/channels/#channel_id/invites.ts b/api/src/routes/channels/#channel_id/invites.ts index c0279f496..f111cf54c 100644 --- a/api/src/routes/channels/#channel_id/invites.ts +++ b/api/src/routes/channels/#channel_id/invites.ts @@ -35,15 +35,12 @@ router.post("/", route({ body: "InviteCreateSchema", permission: "CREATE_INSTANT const expires_at = new Date(req.body.max_age * 1000 + Date.now()); const invite = await OrmUtils.mergeDeep(new Invite(),{ - code: random(), temporary: req.body.temporary || true, - uses: 0, max_uses: req.body.max_uses, max_age: req.body.max_age, expires_at, - created_at: new Date(), guild_id, - channel_id: channel_id, + channel_id, inviter_id: user_id }).save(); //TODO: check this, removed toJSON call @@ -57,7 +54,6 @@ router.post("/", route({ body: "InviteCreateSchema", permission: "CREATE_INSTANT }); router.get("/", route({ permission: "MANAGE_CHANNELS" }), async (req: Request, res: Response) => { - const { user_id } = req; const { channel_id } = req.params; const channel = await Channel.findOneOrFail({ where: { id: channel_id } }); From 10bd81274722823f875ba31eaf5fc670bfb22ceb Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 12 Aug 2022 11:36:39 +0200 Subject: [PATCH 06/23] Split schemas into files in util --- api/assets/schemas.json | 2705 ++++++++++------- api/src/routes/auth/login.ts | 11 +- api/src/routes/auth/mfa/totp.ts | 9 +- api/src/routes/auth/register.ts | 29 +- api/src/routes/channels/#channel_id/index.ts | 30 +- .../routes/channels/#channel_id/invites.ts | 12 - .../#channel_id/messages/#message_id/ack.ts | 9 - .../#channel_id/messages/#message_id/index.ts | 4 +- .../#channel_id/messages/bulk-delete.ts | 4 - .../channels/#channel_id/messages/index.ts | 36 +- .../channels/#channel_id/permissions.ts | 7 +- api/src/routes/channels/#channel_id/purge.ts | 7 +- .../routes/channels/#channel_id/webhooks.ts | 8 - api/src/routes/guilds/#guild_id/audit-logs.ts | 3 - api/src/routes/guilds/#guild_id/bans.ts | 24 +- api/src/routes/guilds/#guild_id/channels.ts | 3 +- api/src/routes/guilds/#guild_id/emojis.ts | 14 +- api/src/routes/guilds/#guild_id/index.ts | 20 +- .../routes/guilds/#guild_id/integrations.ts | 1 - .../#guild_id/members/#member_id/index.ts | 6 +- .../#guild_id/members/#member_id/nick.ts | 4 - api/src/routes/guilds/#guild_id/prune.ts | 7 - .../guilds/#guild_id/roles/#role_id/index.ts | 3 +- .../routes/guilds/#guild_id/roles/index.ts | 14 +- api/src/routes/guilds/#guild_id/stickers.ts | 17 +- api/src/routes/guilds/#guild_id/templates.ts | 10 - api/src/routes/guilds/#guild_id/vanity-url.ts | 10 +- .../#guild_id/voice-states/#user_id/index.ts | 14 +- api/src/routes/guilds/#guild_id/webhooks.ts | 1 - .../routes/guilds/#guild_id/welcome_screen.ts | 13 +- api/src/routes/guilds/#guild_id/widget.ts | 7 +- api/src/routes/guilds/index.ts | 16 +- api/src/routes/guilds/templates/index.ts | 9 +- api/src/routes/users/@me/channels.ts | 7 +- api/src/routes/users/@me/index.ts | 21 +- api/src/routes/users/@me/mfa/codes.ts | 7 +- api/src/routes/users/@me/mfa/totp/disable.ts | 6 +- api/src/routes/users/@me/mfa/totp/enable.ts | 8 +- api/src/routes/users/@me/relationships.ts | 9 - api/src/routes/users/@me/settings.ts | 2 - api/src/util/handlers/Message.ts | 3 +- gateway/src/opcodes/Identify.ts | 2 +- gateway/src/opcodes/LazyRequest.ts | 3 +- gateway/src/opcodes/PresenceUpdate.ts | 3 +- gateway/src/opcodes/VoiceStateUpdate.ts | 2 +- gateway/src/schema/VoiceStateUpdateSchema.ts | 15 - util/src/index.ts | 3 +- .../src/schemas/ActivitySchema.ts | 0 util/src/schemas/BanCreateSchema.ts | 5 + util/src/schemas/BanModeratorSchema.ts | 8 + util/src/schemas/BanRegistrySchema.ts | 9 + util/src/schemas/BulkDeleteSchema.ts | 4 + util/src/schemas/ChannelModifySchema.ts | 29 + .../ChannelPermissionOverwriteSchema.ts | 5 + util/src/schemas/DmChannelCreateSchema.ts | 5 + util/src/schemas/EmojiCreateSchema.ts | 7 + util/src/schemas/EmojiModifySchema.ts | 5 + util/src/schemas/GuildCreateSchema.ts | 14 + util/src/schemas/GuildTemplateCreateSchema.ts | 5 + util/src/schemas/GuildUpdateSchema.ts | 18 + .../schemas/GuildUpdateWelcomeScreenSchema.ts | 11 + .../src/schemas/IdentifySchema.ts | 2 +- util/src/schemas/InviteCreateSchema.ts | 12 + .../src/schemas/LazyRequestSchema.ts | 0 util/src/schemas/LoginSchema.ts | 9 + util/src/schemas/MemberChangeSchema.ts | 4 + util/src/schemas/MemberNickChangeSchema.ts | 4 + util/src/schemas/MessageAcknowledgeSchema.ts | 8 + util/src/schemas/MessageCreateSchema.ts | 34 + util/src/schemas/MfaCodesSchema.ts | 5 + util/src/schemas/ModifyGuildStickerSchema.ts | 16 + util/src/schemas/PruneSchema.ts | 7 + util/src/schemas/PurgeSchema.ts | 5 + util/src/schemas/RegisterSchema.ts | 27 + util/src/schemas/RelationshipPostSchema.ts | 5 + util/src/schemas/RelationshipPutSchema.ts | 6 + util/src/schemas/RoleModifySchema.ts | 11 + util/src/schemas/TemplateCreateSchema.ts | 5 + util/src/schemas/TemplateModifySchema.ts | 5 + util/src/schemas/TotpDisableSchema.ts | 4 + util/src/schemas/TotpEnableSchema.ts | 6 + util/src/schemas/TotpSchema.ts | 7 + util/src/schemas/UserModifySchema.ts | 19 + util/src/schemas/UserSettingsSchema.ts | 4 + util/src/schemas/VanityUrlSchema.ts | 8 + util/src/schemas/VoiceStateUpdateSchema.ts | 18 + util/src/schemas/WebhookCreateSchema.ts | 8 + util/src/schemas/WidgetModifySchema.ts | 5 + util/src/schemas/index.ts | 41 + util/src/util/Config.ts | 5 +- 90 files changed, 2045 insertions(+), 1528 deletions(-) delete mode 100644 gateway/src/schema/VoiceStateUpdateSchema.ts rename gateway/src/schema/Activity.ts => util/src/schemas/ActivitySchema.ts (100%) create mode 100644 util/src/schemas/BanCreateSchema.ts create mode 100644 util/src/schemas/BanModeratorSchema.ts create mode 100644 util/src/schemas/BanRegistrySchema.ts create mode 100644 util/src/schemas/BulkDeleteSchema.ts create mode 100644 util/src/schemas/ChannelModifySchema.ts create mode 100644 util/src/schemas/ChannelPermissionOverwriteSchema.ts create mode 100644 util/src/schemas/DmChannelCreateSchema.ts create mode 100644 util/src/schemas/EmojiCreateSchema.ts create mode 100644 util/src/schemas/EmojiModifySchema.ts create mode 100644 util/src/schemas/GuildCreateSchema.ts create mode 100644 util/src/schemas/GuildTemplateCreateSchema.ts create mode 100644 util/src/schemas/GuildUpdateSchema.ts create mode 100644 util/src/schemas/GuildUpdateWelcomeScreenSchema.ts rename gateway/src/schema/Identify.ts => util/src/schemas/IdentifySchema.ts (98%) create mode 100644 util/src/schemas/InviteCreateSchema.ts rename gateway/src/schema/LazyRequest.ts => util/src/schemas/LazyRequestSchema.ts (100%) create mode 100644 util/src/schemas/LoginSchema.ts create mode 100644 util/src/schemas/MemberChangeSchema.ts create mode 100644 util/src/schemas/MemberNickChangeSchema.ts create mode 100644 util/src/schemas/MessageAcknowledgeSchema.ts create mode 100644 util/src/schemas/MessageCreateSchema.ts create mode 100644 util/src/schemas/MfaCodesSchema.ts create mode 100644 util/src/schemas/ModifyGuildStickerSchema.ts create mode 100644 util/src/schemas/PruneSchema.ts create mode 100644 util/src/schemas/PurgeSchema.ts create mode 100644 util/src/schemas/RegisterSchema.ts create mode 100644 util/src/schemas/RelationshipPostSchema.ts create mode 100644 util/src/schemas/RelationshipPutSchema.ts create mode 100644 util/src/schemas/RoleModifySchema.ts create mode 100644 util/src/schemas/TemplateCreateSchema.ts create mode 100644 util/src/schemas/TemplateModifySchema.ts create mode 100644 util/src/schemas/TotpDisableSchema.ts create mode 100644 util/src/schemas/TotpEnableSchema.ts create mode 100644 util/src/schemas/TotpSchema.ts create mode 100644 util/src/schemas/UserModifySchema.ts create mode 100644 util/src/schemas/UserSettingsSchema.ts create mode 100644 util/src/schemas/VanityUrlSchema.ts create mode 100644 util/src/schemas/VoiceStateUpdateSchema.ts create mode 100644 util/src/schemas/WebhookCreateSchema.ts create mode 100644 util/src/schemas/WidgetModifySchema.ts create mode 100644 util/src/schemas/index.ts diff --git a/api/assets/schemas.json b/api/assets/schemas.json index d8576514a..f102f9d02 100644 --- a/api/assets/schemas.json +++ b/api/assets/schemas.json @@ -98,6 +98,1176 @@ ], "$schema": "http://json-schema.org/draft-07/schema#" }, + "ActivitySchema": { + "type": "object", + "properties": { + "afk": { + "type": "boolean" + }, + "status": { + "$ref": "#/definitions/Status" + }, + "activities": { + "type": "array", + "items": { + "$ref": "#/definitions/Activity" + } + }, + "since": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "afk", + "status" + ], + "definitions": { + "Status": { + "enum": [ + "dnd", + "idle", + "invisible", + "offline", + "online" + ], + "type": "string" + }, + "Activity": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/ActivityType" + }, + "url": { + "type": "string" + }, + "created_at": { + "type": "integer" + }, + "timestamps": { + "type": "object", + "properties": { + "start": { + "type": "integer" + }, + "end": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "end", + "start" + ] + }, + "application_id": { + "type": "string" + }, + "details": { + "type": "string" + }, + "state": { + "type": "string" + }, + "emoji": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "animated": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "animated", + "name" + ] + }, + "party": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "size": { + "type": "array", + "items": [ + { + "type": "integer" + } + ], + "minItems": 1, + "maxItems": 1 + } + }, + "additionalProperties": false + }, + "assets": { + "type": "object", + "properties": { + "large_image": { + "type": "string" + }, + "large_text": { + "type": "string" + }, + "small_image": { + "type": "string" + }, + "small_text": { + "type": "string" + } + }, + "additionalProperties": false + }, + "secrets": { + "type": "object", + "properties": { + "join": { + "type": "string" + }, + "spectate": { + "type": "string" + }, + "match": { + "type": "string" + } + }, + "additionalProperties": false + }, + "instance": { + "type": "boolean" + }, + "flags": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "flags", + "name", + "type" + ] + }, + "ActivityType": { + "enum": [ + 0, + 1, + 2, + 4, + 5 + ], + "type": "number" + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "BanCreateSchema": { + "type": "object", + "properties": { + "delete_message_days": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "BanModeratorSchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "guild_id": { + "type": "string" + }, + "executor_id": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "executor_id", + "guild_id", + "id", + "user_id" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "BanRegistrySchema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "user_id": { + "type": "string" + }, + "guild_id": { + "type": "string" + }, + "executor_id": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "reason": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "executor_id", + "guild_id", + "id", + "user_id" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "BulkDeleteSchema": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "messages" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "ChannelModifySchema": { + "type": "object", + "properties": { + "name": { + "maxLength": 100, + "type": "string" + }, + "type": { + "enum": [ + 0, + 1, + 10, + 11, + 12, + 13, + 14, + 15, + 2, + 255, + 3, + 33, + 34, + 35, + 4, + 5, + 6, + 64, + 7, + 8, + 9 + ], + "type": "number" + }, + "topic": { + "type": "string" + }, + "icon": { + "type": [ + "null", + "string" + ] + }, + "bitrate": { + "type": "integer" + }, + "user_limit": { + "type": "integer" + }, + "rate_limit_per_user": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "permission_overwrites": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/ChannelPermissionOverwriteType" + }, + "allow": { + "type": "string" + }, + "deny": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "allow", + "deny", + "id", + "type" + ] + } + }, + "parent_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "nsfw": { + "type": "boolean" + }, + "rtc_region": { + "type": "string" + }, + "default_auto_archive_duration": { + "type": "integer" + }, + "flags": { + "type": "integer" + }, + "default_thread_rate_limit_per_user": { + "type": "integer" + } + }, + "additionalProperties": false, + "definitions": { + "ChannelPermissionOverwriteType": { + "enum": [ + 0, + 1, + 2 + ], + "type": "number" + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "ChannelPermissionOverwriteSchema": { + "type": "object", + "properties": { + "allow": { + "type": "string" + }, + "deny": { + "type": "string" + }, + "id": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/ChannelPermissionOverwriteType" + } + }, + "additionalProperties": false, + "required": [ + "allow", + "deny", + "id", + "type" + ], + "definitions": { + "ChannelPermissionOverwriteType": { + "enum": [ + 0, + 1, + 2 + ], + "type": "number" + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "DmChannelCreateSchema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "recipients": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "recipients" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "EmojiCreateSchema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "image": { + "type": "string" + }, + "require_colons": { + "type": [ + "null", + "boolean" + ] + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "image" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "EmojiModifySchema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "GuildCreateSchema": { + "type": "object", + "properties": { + "name": { + "maxLength": 100, + "type": "string" + }, + "region": { + "type": "string" + }, + "icon": { + "type": [ + "null", + "string" + ] + }, + "channels": { + "type": "array", + "items": { + "$ref": "#/definitions/ChannelModifySchema" + } + }, + "guild_template_code": { + "type": "string" + }, + "system_channel_id": { + "type": "string" + }, + "rules_channel_id": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "name" + ], + "definitions": { + "ChannelModifySchema": { + "type": "object", + "properties": { + "name": { + "maxLength": 100, + "type": "string" + }, + "type": { + "enum": [ + 0, + 1, + 10, + 11, + 12, + 13, + 14, + 15, + 2, + 255, + 3, + 33, + 34, + 35, + 4, + 5, + 6, + 64, + 7, + 8, + 9 + ], + "type": "number" + }, + "topic": { + "type": "string" + }, + "icon": { + "type": [ + "null", + "string" + ] + }, + "bitrate": { + "type": "integer" + }, + "user_limit": { + "type": "integer" + }, + "rate_limit_per_user": { + "type": "integer" + }, + "position": { + "type": "integer" + }, + "permission_overwrites": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/ChannelPermissionOverwriteType" + }, + "allow": { + "type": "string" + }, + "deny": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "allow", + "deny", + "id", + "type" + ] + } + }, + "parent_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "nsfw": { + "type": "boolean" + }, + "rtc_region": { + "type": "string" + }, + "default_auto_archive_duration": { + "type": "integer" + }, + "flags": { + "type": "integer" + }, + "default_thread_rate_limit_per_user": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "ChannelPermissionOverwriteType": { + "enum": [ + 0, + 1, + 2 + ], + "type": "number" + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "GuildTemplateCreateSchema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "avatar": { + "type": [ + "null", + "string" + ] + } + }, + "additionalProperties": false, + "required": [ + "name" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "GuildUpdateSchema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "banner": { + "type": [ + "null", + "string" + ] + }, + "splash": { + "type": [ + "null", + "string" + ] + }, + "description": { + "type": "string" + }, + "features": { + "type": "array", + "items": { + "type": "string" + } + }, + "verification_level": { + "type": "integer" + }, + "default_message_notifications": { + "type": "integer" + }, + "system_channel_flags": { + "type": "integer" + }, + "explicit_content_filter": { + "type": "integer" + }, + "public_updates_channel_id": { + "type": "string" + }, + "afk_timeout": { + "type": "integer" + }, + "afk_channel_id": { + "type": "string" + }, + "preferred_locale": { + "type": "string" + }, + "premium_progress_bar_enabled": { + "type": "boolean" + }, + "region": { + "type": "string" + }, + "icon": { + "type": [ + "null", + "string" + ] + }, + "guild_template_code": { + "type": "string" + }, + "system_channel_id": { + "type": "string" + }, + "rules_channel_id": { + "type": "string" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "GuildUpdateWelcomeScreenSchema": { + "type": "object", + "properties": { + "welcome_channels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "channel_id": { + "type": "string" + }, + "description": { + "type": "string" + }, + "emoji_id": { + "type": "string" + }, + "emoji_name": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "channel_id", + "description", + "emoji_name" + ] + } + }, + "enabled": { + "type": "boolean" + }, + "description": { + "type": "string" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "IdentifySchema": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "properties": { + "type": "object", + "properties": { + "os": { + "type": "string" + }, + "os_atch": { + "type": "string" + }, + "browser": { + "type": "string" + }, + "device": { + "type": "string" + }, + "$os": { + "type": "string" + }, + "$browser": { + "type": "string" + }, + "$device": { + "type": "string" + }, + "browser_user_agent": { + "type": "string" + }, + "browser_version": { + "type": "string" + }, + "os_version": { + "type": "string" + }, + "referrer": { + "type": "string" + }, + "referring_domain": { + "type": "string" + }, + "referrer_current": { + "type": "string" + }, + "referring_domain_current": { + "type": "string" + }, + "release_channel": { + "enum": [ + "canary", + "dev", + "ptb", + "stable" + ], + "type": "string" + }, + "client_build_number": { + "type": "integer" + }, + "client_event_source": {}, + "client_version": { + "type": "string" + }, + "system_locale": { + "type": "string" + } + }, + "additionalProperties": false + }, + "intents": { + "type": "bigint" + }, + "presence": { + "$ref": "#/definitions/ActivitySchema" + }, + "compress": { + "type": "boolean" + }, + "large_threshold": { + "type": "integer" + }, + "shard": { + "type": "array", + "items": [ + { + "type": "bigint" + }, + { + "type": "bigint" + } + ], + "minItems": 2, + "maxItems": 2 + }, + "guild_subscriptions": { + "type": "boolean" + }, + "capabilities": { + "type": "integer" + }, + "client_state": { + "type": "object", + "properties": { + "guild_hashes": {}, + "highest_last_message_id": { + "type": "string" + }, + "read_state_version": { + "type": "integer" + }, + "user_guild_settings_version": { + "type": "integer" + }, + "user_settings_version": { + "type": "integer" + } + }, + "additionalProperties": false + }, + "v": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "properties", + "token" + ], + "definitions": { + "ActivitySchema": { + "type": "object", + "properties": { + "afk": { + "type": "boolean" + }, + "status": { + "$ref": "#/definitions/Status" + }, + "activities": { + "type": "array", + "items": { + "$ref": "#/definitions/Activity" + } + }, + "since": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "afk", + "status" + ] + }, + "Status": { + "enum": [ + "dnd", + "idle", + "invisible", + "offline", + "online" + ], + "type": "string" + }, + "Activity": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/ActivityType" + }, + "url": { + "type": "string" + }, + "created_at": { + "type": "integer" + }, + "timestamps": { + "type": "object", + "properties": { + "start": { + "type": "integer" + }, + "end": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "end", + "start" + ] + }, + "application_id": { + "type": "string" + }, + "details": { + "type": "string" + }, + "state": { + "type": "string" + }, + "emoji": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "animated": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "animated", + "name" + ] + }, + "party": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "size": { + "type": "array", + "items": [ + { + "type": "integer" + } + ], + "minItems": 1, + "maxItems": 1 + } + }, + "additionalProperties": false + }, + "assets": { + "type": "object", + "properties": { + "large_image": { + "type": "string" + }, + "large_text": { + "type": "string" + }, + "small_image": { + "type": "string" + }, + "small_text": { + "type": "string" + } + }, + "additionalProperties": false + }, + "secrets": { + "type": "object", + "properties": { + "join": { + "type": "string" + }, + "spectate": { + "type": "string" + }, + "match": { + "type": "string" + } + }, + "additionalProperties": false + }, + "instance": { + "type": "boolean" + }, + "flags": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "flags", + "name", + "type" + ] + }, + "ActivityType": { + "enum": [ + 0, + 1, + 2, + 4, + 5 + ], + "type": "number" + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "InviteCreateSchema": { + "type": "object", + "properties": { + "target_user_id": { + "type": "string" + }, + "target_type": { + "type": "string" + }, + "validate": { + "type": "string" + }, + "max_age": { + "type": "integer" + }, + "max_uses": { + "type": "integer" + }, + "temporary": { + "type": "boolean" + }, + "unique": { + "type": "boolean" + }, + "target_user": { + "type": "string" + }, + "target_user_type": { + "type": "integer" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "LoginSchema": { + "type": "object", + "properties": { + "login": { + "type": "string" + }, + "password": { + "type": "string" + }, + "undelete": { + "type": "boolean" + }, + "captcha_key": { + "type": "string" + }, + "login_source": { + "type": "string" + }, + "gift_code_sku_id": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "login", + "password" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "MemberChangeSchema": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "MemberNickChangeSchema": { + "type": "object", + "properties": { + "nick": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "nick" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "MessageAcknowledgeSchema": { + "type": "object", + "properties": { + "manual": { + "type": "boolean" + }, + "mention_count": { + "type": "integer" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, "MessageCreateSchema": { "type": "object", "properties": { @@ -328,86 +1498,73 @@ }, "$schema": "http://json-schema.org/draft-07/schema#" }, - "RouteResponse": { + "MfaCodesSchema": { "type": "object", "properties": { - "status": { - "type": "integer" - }, - "body": { - "type": "array", - "items": { - "type": "string" - } - }, - "headers": { - "$ref": "#/definitions/Record" - } - }, - "additionalProperties": false, - "definitions": { - "Record": { - "type": "object", - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "LoginSchema": { - "type": "object", - "properties": { - "login": { - "type": "string" - }, "password": { "type": "string" }, - "undelete": { + "regenerate": { "type": "boolean" - }, - "captcha_key": { - "type": "string" - }, - "login_source": { - "type": "string" - }, - "gift_code_sku_id": { - "type": "string" } }, "additionalProperties": false, "required": [ - "login", "password" ], "$schema": "http://json-schema.org/draft-07/schema#" }, - "TotpSchema": { + "ModifyGuildStickerSchema": { "type": "object", "properties": { - "code": { + "name": { + "minLength": 2, + "maxLength": 30, "type": "string" }, - "ticket": { + "description": { + "maxLength": 100, "type": "string" }, - "gift_code_sku_id": { - "type": [ - "null", - "string" - ] - }, - "login_source": { - "type": [ - "null", - "string" - ] + "tags": { + "maxLength": 200, + "type": "string" } }, "additionalProperties": false, "required": [ - "code", - "ticket" + "name", + "tags" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "PruneSchema": { + "type": "object", + "properties": { + "days": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "days" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "PurgeSchema": { + "type": "object", + "properties": { + "before": { + "type": "string" + }, + "after": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "after", + "before" ], "$schema": "http://json-schema.org/draft-07/schema#" }, @@ -457,718 +1614,39 @@ ], "$schema": "http://json-schema.org/draft-07/schema#" }, - "ChannelModifySchema": { + "RelationshipPostSchema": { "type": "object", "properties": { - "name": { - "maxLength": 100, + "discriminator": { "type": "string" }, + "username": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "discriminator", + "username" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "RelationshipPutSchema": { + "type": "object", + "properties": { "type": { "enum": [ - 0, 1, - 10, - 11, - 12, - 13, - 14, - 15, 2, - 255, 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - }, - "flags": { - "type": "integer" - }, - "default_thread_rate_limit_per_user": { - "type": "integer" - } - }, - "additionalProperties": false, - "definitions": { - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 + 4 ], "type": "number" } }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "InviteCreateSchema": { - "type": "object", - "properties": { - "target_user_id": { - "type": "string" - }, - "target_type": { - "type": "string" - }, - "validate": { - "type": "string" - }, - "max_age": { - "type": "integer" - }, - "max_uses": { - "type": "integer" - }, - "temporary": { - "type": "boolean" - }, - "unique": { - "type": "boolean" - }, - "target_user": { - "type": "string" - }, - "target_user_type": { - "type": "integer" - } - }, "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" }, - "MessageAcknowledgeSchema": { - "type": "object", - "properties": { - "manual": { - "type": "boolean" - }, - "mention_count": { - "type": "integer" - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "BulkDeleteSchema": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "required": [ - "messages" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "ChannelPermissionOverwriteSchema": { - "type": "object", - "properties": { - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - }, - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ], - "definitions": { - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "PurgeSchema": { - "type": "object", - "properties": { - "before": { - "type": "string" - }, - "after": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "after", - "before" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "WebhookCreateSchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 80, - "type": "string" - }, - "avatar": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "name" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "GatewayBotResponse": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "shards": { - "type": "integer" - }, - "session_start_limit": { - "type": "object", - "properties": { - "total": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_after": { - "type": "integer" - }, - "max_concurrency": { - "type": "integer" - } - }, - "additionalProperties": false, - "required": [ - "max_concurrency", - "remaining", - "reset_after", - "total" - ] - } - }, - "additionalProperties": false, - "required": [ - "session_start_limit", - "shards", - "url" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "GatewayResponse": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "url" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "BanCreateSchema": { - "type": "object", - "properties": { - "delete_message_days": { - "type": "string" - }, - "reason": { - "type": "string" - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "BanRegistrySchema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "user_id": { - "type": "string" - }, - "guild_id": { - "type": "string" - }, - "executor_id": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "reason": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "executor_id", - "guild_id", - "id", - "user_id" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "BanModeratorSchema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "user_id": { - "type": "string" - }, - "guild_id": { - "type": "string" - }, - "executor_id": { - "type": "string" - }, - "reason": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "executor_id", - "guild_id", - "id", - "user_id" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "ChannelReorderSchema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "lock_permissions": { - "type": "boolean" - }, - "parent_id": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "id" - ] - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "EmojiCreateSchema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "image": { - "type": "string" - }, - "require_colons": { - "type": [ - "null", - "boolean" - ] - }, - "roles": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "required": [ - "image" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "EmojiModifySchema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "roles": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "GuildCreateSchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "region": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "channels": { - "type": "array", - "items": { - "$ref": "#/definitions/ChannelModifySchema" - } - }, - "guild_template_code": { - "type": "string" - }, - "system_channel_id": { - "type": "string" - }, - "rules_channel_id": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "name" - ], - "definitions": { - "ChannelModifySchema": { - "type": "object", - "properties": { - "name": { - "maxLength": 100, - "type": "string" - }, - "type": { - "enum": [ - 0, - 1, - 10, - 11, - 12, - 13, - 14, - 15, - 2, - 255, - 3, - 33, - 34, - 35, - 4, - 5, - 6, - 64, - 7, - 8, - 9 - ], - "type": "number" - }, - "topic": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "bitrate": { - "type": "integer" - }, - "user_limit": { - "type": "integer" - }, - "rate_limit_per_user": { - "type": "integer" - }, - "position": { - "type": "integer" - }, - "permission_overwrites": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ChannelPermissionOverwriteType" - }, - "allow": { - "type": "string" - }, - "deny": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "allow", - "deny", - "id", - "type" - ] - } - }, - "parent_id": { - "type": "string" - }, - "id": { - "type": "string" - }, - "nsfw": { - "type": "boolean" - }, - "rtc_region": { - "type": "string" - }, - "default_auto_archive_duration": { - "type": "integer" - }, - "flags": { - "type": "integer" - }, - "default_thread_rate_limit_per_user": { - "type": "integer" - } - }, - "additionalProperties": false - }, - "ChannelPermissionOverwriteType": { - "enum": [ - 0, - 1, - 2 - ], - "type": "number" - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "GuildUpdateSchema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "banner": { - "type": [ - "null", - "string" - ] - }, - "splash": { - "type": [ - "null", - "string" - ] - }, - "description": { - "type": "string" - }, - "features": { - "type": "array", - "items": { - "type": "string" - } - }, - "verification_level": { - "type": "integer" - }, - "default_message_notifications": { - "type": "integer" - }, - "system_channel_flags": { - "type": "integer" - }, - "explicit_content_filter": { - "type": "integer" - }, - "public_updates_channel_id": { - "type": "string" - }, - "afk_timeout": { - "type": "integer" - }, - "afk_channel_id": { - "type": "string" - }, - "preferred_locale": { - "type": "string" - }, - "premium_progress_bar_enabled": { - "type": "boolean" - }, - "region": { - "type": "string" - }, - "icon": { - "type": [ - "null", - "string" - ] - }, - "guild_template_code": { - "type": "string" - }, - "system_channel_id": { - "type": "string" - }, - "rules_channel_id": { - "type": "string" - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "MemberChangeSchema": { - "type": "object", - "properties": { - "roles": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "MemberNickChangeSchema": { - "type": "object", - "properties": { - "nick": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "nick" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "PruneSchema": { - "type": "object", - "properties": { - "days": { - "type": "integer" - } - }, - "additionalProperties": false, - "required": [ - "days" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, "RoleModifySchema": { "type": "object", "properties": { @@ -1200,50 +1678,6 @@ "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" }, - "RolePositionUpdateSchema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "position": { - "type": "integer" - } - }, - "additionalProperties": false, - "required": [ - "id", - "position" - ] - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "ModifyGuildStickerSchema": { - "type": "object", - "properties": { - "name": { - "minLength": 2, - "maxLength": 30, - "type": "string" - }, - "description": { - "maxLength": 100, - "type": "string" - }, - "tags": { - "maxLength": 200, - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "name", - "tags" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, "TemplateCreateSchema": { "type": "object", "properties": { @@ -1276,113 +1710,54 @@ ], "$schema": "http://json-schema.org/draft-07/schema#" }, - "VanityUrlSchema": { + "TotpDisableSchema": { "type": "object", "properties": { "code": { - "minLength": 1, - "maxLength": 20, - "type": "string" - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "VoiceStateUpdateSchema": { - "type": "object", - "properties": { - "channel_id": { - "type": "string" - }, - "guild_id": { - "type": "string" - }, - "suppress": { - "type": "boolean" - }, - "request_to_speak_timestamp": { - "type": "string", - "format": "date-time" - }, - "self_mute": { - "type": "boolean" - }, - "self_deaf": { - "type": "boolean" - }, - "self_video": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "channel_id" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "GuildUpdateWelcomeScreenSchema": { - "type": "object", - "properties": { - "welcome_channels": { - "type": "array", - "items": { - "type": "object", - "properties": { - "channel_id": { - "type": "string" - }, - "description": { - "type": "string" - }, - "emoji_id": { - "type": "string" - }, - "emoji_name": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "channel_id", - "description", - "emoji_name" - ] - } - }, - "enabled": { - "type": "boolean" - }, - "description": { - "type": "string" - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "WidgetModifySchema": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "channel_id": { "type": "string" } }, "additionalProperties": false, "required": [ - "channel_id", - "enabled" + "code" ], "$schema": "http://json-schema.org/draft-07/schema#" }, - "GuildTemplateCreateSchema": { + "TotpEnableSchema": { "type": "object", "properties": { - "name": { + "password": { "type": "string" }, - "avatar": { + "code": { + "type": "string" + }, + "secret": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "password" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "TotpSchema": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "ticket": { + "type": "string" + }, + "gift_code_sku_id": { + "type": [ + "null", + "string" + ] + }, + "login_source": { "type": [ "null", "string" @@ -1391,150 +1766,8 @@ }, "additionalProperties": false, "required": [ - "name" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "UserProfileResponse": { - "type": "object", - "properties": { - "user": { - "$ref": "#/definitions/UserPublic" - }, - "connected_accounts": { - "$ref": "#/definitions/PublicConnectedAccount" - }, - "premium_guild_since": { - "type": "string", - "format": "date-time" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "connected_accounts", - "user" - ], - "definitions": { - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] - }, - "PublicConnectedAccount": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "verified": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "name", - "type", - "verified" - ] - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "UserRelationsResponse": { - "type": "object", - "properties": { - "object": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "username": { - "type": "string" - }, - "avatar": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "public_flags": { - "type": "integer" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false, - "required": [ - "object" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "DmChannelCreateSchema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "recipients": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "required": [ - "recipients" + "code", + "ticket" ], "$schema": "http://json-schema.org/draft-07/schema#" }, @@ -1581,87 +1814,6 @@ "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" }, - "MfaCodesSchema": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "regenerate": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "password" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "TotpDisableSchema": { - "type": "object", - "properties": { - "code": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "code" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "TotpEnableSchema": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "code": { - "type": "string" - }, - "secret": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "password" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "RelationshipPutSchema": { - "type": "object", - "properties": { - "type": { - "enum": [ - 1, - 2, - 3, - 4 - ], - "type": "number" - } - }, - "additionalProperties": false, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "RelationshipPostSchema": { - "type": "object", - "properties": { - "discriminator": { - "type": "string" - }, - "username": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "discriminator", - "username" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, "UserSettingsSchema": { "type": "object", "properties": { @@ -1880,5 +2032,332 @@ } }, "$schema": "http://json-schema.org/draft-07/schema#" + }, + "VanityUrlSchema": { + "type": "object", + "properties": { + "code": { + "minLength": 1, + "maxLength": 20, + "type": "string" + } + }, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "VoiceStateUpdateSchema": { + "type": "object", + "properties": { + "channel_id": { + "type": "string" + }, + "guild_id": { + "type": "string" + }, + "suppress": { + "type": "boolean" + }, + "request_to_speak_timestamp": { + "type": "string", + "format": "date-time" + }, + "self_mute": { + "type": "boolean" + }, + "self_deaf": { + "type": "boolean" + }, + "self_video": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "channel_id" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "WebhookCreateSchema": { + "type": "object", + "properties": { + "name": { + "maxLength": 80, + "type": "string" + }, + "avatar": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "name" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "WidgetModifySchema": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "channel_id": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "channel_id", + "enabled" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "RouteResponse": { + "type": "object", + "properties": { + "status": { + "type": "integer" + }, + "body": { + "type": "array", + "items": { + "type": "string" + } + }, + "headers": { + "$ref": "#/definitions/Record" + } + }, + "additionalProperties": false, + "definitions": { + "Record": { + "type": "object", + "additionalProperties": false + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "GatewayBotResponse": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "shards": { + "type": "integer" + }, + "session_start_limit": { + "type": "object", + "properties": { + "total": { + "type": "integer" + }, + "remaining": { + "type": "integer" + }, + "reset_after": { + "type": "integer" + }, + "max_concurrency": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "max_concurrency", + "remaining", + "reset_after", + "total" + ] + } + }, + "additionalProperties": false, + "required": [ + "session_start_limit", + "shards", + "url" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "GatewayResponse": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "url" + ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "ChannelReorderSchema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "position": { + "type": "integer" + }, + "lock_permissions": { + "type": "boolean" + }, + "parent_id": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "id" + ] + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "RolePositionUpdateSchema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "position": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "id", + "position" + ] + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "UserProfileResponse": { + "type": "object", + "properties": { + "user": { + "$ref": "#/definitions/UserPublic" + }, + "connected_accounts": { + "$ref": "#/definitions/PublicConnectedAccount" + }, + "premium_guild_since": { + "type": "string", + "format": "date-time" + }, + "premium_since": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false, + "required": [ + "connected_accounts", + "user" + ], + "definitions": { + "UserPublic": { + "type": "object", + "properties": { + "username": { + "type": "string" + }, + "discriminator": { + "type": "string" + }, + "id": { + "type": "string" + }, + "public_flags": { + "type": "integer" + }, + "avatar": { + "type": "string" + }, + "accent_color": { + "type": "integer" + }, + "banner": { + "type": "string" + }, + "bio": { + "type": "string" + }, + "bot": { + "type": "boolean" + }, + "premium_since": { + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": false, + "required": [ + "bio", + "bot", + "discriminator", + "id", + "premium_since", + "public_flags", + "username" + ] + }, + "PublicConnectedAccount": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "verified": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "name", + "type", + "verified" + ] + } + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "UserRelationsResponse": { + "type": "object", + "properties": { + "object": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "username": { + "type": "string" + }, + "avatar": { + "type": "string" + }, + "discriminator": { + "type": "string" + }, + "public_flags": { + "type": "integer" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false, + "required": [ + "object" + ], + "$schema": "http://json-schema.org/draft-07/schema#" } } \ No newline at end of file diff --git a/api/src/routes/auth/login.ts b/api/src/routes/auth/login.ts index daef60566..9fc5924d2 100644 --- a/api/src/routes/auth/login.ts +++ b/api/src/routes/auth/login.ts @@ -1,21 +1,12 @@ import { Request, Response, Router } from "express"; import { route } from "@fosscord/api"; import bcrypt from "bcrypt"; -import { Config, User, generateToken, adjustEmail, FieldErrors } from "@fosscord/util"; +import { Config, User, generateToken, adjustEmail, FieldErrors, LoginSchema } from "@fosscord/util"; import crypto from "crypto"; const router: Router = Router(); export default router; -export interface LoginSchema { - login: string; - password: string; - undelete?: boolean; - captcha_key?: string; - login_source?: string; - gift_code_sku_id?: string; -} - router.post("/", route({ body: "LoginSchema" }), async (req: Request, res: Response) => { const { login, password, captcha_key, undelete } = req.body as LoginSchema; const email = adjustEmail(login); diff --git a/api/src/routes/auth/mfa/totp.ts b/api/src/routes/auth/mfa/totp.ts index 255cf8893..421dbafa6 100644 --- a/api/src/routes/auth/mfa/totp.ts +++ b/api/src/routes/auth/mfa/totp.ts @@ -1,17 +1,10 @@ import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; -import { BackupCode, FieldErrors, generateToken, User } from "@fosscord/util"; +import { BackupCode, FieldErrors, generateToken, TotpSchema, User } from "@fosscord/util"; import { verifyToken } from "node-2fa"; import { HTTPError } from "lambert-server"; const router = Router(); -export interface TotpSchema { - code: string, - ticket: string, - gift_code_sku_id?: string | null, - login_source?: string | null, -} - router.post("/", route({ body: "TotpSchema" }), async (req: Request, res: Response) => { const { code, ticket, gift_code_sku_id, login_source } = req.body as TotpSchema; diff --git a/api/src/routes/auth/register.ts b/api/src/routes/auth/register.ts index 5a3d27e97..09366a122 100644 --- a/api/src/routes/auth/register.ts +++ b/api/src/routes/auth/register.ts @@ -1,38 +1,11 @@ import { Request, Response, Router } from "express"; -import { Config, generateToken, Invite, FieldErrors, User, adjustEmail, trimSpecial } from "@fosscord/util"; +import { Config, generateToken, Invite, FieldErrors, User, adjustEmail, trimSpecial, RegisterSchema } from "@fosscord/util"; import { route, getIpAdress, IPAnalysis, isProxy } from "@fosscord/api"; import bcrypt from "bcrypt"; import { HTTPError } from "@fosscord/util"; const router: Router = Router(); -export interface RegisterSchema { - /** - * @minLength 2 - * @maxLength 32 - */ - username: string; - /** - * @minLength 1 - * @maxLength 72 - */ - password?: string; - consent: boolean; - /** - * @TJS-format email - */ - email?: string; - fingerprint?: string; - invite?: string; - /** - * @TJS-type string - */ - date_of_birth?: Date; // "2000-04-03" - gift_code_sku_id?: string; - captcha_key?: string; - promotional_email_opt_in?: boolean; -} - router.post("/", route({ body: "RegisterSchema" }), async (req: Request, res: Response) => { const body = req.body as RegisterSchema; const { register, security } = Config.get(); diff --git a/api/src/routes/channels/#channel_id/index.ts b/api/src/routes/channels/#channel_id/index.ts index 70c34f051..bb8b868ba 100644 --- a/api/src/routes/channels/#channel_id/index.ts +++ b/api/src/routes/channels/#channel_id/index.ts @@ -6,7 +6,8 @@ import { ChannelUpdateEvent, emitEvent, Recipient, - handleFile + handleFile, + ChannelModifySchema } from "@fosscord/util"; import { Request, Response, Router } from "express"; import { route } from "@fosscord/api"; @@ -48,33 +49,6 @@ router.delete("/", route({ permission: "MANAGE_CHANNELS" }), async (req: Request res.send(channel); }); -export interface ChannelModifySchema { - /** - * @maxLength 100 - */ - name?: string; - type?: ChannelType; - topic?: string; - icon?: string | null; - bitrate?: number; - user_limit?: number; - rate_limit_per_user?: number; - position?: number; - permission_overwrites?: { - id: string; - type: ChannelPermissionOverwriteType; - allow: string; - deny: string; - }[]; - parent_id?: string; - id?: string; // is not used (only for guild create) - nsfw?: boolean; - rtc_region?: string; - default_auto_archive_duration?: number; - flags?: number; - default_thread_rate_limit_per_user?: number; -} - router.patch("/", route({ body: "ChannelModifySchema", permission: "MANAGE_CHANNELS" }), async (req: Request, res: Response) => { let payload = req.body as ChannelModifySchema; const { channel_id } = req.params; diff --git a/api/src/routes/channels/#channel_id/invites.ts b/api/src/routes/channels/#channel_id/invites.ts index f111cf54c..b5c65c0dc 100644 --- a/api/src/routes/channels/#channel_id/invites.ts +++ b/api/src/routes/channels/#channel_id/invites.ts @@ -8,18 +8,6 @@ import { OrmUtils } from "@fosscord/util"; const router: Router = Router(); -export interface InviteCreateSchema { - target_user_id?: string; - target_type?: string; - validate?: string; // ? what is this - max_age?: number; - max_uses?: number; - temporary?: boolean; - unique?: boolean; - target_user?: string; - target_user_type?: number; -} - router.post("/", route({ body: "InviteCreateSchema", permission: "CREATE_INSTANT_INVITE", right: "CREATE_INVITES" }), async (req: Request, res: Response) => { const { user_id } = req; diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/ack.ts b/api/src/routes/channels/#channel_id/messages/#message_id/ack.ts index c1b8d20f0..041f4d5e3 100644 --- a/api/src/routes/channels/#channel_id/messages/#message_id/ack.ts +++ b/api/src/routes/channels/#channel_id/messages/#message_id/ack.ts @@ -5,15 +5,6 @@ import { OrmUtils } from "@fosscord/util"; const router = Router(); -// TODO: public read receipts & privacy scoping -// TODO: send read state event to all channel members -// TODO: advance-only notification cursor - -export interface MessageAcknowledgeSchema { - manual?: boolean; - mention_count?: number; -} - router.post("/", route({ body: "MessageAcknowledgeSchema" }), async (req: Request, res: Response) => { const { channel_id, message_id } = req.params; diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/index.ts b/api/src/routes/channels/#channel_id/messages/#message_id/index.ts index b3b310d3f..d7e27062c 100644 --- a/api/src/routes/channels/#channel_id/messages/#message_id/index.ts +++ b/api/src/routes/channels/#channel_id/messages/#message_id/index.ts @@ -12,13 +12,13 @@ import { MessageDeleteEvent, MessageUpdateEvent, Snowflake, - uploadFile + uploadFile, + MessageCreateSchema } from "@fosscord/util"; import { Router, Response, Request } from "express"; import multer from "multer"; import { route } from "@fosscord/api"; import { handleMessage, postHandleMessage } from "@fosscord/api"; -import { MessageCreateSchema } from "../index"; import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts b/api/src/routes/channels/#channel_id/messages/bulk-delete.ts index 2e40f110d..24a33d2d9 100644 --- a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts +++ b/api/src/routes/channels/#channel_id/messages/bulk-delete.ts @@ -8,10 +8,6 @@ const router: Router = Router(); export default router; -export interface BulkDeleteSchema { - messages: string[]; -} - // should users be able to bulk delete messages or only bots? ANSWER: all users // should this request fail, if you provide messages older than 14 days/invalid ids? ANSWER: NO // https://discord.com/developers/docs/resources/channel#bulk-delete-messages diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts index c20574224..9ab0d97df 100644 --- a/api/src/routes/channels/#channel_id/messages/index.ts +++ b/api/src/routes/channels/#channel_id/messages/index.ts @@ -5,7 +5,6 @@ import { ChannelType, Config, DmChannelDTO, - Embed, emitEvent, getPermission, getRights, @@ -13,7 +12,8 @@ import { MessageCreateEvent, Snowflake, uploadFile, - Member + Member, + MessageCreateSchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { handleMessage, postHandleMessage, route } from "@fosscord/api"; @@ -49,38 +49,6 @@ export function isTextChannel(type: ChannelType): boolean { } } -export interface MessageCreateSchema { - type?: number; - content?: string; - nonce?: string; - channel_id?: string; - tts?: boolean; - flags?: string; - embeds?: Embed[]; - embed?: Embed; - // TODO: ^ embed is deprecated in favor of embeds (https://discord.com/developers/docs/resources/channel#message-object) - allowed_mentions?: { - parse?: string[]; - roles?: string[]; - users?: string[]; - replied_user?: boolean; - }; - message_reference?: { - message_id: string; - channel_id: string; - guild_id?: string; - fail_if_not_exists?: boolean; - }; - payload_json?: string; - file?: any; - /** - TODO: we should create an interface for attachments - TODO: OpenWAAO<-->attachment-style metadata conversion - **/ - attachments?: any[]; - sticker_ids?: string[]; -} - // https://discord.com/developers/docs/resources/channel#create-message // get messages router.get("/", async (req: Request, res: Response) => { diff --git a/api/src/routes/channels/#channel_id/permissions.ts b/api/src/routes/channels/#channel_id/permissions.ts index 06a124bb7..34052fe53 100644 --- a/api/src/routes/channels/#channel_id/permissions.ts +++ b/api/src/routes/channels/#channel_id/permissions.ts @@ -1,6 +1,7 @@ import { Channel, ChannelPermissionOverwrite, + ChannelPermissionOverwriteSchema, ChannelPermissionOverwriteType, ChannelUpdateEvent, emitEvent, @@ -10,14 +11,10 @@ import { } from "@fosscord/util"; import { Router, Response, Request } from "express"; import { HTTPError } from "@fosscord/util"; - import { route } from "@fosscord/api"; + const router: Router = Router(); -// TODO: Only permissions your bot has in the guild or channel can be allowed/denied (unless your bot has a MANAGE_ROLES overwrite in the channel) - -export interface ChannelPermissionOverwriteSchema extends ChannelPermissionOverwrite {} - router.put( "/:overwrite_id", route({ body: "ChannelPermissionOverwriteSchema", permission: "MANAGE_ROLES" }), diff --git a/api/src/routes/channels/#channel_id/purge.ts b/api/src/routes/channels/#channel_id/purge.ts index 7ab4ad9a4..1ef6e1d76 100644 --- a/api/src/routes/channels/#channel_id/purge.ts +++ b/api/src/routes/channels/#channel_id/purge.ts @@ -1,4 +1,4 @@ -import { HTTPError } from "@fosscord/util"; +import { HTTPError, PurgeSchema } from "@fosscord/util"; import { route } from "@fosscord/api"; import { isTextChannel } from "./messages"; import { FindManyOptions, Between, Not } from "typeorm"; @@ -10,11 +10,6 @@ const router: Router = Router(); export default router; -export interface PurgeSchema { - before: string; - after: string; -} - /** TODO: apply the delete bit by bit to prevent client and database stress **/ diff --git a/api/src/routes/channels/#channel_id/webhooks.ts b/api/src/routes/channels/#channel_id/webhooks.ts index 00bf46197..b11c8eb97 100644 --- a/api/src/routes/channels/#channel_id/webhooks.ts +++ b/api/src/routes/channels/#channel_id/webhooks.ts @@ -6,14 +6,6 @@ import { isTextChannel } from "./messages/index"; import { DiscordApiErrors } from "@fosscord/util"; const router: Router = Router(); -// TODO: webhooks -export interface WebhookCreateSchema { - /** - * @maxLength 80 - */ - name: string; - avatar?: string; -} //TODO: implement webhooks router.get("/", route({}), async (req: Request, res: Response) => { res.json([]); diff --git a/api/src/routes/guilds/#guild_id/audit-logs.ts b/api/src/routes/guilds/#guild_id/audit-logs.ts index 7b1d00628..b54835fc2 100644 --- a/api/src/routes/guilds/#guild_id/audit-logs.ts +++ b/api/src/routes/guilds/#guild_id/audit-logs.ts @@ -1,8 +1,5 @@ import { Router, Response, Request } from "express"; -import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); //TODO: implement audit logs diff --git a/api/src/routes/guilds/#guild_id/bans.ts b/api/src/routes/guilds/#guild_id/bans.ts index 0743687dd..3d4053445 100644 --- a/api/src/routes/guilds/#guild_id/bans.ts +++ b/api/src/routes/guilds/#guild_id/bans.ts @@ -1,31 +1,9 @@ import { Request, Response, Router } from "express"; -import { DiscordApiErrors, emitEvent, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, Guild, Ban, User, Member } from "@fosscord/util"; +import { DiscordApiErrors, emitEvent, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, Guild, Ban, User, Member, BanRegistrySchema, BanModeratorSchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { getIpAdress, route } from "@fosscord/api"; import { OrmUtils } from "@fosscord/util"; -export interface BanCreateSchema { - delete_message_days?: string; - reason?: string; -}; - -export interface BanRegistrySchema { - id: string; - user_id: string; - guild_id: string; - executor_id: string; - ip?: string; - reason?: string | undefined; -}; - -export interface BanModeratorSchema { - id: string; - user_id: string; - guild_id: string; - executor_id: string; - reason?: string | undefined; -}; - const router: Router = Router(); /* TODO: Deleting the secrets is just a temporary go-around. Views should be implemented for both safety and better handling. */ diff --git a/api/src/routes/guilds/#guild_id/channels.ts b/api/src/routes/guilds/#guild_id/channels.ts index b952b4748..df1b79242 100644 --- a/api/src/routes/guilds/#guild_id/channels.ts +++ b/api/src/routes/guilds/#guild_id/channels.ts @@ -1,8 +1,7 @@ import { Router, Response, Request } from "express"; -import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; +import { Channel, ChannelUpdateEvent, getPermission, emitEvent, ChannelModifySchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); router.get("/", route({}), async (req: Request, res: Response) => { diff --git a/api/src/routes/guilds/#guild_id/emojis.ts b/api/src/routes/guilds/#guild_id/emojis.ts index 53a44ec31..4bf4bdcd4 100644 --- a/api/src/routes/guilds/#guild_id/emojis.ts +++ b/api/src/routes/guilds/#guild_id/emojis.ts @@ -1,22 +1,10 @@ import { Router, Request, Response } from "express"; -import { Config, DiscordApiErrors, emitEvent, Emoji, GuildEmojisUpdateEvent, handleFile, Member, Snowflake, User } from "@fosscord/util"; +import { Config, DiscordApiErrors, emitEvent, Emoji, EmojiCreateSchema, EmojiModifySchema, GuildEmojisUpdateEvent, handleFile, Member, Snowflake, User } from "@fosscord/util"; import { route } from "@fosscord/api"; import { OrmUtils } from "@fosscord/util"; const router = Router(); -export interface EmojiCreateSchema { - name?: string; - image: string; - require_colons?: boolean | null; - roles?: string[]; -} - -export interface EmojiModifySchema { - name?: string; - roles?: string[]; -} - router.get("/", route({}), async (req: Request, res: Response) => { const { guild_id } = req.params; diff --git a/api/src/routes/guilds/#guild_id/index.ts b/api/src/routes/guilds/#guild_id/index.ts index 8d61f7537..a9712c711 100644 --- a/api/src/routes/guilds/#guild_id/index.ts +++ b/api/src/routes/guilds/#guild_id/index.ts @@ -1,29 +1,11 @@ import { Request, Response, Router } from "express"; -import { DiscordApiErrors, emitEvent, getPermission, getRights, Guild, GuildUpdateEvent, handleFile, Member } from "@fosscord/util"; +import { DiscordApiErrors, emitEvent, getPermission, getRights, Guild, GuildUpdateEvent, GuildUpdateSchema, handleFile, Member } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { GuildCreateSchema } from "../index"; import { OrmUtils } from "@fosscord/util"; const router = Router(); -export interface GuildUpdateSchema extends Omit { - name?: string; - banner?: string | null; - splash?: string | null; - description?: string; - features?: string[]; - verification_level?: number; - default_message_notifications?: number; - system_channel_flags?: number; - explicit_content_filter?: number; - public_updates_channel_id?: string; - afk_timeout?: number; - afk_channel_id?: string; - preferred_locale?: string; - premium_progress_bar_enabled?: boolean; -} - router.get("/", route({}), async (req: Request, res: Response) => { const { guild_id } = req.params; diff --git a/api/src/routes/guilds/#guild_id/integrations.ts b/api/src/routes/guilds/#guild_id/integrations.ts index 19f685635..906501111 100644 --- a/api/src/routes/guilds/#guild_id/integrations.ts +++ b/api/src/routes/guilds/#guild_id/integrations.ts @@ -2,7 +2,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); //TODO: implement integrations list diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts index 824e34a49..794369d8b 100644 --- a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts +++ b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts @@ -1,15 +1,11 @@ import { Request, Response, Router } from "express"; -import { Member, getPermission, getRights, Role, GuildMemberUpdateEvent, emitEvent, Sticker, Emoji, Rights, Guild } from "@fosscord/util"; +import { Member, getPermission, getRights, Role, GuildMemberUpdateEvent, emitEvent, Sticker, Emoji, Rights, Guild, MemberChangeSchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { OrmUtils } from "@fosscord/util"; const router = Router(); -export interface MemberChangeSchema { - roles?: string[]; -} - router.get("/", route({}), async (req: Request, res: Response) => { const { guild_id, member_id } = req.params; await Member.IsInGuildOrFail(req.user_id, guild_id); diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts b/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts index 4dfae8dac..a6c713332 100644 --- a/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts +++ b/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts @@ -4,10 +4,6 @@ import { Request, Response, Router } from "express"; const router = Router(); -export interface MemberNickChangeSchema { - nick: string; -} - router.patch("/", route({ body: "MemberNickChangeSchema" }), async (req: Request, res: Response) => { let { guild_id, member_id } = req.params; let permissionString: PermissionResolvable = "MANAGE_NICKNAMES"; diff --git a/api/src/routes/guilds/#guild_id/prune.ts b/api/src/routes/guilds/#guild_id/prune.ts index 01f18ce40..673f022f4 100644 --- a/api/src/routes/guilds/#guild_id/prune.ts +++ b/api/src/routes/guilds/#guild_id/prune.ts @@ -62,13 +62,6 @@ router.get("/", route({}), async (req: Request, res: Response) => { res.send({ pruned: members.length }); }); -export interface PruneSchema { - /** - * @min 0 - */ - days: number; -} - router.post("/", route({ permission: "KICK_MEMBERS", right: "KICK_BAN_MEMBERS" }), async (req: Request, res: Response) => { const days = parseInt(req.body.days); diff --git a/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts b/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts index 0482b9ca7..d4422a9c5 100644 --- a/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts +++ b/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts @@ -1,8 +1,7 @@ import { Router, Request, Response } from "express"; -import { Role, Member, GuildRoleUpdateEvent, GuildRoleDeleteEvent, emitEvent, handleFile } from "@fosscord/util"; +import { Role, Member, GuildRoleUpdateEvent, GuildRoleDeleteEvent, emitEvent, handleFile, RoleModifySchema } from "@fosscord/util"; import { route } from "@fosscord/api"; import { HTTPError } from "@fosscord/util"; -import { RoleModifySchema } from "../"; import { OrmUtils } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/roles/index.ts b/api/src/routes/guilds/#guild_id/roles/index.ts index 6fbb8702a..effa4fcde 100644 --- a/api/src/routes/guilds/#guild_id/roles/index.ts +++ b/api/src/routes/guilds/#guild_id/roles/index.ts @@ -9,7 +9,8 @@ import { emitEvent, Config, DiscordApiErrors, - handleFile + handleFile, + RoleModifySchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; @@ -17,17 +18,6 @@ import { OrmUtils } from "@fosscord/util"; const router: Router = Router(); -export interface RoleModifySchema { - name?: string; - permissions?: string; - color?: number; - hoist?: boolean; // whether the role should be displayed separately in the sidebar - mentionable?: boolean; // whether the role should be mentionable - position?: number; - icon?: string; - unicode_emoji?: string; -} - export type RolePositionUpdateSchema = { id: string; position: number; diff --git a/api/src/routes/guilds/#guild_id/stickers.ts b/api/src/routes/guilds/#guild_id/stickers.ts index 157ccff40..71c9dfcd7 100644 --- a/api/src/routes/guilds/#guild_id/stickers.ts +++ b/api/src/routes/guilds/#guild_id/stickers.ts @@ -3,6 +3,7 @@ import { GuildStickersUpdateEvent, handleFile, Member, + ModifyGuildStickerSchema, Snowflake, Sticker, StickerFormatType, @@ -83,22 +84,6 @@ router.get("/:sticker_id", route({}), async (req: Request, res: Response) => { res.json(await Sticker.findOneOrFail({ where: { guild_id, id: sticker_id } })); }); -export interface ModifyGuildStickerSchema { - /** - * @minLength 2 - * @maxLength 30 - */ - name: string; - /** - * @maxLength 100 - */ - description?: string; - /** - * @maxLength 200 - */ - tags: string; -} - router.patch( "/:sticker_id", route({ body: "ModifyGuildStickerSchema", permission: "MANAGE_EMOJIS_AND_STICKERS" }), diff --git a/api/src/routes/guilds/#guild_id/templates.ts b/api/src/routes/guilds/#guild_id/templates.ts index 3d14de415..9c79692d7 100644 --- a/api/src/routes/guilds/#guild_id/templates.ts +++ b/api/src/routes/guilds/#guild_id/templates.ts @@ -24,16 +24,6 @@ const TemplateGuildProjection: (keyof Guild)[] = [ "icon" ]; -export interface TemplateCreateSchema { - name: string; - description?: string; -} - -export interface TemplateModifySchema { - name: string; - description?: string; -} - router.get("/", route({}), async (req: Request, res: Response) => { const { guild_id } = req.params; diff --git a/api/src/routes/guilds/#guild_id/vanity-url.ts b/api/src/routes/guilds/#guild_id/vanity-url.ts index ac46e18a5..ff92ce8d7 100644 --- a/api/src/routes/guilds/#guild_id/vanity-url.ts +++ b/api/src/routes/guilds/#guild_id/vanity-url.ts @@ -1,4 +1,4 @@ -import { Channel, ChannelType, getPermission, Guild, Invite, trimSpecial } from "@fosscord/util"; +import { Channel, ChannelType, getPermission, Guild, Invite, trimSpecial, VanityUrlSchema } from "@fosscord/util"; import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; import { HTTPError } from "@fosscord/util"; @@ -25,14 +25,6 @@ router.get("/", route({ permission: "MANAGE_GUILD" }), async (req: Request, res: } }); -export interface VanityUrlSchema { - /** - * @minLength 1 - * @maxLength 20 - */ - code?: string; -} - router.patch("/", route({ body: "VanityUrlSchema", permission: "MANAGE_GUILD" }), async (req: Request, res: Response) => { const { guild_id } = req.params; const body = req.body as VanityUrlSchema; diff --git a/api/src/routes/guilds/#guild_id/voice-states/#user_id/index.ts b/api/src/routes/guilds/#guild_id/voice-states/#user_id/index.ts index 32d1aadfd..28a9e8c1c 100644 --- a/api/src/routes/guilds/#guild_id/voice-states/#user_id/index.ts +++ b/api/src/routes/guilds/#guild_id/voice-states/#user_id/index.ts @@ -1,21 +1,9 @@ -import { Channel, ChannelType, DiscordApiErrors, emitEvent, getPermission, VoiceState, VoiceStateUpdateEvent } from "@fosscord/util"; +import { Channel, ChannelType, DiscordApiErrors, emitEvent, getPermission, VoiceState, VoiceStateUpdateEvent, VoiceStateUpdateSchema } from "@fosscord/util"; import { route } from "@fosscord/api"; import { Request, Response, Router } from "express"; import { OrmUtils } from "@fosscord/util"; const router = Router(); -//TODO need more testing when community guild and voice stage channel are working - -export interface VoiceStateUpdateSchema { - channel_id: string; - guild_id?: string; - suppress?: boolean; - request_to_speak_timestamp?: Date; - self_mute?: boolean; - self_deaf?: boolean; - self_video?: boolean; -} - router.patch("/", route({ body: "VoiceStateUpdateSchema" }), async (req: Request, res: Response) => { const body = req.body as VoiceStateUpdateSchema; let { guild_id, user_id } = req.params; diff --git a/api/src/routes/guilds/#guild_id/webhooks.ts b/api/src/routes/guilds/#guild_id/webhooks.ts index 7f5b95928..c8c1eb5c4 100644 --- a/api/src/routes/guilds/#guild_id/webhooks.ts +++ b/api/src/routes/guilds/#guild_id/webhooks.ts @@ -2,7 +2,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); //TODO: implement webhooks diff --git a/api/src/routes/guilds/#guild_id/welcome_screen.ts b/api/src/routes/guilds/#guild_id/welcome_screen.ts index 4093ec1dc..d08300ba0 100644 --- a/api/src/routes/guilds/#guild_id/welcome_screen.ts +++ b/api/src/routes/guilds/#guild_id/welcome_screen.ts @@ -1,21 +1,10 @@ import { Request, Response, Router } from "express"; -import { Guild, getPermission, Snowflake, Member } from "@fosscord/util"; +import { Guild, getPermission, Snowflake, Member, GuildUpdateWelcomeScreenSchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); -export interface GuildUpdateWelcomeScreenSchema { - welcome_channels?: { - channel_id: string; - description: string; - emoji_id?: string; - emoji_name: string; - }[]; - enabled?: boolean; - description?: string; -} - router.get("/", route({}), async (req: Request, res: Response) => { const guild_id = req.params.guild_id; diff --git a/api/src/routes/guilds/#guild_id/widget.ts b/api/src/routes/guilds/#guild_id/widget.ts index 103f84a30..dbb4cc0c8 100644 --- a/api/src/routes/guilds/#guild_id/widget.ts +++ b/api/src/routes/guilds/#guild_id/widget.ts @@ -1,12 +1,7 @@ import { Request, Response, Router } from "express"; -import { Guild } from "@fosscord/util"; +import { Guild, WidgetModifySchema } from "@fosscord/util"; import { route } from "@fosscord/api"; -export interface WidgetModifySchema { - enabled: boolean; // whether the widget is enabled - channel_id: string; // the widget channel id -} - const router: Router = Router(); // https://discord.com/developers/docs/resources/guild#get-guild-widget-settings diff --git a/api/src/routes/guilds/index.ts b/api/src/routes/guilds/index.ts index 64b9454b1..e4d66192b 100644 --- a/api/src/routes/guilds/index.ts +++ b/api/src/routes/guilds/index.ts @@ -1,23 +1,9 @@ import { Router, Request, Response } from "express"; -import { Role, Guild, Snowflake, Config, getRights, Member, Channel, DiscordApiErrors, handleFile } from "@fosscord/util"; +import { Role, Guild, Snowflake, Config, getRights, Member, Channel, DiscordApiErrors, handleFile, GuildCreateSchema } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { ChannelModifySchema } from "../channels/#channel_id"; const router: Router = Router(); -export interface GuildCreateSchema { - /** - * @maxLength 100 - */ - name: string; - region?: string; - icon?: string | null; - channels?: ChannelModifySchema[]; - guild_template_code?: string; - system_channel_id?: string; - rules_channel_id?: string; -} - //TODO: create default channel router.post("/", route({ body: "GuildCreateSchema", right: "CREATE_GUILDS" }), async (req: Request, res: Response) => { diff --git a/api/src/routes/guilds/templates/index.ts b/api/src/routes/guilds/templates/index.ts index bac4eb8ad..3a0de9e8c 100644 --- a/api/src/routes/guilds/templates/index.ts +++ b/api/src/routes/guilds/templates/index.ts @@ -1,15 +1,8 @@ import { Request, Response, Router } from "express"; -import { Template, Guild, Role, Snowflake, Config, User, Member } from "@fosscord/util"; +import { Template, Guild, Role, Snowflake, Config, User, Member, DiscordApiErrors, OrmUtils, GuildTemplateCreateSchema } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { DiscordApiErrors } from "@fosscord/util"; import fetch from "node-fetch"; const router: Router = Router(); -import { OrmUtils } from "@fosscord/util"; - -export interface GuildTemplateCreateSchema { - name: string; - avatar?: string | null; -} router.get("/:code", route({}), async (req: Request, res: Response) => { const { allowDiscordTemplates, allowRaws, enabled } = Config.get().templates; diff --git a/api/src/routes/users/@me/channels.ts b/api/src/routes/users/@me/channels.ts index 78f531e19..ad483529f 100644 --- a/api/src/routes/users/@me/channels.ts +++ b/api/src/routes/users/@me/channels.ts @@ -1,5 +1,5 @@ import { Request, Response, Router } from "express"; -import { Recipient, DmChannelDTO, Channel } from "@fosscord/util"; +import { Recipient, DmChannelDTO, Channel, DmChannelCreateSchema } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); @@ -12,11 +12,6 @@ router.get("/", route({}), async (req: Request, res: Response) => { res.json(await Promise.all(recipients.map((r) => DmChannelDTO.from(r.channel, [req.user_id])))); }); -export interface DmChannelCreateSchema { - name?: string; - recipients: string[]; -} - router.post("/", route({ body: "DmChannelCreateSchema" }), async (req: Request, res: Response) => { const body = req.body as DmChannelCreateSchema; res.json(await Channel.createDMChannel(body.recipients, req.user_id, body.name)); diff --git a/api/src/routes/users/@me/index.ts b/api/src/routes/users/@me/index.ts index 4cf96a8dc..7d095451d 100644 --- a/api/src/routes/users/@me/index.ts +++ b/api/src/routes/users/@me/index.ts @@ -1,30 +1,11 @@ import { Router, Request, Response } from "express"; -import { User, PrivateUserProjection, emitEvent, UserUpdateEvent, handleFile, FieldErrors } from "@fosscord/util"; +import { User, PrivateUserProjection, emitEvent, UserUpdateEvent, handleFile, FieldErrors, UserModifySchema } from "@fosscord/util"; import { route } from "@fosscord/api"; import bcrypt from "bcrypt"; import { OrmUtils, generateToken } from "@fosscord/util"; const router: Router = Router(); -export interface UserModifySchema { - /** - * @minLength 1 - * @maxLength 100 - */ - username?: string; - discriminator?: string; - avatar?: string | null; - /** - * @maxLength 1024 - */ - bio?: string; - accent_color?: number; - banner?: string | null; - password?: string; - new_password?: string; - code?: string; -} - router.get("/", route({}), async (req: Request, res: Response) => { res.json(await User.findOne({ select: PrivateUserProjection, where: { id: req.user_id } })); }); diff --git a/api/src/routes/users/@me/mfa/codes.ts b/api/src/routes/users/@me/mfa/codes.ts index 75e3e9643..4224a1c05 100644 --- a/api/src/routes/users/@me/mfa/codes.ts +++ b/api/src/routes/users/@me/mfa/codes.ts @@ -1,15 +1,10 @@ import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; -import { BackupCode, Config, FieldErrors, generateMfaBackupCodes, User } from "@fosscord/util"; +import { BackupCode, Config, FieldErrors, generateMfaBackupCodes, MfaCodesSchema, User } from "@fosscord/util"; import bcrypt from "bcrypt"; const router = Router(); -export interface MfaCodesSchema { - password: string; - regenerate?: boolean; -} - // TODO: This route is replaced with users/@me/mfa/codes-verification in newer clients router.post("/", route({ body: "MfaCodesSchema" }), async (req: Request, res: Response) => { diff --git a/api/src/routes/users/@me/mfa/totp/disable.ts b/api/src/routes/users/@me/mfa/totp/disable.ts index 2d385fdaa..2fe9355cb 100644 --- a/api/src/routes/users/@me/mfa/totp/disable.ts +++ b/api/src/routes/users/@me/mfa/totp/disable.ts @@ -2,14 +2,10 @@ import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; import { verifyToken } from 'node-2fa'; import { HTTPError } from "lambert-server"; -import { User, generateToken, BackupCode } from "@fosscord/util"; +import { User, generateToken, BackupCode, TotpDisableSchema } from "@fosscord/util"; const router = Router(); -export interface TotpDisableSchema { - code: string; -} - router.post("/", route({ body: "TotpDisableSchema" }), async (req: Request, res: Response) => { const body = req.body as TotpDisableSchema; diff --git a/api/src/routes/users/@me/mfa/totp/enable.ts b/api/src/routes/users/@me/mfa/totp/enable.ts index 87f36d558..ac668d1d5 100644 --- a/api/src/routes/users/@me/mfa/totp/enable.ts +++ b/api/src/routes/users/@me/mfa/totp/enable.ts @@ -1,5 +1,5 @@ import { Router, Request, Response } from "express"; -import { User, generateToken, BackupCode, generateMfaBackupCodes, Config } from "@fosscord/util"; +import { User, generateToken, BackupCode, generateMfaBackupCodes, Config, TotpEnableSchema } from "@fosscord/util"; import { route } from "@fosscord/api"; import bcrypt from "bcrypt"; import { HTTPError } from "lambert-server"; @@ -7,12 +7,6 @@ import { verifyToken } from 'node-2fa'; const router = Router(); -export interface TotpEnableSchema { - password: string; - code?: string; - secret?: string; -} - router.post("/", route({ body: "TotpEnableSchema" }), async (req: Request, res: Response) => { const body = req.body as TotpEnableSchema; diff --git a/api/src/routes/users/@me/relationships.ts b/api/src/routes/users/@me/relationships.ts index 6e22f4f3a..f7464b99b 100644 --- a/api/src/routes/users/@me/relationships.ts +++ b/api/src/routes/users/@me/relationships.ts @@ -38,10 +38,6 @@ router.get("/", route({}), async (req: Request, res: Response) => { return res.json(related_users); }); -export interface RelationshipPutSchema { - type?: RelationshipType; -} - router.put("/:id", route({ body: "RelationshipPutSchema" }), async (req: Request, res: Response) => { return await updateRelationship( req, @@ -51,11 +47,6 @@ router.put("/:id", route({ body: "RelationshipPutSchema" }), async (req: Request ); }); -export interface RelationshipPostSchema { - discriminator: string; - username: string; -} - router.post("/", route({ body: "RelationshipPostSchema" }), async (req: Request, res: Response) => { return await updateRelationship( req, diff --git a/api/src/routes/users/@me/settings.ts b/api/src/routes/users/@me/settings.ts index d832575fa..7578d36e3 100644 --- a/api/src/routes/users/@me/settings.ts +++ b/api/src/routes/users/@me/settings.ts @@ -4,8 +4,6 @@ import { route } from "@fosscord/api"; const router = Router(); -export interface UserSettingsSchema extends Partial {} - router.patch("/", route({ body: "UserSettingsSchema" }), async (req: Request, res: Response) => { const body = req.body as UserSettings; if (body.locale === "en") body.locale = "en-US"; // fix discord client crash on unkown locale diff --git a/api/src/util/handlers/Message.ts b/api/src/util/handlers/Message.ts index 0f584c565..ff5ece75b 100644 --- a/api/src/util/handlers/Message.ts +++ b/api/src/util/handlers/Message.ts @@ -21,12 +21,13 @@ import { Webhook, Attachment, Config, + MessageCreateSchema, } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import fetch from "node-fetch"; import cheerio from "cheerio"; -import { MessageCreateSchema } from "../../routes/channels/#channel_id/messages"; import { OrmUtils } from "@fosscord/util"; + const allow_empty = false; // TODO: check webhook, application, system author, stickers // TODO: embed gifs/videos/images diff --git a/gateway/src/opcodes/Identify.ts b/gateway/src/opcodes/Identify.ts index ce4385a3a..e62c15700 100644 --- a/gateway/src/opcodes/Identify.ts +++ b/gateway/src/opcodes/Identify.ts @@ -19,12 +19,12 @@ import { MemberPrivateProjection, PresenceUpdateEvent, UserSettings, + IdentifySchema, } from "@fosscord/util"; import { Send } from "../util/Send"; import { CLOSECODES, OPCODES } from "../util/Constants"; import { genSessionId } from "../util/SessionUtils"; import { setupListener } from "../listener/listener"; -import { IdentifySchema } from "../schema/Identify"; // import experiments from "./experiments.json"; const experiments: any = []; import { check } from "./instanceOf"; diff --git a/gateway/src/opcodes/LazyRequest.ts b/gateway/src/opcodes/LazyRequest.ts index 5ba65cdd7..cd0586de2 100644 --- a/gateway/src/opcodes/LazyRequest.ts +++ b/gateway/src/opcodes/LazyRequest.ts @@ -1,5 +1,4 @@ -import { getPermission, listenEvent, Member, Role, getOrInitialiseDatabase } from "@fosscord/util"; -import { LazyRequest } from "../schema/LazyRequest"; +import { getPermission, listenEvent, Member, Role, getOrInitialiseDatabase, LazyRequest } from "@fosscord/util"; import { Send } from "../util/Send"; import { OPCODES } from "../util/Constants"; import { WebSocket, Payload, handlePresenceUpdate } from "@fosscord/gateway"; diff --git a/gateway/src/opcodes/PresenceUpdate.ts b/gateway/src/opcodes/PresenceUpdate.ts index 415df6eea..f31c91616 100644 --- a/gateway/src/opcodes/PresenceUpdate.ts +++ b/gateway/src/opcodes/PresenceUpdate.ts @@ -1,6 +1,5 @@ import { WebSocket, Payload } from "@fosscord/gateway"; -import { emitEvent, PresenceUpdateEvent, Session, User } from "@fosscord/util"; -import { ActivitySchema } from "../schema/Activity"; +import { ActivitySchema, emitEvent, PresenceUpdateEvent, Session, User } from "@fosscord/util"; import { check } from "./instanceOf"; export async function onPresenceUpdate(this: WebSocket, { d }: Payload) { diff --git a/gateway/src/opcodes/VoiceStateUpdate.ts b/gateway/src/opcodes/VoiceStateUpdate.ts index 845a75c08..73f73565c 100644 --- a/gateway/src/opcodes/VoiceStateUpdate.ts +++ b/gateway/src/opcodes/VoiceStateUpdate.ts @@ -1,4 +1,3 @@ -import { VoiceStateUpdateSchema } from "../schema/VoiceStateUpdateSchema"; import { Payload, WebSocket } from "@fosscord/gateway"; import { genVoiceToken } from "../util/SessionUtils"; import { check } from "./instanceOf"; @@ -10,6 +9,7 @@ import { VoiceServerUpdateEvent, VoiceState, VoiceStateUpdateEvent, + VoiceStateUpdateSchema, } from "@fosscord/util"; import { OrmUtils } from "@fosscord/util"; import { Region } from "@fosscord/util/src/config"; diff --git a/gateway/src/schema/VoiceStateUpdateSchema.ts b/gateway/src/schema/VoiceStateUpdateSchema.ts deleted file mode 100644 index 9efa191e7..000000000 --- a/gateway/src/schema/VoiceStateUpdateSchema.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const VoiceStateUpdateSchema = { - $guild_id: String, - $channel_id: String, - self_mute: Boolean, - self_deaf: Boolean, - self_video: Boolean, -}; - -export interface VoiceStateUpdateSchema { - guild_id?: string; - channel_id?: string; - self_mute: boolean; - self_deaf: boolean; - self_video: boolean; -} diff --git a/util/src/index.ts b/util/src/index.ts index 259d1c97b..daeffd698 100644 --- a/util/src/index.ts +++ b/util/src/index.ts @@ -4,4 +4,5 @@ export * from "./util/index"; export * from "./interfaces/index"; export * from "./entities/index"; export * from "./dtos/index"; -export * from "./util/MFA"; \ No newline at end of file +export * from "./util/MFA"; +export * from "./schemas"; \ No newline at end of file diff --git a/gateway/src/schema/Activity.ts b/util/src/schemas/ActivitySchema.ts similarity index 100% rename from gateway/src/schema/Activity.ts rename to util/src/schemas/ActivitySchema.ts diff --git a/util/src/schemas/BanCreateSchema.ts b/util/src/schemas/BanCreateSchema.ts new file mode 100644 index 000000000..64b029430 --- /dev/null +++ b/util/src/schemas/BanCreateSchema.ts @@ -0,0 +1,5 @@ + +export interface BanCreateSchema { + delete_message_days?: string; + reason?: string; +} diff --git a/util/src/schemas/BanModeratorSchema.ts b/util/src/schemas/BanModeratorSchema.ts new file mode 100644 index 000000000..b497d3199 --- /dev/null +++ b/util/src/schemas/BanModeratorSchema.ts @@ -0,0 +1,8 @@ + +export interface BanModeratorSchema { + id: string; + user_id: string; + guild_id: string; + executor_id: string; + reason?: string | undefined; +} diff --git a/util/src/schemas/BanRegistrySchema.ts b/util/src/schemas/BanRegistrySchema.ts new file mode 100644 index 000000000..661f934f9 --- /dev/null +++ b/util/src/schemas/BanRegistrySchema.ts @@ -0,0 +1,9 @@ + +export interface BanRegistrySchema { + id: string; + user_id: string; + guild_id: string; + executor_id: string; + ip?: string; + reason?: string | undefined; +} diff --git a/util/src/schemas/BulkDeleteSchema.ts b/util/src/schemas/BulkDeleteSchema.ts new file mode 100644 index 000000000..26f883749 --- /dev/null +++ b/util/src/schemas/BulkDeleteSchema.ts @@ -0,0 +1,4 @@ + +export interface BulkDeleteSchema { + messages: string[]; +} diff --git a/util/src/schemas/ChannelModifySchema.ts b/util/src/schemas/ChannelModifySchema.ts new file mode 100644 index 000000000..3cfcf7d22 --- /dev/null +++ b/util/src/schemas/ChannelModifySchema.ts @@ -0,0 +1,29 @@ +import { ChannelPermissionOverwriteType, ChannelType } from ".."; + + +export interface ChannelModifySchema { + /** + * @maxLength 100 + */ + name?: string; + type?: ChannelType; + topic?: string; + icon?: string | null; + bitrate?: number; + user_limit?: number; + rate_limit_per_user?: number; + position?: number; + permission_overwrites?: { + id: string; + type: ChannelPermissionOverwriteType; + allow: string; + deny: string; + }[]; + parent_id?: string; + id?: string; // is not used (only for guild create) + nsfw?: boolean; + rtc_region?: string; + default_auto_archive_duration?: number; + flags?: number; + default_thread_rate_limit_per_user?: number; +} \ No newline at end of file diff --git a/util/src/schemas/ChannelPermissionOverwriteSchema.ts b/util/src/schemas/ChannelPermissionOverwriteSchema.ts new file mode 100644 index 000000000..fe9ba860b --- /dev/null +++ b/util/src/schemas/ChannelPermissionOverwriteSchema.ts @@ -0,0 +1,5 @@ +import { ChannelPermissionOverwrite } from "@fosscord/util"; + +// TODO: Only permissions your bot has in the guild or channel can be allowed/denied (unless your bot has a MANAGE_ROLES overwrite in the channel) + +export interface ChannelPermissionOverwriteSchema extends ChannelPermissionOverwrite { } diff --git a/util/src/schemas/DmChannelCreateSchema.ts b/util/src/schemas/DmChannelCreateSchema.ts new file mode 100644 index 000000000..d5afc6d7c --- /dev/null +++ b/util/src/schemas/DmChannelCreateSchema.ts @@ -0,0 +1,5 @@ + +export interface DmChannelCreateSchema { + name?: string; + recipients: string[]; +} diff --git a/util/src/schemas/EmojiCreateSchema.ts b/util/src/schemas/EmojiCreateSchema.ts new file mode 100644 index 000000000..d50c419cc --- /dev/null +++ b/util/src/schemas/EmojiCreateSchema.ts @@ -0,0 +1,7 @@ + +export interface EmojiCreateSchema { + name?: string; + image: string; + require_colons?: boolean | null; + roles?: string[]; +} diff --git a/util/src/schemas/EmojiModifySchema.ts b/util/src/schemas/EmojiModifySchema.ts new file mode 100644 index 000000000..5529dbd50 --- /dev/null +++ b/util/src/schemas/EmojiModifySchema.ts @@ -0,0 +1,5 @@ + +export interface EmojiModifySchema { + name?: string; + roles?: string[]; +} diff --git a/util/src/schemas/GuildCreateSchema.ts b/util/src/schemas/GuildCreateSchema.ts new file mode 100644 index 000000000..e48551192 --- /dev/null +++ b/util/src/schemas/GuildCreateSchema.ts @@ -0,0 +1,14 @@ +import { ChannelModifySchema } from "."; + +export interface GuildCreateSchema { + /** + * @maxLength 100 + */ + name: string; + region?: string; + icon?: string | null; + channels?: ChannelModifySchema[]; + guild_template_code?: string; + system_channel_id?: string; + rules_channel_id?: string; +} diff --git a/util/src/schemas/GuildTemplateCreateSchema.ts b/util/src/schemas/GuildTemplateCreateSchema.ts new file mode 100644 index 000000000..1579001e7 --- /dev/null +++ b/util/src/schemas/GuildTemplateCreateSchema.ts @@ -0,0 +1,5 @@ + +export interface GuildTemplateCreateSchema { + name: string; + avatar?: string | null; +} diff --git a/util/src/schemas/GuildUpdateSchema.ts b/util/src/schemas/GuildUpdateSchema.ts new file mode 100644 index 000000000..86527cf10 --- /dev/null +++ b/util/src/schemas/GuildUpdateSchema.ts @@ -0,0 +1,18 @@ +import { GuildCreateSchema } from "."; + +export interface GuildUpdateSchema extends Omit { + name?: string; + banner?: string | null; + splash?: string | null; + description?: string; + features?: string[]; + verification_level?: number; + default_message_notifications?: number; + system_channel_flags?: number; + explicit_content_filter?: number; + public_updates_channel_id?: string; + afk_timeout?: number; + afk_channel_id?: string; + preferred_locale?: string; + premium_progress_bar_enabled?: boolean; +} diff --git a/util/src/schemas/GuildUpdateWelcomeScreenSchema.ts b/util/src/schemas/GuildUpdateWelcomeScreenSchema.ts new file mode 100644 index 000000000..b1e36920b --- /dev/null +++ b/util/src/schemas/GuildUpdateWelcomeScreenSchema.ts @@ -0,0 +1,11 @@ + +export interface GuildUpdateWelcomeScreenSchema { + welcome_channels?: { + channel_id: string; + description: string; + emoji_id?: string; + emoji_name: string; + }[]; + enabled?: boolean; + description?: string; +} diff --git a/gateway/src/schema/Identify.ts b/util/src/schemas/IdentifySchema.ts similarity index 98% rename from gateway/src/schema/Identify.ts rename to util/src/schemas/IdentifySchema.ts index 211413212..8f95c6a0c 100644 --- a/gateway/src/schema/Identify.ts +++ b/util/src/schemas/IdentifySchema.ts @@ -1,4 +1,4 @@ -import { ActivitySchema } from "./Activity"; +import { ActivitySchema } from "./ActivitySchema"; export const IdentifySchema = { token: String, diff --git a/util/src/schemas/InviteCreateSchema.ts b/util/src/schemas/InviteCreateSchema.ts new file mode 100644 index 000000000..7f6af3386 --- /dev/null +++ b/util/src/schemas/InviteCreateSchema.ts @@ -0,0 +1,12 @@ + +export interface InviteCreateSchema { + target_user_id?: string; + target_type?: string; + validate?: string; // ? what is this + max_age?: number; + max_uses?: number; + temporary?: boolean; + unique?: boolean; + target_user?: string; + target_user_type?: number; +} diff --git a/gateway/src/schema/LazyRequest.ts b/util/src/schemas/LazyRequestSchema.ts similarity index 100% rename from gateway/src/schema/LazyRequest.ts rename to util/src/schemas/LazyRequestSchema.ts diff --git a/util/src/schemas/LoginSchema.ts b/util/src/schemas/LoginSchema.ts new file mode 100644 index 000000000..358019a8c --- /dev/null +++ b/util/src/schemas/LoginSchema.ts @@ -0,0 +1,9 @@ + +export interface LoginSchema { + login: string; + password: string; + undelete?: boolean; + captcha_key?: string; + login_source?: string; + gift_code_sku_id?: string; +} diff --git a/util/src/schemas/MemberChangeSchema.ts b/util/src/schemas/MemberChangeSchema.ts new file mode 100644 index 000000000..a75c0ea05 --- /dev/null +++ b/util/src/schemas/MemberChangeSchema.ts @@ -0,0 +1,4 @@ + +export interface MemberChangeSchema { + roles?: string[]; +} diff --git a/util/src/schemas/MemberNickChangeSchema.ts b/util/src/schemas/MemberNickChangeSchema.ts new file mode 100644 index 000000000..e6a6a0070 --- /dev/null +++ b/util/src/schemas/MemberNickChangeSchema.ts @@ -0,0 +1,4 @@ + +export interface MemberNickChangeSchema { + nick: string; +} diff --git a/util/src/schemas/MessageAcknowledgeSchema.ts b/util/src/schemas/MessageAcknowledgeSchema.ts new file mode 100644 index 000000000..3f4eb2b62 --- /dev/null +++ b/util/src/schemas/MessageAcknowledgeSchema.ts @@ -0,0 +1,8 @@ +// TODO: public read receipts & privacy scoping +// TODO: send read state event to all channel members +// TODO: advance-only notification cursor + +export interface MessageAcknowledgeSchema { + manual?: boolean; + mention_count?: number; +} diff --git a/util/src/schemas/MessageCreateSchema.ts b/util/src/schemas/MessageCreateSchema.ts new file mode 100644 index 000000000..7b1cc7b99 --- /dev/null +++ b/util/src/schemas/MessageCreateSchema.ts @@ -0,0 +1,34 @@ +import { Embed } from "@fosscord/util"; + + +export interface MessageCreateSchema { + type?: number; + content?: string; + nonce?: string; + channel_id?: string; + tts?: boolean; + flags?: string; + embeds?: Embed[]; + embed?: Embed; + // TODO: ^ embed is deprecated in favor of embeds (https://discord.com/developers/docs/resources/channel#message-object) + allowed_mentions?: { + parse?: string[]; + roles?: string[]; + users?: string[]; + replied_user?: boolean; + }; + message_reference?: { + message_id: string; + channel_id: string; + guild_id?: string; + fail_if_not_exists?: boolean; + }; + payload_json?: string; + file?: any; + /** + TODO: we should create an interface for attachments + TODO: OpenWAAO<-->attachment-style metadata conversion + **/ + attachments?: any[]; + sticker_ids?: string[]; +} diff --git a/util/src/schemas/MfaCodesSchema.ts b/util/src/schemas/MfaCodesSchema.ts new file mode 100644 index 000000000..53230841f --- /dev/null +++ b/util/src/schemas/MfaCodesSchema.ts @@ -0,0 +1,5 @@ + +export interface MfaCodesSchema { + password: string; + regenerate?: boolean; +} diff --git a/util/src/schemas/ModifyGuildStickerSchema.ts b/util/src/schemas/ModifyGuildStickerSchema.ts new file mode 100644 index 000000000..6f24e4cea --- /dev/null +++ b/util/src/schemas/ModifyGuildStickerSchema.ts @@ -0,0 +1,16 @@ + +export interface ModifyGuildStickerSchema { + /** + * @minLength 2 + * @maxLength 30 + */ + name: string; + /** + * @maxLength 100 + */ + description?: string; + /** + * @maxLength 200 + */ + tags: string; +} diff --git a/util/src/schemas/PruneSchema.ts b/util/src/schemas/PruneSchema.ts new file mode 100644 index 000000000..eebac7635 --- /dev/null +++ b/util/src/schemas/PruneSchema.ts @@ -0,0 +1,7 @@ + +export interface PruneSchema { + /** + * @min 0 + */ + days: number; +} diff --git a/util/src/schemas/PurgeSchema.ts b/util/src/schemas/PurgeSchema.ts new file mode 100644 index 000000000..0eeef6f22 --- /dev/null +++ b/util/src/schemas/PurgeSchema.ts @@ -0,0 +1,5 @@ + +export interface PurgeSchema { + before: string; + after: string; +} diff --git a/util/src/schemas/RegisterSchema.ts b/util/src/schemas/RegisterSchema.ts new file mode 100644 index 000000000..e53330d2c --- /dev/null +++ b/util/src/schemas/RegisterSchema.ts @@ -0,0 +1,27 @@ + +export interface RegisterSchema { + /** + * @minLength 2 + * @maxLength 32 + */ + username: string; + /** + * @minLength 1 + * @maxLength 72 + */ + password?: string; + consent: boolean; + /** + * @TJS-format email + */ + email?: string; + fingerprint?: string; + invite?: string; + /** + * @TJS-type string + */ + date_of_birth?: Date; // "2000-04-03" + gift_code_sku_id?: string; + captcha_key?: string; + promotional_email_opt_in?: boolean; +} diff --git a/util/src/schemas/RelationshipPostSchema.ts b/util/src/schemas/RelationshipPostSchema.ts new file mode 100644 index 000000000..400937008 --- /dev/null +++ b/util/src/schemas/RelationshipPostSchema.ts @@ -0,0 +1,5 @@ + +export interface RelationshipPostSchema { + discriminator: string; + username: string; +} diff --git a/util/src/schemas/RelationshipPutSchema.ts b/util/src/schemas/RelationshipPutSchema.ts new file mode 100644 index 000000000..f46966e01 --- /dev/null +++ b/util/src/schemas/RelationshipPutSchema.ts @@ -0,0 +1,6 @@ +import { RelationshipType } from "@fosscord/util"; + + +export interface RelationshipPutSchema { + type?: RelationshipType; +} diff --git a/util/src/schemas/RoleModifySchema.ts b/util/src/schemas/RoleModifySchema.ts new file mode 100644 index 000000000..d08a50222 --- /dev/null +++ b/util/src/schemas/RoleModifySchema.ts @@ -0,0 +1,11 @@ + +export interface RoleModifySchema { + name?: string; + permissions?: string; + color?: number; + hoist?: boolean; // whether the role should be displayed separately in the sidebar + mentionable?: boolean; // whether the role should be mentionable + position?: number; + icon?: string; + unicode_emoji?: string; +} diff --git a/util/src/schemas/TemplateCreateSchema.ts b/util/src/schemas/TemplateCreateSchema.ts new file mode 100644 index 000000000..72c19f681 --- /dev/null +++ b/util/src/schemas/TemplateCreateSchema.ts @@ -0,0 +1,5 @@ + +export interface TemplateCreateSchema { + name: string; + description?: string; +} diff --git a/util/src/schemas/TemplateModifySchema.ts b/util/src/schemas/TemplateModifySchema.ts new file mode 100644 index 000000000..2231a1d2a --- /dev/null +++ b/util/src/schemas/TemplateModifySchema.ts @@ -0,0 +1,5 @@ + +export interface TemplateModifySchema { + name: string; + description?: string; +} diff --git a/util/src/schemas/TotpDisableSchema.ts b/util/src/schemas/TotpDisableSchema.ts new file mode 100644 index 000000000..b73db64e5 --- /dev/null +++ b/util/src/schemas/TotpDisableSchema.ts @@ -0,0 +1,4 @@ + +export interface TotpDisableSchema { + code: string; +} diff --git a/util/src/schemas/TotpEnableSchema.ts b/util/src/schemas/TotpEnableSchema.ts new file mode 100644 index 000000000..44d9ebac5 --- /dev/null +++ b/util/src/schemas/TotpEnableSchema.ts @@ -0,0 +1,6 @@ + +export interface TotpEnableSchema { + password: string; + code?: string; + secret?: string; +} diff --git a/util/src/schemas/TotpSchema.ts b/util/src/schemas/TotpSchema.ts new file mode 100644 index 000000000..fe54735ea --- /dev/null +++ b/util/src/schemas/TotpSchema.ts @@ -0,0 +1,7 @@ + +export interface TotpSchema { + code: string; + ticket: string; + gift_code_sku_id?: string | null; + login_source?: string | null; +} diff --git a/util/src/schemas/UserModifySchema.ts b/util/src/schemas/UserModifySchema.ts new file mode 100644 index 000000000..659f5841d --- /dev/null +++ b/util/src/schemas/UserModifySchema.ts @@ -0,0 +1,19 @@ + +export interface UserModifySchema { + /** + * @minLength 1 + * @maxLength 100 + */ + username?: string; + discriminator?: string; + avatar?: string | null; + /** + * @maxLength 1024 + */ + bio?: string; + accent_color?: number; + banner?: string | null; + password?: string; + new_password?: string; + code?: string; +} diff --git a/util/src/schemas/UserSettingsSchema.ts b/util/src/schemas/UserSettingsSchema.ts new file mode 100644 index 000000000..b497dff23 --- /dev/null +++ b/util/src/schemas/UserSettingsSchema.ts @@ -0,0 +1,4 @@ +import { UserSettings } from "@fosscord/util"; + + +export interface UserSettingsSchema extends Partial { } diff --git a/util/src/schemas/VanityUrlSchema.ts b/util/src/schemas/VanityUrlSchema.ts new file mode 100644 index 000000000..de32695ab --- /dev/null +++ b/util/src/schemas/VanityUrlSchema.ts @@ -0,0 +1,8 @@ + +export interface VanityUrlSchema { + /** + * @minLength 1 + * @maxLength 20 + */ + code?: string; +} diff --git a/util/src/schemas/VoiceStateUpdateSchema.ts b/util/src/schemas/VoiceStateUpdateSchema.ts new file mode 100644 index 000000000..02bb141ba --- /dev/null +++ b/util/src/schemas/VoiceStateUpdateSchema.ts @@ -0,0 +1,18 @@ +export const VoiceStateUpdateSchema = { + $guild_id: String, + $channel_id: String, + self_mute: Boolean, + self_deaf: Boolean, + self_video: Boolean, +}; + +//TODO need more testing when community guild and voice stage channel are working +export interface VoiceStateUpdateSchema { + channel_id: string; + guild_id?: string; + suppress?: boolean; + request_to_speak_timestamp?: Date; + self_mute?: boolean; + self_deaf?: boolean; + self_video?: boolean; +} \ No newline at end of file diff --git a/util/src/schemas/WebhookCreateSchema.ts b/util/src/schemas/WebhookCreateSchema.ts new file mode 100644 index 000000000..12ab18696 --- /dev/null +++ b/util/src/schemas/WebhookCreateSchema.ts @@ -0,0 +1,8 @@ +// TODO: webhooks +export interface WebhookCreateSchema { + /** + * @maxLength 80 + */ + name: string; + avatar?: string; +} diff --git a/util/src/schemas/WidgetModifySchema.ts b/util/src/schemas/WidgetModifySchema.ts new file mode 100644 index 000000000..390efc307 --- /dev/null +++ b/util/src/schemas/WidgetModifySchema.ts @@ -0,0 +1,5 @@ + +export interface WidgetModifySchema { + enabled: boolean; // whether the widget is enabled + channel_id: string; // the widget channel id +} diff --git a/util/src/schemas/index.ts b/util/src/schemas/index.ts new file mode 100644 index 000000000..f54ae8406 --- /dev/null +++ b/util/src/schemas/index.ts @@ -0,0 +1,41 @@ +export * from "./ActivitySchema"; +export * from "./BanCreateSchema"; +export * from "./BanModeratorSchema"; +export * from "./BanRegistrySchema"; +export * from "./BulkDeleteSchema"; +export * from "./ChannelModifySchema"; +export * from "./ChannelPermissionOverwriteSchema"; +export * from "./DmChannelCreateSchema"; +export * from "./EmojiCreateSchema"; +export * from "./EmojiModifySchema"; +export * from "./GuildCreateSchema"; +export * from "./GuildTemplateCreateSchema"; +export * from "./GuildUpdateSchema"; +export * from "./GuildUpdateWelcomeScreenSchema"; +export * from "./IdentifySchema"; +export * from "./InviteCreateSchema"; +export * from "./LazyRequestSchema"; +export * from "./LoginSchema"; +export * from "./MemberChangeSchema"; +export * from "./MemberNickChangeSchema"; +export * from "./MessageAcknowledgeSchema"; +export * from "./MessageCreateSchema"; +export * from "./MfaCodesSchema"; +export * from "./ModifyGuildStickerSchema"; +export * from "./PruneSchema"; +export * from "./PurgeSchema"; +export * from "./RegisterSchema"; +export * from "./RelationshipPostSchema"; +export * from "./RelationshipPutSchema"; +export * from "./RoleModifySchema"; +export * from "./TemplateCreateSchema"; +export * from "./TemplateModifySchema"; +export * from "./TotpDisableSchema"; +export * from "./TotpEnableSchema"; +export * from "./TotpSchema"; +export * from "./UserModifySchema"; +export * from "./UserSettingsSchema"; +export * from "./VanityUrlSchema"; +export * from "./VoiceStateUpdateSchema"; +export * from "./WebhookCreateSchema"; +export * from "./WidgetModifySchema"; diff --git a/util/src/util/Config.ts b/util/src/util/Config.ts index 0b55ca4b0..e0fb2a810 100644 --- a/util/src/util/Config.ts +++ b/util/src/util/Config.ts @@ -60,8 +60,11 @@ function applyConfig(val: ConfigValue) { pair.value = obj; return pair.save(); } - if(process.env.CONFIG_PATH) + if(process.env.CONFIG_PATH) { + if(/--debug|--inspect/.test(process.execArgv.join(' '))) + console.log(`Writing config: ${process.env.CONFIG_PATH}`) fs.writeFileSync(overridePath, JSON.stringify(val, null, 4)); + } return apply(val); } From 1f4ba6395bf96237fd8b638fd70926b887b9c374 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 12 Aug 2022 11:42:34 +0200 Subject: [PATCH 07/23] Forgot some schemas, removed no longer used paths from generate schema script --- api/assets/schemas.json | 563 ++++++------------ api/scripts/generate_schema.js | 5 +- api/src/routes/guilds/#guild_id/channels.ts | 4 +- .../routes/guilds/#guild_id/roles/index.ts | 8 +- util/src/schemas/ChannelReorderSchema.ts | 1 + util/src/schemas/RolePositionUpdateSchema.ts | 4 + util/src/schemas/index.ts | 2 + 7 files changed, 204 insertions(+), 383 deletions(-) create mode 100644 util/src/schemas/ChannelReorderSchema.ts create mode 100644 util/src/schemas/RolePositionUpdateSchema.ts diff --git a/api/assets/schemas.json b/api/assets/schemas.json index f102f9d02..9286b8046 100644 --- a/api/assets/schemas.json +++ b/api/assets/schemas.json @@ -98,175 +98,27 @@ ], "$schema": "http://json-schema.org/draft-07/schema#" }, - "ActivitySchema": { + "RouteResponse": { "type": "object", "properties": { - "afk": { - "type": "boolean" - }, "status": { - "$ref": "#/definitions/Status" + "type": "integer" }, - "activities": { + "body": { "type": "array", "items": { - "$ref": "#/definitions/Activity" + "type": "string" } }, - "since": { - "type": "integer" + "headers": { + "$ref": "#/definitions/Record" } }, "additionalProperties": false, - "required": [ - "afk", - "status" - ], "definitions": { - "Status": { - "enum": [ - "dnd", - "idle", - "invisible", - "offline", - "online" - ], - "type": "string" - }, - "Activity": { + "Record": { "type": "object", - "properties": { - "name": { - "type": "string" - }, - "type": { - "$ref": "#/definitions/ActivityType" - }, - "url": { - "type": "string" - }, - "created_at": { - "type": "integer" - }, - "timestamps": { - "type": "object", - "properties": { - "start": { - "type": "integer" - }, - "end": { - "type": "integer" - } - }, - "additionalProperties": false, - "required": [ - "end", - "start" - ] - }, - "application_id": { - "type": "string" - }, - "details": { - "type": "string" - }, - "state": { - "type": "string" - }, - "emoji": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "id": { - "type": "string" - }, - "animated": { - "type": "boolean" - } - }, - "additionalProperties": false, - "required": [ - "animated", - "name" - ] - }, - "party": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "size": { - "type": "array", - "items": [ - { - "type": "integer" - } - ], - "minItems": 1, - "maxItems": 1 - } - }, - "additionalProperties": false - }, - "assets": { - "type": "object", - "properties": { - "large_image": { - "type": "string" - }, - "large_text": { - "type": "string" - }, - "small_image": { - "type": "string" - }, - "small_text": { - "type": "string" - } - }, - "additionalProperties": false - }, - "secrets": { - "type": "object", - "properties": { - "join": { - "type": "string" - }, - "spectate": { - "type": "string" - }, - "match": { - "type": "string" - } - }, - "additionalProperties": false - }, - "instance": { - "type": "boolean" - }, - "flags": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "flags", - "name", - "type" - ] - }, - "ActivityType": { - "enum": [ - 0, - 1, - 2, - 4, - 5 - ], - "type": "number" + "additionalProperties": false } }, "$schema": "http://json-schema.org/draft-07/schema#" @@ -510,6 +362,31 @@ }, "$schema": "http://json-schema.org/draft-07/schema#" }, + "ChannelReorderSchema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "position": { + "type": "integer" + }, + "lock_permissions": { + "type": "boolean" + }, + "parent_id": { + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "id" + ] + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, "DmChannelCreateSchema": { "type": "object", "properties": { @@ -1678,6 +1555,26 @@ "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" }, + "RolePositionUpdateSchema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "position": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "id", + "position" + ] + }, + "$schema": "http://json-schema.org/draft-07/schema#" + }, "TemplateCreateSchema": { "type": "object", "properties": { @@ -2111,253 +2008,177 @@ ], "$schema": "http://json-schema.org/draft-07/schema#" }, - "RouteResponse": { + "ActivitySchema": { "type": "object", "properties": { - "status": { - "type": "integer" + "afk": { + "type": "boolean" }, - "body": { + "status": { + "$ref": "#/definitions/Status" + }, + "activities": { "type": "array", "items": { - "type": "string" + "$ref": "#/definitions/Activity" } }, - "headers": { - "$ref": "#/definitions/Record" - } - }, - "additionalProperties": false, - "definitions": { - "Record": { - "type": "object", - "additionalProperties": false - } - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "GatewayBotResponse": { - "type": "object", - "properties": { - "url": { - "type": "string" - }, - "shards": { + "since": { "type": "integer" - }, - "session_start_limit": { - "type": "object", - "properties": { - "total": { - "type": "integer" - }, - "remaining": { - "type": "integer" - }, - "reset_after": { - "type": "integer" - }, - "max_concurrency": { - "type": "integer" - } - }, - "additionalProperties": false, - "required": [ - "max_concurrency", - "remaining", - "reset_after", - "total" - ] } }, "additionalProperties": false, "required": [ - "session_start_limit", - "shards", - "url" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "GatewayResponse": { - "type": "object", - "properties": { - "url": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "url" - ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "ChannelReorderSchema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "position": { - "type": "integer" - }, - "lock_permissions": { - "type": "boolean" - }, - "parent_id": { - "type": "string" - } - }, - "additionalProperties": false, - "required": [ - "id" - ] - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "RolePositionUpdateSchema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "position": { - "type": "integer" - } - }, - "additionalProperties": false, - "required": [ - "id", - "position" - ] - }, - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "UserProfileResponse": { - "type": "object", - "properties": { - "user": { - "$ref": "#/definitions/UserPublic" - }, - "connected_accounts": { - "$ref": "#/definitions/PublicConnectedAccount" - }, - "premium_guild_since": { - "type": "string", - "format": "date-time" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "connected_accounts", - "user" + "afk", + "status" ], "definitions": { - "UserPublic": { - "type": "object", - "properties": { - "username": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "id": { - "type": "string" - }, - "public_flags": { - "type": "integer" - }, - "avatar": { - "type": "string" - }, - "accent_color": { - "type": "integer" - }, - "banner": { - "type": "string" - }, - "bio": { - "type": "string" - }, - "bot": { - "type": "boolean" - }, - "premium_since": { - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": false, - "required": [ - "bio", - "bot", - "discriminator", - "id", - "premium_since", - "public_flags", - "username" - ] + "Status": { + "enum": [ + "dnd", + "idle", + "invisible", + "offline", + "online" + ], + "type": "string" }, - "PublicConnectedAccount": { + "Activity": { "type": "object", "properties": { "name": { "type": "string" }, "type": { + "$ref": "#/definitions/ActivityType" + }, + "url": { "type": "string" }, - "verified": { + "created_at": { + "type": "integer" + }, + "timestamps": { + "type": "object", + "properties": { + "start": { + "type": "integer" + }, + "end": { + "type": "integer" + } + }, + "additionalProperties": false, + "required": [ + "end", + "start" + ] + }, + "application_id": { + "type": "string" + }, + "details": { + "type": "string" + }, + "state": { + "type": "string" + }, + "emoji": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "animated": { + "type": "boolean" + } + }, + "additionalProperties": false, + "required": [ + "animated", + "name" + ] + }, + "party": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "size": { + "type": "array", + "items": [ + { + "type": "integer" + } + ], + "minItems": 1, + "maxItems": 1 + } + }, + "additionalProperties": false + }, + "assets": { + "type": "object", + "properties": { + "large_image": { + "type": "string" + }, + "large_text": { + "type": "string" + }, + "small_image": { + "type": "string" + }, + "small_text": { + "type": "string" + } + }, + "additionalProperties": false + }, + "secrets": { + "type": "object", + "properties": { + "join": { + "type": "string" + }, + "spectate": { + "type": "string" + }, + "match": { + "type": "string" + } + }, + "additionalProperties": false + }, + "instance": { "type": "boolean" + }, + "flags": { + "type": "string" } }, "additionalProperties": false, "required": [ + "flags", "name", - "type", - "verified" + "type" ] + }, + "ActivityType": { + "enum": [ + 0, + 1, + 2, + 4, + 5 + ], + "type": "number" } }, "$schema": "http://json-schema.org/draft-07/schema#" - }, - "UserRelationsResponse": { - "type": "object", - "properties": { - "object": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "username": { - "type": "string" - }, - "avatar": { - "type": "string" - }, - "discriminator": { - "type": "string" - }, - "public_flags": { - "type": "integer" - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false, - "required": [ - "object" - ], - "$schema": "http://json-schema.org/draft-07/schema#" } } \ No newline at end of file diff --git a/api/scripts/generate_schema.js b/api/scripts/generate_schema.js index 7a498ad67..1badfd326 100644 --- a/api/scripts/generate_schema.js +++ b/api/scripts/generate_schema.js @@ -48,9 +48,8 @@ function modify(obj) { } function main() { - const files = [ - ...walk(path.join(__dirname, "..", "src", "routes")), - ...walk(path.join(__dirname, "..", "..", "util", "src")), + const files = [ + ...walk(path.join(__dirname, "..", "..", "util", "src", "schemas")), ]; const program = TJS.getProgramFromFiles( files, diff --git a/api/src/routes/guilds/#guild_id/channels.ts b/api/src/routes/guilds/#guild_id/channels.ts index df1b79242..8f2d36436 100644 --- a/api/src/routes/guilds/#guild_id/channels.ts +++ b/api/src/routes/guilds/#guild_id/channels.ts @@ -1,5 +1,5 @@ import { Router, Response, Request } from "express"; -import { Channel, ChannelUpdateEvent, getPermission, emitEvent, ChannelModifySchema } from "@fosscord/util"; +import { Channel, ChannelUpdateEvent, getPermission, emitEvent, ChannelModifySchema, ChannelReorderSchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router = Router(); @@ -21,8 +21,6 @@ router.post("/", route({ body: "ChannelModifySchema", permission: "MANAGE_CHANNE res.status(201).json(channel); }); -export type ChannelReorderSchema = { id: string; position?: number; lock_permissions?: boolean; parent_id?: string }[]; - router.patch("/", route({ body: "ChannelReorderSchema", permission: "MANAGE_CHANNELS" }), async (req: Request, res: Response) => { // changes guild channel position const { guild_id } = req.params; diff --git a/api/src/routes/guilds/#guild_id/roles/index.ts b/api/src/routes/guilds/#guild_id/roles/index.ts index effa4fcde..17f0b5e98 100644 --- a/api/src/routes/guilds/#guild_id/roles/index.ts +++ b/api/src/routes/guilds/#guild_id/roles/index.ts @@ -10,7 +10,8 @@ import { Config, DiscordApiErrors, handleFile, - RoleModifySchema + RoleModifySchema, + RolePositionUpdateSchema } from "@fosscord/util"; import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; @@ -18,11 +19,6 @@ import { OrmUtils } from "@fosscord/util"; const router: Router = Router(); -export type RolePositionUpdateSchema = { - id: string; - position: number; -}[]; - router.get("/", route({}), async (req: Request, res: Response) => { const guild_id = req.params.guild_id; diff --git a/util/src/schemas/ChannelReorderSchema.ts b/util/src/schemas/ChannelReorderSchema.ts new file mode 100644 index 000000000..3715f59e1 --- /dev/null +++ b/util/src/schemas/ChannelReorderSchema.ts @@ -0,0 +1 @@ +export type ChannelReorderSchema = { id: string; position?: number; lock_permissions?: boolean; parent_id?: string }[]; \ No newline at end of file diff --git a/util/src/schemas/RolePositionUpdateSchema.ts b/util/src/schemas/RolePositionUpdateSchema.ts new file mode 100644 index 000000000..1019d5043 --- /dev/null +++ b/util/src/schemas/RolePositionUpdateSchema.ts @@ -0,0 +1,4 @@ +export type RolePositionUpdateSchema = { + id: string; + position: number; +}[]; \ No newline at end of file diff --git a/util/src/schemas/index.ts b/util/src/schemas/index.ts index f54ae8406..a15ab4b09 100644 --- a/util/src/schemas/index.ts +++ b/util/src/schemas/index.ts @@ -5,6 +5,7 @@ export * from "./BanRegistrySchema"; export * from "./BulkDeleteSchema"; export * from "./ChannelModifySchema"; export * from "./ChannelPermissionOverwriteSchema"; +export * from "./ChannelReorderSchema"; export * from "./DmChannelCreateSchema"; export * from "./EmojiCreateSchema"; export * from "./EmojiModifySchema"; @@ -28,6 +29,7 @@ export * from "./RegisterSchema"; export * from "./RelationshipPostSchema"; export * from "./RelationshipPutSchema"; export * from "./RoleModifySchema"; +export * from "./RolePositionUpdateSchema"; export * from "./TemplateCreateSchema"; export * from "./TemplateModifySchema"; export * from "./TotpDisableSchema"; From a10891a5a71d24edf86524a2d702251d9f1b69ee Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 12 Aug 2022 12:46:01 +0200 Subject: [PATCH 08/23] Replace deprecated property --- api/src/start.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/start.ts b/api/src/start.ts index 9ba198e72..98beb1fa8 100644 --- a/api/src/start.ts +++ b/api/src/start.ts @@ -13,7 +13,7 @@ try { console.log("[API] Failed to get thread count! Using 1...") } -if (cluster.isMaster && process.env.NODE_ENV == "production") { +if (cluster.isPrimary && process.env.NODE_ENV == "production") { console.log(`Primary ${process.pid} is running`); // Fork workers. From 0b401956f528c89ec60166c69b0775845c541178 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Wed, 10 Aug 2022 04:31:11 +0200 Subject: [PATCH 09/23] Add template plugin base --- api/src/plugins/example-plugin/index.ts | 0 api/src/plugins/example-plugin/plugin.json | 8 ++++++++ 2 files changed, 8 insertions(+) create mode 100644 api/src/plugins/example-plugin/index.ts create mode 100644 api/src/plugins/example-plugin/plugin.json diff --git a/api/src/plugins/example-plugin/index.ts b/api/src/plugins/example-plugin/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/api/src/plugins/example-plugin/plugin.json b/api/src/plugins/example-plugin/plugin.json new file mode 100644 index 000000000..8d98276c9 --- /dev/null +++ b/api/src/plugins/example-plugin/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Fosscord example plugin", + "authors": [ + "The Arcane Brony" + ], + "repository": "https://github.com/fosscord/fosscord-server", + "license": "" +} \ No newline at end of file From b1b9cf7333dca01fd454fedc2b3d6e99066f53b8 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Fri, 12 Aug 2022 23:52:43 +0200 Subject: [PATCH 10/23] Add test plugin --- api/src/plugins/example-plugin/index.ts | 0 bundle/src/Server.ts | 2 + fosscord-server.code-workspace | 37 +++++--- plugins/example-plugin/build.sh | 8 ++ plugins/example-plugin/index.ts | 7 ++ .../example-plugin/plugin.json | 3 +- plugins/example-plugin/tsconfig.json | 85 +++++++++++++++++++ 7 files changed, 130 insertions(+), 12 deletions(-) delete mode 100644 api/src/plugins/example-plugin/index.ts create mode 100755 plugins/example-plugin/build.sh create mode 100644 plugins/example-plugin/index.ts rename {api/src/plugins => plugins}/example-plugin/plugin.json (85%) create mode 100644 plugins/example-plugin/tsconfig.json diff --git a/api/src/plugins/example-plugin/index.ts b/api/src/plugins/example-plugin/index.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/bundle/src/Server.ts b/bundle/src/Server.ts index 3ed98b153..165ab1212 100644 --- a/bundle/src/Server.ts +++ b/bundle/src/Server.ts @@ -10,6 +10,7 @@ import { green, bold, yellow } from "picocolors"; import { Config, getOrInitialiseDatabase } from "@fosscord/util"; import * as Sentry from "@sentry/node"; import * as Tracing from "@sentry/tracing"; +import { PluginLoader } from "@fosscord/util"; const app = express(); const server = http.createServer(); @@ -94,6 +95,7 @@ async function main() { }); } console.log(`[Server] ${green(`listening on port ${bold(port)}`)}`); + PluginLoader.loadPlugins(); } main().catch(console.error); diff --git a/fosscord-server.code-workspace b/fosscord-server.code-workspace index 7491cb358..4a7440f67 100644 --- a/fosscord-server.code-workspace +++ b/fosscord-server.code-workspace @@ -1,28 +1,43 @@ { "folders": [ - { - "path": "api" - }, - { - "path": "dashboard" - }, { "path": "bundle" }, + { + "path": "api" + }, { "path": "cdn" }, { "path": "gateway" }, - { - "path": "rtc" - }, { "path": "util" }, { - "path": "webrtc" + "path": "plugins" } - ] + ], + "settings": { + "files.exclude": { + ".gitignore": true, + ".npmignore": true, + ".prettierrc": true, + ".vscode": true, + "*.ansi": true, + "benchmarks": true, + "database.db": true, + "files/": true, + "jest": true, + "locales/[!e]*": true, + "locales/e[!n]*": true, + "node_modules": true, + "package-lock.json": true, + "patches": true, + "README.md": true, + "tests/": true, + "tsconfig.tsbuildinfo": true + } + } } diff --git a/plugins/example-plugin/build.sh b/plugins/example-plugin/build.sh new file mode 100755 index 000000000..cf8463edb --- /dev/null +++ b/plugins/example-plugin/build.sh @@ -0,0 +1,8 @@ +#rm -rf dist/ +#mkdir dist +rm -rfv *.js *.js.map +ln -s ../../bundle/node_modules node_modules +mkdir -p ../../node_modules/@fosscord +ln -s ../../util ../../node_modules/@fosscord/util +ln -s ../../api ../../node_modules/@fosscord/api +tsc -p . diff --git a/plugins/example-plugin/index.ts b/plugins/example-plugin/index.ts new file mode 100644 index 000000000..ec1ed7b50 --- /dev/null +++ b/plugins/example-plugin/index.ts @@ -0,0 +1,7 @@ +import { Plugin } from "@fosscord/util" + +export default class TestPlugin extends Plugin { + onPluginLoaded(): void { + console.log("Hello from test plugin! IT WORKS!!!!!!!"); + } +} \ No newline at end of file diff --git a/api/src/plugins/example-plugin/plugin.json b/plugins/example-plugin/plugin.json similarity index 85% rename from api/src/plugins/example-plugin/plugin.json rename to plugins/example-plugin/plugin.json index 8d98276c9..980edbdf0 100644 --- a/api/src/plugins/example-plugin/plugin.json +++ b/plugins/example-plugin/plugin.json @@ -1,8 +1,9 @@ { + "id": "example-plugin", "name": "Fosscord example plugin", "authors": [ "The Arcane Brony" ], "repository": "https://github.com/fosscord/fosscord-server", "license": "" -} \ No newline at end of file +} diff --git a/plugins/example-plugin/tsconfig.json b/plugins/example-plugin/tsconfig.json new file mode 100644 index 000000000..5ff9e607d --- /dev/null +++ b/plugins/example-plugin/tsconfig.json @@ -0,0 +1,85 @@ +{ + "include": ["./**/*.ts"], + "exclude": [], + "compilerOptions": { + + /* Basic Options */ + "incremental": false /* Enable incremental compilation */, + "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + "lib": [ + "ESNext" + ] /* Specify library files to be included in the compilation. */, + "allowJs": true /* Allow javascript files to be compiled. */, + "checkJs": true /* Report errors in .js files. */, + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": false /* Generates corresponding '.d.ts' file. */, + "declarationMap": false /* Generates a sourcemap for each corresponding '.d.ts' file. */, + "sourceMap": true /* Generates corresponding '.map' file. */, + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist/" /* Redirect output structure to the directory. */, + "rootDir": "./" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, + "strictNullChecks": true /* Enable strict null checks. */, + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": false /* Enable strict checking of property initialization in classes. */, + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + "types": [ + "node" + ] /* Type declaration files to be included in compilation. */, + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "resolveJsonModule": true, + "baseUrl": "../../", + "paths": { + "@fosscord/api": ["../../api/src/index"], + "@fosscord/gateway": ["../../gateway/src/index"], + "@fosscord/cdn": ["../../cdn/src/index"], + "@fosscord/util": ["../../util/src/index"] + }, + "plugins": [{ "transform": "@ovos-media/ts-transform-paths" }], + "noEmitHelpers": true, + "importHelpers": true + } +} From 5abd6bb7e010f0ed05b086d45b06bbed76bc5f57 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Sat, 13 Aug 2022 00:03:27 +0200 Subject: [PATCH 11/23] try to update build script --- plugins/example-plugin/build.sh | 3 --- plugins/example-plugin/tsconfig.json | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/example-plugin/build.sh b/plugins/example-plugin/build.sh index cf8463edb..1b36607b5 100755 --- a/plugins/example-plugin/build.sh +++ b/plugins/example-plugin/build.sh @@ -2,7 +2,4 @@ #mkdir dist rm -rfv *.js *.js.map ln -s ../../bundle/node_modules node_modules -mkdir -p ../../node_modules/@fosscord -ln -s ../../util ../../node_modules/@fosscord/util -ln -s ../../api ../../node_modules/@fosscord/api tsc -p . diff --git a/plugins/example-plugin/tsconfig.json b/plugins/example-plugin/tsconfig.json index 5ff9e607d..7efe9434e 100644 --- a/plugins/example-plugin/tsconfig.json +++ b/plugins/example-plugin/tsconfig.json @@ -71,7 +71,7 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "resolveJsonModule": true, - "baseUrl": "../../", + "baseUrl": "../../bundle/dist/", "paths": { "@fosscord/api": ["../../api/src/index"], "@fosscord/gateway": ["../../gateway/src/index"], From 5e86d7ab9c5200d794c3adb2b422d20a2aefd2ce Mon Sep 17 00:00:00 2001 From: Flam3rboy <34555296+Flam3rboy@users.noreply.github.com> Date: Sat, 13 Aug 2022 02:00:50 +0200 Subject: [PATCH 12/23] restructure to single project --- api/.dockerignore => .dockerignore | 0 .gitignore | 2 + api/.env.example | 8 - api/.gitignore | 115 - api/.npmignore | 1 - api/.prettierrc | 6 - api/.vscode/api-snippets.code-snippets | 25 - api/.vscode/launch.json | 28 - api/Dockerfile | 12 - api/README.md | 67 - api/babel.config.js | 6 - api/jest/getRouteDescriptions.js | 66 - api/jest/globalSetup.js | 20 - api/jest/setup.js | 2 - api/package-lock.json | Bin 556574 -> 0 bytes api/package.json | 91 - api/tsconfig.json | 75 - {api/assets => assets}/checkLocale.js | 0 {api/client_test => assets}/developers.html | 0 .../dff87c953f43b561d71fbcfe8a93a79a.png | 0 {api/assets => assets}/endpoints.json | 0 {api/assets => assets}/features.json | 0 {api/assets => assets}/fosscord-login.css | 0 {api/assets => assets}/fosscord.css | 0 {api/client_test => assets}/index.html | 2 +- .../inline-plugins/autoRegister.js | 0 .../inline-plugins/fosscord-login.js | 0 {api => assets}/locales/af/auth.json | 0 {api => assets}/locales/af/common.json | 0 {api => assets}/locales/ar/auth.json | 0 {api => assets}/locales/ar/common.json | 0 {api => assets}/locales/arn/auth.json | 0 {api => assets}/locales/arn/common.json | 0 {api => assets}/locales/az/auth.json | 0 {api => assets}/locales/az/common.json | 0 {api => assets}/locales/be/auth.json | 0 {api => assets}/locales/be/common.json | 0 {api => assets}/locales/ber/auth.json | 0 {api => assets}/locales/ber/common.json | 0 {api => assets}/locales/bg/auth.json | 0 {api => assets}/locales/bg/common.json | 0 {api => assets}/locales/bo/auth.json | 0 {api => assets}/locales/bo/common.json | 0 {api => assets}/locales/ca/auth.json | 0 {api => assets}/locales/ca/common.json | 0 {api => assets}/locales/cs/auth.json | 0 {api => assets}/locales/cs/common.json | 0 {api => assets}/locales/da/auth.json | 0 {api => assets}/locales/da/common.json | 0 {api => assets}/locales/de/auth.json | 0 {api => assets}/locales/de/common.json | 0 {api => assets}/locales/el/auth.json | 0 {api => assets}/locales/el/common.json | 0 {api => assets}/locales/en/auth.json | 0 {api => assets}/locales/en/common.json | 0 {api => assets}/locales/eo/auth.json | 0 {api => assets}/locales/eo/common.json | 0 {api => assets}/locales/es/auth.json | 0 {api => assets}/locales/es/common.json | 0 {api => assets}/locales/eu/auth.json | 0 {api => assets}/locales/eu/common.json | 0 {api => assets}/locales/fa/auth.json | 0 {api => assets}/locales/fa/common.json | 0 {api => assets}/locales/fi/auth.json | 0 {api => assets}/locales/fi/common.json | 0 {api => assets}/locales/fr/auth.json | 0 {api => assets}/locales/fr/common.json | 0 {api => assets}/locales/gn/auth.json | 0 {api => assets}/locales/gn/common.json | 0 {api => assets}/locales/ha/auth.json | 0 {api => assets}/locales/ha/common.json | 0 {api => assets}/locales/he/auth.json | 0 {api => assets}/locales/he/common.json | 0 {api => assets}/locales/hi/auth.json | 0 {api => assets}/locales/hi/common.json | 0 {api => assets}/locales/hr/auth.json | 0 {api => assets}/locales/hr/common.json | 0 {api => assets}/locales/hu/auth.json | 0 {api => assets}/locales/hu/common.json | 0 {api => assets}/locales/id/auth.json | 0 {api => assets}/locales/id/common.json | 0 {api => assets}/locales/it/auth.json | 0 {api => assets}/locales/it/common.json | 0 {api => assets}/locales/ja/auth.json | 0 {api => assets}/locales/ja/common.json | 0 {api => assets}/locales/jv/auth.json | 0 {api => assets}/locales/jv/common.json | 0 {api => assets}/locales/kk/auth.json | 0 {api => assets}/locales/kk/common.json | 0 {api => assets}/locales/ko/auth.json | 0 {api => assets}/locales/ko/common.json | 0 {api => assets}/locales/ku/auth.json | 0 {api => assets}/locales/ku/common.json | 0 {api => assets}/locales/la/auth.json | 0 {api => assets}/locales/la/common.json | 0 {api => assets}/locales/lt/auth.json | 0 {api => assets}/locales/lt/common.json | 0 {api => assets}/locales/mi/auth.json | 0 {api => assets}/locales/mi/common.json | 0 {api => assets}/locales/mn/auth.json | 0 {api => assets}/locales/mn/common.json | 0 {api => assets}/locales/mr/auth.json | 0 {api => assets}/locales/mr/common.json | 0 {api => assets}/locales/nl/auth.json | 0 {api => assets}/locales/nl/common.json | 0 {api => assets}/locales/nn/auth.json | 0 {api => assets}/locales/nn/common.json | 0 {api => assets}/locales/no/auth.json | 0 {api => assets}/locales/no/common.json | 0 {api => assets}/locales/pa/auth.json | 0 {api => assets}/locales/pa/common.json | 0 {api => assets}/locales/pl/auth.json | 0 {api => assets}/locales/pl/common.json | 0 {api => assets}/locales/pt/auth.json | 0 {api => assets}/locales/pt/common.json | 0 {api => assets}/locales/qu/auth.json | 0 {api => assets}/locales/qu/common.json | 0 {api => assets}/locales/ro/auth.json | 0 {api => assets}/locales/ro/common.json | 0 {api => assets}/locales/ru/auth.json | 0 {api => assets}/locales/ru/common.json | 0 {api => assets}/locales/sh/auth.json | 0 {api => assets}/locales/sh/common.json | 0 {api => assets}/locales/si/auth.json | 0 {api => assets}/locales/si/common.json | 0 {api => assets}/locales/sk/auth.json | 0 {api => assets}/locales/sk/common.json | 0 {api => assets}/locales/sr/auth.json | 0 {api => assets}/locales/sr/common.json | 0 {api => assets}/locales/sv/auth.json | 0 {api => assets}/locales/sv/common.json | 0 {api => assets}/locales/sw/auth.json | 0 {api => assets}/locales/sw/common.json | 0 {api => assets}/locales/ta/auth.json | 0 {api => assets}/locales/ta/common.json | 0 {api => assets}/locales/te/auth.json | 0 {api => assets}/locales/te/common.json | 0 {api => assets}/locales/tl/auth.json | 0 {api => assets}/locales/tl/common.json | 0 {api => assets}/locales/tr/auth.json | 0 {api => assets}/locales/tr/common.json | 0 {api => assets}/locales/ug/auth.json | 0 {api => assets}/locales/ug/common.json | 0 {api => assets}/locales/uk/auth.json | 0 {api => assets}/locales/uk/common.json | 0 {api => assets}/locales/ur/auth.json | 0 {api => assets}/locales/ur/common.json | 0 {api => assets}/locales/vec/auth.json | 0 {api => assets}/locales/vec/common.json | 0 {api => assets}/locales/vi/auth.json | 0 {api => assets}/locales/vi/common.json | 0 {api => assets}/locales/zh/auth.json | 0 {api => assets}/locales/zh/common.json | 0 {api/assets => assets}/openapi.json | Bin {api/assets => assets}/plugins/.gitkeep | 0 .../preload-plugins/.gitkeep | 0 {api/assets => assets}/schemas.json | Bin 63992 -> 40574 bytes {api/assets => assets}/user.css | 0 {api/assets => assets}/widget/banner1.png | Bin {api/assets => assets}/widget/banner2.png | Bin {api/assets => assets}/widget/banner3.png | Bin {api/assets => assets}/widget/banner4.png | Bin {api/assets => assets}/widget/shield.png | Bin bundle/.prettierrc | 4 - bundle/.vscode/launch.json | 35 - bundle/package-lock.json | Bin 702083 -> 0 bytes bundle/package.json | 103 - bundle/src/stats.ts | 43 - bundle/tsnode.tsconfig.json | 15 - cdn/.env.example | 3 - cdn/.gitignore | 7 - cdn/.swcrc | 17 - cdn/Dockerfile | 7 - cdn/README.md | 112 - cdn/jest/setup.js | 2 - cdn/package-lock.json | Bin 500189 -> 0 bytes cdn/package.json | 54 - cdn/tsconfig.json | 81 - dashboard/README.md | 12 - dashboard/package-lock.json | Bin 88 -> 0 bytes dashboard/package.json | 23 - dashboard/src/index.ts | 0 gateway/.env.example | 4 - gateway/.gitignore | 107 - gateway/.swcrc | 16 - gateway/.vscode/launch.json | 17 - gateway/Dockerfile | 14 - gateway/README.md | 42 - gateway/package-lock.json | Bin 540153 -> 0 bytes gateway/package.json | 35 - gateway/tsconfig.json | 84 - package-lock.json | Bin 794026 -> 838348 bytes package.json | 94 +- {api/patches => patches}/ajv+8.6.2.patch | 0 .../typescript-json-schema+0.54.0.patch | 0 rtc/.gitignore | 145 - rtc/.npmignore | 1 - rtc/.prettierrc | 5 - rtc/CMakeLists.txt | 16 - rtc/README.md | 18 - rtc/config.json | 1 - rtc/src/main.cpp | 47 - rtc/src/mongoStub.cpp | 84 - rtc/src/mongoStub.hpp | 41 - rtc/src/rtcPeerHandler.cpp | 83 - rtc/src/rtcPeerHandler.hpp | 32 - rtc/src/rtcServer.hpp | 0 {util/scripts => scripts}/benchmark.js | 0 .../benchmark/connections.js | 0 .../scripts => scripts}/benchmark/index.js | 0 .../scripts => scripts}/benchmark/users.js | 0 {bundle/scripts => scripts}/build.js | 11 +- {bundle/scripts => scripts}/db_migrations.sh | 0 {bundle/scripts => scripts}/depcheck.js | 0 {bundle/scripts => scripts}/depclean.js | 0 {api/scripts => scripts}/droptables.sql | 0 {bundle/scripts => scripts}/gen_index.js | 0 {api/scripts => scripts}/generate_openapi.js | 0 {api/scripts => scripts}/generate_schema.js | 2 +- {bundle/scripts => scripts}/install.js | 0 .../scripts => scripts}/migrate_db_engine.js | 0 {bundle/scripts => scripts}/rights.js | 0 .../scripts => scripts}/stresstest/.gitignore | 0 .../stresstest/accounts.json.example | 0 .../stresstest/config.json.example | 0 {api/scripts => scripts}/stresstest/index.js | 0 .../stresstest/package-lock.json | Bin .../stresstest/package.json | 0 .../stresstest/src/login/index.js | 2 +- .../stresstest/src/message/send.js | 0 .../stresstest/src/register/index.js | 0 {bundle/scripts => scripts}/update_schemas.js | 0 {bundle/scripts => scripts}/utils.js | 0 {bundle/src => src}/Server.ts | 4 +- {api/src => src/api}/Server.ts | 0 {api/src => src/api}/global.d.ts | 0 {api/src => src/api}/index.ts | 0 .../api}/middlewares/Authentication.ts | 0 .../src => src/api}/middlewares/BodyParser.ts | 0 {api/src => src/api}/middlewares/CORS.ts | 0 .../api}/middlewares/ErrorHandler.ts | 0 {api/src => src/api}/middlewares/RateLimit.ts | 0 .../src => src/api}/middlewares/TestClient.ts | 16 +- .../api}/middlewares/Translation.ts | 6 +- {api/src => src/api}/middlewares/index.ts | 0 {api/src => src/api}/routes/-/healthz.ts | 0 {api/src => src/api}/routes/-/readyz.ts | 0 .../routes/applications/#id/entitlements.ts | 0 .../api}/routes/applications/detectable.ts | 0 .../api}/routes/applications/index.ts | 0 .../api}/routes/auth/location-metadata.ts | 0 {api/src => src/api}/routes/auth/login.ts | 0 {api/src => src/api}/routes/auth/mfa/totp.ts | 0 {api/src => src/api}/routes/auth/register.ts | 0 .../routes/channels/#channel_id/followers.ts | 0 .../api}/routes/channels/#channel_id/index.ts | 0 .../routes/channels/#channel_id/invites.ts | 0 .../#channel_id/messages/#message_id/ack.ts | 0 .../messages/#message_id/crosspost.ts | 0 .../#channel_id/messages/#message_id/index.ts | 0 .../messages/#message_id/reactions.ts | 0 .../#channel_id/messages/bulk-delete.ts | 2 +- .../channels/#channel_id/messages/index.ts | 0 .../channels/#channel_id/permissions.ts | 0 .../api}/routes/channels/#channel_id/pins.ts | 0 .../api}/routes/channels/#channel_id/purge.ts | 0 .../routes/channels/#channel_id/recipients.ts | 0 .../routes/channels/#channel_id/typing.ts | 0 .../routes/channels/#channel_id/webhooks.ts | 0 .../api}/routes/discoverable-guilds.ts | 0 {api/src => src/api}/routes/discovery.ts | 0 {api/src => src/api}/routes/downloads.ts | 0 {api/src => src/api}/routes/experiments.ts | 0 {api/src => src/api}/routes/gateway/bot.ts | 0 {api/src => src/api}/routes/gateway/index.ts | 0 {api/src => src/api}/routes/gifs/search.ts | 0 .../api}/routes/gifs/trending-gifs.ts | 0 {api/src => src/api}/routes/gifs/trending.ts | 0 .../api}/routes/guild-recommendations.ts | 0 .../routes/guilds/#guild_id/audit-logs.ts | 0 .../api}/routes/guilds/#guild_id/bans.ts | 0 .../api}/routes/guilds/#guild_id/channels.ts | 0 .../api}/routes/guilds/#guild_id/delete.ts | 0 .../#guild_id/discovery-requirements.ts | 0 .../api}/routes/guilds/#guild_id/emojis.ts | 0 .../api}/routes/guilds/#guild_id/index.ts | 0 .../routes/guilds/#guild_id/integrations.ts | 0 .../api}/routes/guilds/#guild_id/invites.ts | 0 .../#guild_id/members/#member_id/index.ts | 0 .../#guild_id/members/#member_id/nick.ts | 0 .../#member_id/roles/#role_id/index.ts | 0 .../routes/guilds/#guild_id/members/index.ts | 0 .../api}/routes/guilds/#guild_id/premium.ts | 0 .../api}/routes/guilds/#guild_id/prune.ts | 0 .../api}/routes/guilds/#guild_id/regions.ts | 0 .../guilds/#guild_id/roles/#role_id/index.ts | 0 .../routes/guilds/#guild_id/roles/index.ts | 0 .../api}/routes/guilds/#guild_id/stickers.ts | 0 .../api}/routes/guilds/#guild_id/templates.ts | 0 .../routes/guilds/#guild_id/vanity-url.ts | 0 .../#guild_id/voice-states/#user_id/index.ts | 0 .../api}/routes/guilds/#guild_id/webhooks.ts | 0 .../routes/guilds/#guild_id/welcome_screen.ts | 0 .../routes/guilds/#guild_id/widget.json.ts | 0 .../routes/guilds/#guild_id/widget.png.ts | 2 +- .../api}/routes/guilds/#guild_id/widget.ts | 0 {api/src => src/api}/routes/guilds/index.ts | 0 .../api}/routes/guilds/templates/index.ts | 0 {api/src => src/api}/routes/invites/index.ts | 0 {api/src => src/api}/routes/oauth2/tokens.ts | 0 .../api}/routes/outbound-promotions.ts | 0 .../routes/partners/#guild_id/requirements.ts | 0 {api/src => src/api}/routes/ping.ts | 0 .../api}/routes/policies/instance/domains.ts | 0 .../api}/routes/policies/instance/index.ts | 0 .../api}/routes/policies/instance/limits.ts | 0 .../scheduled-maintenances/upcoming_json.ts | 0 {api/src => src/api}/routes/science.ts | 0 .../src => src/api}/routes/stage-instances.ts | 0 .../api}/routes/sticker-packs/index.ts | 0 .../api}/routes/stickers/#sticker_id/index.ts | 0 {api/src => src/api}/routes/stop.ts | 0 .../store/published-listings/applications.ts | 0 .../applications/#id/subscription-plans.ts | 0 .../routes/store/published-listings/skus.ts | 0 .../skus/#sku_id/subscription-plans.ts | 0 {api/src => src/api}/routes/teams.ts | 0 .../api}/routes/template.ts.disabled | 0 {api/src => src/api}/routes/track.ts | 0 {api/src => src/api}/routes/updates.ts | 0 .../src => src/api}/routes/users/#id/index.ts | 0 .../api}/routes/users/#id/profile.ts | 0 .../api}/routes/users/#id/relationships.ts | 0 .../@me/activities/statistics/applications.ts | 0 .../routes/users/@me/affinities/guilds.ts | 0 .../api}/routes/users/@me/affinities/users.ts | 0 .../@me/applications/#app_id/entitlements.ts | 0 .../routes/users/@me/billing/country-code.ts | 0 .../users/@me/billing/payment-sources.ts | 0 .../routes/users/@me/billing/subscriptions.ts | 0 .../api}/routes/users/@me/channels.ts | 0 .../api}/routes/users/@me/connections.ts | 0 .../api}/routes/users/@me/delete.ts | 0 .../api}/routes/users/@me/devices.ts | 0 .../api}/routes/users/@me/disable.ts | 0 .../api}/routes/users/@me/email-settings.ts | 0 .../api}/routes/users/@me/entitlements.ts | 0 .../api}/routes/users/@me/guilds.ts | 0 .../@me/guilds/premium/subscription-slots.ts | 0 .../src => src/api}/routes/users/@me/index.ts | 0 .../api}/routes/users/@me/library.ts | 0 .../api}/routes/users/@me/mfa/codes.ts | 0 .../api}/routes/users/@me/mfa/totp/disable.ts | 0 .../api}/routes/users/@me/mfa/totp/enable.ts | 0 .../src => src/api}/routes/users/@me/notes.ts | 0 .../api}/routes/users/@me/relationships.ts | 0 .../api}/routes/users/@me/settings.ts | 0 {api/src => src/api}/routes/voice/regions.ts | 0 {api/src => src/api}/start.ts | 2 +- .../api}/util/entities/AssetCacheItem.ts | 0 .../util/entities/blockedEmailDomains.txt | 0 .../util/entities/trustedEmailDomains.txt | 0 .../src => src/api}/util/handlers/Instance.ts | 0 {api/src => src/api}/util/handlers/Message.ts | 0 {api/src => src/api}/util/handlers/Voice.ts | 0 {api/src => src/api}/util/handlers/route.ts | 2 +- {api/src => src/api}/util/index.ts | 0 {api/src => src/api}/util/utility/Base64.ts | 0 .../api}/util/utility/RandomInviteID.ts | 0 {api/src => src/api}/util/utility/String.ts | 0 .../src => src/api}/util/utility/ipAddress.ts | 0 .../api}/util/utility/passwordStrength.ts | 0 {cdn/src => src/cdn}/Server.ts | 0 {cdn/src => src/cdn}/index.ts | 0 {cdn/src => src/cdn}/routes/attachments.ts | 0 {cdn/src => src/cdn}/routes/avatars.ts | 0 {cdn/src => src/cdn}/routes/external.ts | 0 {cdn/src => src/cdn}/routes/ping.ts | 0 {cdn/src => src/cdn}/routes/role-icons.ts | 0 {cdn/src => src/cdn}/start.ts | 0 {cdn/src => src/cdn}/util/FileStorage.ts | 0 {cdn/src => src/cdn}/util/S3Storage.ts | 0 {cdn/src => src/cdn}/util/Storage.ts | 0 {cdn/src => src/cdn}/util/index.ts | 0 {cdn/src => src/cdn}/util/multer.ts | 0 {gateway/src => src/gateway}/Server.ts | 0 {gateway/src => src/gateway}/events/Close.ts | 0 .../src => src/gateway}/events/Connection.ts | 0 .../src => src/gateway}/events/Message.ts | 3 +- {gateway/src => src/gateway}/index.ts | 0 .../src => src/gateway}/listener/listener.ts | 0 .../src => src/gateway}/opcodes/Heartbeat.ts | 0 src/gateway/opcodes/Identify.ts | 298 + .../gateway}/opcodes/LazyRequest.ts | 2 +- .../gateway}/opcodes/PresenceUpdate.ts | 0 .../gateway}/opcodes/RequestGuildMembers.ts | 0 .../src => src/gateway}/opcodes/Resume.ts | 0 .../gateway}/opcodes/VoiceStateUpdate.ts | 2 +- .../gateway}/opcodes/experiments.json | 0 {gateway/src => src/gateway}/opcodes/index.ts | 0 .../src => src/gateway}/opcodes/instanceOf.ts | 0 {gateway/src => src/gateway}/start.ts | 0 .../src => src/gateway}/util/Constants.ts | 0 .../src => src/gateway}/util/Heartbeat.ts | 0 {gateway/src => src/gateway}/util/Send.ts | 0 .../src => src/gateway}/util/SessionUtils.ts | 0 .../src => src/gateway}/util/WebSocket.ts | 4 +- {gateway/src => src/gateway}/util/index.ts | 0 {bundle/src => src}/start.ts | 0 src/stats.ts | 24 + {util/src => src/util}/config/Config.ts | 2 +- {util/src => src/util}/config/index.ts | 0 .../util}/config/types/ApiConfiguration.ts | 0 .../util}/config/types/ClientConfiguration.ts | 0 .../config/types/DefaultsConfiguration.ts | 0 .../config/types/EndpointConfiguration.ts | 0 .../config/types/GeneralConfiguration.ts | 0 .../util}/config/types/GifConfiguration.ts | 0 .../util}/config/types/GuildConfiguration.ts | 0 .../util}/config/types/KafkaConfiguration.ts | 0 .../util}/config/types/LimitConfigurations.ts | 0 .../util}/config/types/LoginConfiguration.ts | 0 .../config/types/MetricsConfiguration.ts | 0 .../config/types/RabbitMQConfiguration.ts | 0 .../util}/config/types/RegionConfiguration.ts | 0 .../config/types/RegisterConfiguration.ts | 0 .../config/types/SecurityConfiguration.ts | 0 .../util}/config/types/SentryConfiguration.ts | 0 .../config/types/TemplateConfiguration.ts | 0 {util/src => src/util}/config/types/index.ts | 0 .../client/ClientReleaseConfiguration.ts | 0 .../types/subconfigurations/client/index.ts | 0 .../defaults/GuildDefaults.ts | 0 .../defaults/UserDefaults.ts | 0 .../types/subconfigurations/defaults/index.ts | 0 .../types/subconfigurations/guild/AutoJoin.ts | 0 .../subconfigurations/guild/Discovery.ts | 0 .../types/subconfigurations/guild/index.ts | 0 .../config/types/subconfigurations/index.ts | 0 .../subconfigurations/kafka/KafkaBroker.ts | 0 .../types/subconfigurations/kafka/index.ts | 0 .../subconfigurations/limits/ChannelLimits.ts | 0 .../subconfigurations/limits/GuildLimits.ts | 0 .../subconfigurations/limits/MessageLimits.ts | 0 .../subconfigurations/limits/RateLimits.ts | 0 .../subconfigurations/limits/UserLimits.ts | 0 .../types/subconfigurations/limits/index.ts | 0 .../limits/ratelimits/Auth.ts | 0 .../limits/ratelimits/RateLimitOptions.ts | 0 .../limits/ratelimits/Route.ts | 2 +- .../limits/ratelimits/index.ts | 0 .../types/subconfigurations/region/Region.ts | 0 .../types/subconfigurations/region/index.ts | 0 .../subconfigurations/register/DateOfBirth.ts | 0 .../types/subconfigurations/register/Email.ts | 0 .../subconfigurations/register/Password.ts | 0 .../types/subconfigurations/register/index.ts | 0 .../subconfigurations/security/Captcha.ts | 0 .../subconfigurations/security/TwoFactor.ts | 0 .../types/subconfigurations/security/index.ts | 0 {util/src => src/util}/dtos/DmChannelDTO.ts | 0 {util/src => src/util}/dtos/UserDTO.ts | 0 {util/src => src/util}/dtos/index.ts | 0 .../src => src/util}/entities/Application.ts | 0 {util/src => src/util}/entities/Attachment.ts | 0 {util/src => src/util}/entities/AuditLog.ts | 0 .../src => src/util}/entities/BackupCodes.ts | 0 {util/src => src/util}/entities/Ban.ts | 0 {util/src => src/util}/entities/BaseClass.ts | 0 {util/src => src/util}/entities/Categories.ts | 0 {util/src => src/util}/entities/Channel.ts | 0 .../util}/entities/ClientRelease.ts | 0 {util/src => src/util}/entities/Config.ts | 0 .../util}/entities/ConnectedAccount.ts | 0 {util/src => src/util}/entities/Emoji.ts | 0 {util/src => src/util}/entities/Encryption.ts | 0 {util/src => src/util}/entities/Group.ts | 0 {util/src => src/util}/entities/Guild.ts | 0 {util/src => src/util}/entities/Invite.ts | 0 {util/src => src/util}/entities/Member.ts | 0 {util/src => src/util}/entities/Message.ts | 0 {util/src => src/util}/entities/Migration.ts | 0 {util/src => src/util}/entities/Note.ts | 0 {util/src => src/util}/entities/RateLimit.ts | 0 {util/src => src/util}/entities/ReadState.ts | 0 {util/src => src/util}/entities/Recipient.ts | 0 .../src => src/util}/entities/Relationship.ts | 0 {util/src => src/util}/entities/Role.ts | 0 {util/src => src/util}/entities/Session.ts | 0 {util/src => src/util}/entities/Sticker.ts | 0 .../src => src/util}/entities/StickerPack.ts | 0 {util/src => src/util}/entities/Team.ts | 0 {util/src => src/util}/entities/TeamMember.ts | 0 {util/src => src/util}/entities/Template.ts | 0 {util/src => src/util}/entities/User.ts | 0 {util/src => src/util}/entities/UserGroup.ts | 0 .../src => src/util}/entities/UserSettings.ts | 0 {util/src => src/util}/entities/VoiceState.ts | 0 {util/src => src/util}/entities/Webhook.ts | 0 {util/src => src/util}/entities/index.ts | 0 {util/src => src/util}/index.ts | 1 + {util/src => src/util}/interfaces/Activity.ts | 0 {util/src => src/util}/interfaces/Event.ts | 0 .../util}/interfaces/Interaction.ts | 0 {util/src => src/util}/interfaces/Presence.ts | 0 {util/src => src/util}/interfaces/Status.ts | 0 {util/src => src/util}/interfaces/index.ts | 0 .../mariadb/1659901151025-initial.ts | 0 .../1659921859145-premium_since_as_date.ts | 0 .../mariadb/1660258393551-CodeCleanup3.ts | 0 .../mariadb/1660260587556-CodeCleanup4.ts | 0 .../mariadb/1660265930624-CodeCleanup5.ts | 0 .../postgres/1659899687168-initial.ts | 0 .../1659921826567-premium_since_as_date.ts | 0 .../postgres/1660257815436-CodeCleanup2.ts | 0 .../postgres/1660258372154-CodeCleanup3.ts | 0 .../postgres/1660260565996-CodeCleanup4.ts | 0 .../postgres/1660265907544-CodeCleanup5.ts | 0 .../sqlite/1659899662635-initial.ts | 0 .../1659921722863-premium_since_as_date.ts | 0 .../sqlite/1660257576211-CodeCleanup1.ts | 0 .../sqlite/1660257795259-CodeCleanup2.ts | 0 .../sqlite/1660258351379-CodeCleanup3.ts | 0 .../sqlite/1660260672914-CodeCleanup4.ts | 0 .../util}/schemas/ActivitySchema.ts | 0 .../util}/schemas/BanCreateSchema.ts | 0 .../util}/schemas/BanModeratorSchema.ts | 0 .../util}/schemas/BanRegistrySchema.ts | 0 .../util}/schemas/BulkDeleteSchema.ts | 0 .../util}/schemas/ChannelModifySchema.ts | 0 .../ChannelPermissionOverwriteSchema.ts | 0 .../util}/schemas/ChannelReorderSchema.ts | 0 .../util}/schemas/DmChannelCreateSchema.ts | 0 .../util}/schemas/EmojiCreateSchema.ts | 0 .../util}/schemas/EmojiModifySchema.ts | 0 .../util}/schemas/GuildCreateSchema.ts | 0 .../schemas/GuildTemplateCreateSchema.ts | 0 .../util}/schemas/GuildUpdateSchema.ts | 0 .../schemas/GuildUpdateWelcomeScreenSchema.ts | 0 .../util}/schemas/IdentifySchema.ts | 8 +- .../util}/schemas/InviteCreateSchema.ts | 0 .../util}/schemas/LazyRequestSchema.ts | 0 {util/src => src/util}/schemas/LoginSchema.ts | 0 .../util}/schemas/MemberChangeSchema.ts | 0 .../util}/schemas/MemberNickChangeSchema.ts | 0 .../util}/schemas/MessageAcknowledgeSchema.ts | 0 .../util}/schemas/MessageCreateSchema.ts | 0 .../util}/schemas/MfaCodesSchema.ts | 0 .../util}/schemas/ModifyGuildStickerSchema.ts | 0 {util/src => src/util}/schemas/PruneSchema.ts | 0 {util/src => src/util}/schemas/PurgeSchema.ts | 0 .../util}/schemas/RegisterSchema.ts | 0 .../util}/schemas/RelationshipPostSchema.ts | 0 .../util}/schemas/RelationshipPutSchema.ts | 0 .../util}/schemas/RoleModifySchema.ts | 0 .../util}/schemas/RolePositionUpdateSchema.ts | 0 .../util}/schemas/TemplateCreateSchema.ts | 0 .../util}/schemas/TemplateModifySchema.ts | 0 .../util}/schemas/TotpDisableSchema.ts | 0 .../util}/schemas/TotpEnableSchema.ts | 0 {util/src => src/util}/schemas/TotpSchema.ts | 0 .../util}/schemas/UserModifySchema.ts | 0 .../util}/schemas/UserSettingsSchema.ts | 0 .../util}/schemas/VanityUrlSchema.ts | 0 .../util}/schemas/VoiceStateUpdateSchema.ts | 0 .../util}/schemas/WebhookCreateSchema.ts | 0 .../util}/schemas/WidgetModifySchema.ts | 0 {util/src => src/util}/schemas/index.ts | 0 {util/src => src/util}/util/ApiError.ts | 0 {util/src => src/util}/util/Array.ts | 0 {util/src => src/util}/util/AutoUpdate.ts | 0 {util/src => src/util}/util/BitField.ts | 0 {util/src => src/util}/util/Categories.ts | 0 {util/src => src/util}/util/Config.ts | 0 {util/src => src/util}/util/Constants.ts | 0 {util/src => src/util}/util/Database.ts | 0 {util/src => src/util}/util/Email.ts | 0 {util/src => src/util}/util/Event.ts | 0 {util/src => src/util}/util/FieldError.ts | 0 {util/src => src/util}/util/Intents.ts | 0 .../util}/util/InvisibleCharacters.ts | 0 {util/src => src/util}/util/MFA.ts | 0 {util/src => src/util}/util/MessageFlags.ts | 0 {util/src => src/util}/util/Permissions.ts | 0 {util/src => src/util}/util/RabbitMQ.ts | 0 {util/src => src/util}/util/Regex.ts | 0 {util/src => src/util}/util/Rights.ts | 0 {util/src => src/util}/util/Snowflake.ts | 0 {util/src => src/util}/util/String.ts | 0 {util/src => src/util}/util/Token.ts | 0 .../util}/util/TraverseDirectory.ts | 0 {util/src => src/util}/util/cdn.ts | 0 {util/src => src/util}/util/imports/Checks.ts | 0 .../util}/util/imports/HTTPError.ts | 0 .../src => src/util}/util/imports/OrmUtils.ts | 0 {util/src => src/util}/util/imports/index.ts | 0 {util/src => src/util}/util/index.ts | 0 {util/tests => tests}/User.test.js | 0 {cdn/tests => tests}/antman.jpg | Bin {cdn/tests => tests}/cdn_endpoints.test.js | 0 {cdn/tests => tests}/filestorage.test.js | 0 {api/tests => tests}/routes.test.ts | 0 .../tests => tests}/routes/auth/login.test.js | 0 .../routes/auth/register.test.js | 0 {api/tests => tests}/routes/ping.test.js | 0 {util/tests => tests}/setupJest.js | 0 bundle/tsconfig.json => tsconfig.json | 14 +- util/.gitignore | 110 - util/.npmignore | 1 - util/.prettierrc | 5 - util/.vscode/launch.json | 27 - util/README.md | 29 - util/package-lock.json | Bin 460763 -> 0 bytes util/package.json | 59 - util/tsconfig.json | 73 - webrtc/.DS_Store | Bin 6148 -> 0 bytes webrtc/.gitignore | 104 - webrtc/README.md | 3 - webrtc/package-lock.json | Bin 25101 -> 0 bytes webrtc/package.json | 24 - webrtc/src/Server.ts | 46 - webrtc/src/index.ts | 0 webrtc/src/start.ts | 3 - webrtc/src/test.ts | 8 - webrtc/tsconfig.json | 72 - yarn.lock | 6802 +++++++++++++++++ 626 files changed, 7256 insertions(+), 2449 deletions(-) rename api/.dockerignore => .dockerignore (100%) delete mode 100644 api/.env.example delete mode 100644 api/.gitignore delete mode 100644 api/.npmignore delete mode 100644 api/.prettierrc delete mode 100644 api/.vscode/api-snippets.code-snippets delete mode 100644 api/.vscode/launch.json delete mode 100644 api/Dockerfile delete mode 100644 api/README.md delete mode 100644 api/babel.config.js delete mode 100644 api/jest/getRouteDescriptions.js delete mode 100644 api/jest/globalSetup.js delete mode 100644 api/jest/setup.js delete mode 100644 api/package-lock.json delete mode 100644 api/package.json delete mode 100644 api/tsconfig.json rename {api/assets => assets}/checkLocale.js (100%) rename {api/client_test => assets}/developers.html (100%) rename {api/assets => assets}/dff87c953f43b561d71fbcfe8a93a79a.png (100%) rename {api/assets => assets}/endpoints.json (100%) rename {api/assets => assets}/features.json (100%) rename {api/assets => assets}/fosscord-login.css (100%) rename {api/assets => assets}/fosscord.css (100%) rename {api/client_test => assets}/index.html (98%) rename {api/assets => assets}/inline-plugins/autoRegister.js (100%) rename {api/assets => assets}/inline-plugins/fosscord-login.js (100%) rename {api => assets}/locales/af/auth.json (100%) rename {api => assets}/locales/af/common.json (100%) rename {api => assets}/locales/ar/auth.json (100%) rename {api => assets}/locales/ar/common.json (100%) rename {api => assets}/locales/arn/auth.json (100%) rename {api => assets}/locales/arn/common.json (100%) rename {api => assets}/locales/az/auth.json (100%) rename {api => assets}/locales/az/common.json (100%) rename {api => assets}/locales/be/auth.json (100%) rename {api => assets}/locales/be/common.json (100%) rename {api => assets}/locales/ber/auth.json (100%) rename {api => assets}/locales/ber/common.json (100%) rename {api => assets}/locales/bg/auth.json (100%) rename {api => assets}/locales/bg/common.json (100%) rename {api => assets}/locales/bo/auth.json (100%) rename {api => assets}/locales/bo/common.json (100%) rename {api => assets}/locales/ca/auth.json (100%) rename {api => assets}/locales/ca/common.json (100%) rename {api => assets}/locales/cs/auth.json (100%) rename {api => assets}/locales/cs/common.json (100%) rename {api => assets}/locales/da/auth.json (100%) rename {api => assets}/locales/da/common.json (100%) rename {api => assets}/locales/de/auth.json (100%) rename {api => assets}/locales/de/common.json (100%) rename {api => assets}/locales/el/auth.json (100%) rename {api => assets}/locales/el/common.json (100%) rename {api => assets}/locales/en/auth.json (100%) rename {api => assets}/locales/en/common.json (100%) rename {api => assets}/locales/eo/auth.json (100%) rename {api => assets}/locales/eo/common.json (100%) rename {api => assets}/locales/es/auth.json (100%) rename {api => assets}/locales/es/common.json (100%) rename {api => assets}/locales/eu/auth.json (100%) rename {api => assets}/locales/eu/common.json (100%) rename {api => assets}/locales/fa/auth.json (100%) rename {api => assets}/locales/fa/common.json (100%) rename {api => assets}/locales/fi/auth.json (100%) rename {api => assets}/locales/fi/common.json (100%) rename {api => assets}/locales/fr/auth.json (100%) rename {api => assets}/locales/fr/common.json (100%) rename {api => assets}/locales/gn/auth.json (100%) rename {api => assets}/locales/gn/common.json (100%) rename {api => assets}/locales/ha/auth.json (100%) rename {api => assets}/locales/ha/common.json (100%) rename {api => assets}/locales/he/auth.json (100%) rename {api => assets}/locales/he/common.json (100%) rename {api => assets}/locales/hi/auth.json (100%) rename {api => assets}/locales/hi/common.json (100%) rename {api => assets}/locales/hr/auth.json (100%) rename {api => assets}/locales/hr/common.json (100%) rename {api => assets}/locales/hu/auth.json (100%) rename {api => assets}/locales/hu/common.json (100%) rename {api => assets}/locales/id/auth.json (100%) rename {api => assets}/locales/id/common.json (100%) rename {api => assets}/locales/it/auth.json (100%) rename {api => assets}/locales/it/common.json (100%) rename {api => assets}/locales/ja/auth.json (100%) rename {api => assets}/locales/ja/common.json (100%) rename {api => assets}/locales/jv/auth.json (100%) rename {api => assets}/locales/jv/common.json (100%) rename {api => assets}/locales/kk/auth.json (100%) rename {api => assets}/locales/kk/common.json (100%) rename {api => assets}/locales/ko/auth.json (100%) rename {api => assets}/locales/ko/common.json (100%) rename {api => assets}/locales/ku/auth.json (100%) rename {api => assets}/locales/ku/common.json (100%) rename {api => assets}/locales/la/auth.json (100%) rename {api => assets}/locales/la/common.json (100%) rename {api => assets}/locales/lt/auth.json (100%) rename {api => assets}/locales/lt/common.json (100%) rename {api => assets}/locales/mi/auth.json (100%) rename {api => assets}/locales/mi/common.json (100%) rename {api => assets}/locales/mn/auth.json (100%) rename {api => assets}/locales/mn/common.json (100%) rename {api => assets}/locales/mr/auth.json (100%) rename {api => assets}/locales/mr/common.json (100%) rename {api => assets}/locales/nl/auth.json (100%) rename {api => assets}/locales/nl/common.json (100%) rename {api => assets}/locales/nn/auth.json (100%) rename {api => assets}/locales/nn/common.json (100%) rename {api => assets}/locales/no/auth.json (100%) rename {api => assets}/locales/no/common.json (100%) rename {api => assets}/locales/pa/auth.json (100%) rename {api => assets}/locales/pa/common.json (100%) rename {api => assets}/locales/pl/auth.json (100%) rename {api => assets}/locales/pl/common.json (100%) rename {api => assets}/locales/pt/auth.json (100%) rename {api => assets}/locales/pt/common.json (100%) rename {api => assets}/locales/qu/auth.json (100%) rename {api => assets}/locales/qu/common.json (100%) rename {api => assets}/locales/ro/auth.json (100%) rename {api => assets}/locales/ro/common.json (100%) rename {api => assets}/locales/ru/auth.json (100%) rename {api => assets}/locales/ru/common.json (100%) rename {api => assets}/locales/sh/auth.json (100%) rename {api => assets}/locales/sh/common.json (100%) rename {api => assets}/locales/si/auth.json (100%) rename {api => assets}/locales/si/common.json (100%) rename {api => assets}/locales/sk/auth.json (100%) rename {api => assets}/locales/sk/common.json (100%) rename {api => assets}/locales/sr/auth.json (100%) rename {api => assets}/locales/sr/common.json (100%) rename {api => assets}/locales/sv/auth.json (100%) rename {api => assets}/locales/sv/common.json (100%) rename {api => assets}/locales/sw/auth.json (100%) rename {api => assets}/locales/sw/common.json (100%) rename {api => assets}/locales/ta/auth.json (100%) rename {api => assets}/locales/ta/common.json (100%) rename {api => assets}/locales/te/auth.json (100%) rename {api => assets}/locales/te/common.json (100%) rename {api => assets}/locales/tl/auth.json (100%) rename {api => assets}/locales/tl/common.json (100%) rename {api => assets}/locales/tr/auth.json (100%) rename {api => assets}/locales/tr/common.json (100%) rename {api => assets}/locales/ug/auth.json (100%) rename {api => assets}/locales/ug/common.json (100%) rename {api => assets}/locales/uk/auth.json (100%) rename {api => assets}/locales/uk/common.json (100%) rename {api => assets}/locales/ur/auth.json (100%) rename {api => assets}/locales/ur/common.json (100%) rename {api => assets}/locales/vec/auth.json (100%) rename {api => assets}/locales/vec/common.json (100%) rename {api => assets}/locales/vi/auth.json (100%) rename {api => assets}/locales/vi/common.json (100%) rename {api => assets}/locales/zh/auth.json (100%) rename {api => assets}/locales/zh/common.json (100%) rename {api/assets => assets}/openapi.json (100%) rename {api/assets => assets}/plugins/.gitkeep (100%) rename {api/assets => assets}/preload-plugins/.gitkeep (100%) rename {api/assets => assets}/schemas.json (63%) rename {api/assets => assets}/user.css (100%) rename {api/assets => assets}/widget/banner1.png (100%) rename {api/assets => assets}/widget/banner2.png (100%) rename {api/assets => assets}/widget/banner3.png (100%) rename {api/assets => assets}/widget/banner4.png (100%) rename {api/assets => assets}/widget/shield.png (100%) delete mode 100644 bundle/.prettierrc delete mode 100644 bundle/.vscode/launch.json delete mode 100644 bundle/package-lock.json delete mode 100644 bundle/package.json delete mode 100644 bundle/src/stats.ts delete mode 100644 bundle/tsnode.tsconfig.json delete mode 100644 cdn/.env.example delete mode 100644 cdn/.gitignore delete mode 100644 cdn/.swcrc delete mode 100644 cdn/Dockerfile delete mode 100644 cdn/README.md delete mode 100644 cdn/jest/setup.js delete mode 100644 cdn/package-lock.json delete mode 100644 cdn/package.json delete mode 100644 cdn/tsconfig.json delete mode 100644 dashboard/README.md delete mode 100644 dashboard/package-lock.json delete mode 100644 dashboard/package.json delete mode 100644 dashboard/src/index.ts delete mode 100644 gateway/.env.example delete mode 100644 gateway/.gitignore delete mode 100644 gateway/.swcrc delete mode 100644 gateway/.vscode/launch.json delete mode 100644 gateway/Dockerfile delete mode 100644 gateway/README.md delete mode 100644 gateway/package-lock.json delete mode 100644 gateway/package.json delete mode 100644 gateway/tsconfig.json rename {api/patches => patches}/ajv+8.6.2.patch (100%) rename {api/patches => patches}/typescript-json-schema+0.54.0.patch (100%) delete mode 100644 rtc/.gitignore delete mode 100644 rtc/.npmignore delete mode 100644 rtc/.prettierrc delete mode 100644 rtc/CMakeLists.txt delete mode 100644 rtc/README.md delete mode 100644 rtc/config.json delete mode 100644 rtc/src/main.cpp delete mode 100644 rtc/src/mongoStub.cpp delete mode 100644 rtc/src/mongoStub.hpp delete mode 100644 rtc/src/rtcPeerHandler.cpp delete mode 100644 rtc/src/rtcPeerHandler.hpp delete mode 100644 rtc/src/rtcServer.hpp rename {util/scripts => scripts}/benchmark.js (100%) rename {bundle/scripts => scripts}/benchmark/connections.js (100%) rename {bundle/scripts => scripts}/benchmark/index.js (100%) rename {bundle/scripts => scripts}/benchmark/users.js (100%) rename {bundle/scripts => scripts}/build.js (77%) rename {bundle/scripts => scripts}/db_migrations.sh (100%) rename {bundle/scripts => scripts}/depcheck.js (100%) rename {bundle/scripts => scripts}/depclean.js (100%) rename {api/scripts => scripts}/droptables.sql (100%) rename {bundle/scripts => scripts}/gen_index.js (100%) rename {api/scripts => scripts}/generate_openapi.js (100%) rename {api/scripts => scripts}/generate_schema.js (96%) rename {bundle/scripts => scripts}/install.js (100%) rename {util/scripts => scripts}/migrate_db_engine.js (100%) rename {bundle/scripts => scripts}/rights.js (100%) rename {api/scripts => scripts}/stresstest/.gitignore (100%) rename {api/scripts => scripts}/stresstest/accounts.json.example (100%) rename {api/scripts => scripts}/stresstest/config.json.example (100%) rename {api/scripts => scripts}/stresstest/index.js (100%) rename {api/scripts => scripts}/stresstest/package-lock.json (100%) rename {api/scripts => scripts}/stresstest/package.json (100%) rename {api/scripts => scripts}/stresstest/src/login/index.js (91%) rename {api/scripts => scripts}/stresstest/src/message/send.js (100%) rename {api/scripts => scripts}/stresstest/src/register/index.js (100%) rename {bundle/scripts => scripts}/update_schemas.js (100%) rename {bundle/scripts => scripts}/utils.js (100%) rename {bundle/src => src}/Server.ts (97%) rename {api/src => src/api}/Server.ts (100%) rename {api/src => src/api}/global.d.ts (100%) rename {api/src => src/api}/index.ts (100%) rename {api/src => src/api}/middlewares/Authentication.ts (100%) rename {api/src => src/api}/middlewares/BodyParser.ts (100%) rename {api/src => src/api}/middlewares/CORS.ts (100%) rename {api/src => src/api}/middlewares/ErrorHandler.ts (100%) rename {api/src => src/api}/middlewares/RateLimit.ts (100%) rename {api/src => src/api}/middlewares/TestClient.ts (89%) rename {api/src => src/api}/middlewares/Translation.ts (84%) rename {api/src => src/api}/middlewares/index.ts (100%) rename {api/src => src/api}/routes/-/healthz.ts (100%) rename {api/src => src/api}/routes/-/readyz.ts (100%) rename {api/src => src/api}/routes/applications/#id/entitlements.ts (100%) rename {api/src => src/api}/routes/applications/detectable.ts (100%) rename {api/src => src/api}/routes/applications/index.ts (100%) rename {api/src => src/api}/routes/auth/location-metadata.ts (100%) rename {api/src => src/api}/routes/auth/login.ts (100%) rename {api/src => src/api}/routes/auth/mfa/totp.ts (100%) rename {api/src => src/api}/routes/auth/register.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/followers.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/index.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/invites.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/messages/#message_id/ack.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/messages/#message_id/crosspost.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/messages/#message_id/index.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/messages/#message_id/reactions.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/messages/bulk-delete.ts (95%) rename {api/src => src/api}/routes/channels/#channel_id/messages/index.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/permissions.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/pins.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/purge.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/recipients.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/typing.ts (100%) rename {api/src => src/api}/routes/channels/#channel_id/webhooks.ts (100%) rename {api/src => src/api}/routes/discoverable-guilds.ts (100%) rename {api/src => src/api}/routes/discovery.ts (100%) rename {api/src => src/api}/routes/downloads.ts (100%) rename {api/src => src/api}/routes/experiments.ts (100%) rename {api/src => src/api}/routes/gateway/bot.ts (100%) rename {api/src => src/api}/routes/gateway/index.ts (100%) rename {api/src => src/api}/routes/gifs/search.ts (100%) rename {api/src => src/api}/routes/gifs/trending-gifs.ts (100%) rename {api/src => src/api}/routes/gifs/trending.ts (100%) rename {api/src => src/api}/routes/guild-recommendations.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/audit-logs.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/bans.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/channels.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/delete.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/discovery-requirements.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/emojis.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/index.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/integrations.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/invites.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/members/#member_id/index.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/members/#member_id/nick.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/members/index.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/premium.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/prune.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/regions.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/roles/#role_id/index.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/roles/index.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/stickers.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/templates.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/vanity-url.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/voice-states/#user_id/index.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/webhooks.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/welcome_screen.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/widget.json.ts (100%) rename {api/src => src/api}/routes/guilds/#guild_id/widget.png.ts (97%) rename {api/src => src/api}/routes/guilds/#guild_id/widget.ts (100%) rename {api/src => src/api}/routes/guilds/index.ts (100%) rename {api/src => src/api}/routes/guilds/templates/index.ts (100%) rename {api/src => src/api}/routes/invites/index.ts (100%) rename {api/src => src/api}/routes/oauth2/tokens.ts (100%) rename {api/src => src/api}/routes/outbound-promotions.ts (100%) rename {api/src => src/api}/routes/partners/#guild_id/requirements.ts (100%) rename {api/src => src/api}/routes/ping.ts (100%) rename {api/src => src/api}/routes/policies/instance/domains.ts (100%) rename {api/src => src/api}/routes/policies/instance/index.ts (100%) rename {api/src => src/api}/routes/policies/instance/limits.ts (100%) rename {api/src => src/api}/routes/scheduled-maintenances/upcoming_json.ts (100%) rename {api/src => src/api}/routes/science.ts (100%) rename {api/src => src/api}/routes/stage-instances.ts (100%) rename {api/src => src/api}/routes/sticker-packs/index.ts (100%) rename {api/src => src/api}/routes/stickers/#sticker_id/index.ts (100%) rename {api/src => src/api}/routes/stop.ts (100%) rename {api/src => src/api}/routes/store/published-listings/applications.ts (100%) rename {api/src => src/api}/routes/store/published-listings/applications/#id/subscription-plans.ts (100%) rename {api/src => src/api}/routes/store/published-listings/skus.ts (100%) rename {api/src => src/api}/routes/store/published-listings/skus/#sku_id/subscription-plans.ts (100%) rename {api/src => src/api}/routes/teams.ts (100%) rename {api/src => src/api}/routes/template.ts.disabled (100%) rename {api/src => src/api}/routes/track.ts (100%) rename {api/src => src/api}/routes/updates.ts (100%) rename {api/src => src/api}/routes/users/#id/index.ts (100%) rename {api/src => src/api}/routes/users/#id/profile.ts (100%) rename {api/src => src/api}/routes/users/#id/relationships.ts (100%) rename {api/src => src/api}/routes/users/@me/activities/statistics/applications.ts (100%) rename {api/src => src/api}/routes/users/@me/affinities/guilds.ts (100%) rename {api/src => src/api}/routes/users/@me/affinities/users.ts (100%) rename {api/src => src/api}/routes/users/@me/applications/#app_id/entitlements.ts (100%) rename {api/src => src/api}/routes/users/@me/billing/country-code.ts (100%) rename {api/src => src/api}/routes/users/@me/billing/payment-sources.ts (100%) rename {api/src => src/api}/routes/users/@me/billing/subscriptions.ts (100%) rename {api/src => src/api}/routes/users/@me/channels.ts (100%) rename {api/src => src/api}/routes/users/@me/connections.ts (100%) rename {api/src => src/api}/routes/users/@me/delete.ts (100%) rename {api/src => src/api}/routes/users/@me/devices.ts (100%) rename {api/src => src/api}/routes/users/@me/disable.ts (100%) rename {api/src => src/api}/routes/users/@me/email-settings.ts (100%) rename {api/src => src/api}/routes/users/@me/entitlements.ts (100%) rename {api/src => src/api}/routes/users/@me/guilds.ts (100%) rename {api/src => src/api}/routes/users/@me/guilds/premium/subscription-slots.ts (100%) rename {api/src => src/api}/routes/users/@me/index.ts (100%) rename {api/src => src/api}/routes/users/@me/library.ts (100%) rename {api/src => src/api}/routes/users/@me/mfa/codes.ts (100%) rename {api/src => src/api}/routes/users/@me/mfa/totp/disable.ts (100%) rename {api/src => src/api}/routes/users/@me/mfa/totp/enable.ts (100%) rename {api/src => src/api}/routes/users/@me/notes.ts (100%) rename {api/src => src/api}/routes/users/@me/relationships.ts (100%) rename {api/src => src/api}/routes/users/@me/settings.ts (100%) rename {api/src => src/api}/routes/voice/regions.ts (100%) rename {api/src => src/api}/start.ts (92%) rename {api/src => src/api}/util/entities/AssetCacheItem.ts (100%) rename {api/src => src/api}/util/entities/blockedEmailDomains.txt (100%) rename {api/src => src/api}/util/entities/trustedEmailDomains.txt (100%) rename {api/src => src/api}/util/handlers/Instance.ts (100%) rename {api/src => src/api}/util/handlers/Message.ts (100%) rename {api/src => src/api}/util/handlers/Voice.ts (100%) rename {api/src => src/api}/util/handlers/route.ts (97%) rename {api/src => src/api}/util/index.ts (100%) rename {api/src => src/api}/util/utility/Base64.ts (100%) rename {api/src => src/api}/util/utility/RandomInviteID.ts (100%) rename {api/src => src/api}/util/utility/String.ts (100%) rename {api/src => src/api}/util/utility/ipAddress.ts (100%) rename {api/src => src/api}/util/utility/passwordStrength.ts (100%) rename {cdn/src => src/cdn}/Server.ts (100%) rename {cdn/src => src/cdn}/index.ts (100%) rename {cdn/src => src/cdn}/routes/attachments.ts (100%) rename {cdn/src => src/cdn}/routes/avatars.ts (100%) rename {cdn/src => src/cdn}/routes/external.ts (100%) rename {cdn/src => src/cdn}/routes/ping.ts (100%) rename {cdn/src => src/cdn}/routes/role-icons.ts (100%) rename {cdn/src => src/cdn}/start.ts (100%) rename {cdn/src => src/cdn}/util/FileStorage.ts (100%) rename {cdn/src => src/cdn}/util/S3Storage.ts (100%) rename {cdn/src => src/cdn}/util/Storage.ts (100%) rename {cdn/src => src/cdn}/util/index.ts (100%) rename {cdn/src => src/cdn}/util/multer.ts (100%) rename {gateway/src => src/gateway}/Server.ts (100%) rename {gateway/src => src/gateway}/events/Close.ts (100%) rename {gateway/src => src/gateway}/events/Connection.ts (100%) rename {gateway/src => src/gateway}/events/Message.ts (94%) rename {gateway/src => src/gateway}/index.ts (100%) rename {gateway/src => src/gateway}/listener/listener.ts (100%) rename {gateway/src => src/gateway}/opcodes/Heartbeat.ts (100%) create mode 100644 src/gateway/opcodes/Identify.ts rename {gateway/src => src/gateway}/opcodes/LazyRequest.ts (98%) rename {gateway/src => src/gateway}/opcodes/PresenceUpdate.ts (100%) rename {gateway/src => src/gateway}/opcodes/RequestGuildMembers.ts (100%) rename {gateway/src => src/gateway}/opcodes/Resume.ts (100%) rename {gateway/src => src/gateway}/opcodes/VoiceStateUpdate.ts (98%) rename {gateway/src => src/gateway}/opcodes/experiments.json (100%) rename {gateway/src => src/gateway}/opcodes/index.ts (100%) rename {gateway/src => src/gateway}/opcodes/instanceOf.ts (100%) rename {gateway/src => src/gateway}/start.ts (100%) rename {gateway/src => src/gateway}/util/Constants.ts (100%) rename {gateway/src => src/gateway}/util/Heartbeat.ts (100%) rename {gateway/src => src/gateway}/util/Send.ts (100%) rename {gateway/src => src/gateway}/util/SessionUtils.ts (100%) rename {gateway/src => src/gateway}/util/WebSocket.ts (92%) rename {gateway/src => src/gateway}/util/index.ts (100%) rename {bundle/src => src}/start.ts (100%) create mode 100644 src/stats.ts rename {util/src => src/util}/config/Config.ts (95%) rename {util/src => src/util}/config/index.ts (100%) rename {util/src => src/util}/config/types/ApiConfiguration.ts (100%) rename {util/src => src/util}/config/types/ClientConfiguration.ts (100%) rename {util/src => src/util}/config/types/DefaultsConfiguration.ts (100%) rename {util/src => src/util}/config/types/EndpointConfiguration.ts (100%) rename {util/src => src/util}/config/types/GeneralConfiguration.ts (100%) rename {util/src => src/util}/config/types/GifConfiguration.ts (100%) rename {util/src => src/util}/config/types/GuildConfiguration.ts (100%) rename {util/src => src/util}/config/types/KafkaConfiguration.ts (100%) rename {util/src => src/util}/config/types/LimitConfigurations.ts (100%) rename {util/src => src/util}/config/types/LoginConfiguration.ts (100%) rename {util/src => src/util}/config/types/MetricsConfiguration.ts (100%) rename {util/src => src/util}/config/types/RabbitMQConfiguration.ts (100%) rename {util/src => src/util}/config/types/RegionConfiguration.ts (100%) rename {util/src => src/util}/config/types/RegisterConfiguration.ts (100%) rename {util/src => src/util}/config/types/SecurityConfiguration.ts (100%) rename {util/src => src/util}/config/types/SentryConfiguration.ts (100%) rename {util/src => src/util}/config/types/TemplateConfiguration.ts (100%) rename {util/src => src/util}/config/types/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/client/ClientReleaseConfiguration.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/client/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/defaults/GuildDefaults.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/defaults/UserDefaults.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/defaults/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/guild/AutoJoin.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/guild/Discovery.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/guild/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/kafka/KafkaBroker.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/kafka/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/ChannelLimits.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/GuildLimits.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/MessageLimits.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/RateLimits.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/UserLimits.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/ratelimits/Auth.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/limits/ratelimits/Route.ts (90%) rename {util/src => src/util}/config/types/subconfigurations/limits/ratelimits/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/region/Region.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/region/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/register/DateOfBirth.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/register/Email.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/register/Password.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/register/index.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/security/Captcha.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/security/TwoFactor.ts (100%) rename {util/src => src/util}/config/types/subconfigurations/security/index.ts (100%) rename {util/src => src/util}/dtos/DmChannelDTO.ts (100%) rename {util/src => src/util}/dtos/UserDTO.ts (100%) rename {util/src => src/util}/dtos/index.ts (100%) rename {util/src => src/util}/entities/Application.ts (100%) rename {util/src => src/util}/entities/Attachment.ts (100%) rename {util/src => src/util}/entities/AuditLog.ts (100%) rename {util/src => src/util}/entities/BackupCodes.ts (100%) rename {util/src => src/util}/entities/Ban.ts (100%) rename {util/src => src/util}/entities/BaseClass.ts (100%) rename {util/src => src/util}/entities/Categories.ts (100%) rename {util/src => src/util}/entities/Channel.ts (100%) rename {util/src => src/util}/entities/ClientRelease.ts (100%) rename {util/src => src/util}/entities/Config.ts (100%) rename {util/src => src/util}/entities/ConnectedAccount.ts (100%) rename {util/src => src/util}/entities/Emoji.ts (100%) rename {util/src => src/util}/entities/Encryption.ts (100%) rename {util/src => src/util}/entities/Group.ts (100%) rename {util/src => src/util}/entities/Guild.ts (100%) rename {util/src => src/util}/entities/Invite.ts (100%) rename {util/src => src/util}/entities/Member.ts (100%) rename {util/src => src/util}/entities/Message.ts (100%) rename {util/src => src/util}/entities/Migration.ts (100%) rename {util/src => src/util}/entities/Note.ts (100%) rename {util/src => src/util}/entities/RateLimit.ts (100%) rename {util/src => src/util}/entities/ReadState.ts (100%) rename {util/src => src/util}/entities/Recipient.ts (100%) rename {util/src => src/util}/entities/Relationship.ts (100%) rename {util/src => src/util}/entities/Role.ts (100%) rename {util/src => src/util}/entities/Session.ts (100%) rename {util/src => src/util}/entities/Sticker.ts (100%) rename {util/src => src/util}/entities/StickerPack.ts (100%) rename {util/src => src/util}/entities/Team.ts (100%) rename {util/src => src/util}/entities/TeamMember.ts (100%) rename {util/src => src/util}/entities/Template.ts (100%) rename {util/src => src/util}/entities/User.ts (100%) rename {util/src => src/util}/entities/UserGroup.ts (100%) rename {util/src => src/util}/entities/UserSettings.ts (100%) rename {util/src => src/util}/entities/VoiceState.ts (100%) rename {util/src => src/util}/entities/Webhook.ts (100%) rename {util/src => src/util}/entities/index.ts (100%) rename {util/src => src/util}/index.ts (76%) rename {util/src => src/util}/interfaces/Activity.ts (100%) rename {util/src => src/util}/interfaces/Event.ts (100%) rename {util/src => src/util}/interfaces/Interaction.ts (100%) rename {util/src => src/util}/interfaces/Presence.ts (100%) rename {util/src => src/util}/interfaces/Status.ts (100%) rename {util/src => src/util}/interfaces/index.ts (100%) rename {util/src => src/util}/migrations/mariadb/1659901151025-initial.ts (100%) rename {util/src => src/util}/migrations/mariadb/1659921859145-premium_since_as_date.ts (100%) rename {util/src => src/util}/migrations/mariadb/1660258393551-CodeCleanup3.ts (100%) rename {util/src => src/util}/migrations/mariadb/1660260587556-CodeCleanup4.ts (100%) rename {util/src => src/util}/migrations/mariadb/1660265930624-CodeCleanup5.ts (100%) rename {util/src => src/util}/migrations/postgres/1659899687168-initial.ts (100%) rename {util/src => src/util}/migrations/postgres/1659921826567-premium_since_as_date.ts (100%) rename {util/src => src/util}/migrations/postgres/1660257815436-CodeCleanup2.ts (100%) rename {util/src => src/util}/migrations/postgres/1660258372154-CodeCleanup3.ts (100%) rename {util/src => src/util}/migrations/postgres/1660260565996-CodeCleanup4.ts (100%) rename {util/src => src/util}/migrations/postgres/1660265907544-CodeCleanup5.ts (100%) rename {util/src => src/util}/migrations/sqlite/1659899662635-initial.ts (100%) rename {util/src => src/util}/migrations/sqlite/1659921722863-premium_since_as_date.ts (100%) rename {util/src => src/util}/migrations/sqlite/1660257576211-CodeCleanup1.ts (100%) rename {util/src => src/util}/migrations/sqlite/1660257795259-CodeCleanup2.ts (100%) rename {util/src => src/util}/migrations/sqlite/1660258351379-CodeCleanup3.ts (100%) rename {util/src => src/util}/migrations/sqlite/1660260672914-CodeCleanup4.ts (100%) rename {util/src => src/util}/schemas/ActivitySchema.ts (100%) rename {util/src => src/util}/schemas/BanCreateSchema.ts (100%) rename {util/src => src/util}/schemas/BanModeratorSchema.ts (100%) rename {util/src => src/util}/schemas/BanRegistrySchema.ts (100%) rename {util/src => src/util}/schemas/BulkDeleteSchema.ts (100%) rename {util/src => src/util}/schemas/ChannelModifySchema.ts (100%) rename {util/src => src/util}/schemas/ChannelPermissionOverwriteSchema.ts (100%) rename {util/src => src/util}/schemas/ChannelReorderSchema.ts (100%) rename {util/src => src/util}/schemas/DmChannelCreateSchema.ts (100%) rename {util/src => src/util}/schemas/EmojiCreateSchema.ts (100%) rename {util/src => src/util}/schemas/EmojiModifySchema.ts (100%) rename {util/src => src/util}/schemas/GuildCreateSchema.ts (100%) rename {util/src => src/util}/schemas/GuildTemplateCreateSchema.ts (100%) rename {util/src => src/util}/schemas/GuildUpdateSchema.ts (100%) rename {util/src => src/util}/schemas/GuildUpdateWelcomeScreenSchema.ts (100%) rename {util/src => src/util}/schemas/IdentifySchema.ts (93%) rename {util/src => src/util}/schemas/InviteCreateSchema.ts (100%) rename {util/src => src/util}/schemas/LazyRequestSchema.ts (100%) rename {util/src => src/util}/schemas/LoginSchema.ts (100%) rename {util/src => src/util}/schemas/MemberChangeSchema.ts (100%) rename {util/src => src/util}/schemas/MemberNickChangeSchema.ts (100%) rename {util/src => src/util}/schemas/MessageAcknowledgeSchema.ts (100%) rename {util/src => src/util}/schemas/MessageCreateSchema.ts (100%) rename {util/src => src/util}/schemas/MfaCodesSchema.ts (100%) rename {util/src => src/util}/schemas/ModifyGuildStickerSchema.ts (100%) rename {util/src => src/util}/schemas/PruneSchema.ts (100%) rename {util/src => src/util}/schemas/PurgeSchema.ts (100%) rename {util/src => src/util}/schemas/RegisterSchema.ts (100%) rename {util/src => src/util}/schemas/RelationshipPostSchema.ts (100%) rename {util/src => src/util}/schemas/RelationshipPutSchema.ts (100%) rename {util/src => src/util}/schemas/RoleModifySchema.ts (100%) rename {util/src => src/util}/schemas/RolePositionUpdateSchema.ts (100%) rename {util/src => src/util}/schemas/TemplateCreateSchema.ts (100%) rename {util/src => src/util}/schemas/TemplateModifySchema.ts (100%) rename {util/src => src/util}/schemas/TotpDisableSchema.ts (100%) rename {util/src => src/util}/schemas/TotpEnableSchema.ts (100%) rename {util/src => src/util}/schemas/TotpSchema.ts (100%) rename {util/src => src/util}/schemas/UserModifySchema.ts (100%) rename {util/src => src/util}/schemas/UserSettingsSchema.ts (100%) rename {util/src => src/util}/schemas/VanityUrlSchema.ts (100%) rename {util/src => src/util}/schemas/VoiceStateUpdateSchema.ts (100%) rename {util/src => src/util}/schemas/WebhookCreateSchema.ts (100%) rename {util/src => src/util}/schemas/WidgetModifySchema.ts (100%) rename {util/src => src/util}/schemas/index.ts (100%) rename {util/src => src/util}/util/ApiError.ts (100%) rename {util/src => src/util}/util/Array.ts (100%) rename {util/src => src/util}/util/AutoUpdate.ts (100%) rename {util/src => src/util}/util/BitField.ts (100%) rename {util/src => src/util}/util/Categories.ts (100%) rename {util/src => src/util}/util/Config.ts (100%) rename {util/src => src/util}/util/Constants.ts (100%) rename {util/src => src/util}/util/Database.ts (100%) rename {util/src => src/util}/util/Email.ts (100%) rename {util/src => src/util}/util/Event.ts (100%) rename {util/src => src/util}/util/FieldError.ts (100%) rename {util/src => src/util}/util/Intents.ts (100%) rename {util/src => src/util}/util/InvisibleCharacters.ts (100%) rename {util/src => src/util}/util/MFA.ts (100%) rename {util/src => src/util}/util/MessageFlags.ts (100%) rename {util/src => src/util}/util/Permissions.ts (100%) rename {util/src => src/util}/util/RabbitMQ.ts (100%) rename {util/src => src/util}/util/Regex.ts (100%) rename {util/src => src/util}/util/Rights.ts (100%) rename {util/src => src/util}/util/Snowflake.ts (100%) rename {util/src => src/util}/util/String.ts (100%) rename {util/src => src/util}/util/Token.ts (100%) rename {util/src => src/util}/util/TraverseDirectory.ts (100%) rename {util/src => src/util}/util/cdn.ts (100%) rename {util/src => src/util}/util/imports/Checks.ts (100%) rename {util/src => src/util}/util/imports/HTTPError.ts (100%) rename {util/src => src/util}/util/imports/OrmUtils.ts (100%) rename {util/src => src/util}/util/imports/index.ts (100%) rename {util/src => src/util}/util/index.ts (100%) rename {util/tests => tests}/User.test.js (100%) rename {cdn/tests => tests}/antman.jpg (100%) rename {cdn/tests => tests}/cdn_endpoints.test.js (100%) rename {cdn/tests => tests}/filestorage.test.js (100%) rename {api/tests => tests}/routes.test.ts (100%) rename {api/tests => tests}/routes/auth/login.test.js (100%) rename {api/tests => tests}/routes/auth/register.test.js (100%) rename {api/tests => tests}/routes/ping.test.js (100%) rename {util/tests => tests}/setupJest.js (100%) rename bundle/tsconfig.json => tsconfig.json (92%) delete mode 100644 util/.gitignore delete mode 100644 util/.npmignore delete mode 100644 util/.prettierrc delete mode 100644 util/.vscode/launch.json delete mode 100644 util/README.md delete mode 100644 util/package-lock.json delete mode 100644 util/package.json delete mode 100644 util/tsconfig.json delete mode 100644 webrtc/.DS_Store delete mode 100644 webrtc/.gitignore delete mode 100644 webrtc/README.md delete mode 100644 webrtc/package-lock.json delete mode 100644 webrtc/package.json delete mode 100644 webrtc/src/Server.ts delete mode 100644 webrtc/src/index.ts delete mode 100644 webrtc/src/start.ts delete mode 100644 webrtc/src/test.ts delete mode 100644 webrtc/tsconfig.json create mode 100644 yarn.lock diff --git a/api/.dockerignore b/.dockerignore similarity index 100% rename from api/.dockerignore rename to .dockerignore diff --git a/.gitignore b/.gitignore index 98adcd003..e9f3f39c9 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ api/assets/plugins/*.js bundle/depclean.* *.tmp tmp/ + +assets/cache/ \ No newline at end of file diff --git a/api/.env.example b/api/.env.example deleted file mode 100644 index 5974f6286..000000000 --- a/api/.env.example +++ /dev/null @@ -1,8 +0,0 @@ -MONGO_URL=mongodb://localhost/fosscord -PORT=3001 -PRODUCTION=TRUE -THREADS=# automatically use all available cores, only available if production = true -#LOG_REQUESTS= -# only log 200 and 204: LOG_REQUESTS=200 204 -# log everything except 200 and 204: LOG_REQUESTS=-200 204 -# log all requests: LOG_REQUESTS=- \ No newline at end of file diff --git a/api/.gitignore b/api/.gitignore deleted file mode 100644 index 662816b93..000000000 --- a/api/.gitignore +++ /dev/null @@ -1,115 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist -build - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -.DS_STORE -src/ready.json - -# Docker -.docker/config/* -!.docker/config/.keep - -# fosscord -*.db \ No newline at end of file diff --git a/api/.npmignore b/api/.npmignore deleted file mode 100644 index 05a9d0cf2..000000000 --- a/api/.npmignore +++ /dev/null @@ -1 +0,0 @@ -!dist/ \ No newline at end of file diff --git a/api/.prettierrc b/api/.prettierrc deleted file mode 100644 index 8a2c607fc..000000000 --- a/api/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "tabWidth": 4, - "useTabs": true, - "printWidth": 140, - "trailingComma": "none" -} diff --git a/api/.vscode/api-snippets.code-snippets b/api/.vscode/api-snippets.code-snippets deleted file mode 100644 index ef4b6386a..000000000 --- a/api/.vscode/api-snippets.code-snippets +++ /dev/null @@ -1,25 +0,0 @@ -{ - "API Router": { - "scope": "javascript,typescript", - "prefix": "router", - "body": [ - "import { Router, Response, Request } from \"express\";", - "import { route } from \"@fosscord/api\";", - "", - "const router = Router();", - "", - "router.get(\"/\", route({}), (req: Request, res: Response) => {", - "\tres.json({});", - "});", - "", - "export default router;" - ], - "description": "A basic API router setup for a blank route." - }, - "Route": { - "scope": "typescript", - "prefix": "route", - "body": ["router.get(\"$1\", route({}), (req: Request, res: Response) => {", "\t$2", "});"], - "description": "An API endpoint" - } -} diff --git a/api/.vscode/launch.json b/api/.vscode/launch.json deleted file mode 100644 index 221931ee8..000000000 --- a/api/.vscode/launch.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "sourceMaps": true, - "type": "node", - "request": "launch", - "name": "Launch Server", - "program": "${workspaceFolder}/dist/start.js", - "preLaunchTask": "tsc: build - tsconfig.json", - "outFiles": ["${workspaceFolder}/dist/**/*.js"], - "envFile": "${workspaceFolder}/.env" - }, - { - "name": "Debug current file", - "program": "${file}", - "request": "launch", - "skipFiles": ["/**"], - "runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"], - "preLaunchTask": "tsc: build - tsconfig.json", - "type": "node", - "resolveSourceMapLocations": ["${workspaceFolder}/**", "!**/node_modules/**"] - } - ] -} diff --git a/api/Dockerfile b/api/Dockerfile deleted file mode 100644 index 08d15f72a..000000000 --- a/api/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM node:lts-alpine -# needed for native packages (bcrypt, canvas) -RUN apk add --no-cache make gcc g++ python cairo-dev jpeg-dev pango-dev giflib-dev -WORKDIR /usr/src/fosscord-server -COPY package.json . -COPY package-lock.json . -RUN npm rebuild bcrypt --build-from-source && npm install canvas --build-from-source -RUN npm install -COPY . . -EXPOSE 3001 -RUN npm run build-docker -CMD ["node", "dist/start.js"] diff --git a/api/README.md b/api/README.md deleted file mode 100644 index 62349972b..000000000 --- a/api/README.md +++ /dev/null @@ -1,67 +0,0 @@ -

- -

-

Fosscord HTTP API Server

- -

- - - - - - - - -

- -## [About](https://github.com/fosscord/fosscord-server/wiki) - -This repository contains the Fosscord HTTP API Server - -## Bug Tracker - -[Project Board](https://fosscord.notion.site/2c7fe9e73f9842d3bab3a4912dedd091) - -## API - -We use [express](https://expressjs.com/) for the HTTP Server and -[lambert-server](https://www.npmjs.com/package/lambert-server) for route handling and body validation (customized). - -## Contribution - -You should be familiar with: - -- [Git](https://git-scm.com/) -- [NodeJS](https://nodejs.org/) -- [TypeScript](https://www.typescriptlang.org/) -- [MongoDB/mongoose](http://mongoosejs.com/) - -and the other technologies we use - -### Getting Started - -Clone the Repository: - -```bash -git clone https://github.com/fosscord/fosscord-server -cd fosscord-server -``` - -#### Install (dev)dependencies: - -```bash -npm install -npm install --only=dev -``` - -#### Starting: - -``` -npm start -``` - -#### Debugging: - -**Vscode:** -The Launch file configuration is in `./vscode/launch.json`, -so you can just debug the server by pressing `F5` or the `> Launch Server` button diff --git a/api/babel.config.js b/api/babel.config.js deleted file mode 100644 index 45ab8ad8b..000000000 --- a/api/babel.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - presets: [ - ["@babel/preset-env", { targets: { node: "current" } }], - ["@babel/preset-typescript", { allowDeclareFields: true }] - ] -}; diff --git a/api/jest/getRouteDescriptions.js b/api/jest/getRouteDescriptions.js deleted file mode 100644 index 4f8d2e75e..000000000 --- a/api/jest/getRouteDescriptions.js +++ /dev/null @@ -1,66 +0,0 @@ -const { traverseDirectory } = require("lambert-server"); -const path = require("path"); -const express = require("express"); -const RouteUtility = require("../dist/util/route"); -const Router = express.Router; - -/** - * Some documentation. - * - * @type {Map} - */ -const routes = new Map(); -let currentPath = ""; -let currentFile = ""; -const methods = ["get", "post", "put", "delete", "patch"]; - -function registerPath(file, method, prefix, path, ...args) { - const urlPath = prefix + path; - const sourceFile = file.replace("/dist/", "/src/").replace(".js", ".ts"); - const opts = args.find((x) => typeof x === "object"); - if (opts) { - routes.set(urlPath + "|" + method, opts); // @ts-ignore - opts.file = sourceFile; - // console.log(method, urlPath, opts); - } else { - console.log(`${sourceFile}\nrouter.${method}("${path}") is missing the "route()" description middleware\n`); - } -} - -function routeOptions(opts) { - return opts; -} - -// @ts-ignore -RouteUtility.route = routeOptions; - -express.Router = (opts) => { - const path = currentPath; - const file = currentFile; - const router = Router(opts); - - for (const method of methods) { - router[method] = registerPath.bind(null, file, method, path); - } - - return router; -}; - -module.exports = function getRouteDescriptions() { - const root = path.join(__dirname, "..", "dist", "routes", "/"); - traverseDirectory({ dirname: root, recursive: true }, (file) => { - currentFile = file; - let path = file.replace(root.slice(0, -1), ""); - path = path.split(".").slice(0, -1).join("."); // trancate .js/.ts file extension of path - path = path.replaceAll("#", ":").replaceAll("\\", "/"); // replace # with : for path parameters and windows paths with slashes - if (path.endsWith("/index")) path = path.slice(0, "/index".length * -1); // delete index from path - currentPath = path; - - try { - require(file); - } catch (error) { - console.error("error loading file " + file, error); - } - }); - return routes; -}; diff --git a/api/jest/globalSetup.js b/api/jest/globalSetup.js deleted file mode 100644 index 520aa0e2e..000000000 --- a/api/jest/globalSetup.js +++ /dev/null @@ -1,20 +0,0 @@ -const { Config, initDatabase } = require("@fosscord/util"); -const fs = require("fs"); -const path = require("path"); -const { FosscordServer } = require("../dist/Server"); -const Server = new FosscordServer({ port: 3001 }); -global.server = Server; -module.exports = async () => { - try { - fs.unlinkSync(path.join(process.cwd(), "database.db")); - } catch {} - - await initDatabase(); - await Config.init(); - Config.get().limits.rate.disabled = true; - return await Server.start(); -}; - -// afterAll(async () => { -// return await Server.stop(); -// }); diff --git a/api/jest/setup.js b/api/jest/setup.js deleted file mode 100644 index abc485ae3..000000000 --- a/api/jest/setup.js +++ /dev/null @@ -1,2 +0,0 @@ -jest.spyOn(global.console, "log").mockImplementation(() => jest.fn()); -jest.spyOn(global.console, "info").mockImplementation(() => jest.fn()); diff --git a/api/package-lock.json b/api/package-lock.json deleted file mode 100644 index bb7f725f90e4ca61cb3f7ff15ed1c020e95a3651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556574 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

&fayLqFtD%<)%BIBbST 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 diff --git a/api/package.json b/api/package.json deleted file mode 100644 index 1fa85884b..000000000 --- a/api/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "@fosscord/api", - "version": "1.0.0", - "description": "This repository contains the HTTP API Server", - "main": "dist/index.js", - "types": "src/index.ts", - "scripts": { - "test:only": "npx jest --coverage --verbose --forceExit ./tests", - "test:routes": "npx jest --coverage --verbose --forceExit ./routes.test.ts", - "test": "npm run build && npm run test:only", - "test:watch": "npx jest --watch", - "start": "npm run build && node dist/start", - "build": "npx tsc -p .", - "dev": "npx tsnd --respawn src/start.ts", - "patch": "npx ts-patch install -s && npx patch-package", - "postinstall": "npm run patch", - "generate:docs": "node scripts/generate_openapi", - "generate:schema": "node scripts/generate_schema" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/fosscord/fosscord-server.git" - }, - "keywords": [ - "discord", - "fosscord", - "fosscord-server", - "fosscord-api", - "discord open source", - "discord-open-source" - ], - "author": "Fosscord", - "license": "AGPL-3.0-only", - "bugs": { - "url": "https://github.com/fosscord/fosscord-server/issues" - }, - "homepage": "https://fosscord.com", - "devDependencies": { - "@babel/core": "^7.18.9", - "@babel/preset-env": "^7.18.9", - "@babel/preset-typescript": "^7.15.0", - "@types/bcrypt": "^5.0.0", - "@types/express": "^4.17.9", - "@types/i18next-node-fs-backend": "^2.1.0", - "@types/morgan": "^1.9.3", - "@types/multer": "^1.4.5", - "@types/node": "^18.0.6", - "jest": "^28.1.3", - "jest-expect-message": "^1.0.2", - "ts-node-dev": "^2.0.0", - "typescript": "^4.4.2", - "typescript-json-schema": "^0.54.0" - }, - "dependencies": { - "@babel/preset-typescript": "^7.15.0", - "@fosscord/util": "file:../util", - "ajv": "8.6.2", - "ajv-formats": "^2.1.1", - "bcrypt": "^5.0.1", - "body-parser": "^1.19.0", - "canvas": "^2.9.3", - "cheerio": "^1.0.0-rc.10", - "dotenv": "^16.0.1", - "express": "^4.17.1", - "i18next": "^21.8.14", - "i18next-http-middleware": "^3.1.3", - "i18next-node-fs-backend": "^2.1.3", - "image-size": "^1.0.0", - "lambert-server": "^1.2.12", - "missing-native-js-functions": "^1.2.18", - "morgan": "^1.10.0", - "multer": "^1.4.5-lts.1", - "node-2fa": "^2.0.3", - "node-fetch": "^2.6.7", - "patch-package": "^6.4.7", - "picocolors": "^1.0.0", - "proxy-agent": "^5.0.0", - "supertest": "^6.1.6", - "typeorm": "^0.3.7" - }, - "jest": { - "setupFiles": [ - "/jest/setup.js" - ], - "setupFilesAfterEnv": [ - "jest-expect-message" - ], - "globalSetup": "/jest/globalSetup.js", - "verbose": true - } -} diff --git a/api/tsconfig.json b/api/tsconfig.json deleted file mode 100644 index 80fca16df..000000000 --- a/api/tsconfig.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "exclude": ["node_modules"], - "include": ["src/**/*.ts"], - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - "incremental": false /* Enable incremental compilation */, - "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - "lib": ["ES2021"] /* Specify library files to be included in the compilation. */, - "allowJs": true /* Allow javascript files to be compiled. */, - "checkJs": true /* Report errors in .js files. */, - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - "declarationMap": false /* Generates a sourcemap for each corresponding '.d.ts' file. */, - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist/" /* Redirect output structure to the directory. */, - "rootDir": "./src/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - "strictNullChecks": true /* Enable strict null checks. */, - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": false /* Enable strict checking of property initialization in classes. */, - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": ["node"] /* Type declaration files to be included in compilation. */, - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, - "baseUrl": ".", - "paths": { - "@fosscord/api": ["src/index"] - }, - "plugins": [{ "transform": "@ovos-media/ts-transform-paths" }], - "experimentalDecorators": true - } -} diff --git a/api/assets/checkLocale.js b/assets/checkLocale.js similarity index 100% rename from api/assets/checkLocale.js rename to assets/checkLocale.js diff --git a/api/client_test/developers.html b/assets/developers.html similarity index 100% rename from api/client_test/developers.html rename to assets/developers.html diff --git a/api/assets/dff87c953f43b561d71fbcfe8a93a79a.png b/assets/dff87c953f43b561d71fbcfe8a93a79a.png similarity index 100% rename from api/assets/dff87c953f43b561d71fbcfe8a93a79a.png rename to assets/dff87c953f43b561d71fbcfe8a93a79a.png diff --git a/api/assets/endpoints.json b/assets/endpoints.json similarity index 100% rename from api/assets/endpoints.json rename to assets/endpoints.json diff --git a/api/assets/features.json b/assets/features.json similarity index 100% rename from api/assets/features.json rename to assets/features.json diff --git a/api/assets/fosscord-login.css b/assets/fosscord-login.css similarity index 100% rename from api/assets/fosscord-login.css rename to assets/fosscord-login.css diff --git a/api/assets/fosscord.css b/assets/fosscord.css similarity index 100% rename from api/assets/fosscord.css rename to assets/fosscord.css diff --git a/api/client_test/index.html b/assets/index.html similarity index 98% rename from api/client_test/index.html rename to assets/index.html index c35c14d2b..64a2bdbff 100644 --- a/api/client_test/index.html +++ b/assets/index.html @@ -20,7 +20,7 @@ window.GLOBAL_ENV = { API_ENDPOINT: "/api", API_VERSION: 9, - GATEWAY_ENDPOINT: `${location.protocol === "https:" ? "wss://" : "ws://"}${location.hostname}:3002`, + GATEWAY_ENDPOINT: `${location.protocol === "https:" ? "wss://" : "ws://"}${location.host}`, WEBAPP_ENDPOINT: "", CDN_HOST: `${location.hostname}:3003`, ASSET_ENDPOINT: "", diff --git a/api/assets/inline-plugins/autoRegister.js b/assets/inline-plugins/autoRegister.js similarity index 100% rename from api/assets/inline-plugins/autoRegister.js rename to assets/inline-plugins/autoRegister.js diff --git a/api/assets/inline-plugins/fosscord-login.js b/assets/inline-plugins/fosscord-login.js similarity index 100% rename from api/assets/inline-plugins/fosscord-login.js rename to assets/inline-plugins/fosscord-login.js diff --git a/api/locales/af/auth.json b/assets/locales/af/auth.json similarity index 100% rename from api/locales/af/auth.json rename to assets/locales/af/auth.json diff --git a/api/locales/af/common.json b/assets/locales/af/common.json similarity index 100% rename from api/locales/af/common.json rename to assets/locales/af/common.json diff --git a/api/locales/ar/auth.json b/assets/locales/ar/auth.json similarity index 100% rename from api/locales/ar/auth.json rename to assets/locales/ar/auth.json diff --git a/api/locales/ar/common.json b/assets/locales/ar/common.json similarity index 100% rename from api/locales/ar/common.json rename to assets/locales/ar/common.json diff --git a/api/locales/arn/auth.json b/assets/locales/arn/auth.json similarity index 100% rename from api/locales/arn/auth.json rename to assets/locales/arn/auth.json diff --git a/api/locales/arn/common.json b/assets/locales/arn/common.json similarity index 100% rename from api/locales/arn/common.json rename to assets/locales/arn/common.json diff --git a/api/locales/az/auth.json b/assets/locales/az/auth.json similarity index 100% rename from api/locales/az/auth.json rename to assets/locales/az/auth.json diff --git a/api/locales/az/common.json b/assets/locales/az/common.json similarity index 100% rename from api/locales/az/common.json rename to assets/locales/az/common.json diff --git a/api/locales/be/auth.json b/assets/locales/be/auth.json similarity index 100% rename from api/locales/be/auth.json rename to assets/locales/be/auth.json diff --git a/api/locales/be/common.json b/assets/locales/be/common.json similarity index 100% rename from api/locales/be/common.json rename to assets/locales/be/common.json diff --git a/api/locales/ber/auth.json b/assets/locales/ber/auth.json similarity index 100% rename from api/locales/ber/auth.json rename to assets/locales/ber/auth.json diff --git a/api/locales/ber/common.json b/assets/locales/ber/common.json similarity index 100% rename from api/locales/ber/common.json rename to assets/locales/ber/common.json diff --git a/api/locales/bg/auth.json b/assets/locales/bg/auth.json similarity index 100% rename from api/locales/bg/auth.json rename to assets/locales/bg/auth.json diff --git a/api/locales/bg/common.json b/assets/locales/bg/common.json similarity index 100% rename from api/locales/bg/common.json rename to assets/locales/bg/common.json diff --git a/api/locales/bo/auth.json b/assets/locales/bo/auth.json similarity index 100% rename from api/locales/bo/auth.json rename to assets/locales/bo/auth.json diff --git a/api/locales/bo/common.json b/assets/locales/bo/common.json similarity index 100% rename from api/locales/bo/common.json rename to assets/locales/bo/common.json diff --git a/api/locales/ca/auth.json b/assets/locales/ca/auth.json similarity index 100% rename from api/locales/ca/auth.json rename to assets/locales/ca/auth.json diff --git a/api/locales/ca/common.json b/assets/locales/ca/common.json similarity index 100% rename from api/locales/ca/common.json rename to assets/locales/ca/common.json diff --git a/api/locales/cs/auth.json b/assets/locales/cs/auth.json similarity index 100% rename from api/locales/cs/auth.json rename to assets/locales/cs/auth.json diff --git a/api/locales/cs/common.json b/assets/locales/cs/common.json similarity index 100% rename from api/locales/cs/common.json rename to assets/locales/cs/common.json diff --git a/api/locales/da/auth.json b/assets/locales/da/auth.json similarity index 100% rename from api/locales/da/auth.json rename to assets/locales/da/auth.json diff --git a/api/locales/da/common.json b/assets/locales/da/common.json similarity index 100% rename from api/locales/da/common.json rename to assets/locales/da/common.json diff --git a/api/locales/de/auth.json b/assets/locales/de/auth.json similarity index 100% rename from api/locales/de/auth.json rename to assets/locales/de/auth.json diff --git a/api/locales/de/common.json b/assets/locales/de/common.json similarity index 100% rename from api/locales/de/common.json rename to assets/locales/de/common.json diff --git a/api/locales/el/auth.json b/assets/locales/el/auth.json similarity index 100% rename from api/locales/el/auth.json rename to assets/locales/el/auth.json diff --git a/api/locales/el/common.json b/assets/locales/el/common.json similarity index 100% rename from api/locales/el/common.json rename to assets/locales/el/common.json diff --git a/api/locales/en/auth.json b/assets/locales/en/auth.json similarity index 100% rename from api/locales/en/auth.json rename to assets/locales/en/auth.json diff --git a/api/locales/en/common.json b/assets/locales/en/common.json similarity index 100% rename from api/locales/en/common.json rename to assets/locales/en/common.json diff --git a/api/locales/eo/auth.json b/assets/locales/eo/auth.json similarity index 100% rename from api/locales/eo/auth.json rename to assets/locales/eo/auth.json diff --git a/api/locales/eo/common.json b/assets/locales/eo/common.json similarity index 100% rename from api/locales/eo/common.json rename to assets/locales/eo/common.json diff --git a/api/locales/es/auth.json b/assets/locales/es/auth.json similarity index 100% rename from api/locales/es/auth.json rename to assets/locales/es/auth.json diff --git a/api/locales/es/common.json b/assets/locales/es/common.json similarity index 100% rename from api/locales/es/common.json rename to assets/locales/es/common.json diff --git a/api/locales/eu/auth.json b/assets/locales/eu/auth.json similarity index 100% rename from api/locales/eu/auth.json rename to assets/locales/eu/auth.json diff --git a/api/locales/eu/common.json b/assets/locales/eu/common.json similarity index 100% rename from api/locales/eu/common.json rename to assets/locales/eu/common.json diff --git a/api/locales/fa/auth.json b/assets/locales/fa/auth.json similarity index 100% rename from api/locales/fa/auth.json rename to assets/locales/fa/auth.json diff --git a/api/locales/fa/common.json b/assets/locales/fa/common.json similarity index 100% rename from api/locales/fa/common.json rename to assets/locales/fa/common.json diff --git a/api/locales/fi/auth.json b/assets/locales/fi/auth.json similarity index 100% rename from api/locales/fi/auth.json rename to assets/locales/fi/auth.json diff --git a/api/locales/fi/common.json b/assets/locales/fi/common.json similarity index 100% rename from api/locales/fi/common.json rename to assets/locales/fi/common.json diff --git a/api/locales/fr/auth.json b/assets/locales/fr/auth.json similarity index 100% rename from api/locales/fr/auth.json rename to assets/locales/fr/auth.json diff --git a/api/locales/fr/common.json b/assets/locales/fr/common.json similarity index 100% rename from api/locales/fr/common.json rename to assets/locales/fr/common.json diff --git a/api/locales/gn/auth.json b/assets/locales/gn/auth.json similarity index 100% rename from api/locales/gn/auth.json rename to assets/locales/gn/auth.json diff --git a/api/locales/gn/common.json b/assets/locales/gn/common.json similarity index 100% rename from api/locales/gn/common.json rename to assets/locales/gn/common.json diff --git a/api/locales/ha/auth.json b/assets/locales/ha/auth.json similarity index 100% rename from api/locales/ha/auth.json rename to assets/locales/ha/auth.json diff --git a/api/locales/ha/common.json b/assets/locales/ha/common.json similarity index 100% rename from api/locales/ha/common.json rename to assets/locales/ha/common.json diff --git a/api/locales/he/auth.json b/assets/locales/he/auth.json similarity index 100% rename from api/locales/he/auth.json rename to assets/locales/he/auth.json diff --git a/api/locales/he/common.json b/assets/locales/he/common.json similarity index 100% rename from api/locales/he/common.json rename to assets/locales/he/common.json diff --git a/api/locales/hi/auth.json b/assets/locales/hi/auth.json similarity index 100% rename from api/locales/hi/auth.json rename to assets/locales/hi/auth.json diff --git a/api/locales/hi/common.json b/assets/locales/hi/common.json similarity index 100% rename from api/locales/hi/common.json rename to assets/locales/hi/common.json diff --git a/api/locales/hr/auth.json b/assets/locales/hr/auth.json similarity index 100% rename from api/locales/hr/auth.json rename to assets/locales/hr/auth.json diff --git a/api/locales/hr/common.json b/assets/locales/hr/common.json similarity index 100% rename from api/locales/hr/common.json rename to assets/locales/hr/common.json diff --git a/api/locales/hu/auth.json b/assets/locales/hu/auth.json similarity index 100% rename from api/locales/hu/auth.json rename to assets/locales/hu/auth.json diff --git a/api/locales/hu/common.json b/assets/locales/hu/common.json similarity index 100% rename from api/locales/hu/common.json rename to assets/locales/hu/common.json diff --git a/api/locales/id/auth.json b/assets/locales/id/auth.json similarity index 100% rename from api/locales/id/auth.json rename to assets/locales/id/auth.json diff --git a/api/locales/id/common.json b/assets/locales/id/common.json similarity index 100% rename from api/locales/id/common.json rename to assets/locales/id/common.json diff --git a/api/locales/it/auth.json b/assets/locales/it/auth.json similarity index 100% rename from api/locales/it/auth.json rename to assets/locales/it/auth.json diff --git a/api/locales/it/common.json b/assets/locales/it/common.json similarity index 100% rename from api/locales/it/common.json rename to assets/locales/it/common.json diff --git a/api/locales/ja/auth.json b/assets/locales/ja/auth.json similarity index 100% rename from api/locales/ja/auth.json rename to assets/locales/ja/auth.json diff --git a/api/locales/ja/common.json b/assets/locales/ja/common.json similarity index 100% rename from api/locales/ja/common.json rename to assets/locales/ja/common.json diff --git a/api/locales/jv/auth.json b/assets/locales/jv/auth.json similarity index 100% rename from api/locales/jv/auth.json rename to assets/locales/jv/auth.json diff --git a/api/locales/jv/common.json b/assets/locales/jv/common.json similarity index 100% rename from api/locales/jv/common.json rename to assets/locales/jv/common.json diff --git a/api/locales/kk/auth.json b/assets/locales/kk/auth.json similarity index 100% rename from api/locales/kk/auth.json rename to assets/locales/kk/auth.json diff --git a/api/locales/kk/common.json b/assets/locales/kk/common.json similarity index 100% rename from api/locales/kk/common.json rename to assets/locales/kk/common.json diff --git a/api/locales/ko/auth.json b/assets/locales/ko/auth.json similarity index 100% rename from api/locales/ko/auth.json rename to assets/locales/ko/auth.json diff --git a/api/locales/ko/common.json b/assets/locales/ko/common.json similarity index 100% rename from api/locales/ko/common.json rename to assets/locales/ko/common.json diff --git a/api/locales/ku/auth.json b/assets/locales/ku/auth.json similarity index 100% rename from api/locales/ku/auth.json rename to assets/locales/ku/auth.json diff --git a/api/locales/ku/common.json b/assets/locales/ku/common.json similarity index 100% rename from api/locales/ku/common.json rename to assets/locales/ku/common.json diff --git a/api/locales/la/auth.json b/assets/locales/la/auth.json similarity index 100% rename from api/locales/la/auth.json rename to assets/locales/la/auth.json diff --git a/api/locales/la/common.json b/assets/locales/la/common.json similarity index 100% rename from api/locales/la/common.json rename to assets/locales/la/common.json diff --git a/api/locales/lt/auth.json b/assets/locales/lt/auth.json similarity index 100% rename from api/locales/lt/auth.json rename to assets/locales/lt/auth.json diff --git a/api/locales/lt/common.json b/assets/locales/lt/common.json similarity index 100% rename from api/locales/lt/common.json rename to assets/locales/lt/common.json diff --git a/api/locales/mi/auth.json b/assets/locales/mi/auth.json similarity index 100% rename from api/locales/mi/auth.json rename to assets/locales/mi/auth.json diff --git a/api/locales/mi/common.json b/assets/locales/mi/common.json similarity index 100% rename from api/locales/mi/common.json rename to assets/locales/mi/common.json diff --git a/api/locales/mn/auth.json b/assets/locales/mn/auth.json similarity index 100% rename from api/locales/mn/auth.json rename to assets/locales/mn/auth.json diff --git a/api/locales/mn/common.json b/assets/locales/mn/common.json similarity index 100% rename from api/locales/mn/common.json rename to assets/locales/mn/common.json diff --git a/api/locales/mr/auth.json b/assets/locales/mr/auth.json similarity index 100% rename from api/locales/mr/auth.json rename to assets/locales/mr/auth.json diff --git a/api/locales/mr/common.json b/assets/locales/mr/common.json similarity index 100% rename from api/locales/mr/common.json rename to assets/locales/mr/common.json diff --git a/api/locales/nl/auth.json b/assets/locales/nl/auth.json similarity index 100% rename from api/locales/nl/auth.json rename to assets/locales/nl/auth.json diff --git a/api/locales/nl/common.json b/assets/locales/nl/common.json similarity index 100% rename from api/locales/nl/common.json rename to assets/locales/nl/common.json diff --git a/api/locales/nn/auth.json b/assets/locales/nn/auth.json similarity index 100% rename from api/locales/nn/auth.json rename to assets/locales/nn/auth.json diff --git a/api/locales/nn/common.json b/assets/locales/nn/common.json similarity index 100% rename from api/locales/nn/common.json rename to assets/locales/nn/common.json diff --git a/api/locales/no/auth.json b/assets/locales/no/auth.json similarity index 100% rename from api/locales/no/auth.json rename to assets/locales/no/auth.json diff --git a/api/locales/no/common.json b/assets/locales/no/common.json similarity index 100% rename from api/locales/no/common.json rename to assets/locales/no/common.json diff --git a/api/locales/pa/auth.json b/assets/locales/pa/auth.json similarity index 100% rename from api/locales/pa/auth.json rename to assets/locales/pa/auth.json diff --git a/api/locales/pa/common.json b/assets/locales/pa/common.json similarity index 100% rename from api/locales/pa/common.json rename to assets/locales/pa/common.json diff --git a/api/locales/pl/auth.json b/assets/locales/pl/auth.json similarity index 100% rename from api/locales/pl/auth.json rename to assets/locales/pl/auth.json diff --git a/api/locales/pl/common.json b/assets/locales/pl/common.json similarity index 100% rename from api/locales/pl/common.json rename to assets/locales/pl/common.json diff --git a/api/locales/pt/auth.json b/assets/locales/pt/auth.json similarity index 100% rename from api/locales/pt/auth.json rename to assets/locales/pt/auth.json diff --git a/api/locales/pt/common.json b/assets/locales/pt/common.json similarity index 100% rename from api/locales/pt/common.json rename to assets/locales/pt/common.json diff --git a/api/locales/qu/auth.json b/assets/locales/qu/auth.json similarity index 100% rename from api/locales/qu/auth.json rename to assets/locales/qu/auth.json diff --git a/api/locales/qu/common.json b/assets/locales/qu/common.json similarity index 100% rename from api/locales/qu/common.json rename to assets/locales/qu/common.json diff --git a/api/locales/ro/auth.json b/assets/locales/ro/auth.json similarity index 100% rename from api/locales/ro/auth.json rename to assets/locales/ro/auth.json diff --git a/api/locales/ro/common.json b/assets/locales/ro/common.json similarity index 100% rename from api/locales/ro/common.json rename to assets/locales/ro/common.json diff --git a/api/locales/ru/auth.json b/assets/locales/ru/auth.json similarity index 100% rename from api/locales/ru/auth.json rename to assets/locales/ru/auth.json diff --git a/api/locales/ru/common.json b/assets/locales/ru/common.json similarity index 100% rename from api/locales/ru/common.json rename to assets/locales/ru/common.json diff --git a/api/locales/sh/auth.json b/assets/locales/sh/auth.json similarity index 100% rename from api/locales/sh/auth.json rename to assets/locales/sh/auth.json diff --git a/api/locales/sh/common.json b/assets/locales/sh/common.json similarity index 100% rename from api/locales/sh/common.json rename to assets/locales/sh/common.json diff --git a/api/locales/si/auth.json b/assets/locales/si/auth.json similarity index 100% rename from api/locales/si/auth.json rename to assets/locales/si/auth.json diff --git a/api/locales/si/common.json b/assets/locales/si/common.json similarity index 100% rename from api/locales/si/common.json rename to assets/locales/si/common.json diff --git a/api/locales/sk/auth.json b/assets/locales/sk/auth.json similarity index 100% rename from api/locales/sk/auth.json rename to assets/locales/sk/auth.json diff --git a/api/locales/sk/common.json b/assets/locales/sk/common.json similarity index 100% rename from api/locales/sk/common.json rename to assets/locales/sk/common.json diff --git a/api/locales/sr/auth.json b/assets/locales/sr/auth.json similarity index 100% rename from api/locales/sr/auth.json rename to assets/locales/sr/auth.json diff --git a/api/locales/sr/common.json b/assets/locales/sr/common.json similarity index 100% rename from api/locales/sr/common.json rename to assets/locales/sr/common.json diff --git a/api/locales/sv/auth.json b/assets/locales/sv/auth.json similarity index 100% rename from api/locales/sv/auth.json rename to assets/locales/sv/auth.json diff --git a/api/locales/sv/common.json b/assets/locales/sv/common.json similarity index 100% rename from api/locales/sv/common.json rename to assets/locales/sv/common.json diff --git a/api/locales/sw/auth.json b/assets/locales/sw/auth.json similarity index 100% rename from api/locales/sw/auth.json rename to assets/locales/sw/auth.json diff --git a/api/locales/sw/common.json b/assets/locales/sw/common.json similarity index 100% rename from api/locales/sw/common.json rename to assets/locales/sw/common.json diff --git a/api/locales/ta/auth.json b/assets/locales/ta/auth.json similarity index 100% rename from api/locales/ta/auth.json rename to assets/locales/ta/auth.json diff --git a/api/locales/ta/common.json b/assets/locales/ta/common.json similarity index 100% rename from api/locales/ta/common.json rename to assets/locales/ta/common.json diff --git a/api/locales/te/auth.json b/assets/locales/te/auth.json similarity index 100% rename from api/locales/te/auth.json rename to assets/locales/te/auth.json diff --git a/api/locales/te/common.json b/assets/locales/te/common.json similarity index 100% rename from api/locales/te/common.json rename to assets/locales/te/common.json diff --git a/api/locales/tl/auth.json b/assets/locales/tl/auth.json similarity index 100% rename from api/locales/tl/auth.json rename to assets/locales/tl/auth.json diff --git a/api/locales/tl/common.json b/assets/locales/tl/common.json similarity index 100% rename from api/locales/tl/common.json rename to assets/locales/tl/common.json diff --git a/api/locales/tr/auth.json b/assets/locales/tr/auth.json similarity index 100% rename from api/locales/tr/auth.json rename to assets/locales/tr/auth.json diff --git a/api/locales/tr/common.json b/assets/locales/tr/common.json similarity index 100% rename from api/locales/tr/common.json rename to assets/locales/tr/common.json diff --git a/api/locales/ug/auth.json b/assets/locales/ug/auth.json similarity index 100% rename from api/locales/ug/auth.json rename to assets/locales/ug/auth.json diff --git a/api/locales/ug/common.json b/assets/locales/ug/common.json similarity index 100% rename from api/locales/ug/common.json rename to assets/locales/ug/common.json diff --git a/api/locales/uk/auth.json b/assets/locales/uk/auth.json similarity index 100% rename from api/locales/uk/auth.json rename to assets/locales/uk/auth.json diff --git a/api/locales/uk/common.json b/assets/locales/uk/common.json similarity index 100% rename from api/locales/uk/common.json rename to assets/locales/uk/common.json diff --git a/api/locales/ur/auth.json b/assets/locales/ur/auth.json similarity index 100% rename from api/locales/ur/auth.json rename to assets/locales/ur/auth.json diff --git a/api/locales/ur/common.json b/assets/locales/ur/common.json similarity index 100% rename from api/locales/ur/common.json rename to assets/locales/ur/common.json diff --git a/api/locales/vec/auth.json b/assets/locales/vec/auth.json similarity index 100% rename from api/locales/vec/auth.json rename to assets/locales/vec/auth.json diff --git a/api/locales/vec/common.json b/assets/locales/vec/common.json similarity index 100% rename from api/locales/vec/common.json rename to assets/locales/vec/common.json diff --git a/api/locales/vi/auth.json b/assets/locales/vi/auth.json similarity index 100% rename from api/locales/vi/auth.json rename to assets/locales/vi/auth.json diff --git a/api/locales/vi/common.json b/assets/locales/vi/common.json similarity index 100% rename from api/locales/vi/common.json rename to assets/locales/vi/common.json diff --git a/api/locales/zh/auth.json b/assets/locales/zh/auth.json similarity index 100% rename from api/locales/zh/auth.json rename to assets/locales/zh/auth.json diff --git a/api/locales/zh/common.json b/assets/locales/zh/common.json similarity index 100% rename from api/locales/zh/common.json rename to assets/locales/zh/common.json diff --git a/api/assets/openapi.json b/assets/openapi.json similarity index 100% rename from api/assets/openapi.json rename to assets/openapi.json diff --git a/api/assets/plugins/.gitkeep b/assets/plugins/.gitkeep similarity index 100% rename from api/assets/plugins/.gitkeep rename to assets/plugins/.gitkeep diff --git a/api/assets/preload-plugins/.gitkeep b/assets/preload-plugins/.gitkeep similarity index 100% rename from api/assets/preload-plugins/.gitkeep rename to assets/preload-plugins/.gitkeep diff --git a/api/assets/schemas.json b/assets/schemas.json similarity index 63% rename from api/assets/schemas.json rename to assets/schemas.json index 9286b8046125efc39a921add6ee7f867c11ba1bb..0fe3dfa122a0f1ba5315ee66660ce2b4ab18fa29 100644 GIT binary patch delta 222 zcmV<403rYQ^8^080s(uIedDN;VdPqqtBfC$AmzQ2prJssq791(lZyoku@U16lYk;f zlPrH{lYk-zv-l-9G?Op{CbLyqcmb0zIW&@7Ba@JyFO&aQ6O&AD46|@tECrK6KNyl? zT9d1c4wK)9AhX_L0RfZ$F%^?QB0#h8cajW~tBf8AWo=?*WFk5sd$TBoZ3vUU4nVU~ zpq34jQ7(P68?S{DlPrH{v!UDK2a|vz2b0(^4U?cU43iLeHC!}q)9t1P}`?;(oh2J^r27SMvu*OV5WZnubnber*G{8G0jV#nx1=C5|)iS&GfPO zWwrO-J@By zcbb~LIU=jXghVU?p+sBjEKv+oJ!;t|)wBK1V+5YoO~Ul;t{ry6z8I{hJK%}3ABKch zIO;x8O4j|zUplZl)d0(_(~$OdLhu(Iu+cRDLZlLNcq z;>Ww;)<6q9S@pubj{|V+Y6JW+*#nurDE#F1QvF-}Bh5m}mhB>U&fVKxo}{X)ARmc(sHze6BS7_eYSB68&1YmX8rAuZ-_Y65 zWDtI}x0~7PA5&~PPwgde+%*C--AO3CestCEgTHj|sowwSqYgA8>MoiZtPGwHC?=6@ zqDnG6e6J1GhsFao%@fO(^959lt%TA0?Pyg13TiiddT`ftj`xM2FtrzEdi-$p*d8cM z2rdHQ`UtE)+hGoJ4s>D+J0UFuLCW~K!~?JOvX9&ZEq^*83QV$%KI(vYxCw3yiS=@! zpixD(siA{RE_hX9%T#-&+VNpnJJaE)iN7B#m4DZ&jNVA_GwEX@hGh@G{HKHQt!rLc zr+L|i&zBt&t~SNsf#PTS{}*QXov#VE1+Ns~elh^BDxr!sLIKTNLcj0b>Qi`*GH#1r z0ar7|0G&B1?{i}CvLF67>8yPoYCeay##Y+1y9=F(c%`8Cmr<3n4+GAoO%|*9uxZzCrC!A#vzN%uvA!og_-3QX5cG4@ymqQLLYv~N{hz$hy@a489v ze^@9z+hfcx_E8;^QdgWnp!EBZc3#*|q)OIxp~7J-s$Hw8S$HCOVeUwTM<1W7egUB- zj0q46R7&)Fu(7H_S8oI!_eScz<@a}(G=0I(z|)OqaaY8|8u8fF)~X7xA0Ku=VAP+)^rH&G3D%lBOEa)B zkq|K9vwX#akaCG_c}$AFVf8pqRbudZ7cmAy6K=z>;n6Tw*A`q^9}3p(kVRB6bcx~BmS|NVr>S5Xi%Zf@ z$7(bFx%lJ3EUbYYxU{DOO^6411Ws`eIq=`^&lU4?I>VrqK@RKN&qQJ4`VOB*y{IgD z^|?M^82cQc;y&JDd#zDCQ$2Fg&cVtLxBK>M$gTL)zmqpB2fmim_rWJ5;h{uRt0*%X zi%x5Ug!`yc*Ivu4TME( zE$NX;B?O#oEcaI-M`$)z>8-*7RauM>|7SRiY?j!^+0C^#$4WEwW+SY3hvClc7>x8p zI96OhtQf9f#UWT8&6egCK4?MmlZG4Lo^IDPV?mM?g;>ZKsD@NP!d^)f8_o_z;cC-h zrMLZIsTV=46-Lj6n#&DKvJe(7ah?`u9Ig>7&XyHhvX*p3g2&5~&4xZtOj{y(1CL@a zPQ>CBDGf@|vW+|nDYF?t)|aL;F!qCXm66p*wmioPQrZ3x(fOurTaser^D=UmD6G9Q0Dn4szA@Ua)W@^=U?K;w~c_I~ZhK>Y4w@KFIM2uy`=>`*> zgAV7{RD<#0T1z8eMp}uCbW@_>PLmT=)QZO$Kl%{vCqj)m%v_~tqCi{9!r5+~uFgo& z0{<&BZpBN9oR@S=+)SBCTHFG+og;9$5M@^gNmVv4G1Bc@$Wgn(tV8b))#u3-W0I(ejwqKbk!D1+01HpVZBf=mst&%XpQ^4h53_I*(fLL2 zfYmQjTU?-;CMrydh&ts(WKDx`Iky|u#*zqDuedFF9^sy|x3IoZ9Rpv@1!@toSU_pS8cg;F#birltlKo!zz%#NVdKM|gNees zi9<@O-DEYDs>7Z1p#&Q<166QA*Wkz#Y=Q5e9e`7djKGe=4Zj~N(V6tNcIEW31opfE zoKC(`?pU4JEZJb$Tj_;JdIiPM43iZP6Xvq`uU`(d!*sWok3bg>_2bw+TKevf|LR-u z{Tjz)oS74C-V}3=g)|n&gd=;`i^=)L Y*uJ`o6QG{`)(zMH5ppSLQl< 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%0A~ejJ>e<=Br=oI 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

fdRp(w9jWMiYANgxF5Mk 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

HUx$=|4A3;Yoj-cL1OoX7lTH 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 { - // const [cpuUsed, memory, network] = await Promise.all([ - // osu.cpu.usage(), - // osu.mem.info(), - // osu.netstat.inOut(), - // ]); - // let networkUsage = ""; - // if (typeof network === "object") { - // networkUsage = `| [Network]: in ${network.total.inputMb}mb | out ${network.total.outputMb}mb`; - // } - - // console.log( - // `[CPU] ${cpuUsed.toPrecision(3)}% | [Memory] ${Math.round( - // process.memoryUsage().rss / 1024 / 1024 - // )}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}` - // ); - // }, 1000 * 60 * 5); -} diff --git a/bundle/tsnode.tsconfig.json b/bundle/tsnode.tsconfig.json deleted file mode 100644 index 422d336c6..000000000 --- a/bundle/tsnode.tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.json", - "ts-node": { - "transpileOnly": true, - "preferTsExts": true, - "require": ["tsconfig-paths/register"], - "compiler": "typescript-cached-transpile", - }, - "compilerOptions": { - "rootDir": "../", - "baseUrl": "../", - "sourceRoot": "../", - "sourceMap": true, - } -} \ No newline at end of file diff --git a/cdn/.env.example b/cdn/.env.example deleted file mode 100644 index b5e011f17..000000000 --- a/cdn/.env.example +++ /dev/null @@ -1,3 +0,0 @@ -STORAGE_LOCATION=files/ -STORAGE_PROVIDER=file -PORT=3003 \ No newline at end of file diff --git a/cdn/.gitignore b/cdn/.gitignore deleted file mode 100644 index 14dd53b59..000000000 --- a/cdn/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.vscode/ -node_modules/ -.DS_Store -.env -dist/ -files/ -coverage/ \ No newline at end of file diff --git a/cdn/.swcrc b/cdn/.swcrc deleted file mode 100644 index ab5311941..000000000 --- a/cdn/.swcrc +++ /dev/null @@ -1,17 +0,0 @@ -{ - "module": { - "type": "commonjs" - }, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true - }, - "target": "es2021", - "baseUrl": ".", - "paths": { - "@fosscord/cdn/": ["src/index"], - "@fosscord/cdn/*": ["src/*"] - } - } -} diff --git a/cdn/Dockerfile b/cdn/Dockerfile deleted file mode 100644 index d9ad78f49..000000000 --- a/cdn/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM node:lts-alpine -WORKDIR /usr/src/fosscord-cdn -COPY package.json . -RUN npm install -COPY . . -EXPOSE 3003 -CMD ["node", "dist/"] \ No newline at end of file diff --git a/cdn/README.md b/cdn/README.md deleted file mode 100644 index 7d8e99b05..000000000 --- a/cdn/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# Fosscord-CDN - -CDN for Fosscord - -## Run localy: - -``` -npm i -node dist/ -``` - -## Endpoints: - -### POST `/attachments/` - -``` -Content-Type: form-data - -attachment: File (binary-data) -``` - -##### Returns: - -``` -{ - "success": boolean, // true - "message": string, // "attachment uploaded" - "id": snowflake, // "794183329158135808" - "filename": string // "lakdoiauej.png" -} -``` - -### GET `/attachments//` - -``` -requests image from database with given and -``` - -##### Returns: - -``` -Content-Type: image/ -Image -``` - -### DELETE `/attachments//` - -``` -deletes database entry -``` - -##### Returns: - -``` -Content-Type: application/json - -{ - "success": true, - "message": "attachment deleted" -} -``` - -


- -_(endpoints for crawler):_ - -### POST `/external` - -``` -requests crawling of `og:`metadata and the download of the `og:image` property --------- -Content-Type: application/json - -body: -{"url": URL} // "https://discord.com" -``` - -##### Returns: - -``` -Content-Type: application/json - -{ - "id": string, // "aHR0cHM6Ly9kaXNjb3JkLmNvbQ==" - "ogTitle": string, // "Discord | Your Place to Talk and Hang Out" - "ogDescription": string, // "Discord is the easiest way to talk over voice, video, and text. Talk, chat, hang out, and stay close with your friends and communities." - "cachedImage": string, // "/external/aHR0cHM6Ly9kaXNjb3JkLmNvbQ==/discord.png" - "ogUrl": string, // "https://discord.com/" - "ogType": string // "website" -} -``` - -### GET `/external//` - -- requests cached crawled image - -``` -url-params: - :id // aHR0cHM6Ly9kaXNjb3JkLmNvbQ== - :filename // discord.png -``` - -``` -/external/aHR0cHM6Ly9kaXNjb3JkLmNvbQ==/discord.png -``` - -##### Returns: - -``` -Content-Type: image/ -Image -``` diff --git a/cdn/jest/setup.js b/cdn/jest/setup.js deleted file mode 100644 index abc485ae3..000000000 --- a/cdn/jest/setup.js +++ /dev/null @@ -1,2 +0,0 @@ -jest.spyOn(global.console, "log").mockImplementation(() => jest.fn()); -jest.spyOn(global.console, "info").mockImplementation(() => jest.fn()); diff --git a/cdn/package-lock.json b/cdn/package-lock.json deleted file mode 100644 index 08d49abfbd3f17649e393d1e0e985eda082ba7f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500189 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

i%fU^zXZ_fjiFODX1-5})d^b+;&`8 z9u_UUVh>IhSDRAN%5N|A!NOWv|CiC#pROb16q);U^D{ca8R(f_&hOvT5qzy-6?CyW zUpY9|(MA|P#v|*1d*x1pg8I4<*Ib^~JGa_ijEw4bR3;As*Ck7i?v+_ircS$Tdq zxT8i?b_p+Rb~~+$Hu&f8B~%&1aQP&i^FCrz8|fqED}#E*Z1zEd+E>{O*3iKCsw2x& zuT~$GakA4>b}P0dlH<+6v|36>=KOiFJD2yZ#_`}RjB1zAmC7_MFa^%0T81&5oamOh zt!)o0s)dau2fLv5fx#b(c4UFx71;5G;%#sUAIs!OGN6yRe$MM4%=$ReP@89Hxg&9Wj zu%nj8GOa9Hm?oM-RXfz%)oHX}Y#F{0xZPUKAjkbir#Hi;a?i0>%&0|g)+-MJYV%2> z)$2I3Q>7{Gt1I8Daj#sVsrw5iN<*r>4W^0^qPBlr ze$YSjfF9)m{o`|bbcxfx64Ut7nfMQJ0$o8qv*y)@34gw7Fl^|hQP|yVb^SDL4ObmW zsTiHpLO$9>3J>^^#IFm5-INPNTdLFEVL=v*!juq{<(Rh^&ppxYRYxVurJ}T!q6R}9 zip$G->Qv?nr{~b??kn%62=limx~}3n+mhx^t7h7I6(6L<2L0@GZXpluF%XVP*&F1G;*uOg>ZR9tx6F z5BMlk^zWkzKJjFx&XPZn0Kxl`5gxpLkKm@A&NP6Le1WEwOGB3#N!D(Jm1W0gHLhl? z`Xz=54v;kOiV9?$nVZd+B_jS56#E_hu$`S$rFzuIv&C2n2F1|WLc^oYdp?C12F*FN zb2aty&#^si(?&X~27VrZeImXt`+Fa?KjWN9VP5bW z(?NpNSB@E&ZV0p90{T>x7xHp3E;O+E$XV=11y6HmXuI81YR!TYSqohpL7vidRS5i1 zU9Ss=!D`-Uu4;oO43b!@Y*WS-8$(@;x7(KoC!*Jf78Er4J=YLk0rfrF7xF3ar>vAsOb}eNoL

a{!2 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

- -

-

Fosscord WebSocket Gateway Server

- -

- - - - -

- -## [About](https://github.com/fosscord/fosscord-gateway/wiki) - -Fosscord is **f**ree **o**pen **s**ource **s**oftware compatible to dis**cord**. It is a selfhostable Chat, Voice and Video platform similar to Slack, Rocket.chat and Discord-compatible. - -- Discord-compatible -- Selfhostable -- Open Source -- Configurable -- Secure -- Decentralized -- Extendable -- Themeable - -logo by [@nwlandas](https://twitter.com/nwlandas) - -## Installation - -_it is in development and not yet finished_ - -## Support - -https://discord.gg/ZrnGQP6p3d - -if we are finished we'll host our own support server. - -## Contribute - -This project is only possible by volunteers like you and me, your contribution is very much appreciated 🥺. - -If you want to make this project reality and and you would like to contribute then [read the wiki](https://github.com/fosscord/fosscord-gateway/wiki) first. diff --git a/gateway/package-lock.json b/gateway/package-lock.json deleted file mode 100644 index cbad96dc2f057faa4bb38657fbe9b4dd994bc00b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540153 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

W$fp-WP$RM~)uStCAjpHFzulj$-Ea;K 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 delta 15447 zcmdseXLy!X((rZnn%;Y%7n9IIT4*BDf+9*MbR;AZ5EMn?u2`tSM>C>=;8GPN7-a-S zf-9^AAru9q1yMjs2uK&mJLlX_3(LCx`mXPNx%lzir_7l%GiQ2sywT+S&oUC9HI3BV z>2K`IT&L2nX`Ogs}b3H%DWKSM7HT#)VHZj=snf@RgxFaUGszRE(lFL=sTBVlD z4yskM*;ph?1Oaw`BUC|}s(dWdS2_$^BG!ZQLvjJLN#oq4GD>j`!ongn&gsofU%kcI!H4cWg6N8n7IgvE1t^1^#m7HV!}0J6wTZzFXw+J+j;C;I2O;heHOa<-uMGc#f=21>d>VDdB_5sNwzcQN*{=M-|`L&KqhS zJpZ}6*S9t18&&iXCb6VEOcGpeheo{iqvgun7g|y)qWh=Bzz8U`1g+$q?*|BOUa3M| zSGQfix^9n*L~V_BM}R}?g~rgUN)3U`8;V}CXir~(W+Pmgrz4>KI<2Q`%WUE?+jo19 zQS#NkD8V&&aKuMHexvYZ$>lm+_*4vm=lkg~CCP_Jm=3>aM?F`;1=W>xD#119QooX{ zQ%{I&Cjr)6dAn0x88=74yI*QSCC{Bv1cofl*Lv( z0~M|Ha4g=gsT@mozks3>T0+T%%3d?ga^uu}%wdW!~%u#WnR<*PAm!T!m*k!n&Gzv}^I5)o#3VaMwO9#Z7n5 z1!2olA&l*KUFZS-6olo~v2YE(77TMgk~l#62msu#t>IX~{71K=3jErxZg!f$Wrasc)< zgk24oL_k(&VF4a&CJ>F;PWA}}r!*D57^nvng$m&-bLe5R8)A7&VY=agp91+02v0(y zt=pK~NwAzHwEZV9z|Aie!|}p{Lbz{<17+SSAp&7PQ`Cqf$tKBg%Sx$~bArofB@Jrt7?^!o$|o+>ne zq_4HQP<)P9QW;F2J?9DUK>quJiSbE#2jQL|XgV0bOV*RQytTn4Lxjx(7>cB!b)2

4VnI|PVV4jA$G#CRGHbZiI~EDSns}61 z8zifDz&V;M-Eg+y59nqok>0ftuxqP)(rf4(OmO~gA%NSmC!B@xdxc-PU=vab+*z(C zW5XBqJ`%&FJItOZCWBrnEQ2BCLg?KH@v$IHJjTr*A+(cr3Bj=Bd*K=<3dfAEq9K(V zB0n7Y#J}Sh1^MN|O=fQ0D4sbk-0-4^0VjlQ0&MQ1MBuewgm(o_j7=wn7r7MyMq4a6 zEnITm6~9$bk=`HLza))uuAFvFFrc7FKf~k~XMy4 zhL44L<(PSIJ1{R?G`+$+q9{_l?v)cajEt#w%d!HrE6k6UK?$M_cVfib?2%z|ocOlD z4H{O&i>b~}pr2_FuwDy+X^G-RuBd?TTenrH1>Yu#}b-=)1gpMp@%}{<79JU`-rkf!}66tD^pyzuEj%HPcZ zd^$qB?1M)u0-$$@Y~cBk;$$6L(N)J9!AruZKXvSCWifr;76w zxSb=$ZI~|B6JS(lB@%l-FB(F~Gf#~lH$HpXsQZTJO->&*F()66&ok(?7pP5=GyiQe zd&Kzk`}i{Ybsy|*E7yE9tJ6b`bGmjK-LmtfK9eVQY1*h!R{sXQ`jRo}-n3;-({8!F zavO~w(J?P$+@m=;-3RpV+T+PlPd?t|v92A`yY-qlVQO}6_Yryh$3NOMzvDBHJo)GY zJ^FO+k_Wk6)I6aX9POeez*FO-q{w?C0|&+`>5x@SF+ypcqCoNec74bU5hGwxSM^0a zP#~tNFlV+HO-B4;ZKDyGH4KY>AMYWiJld*dMvI4Y9_uisZ?oo2r}k~o`H4}_Jld@H z13j~zm@w_>etE;Ebbeq$uMT7TH)uAkbMp?3bDnAPMCbhGlg8wZex~!}oNj#@w0N*p zi@Xu(ox66LHf{7%ttLJ(wUw*U&}5u8N9?08ZHpv~LCmuahlqwoD;x-7jP20>t$&F3 zOP)8XV$}+9hUln;j5T6RwYRt(X(-7176$=+Ci-b^`i!n_SjYoqV?NbDpDKQ~UMv)$ z;)oOu)5HD%)d_y(dReD^5#kGaNqNYL^-uXiOUgBE)!k6Ni zBp7&FOm;2W6M=~*#2q5PY2Zom4-E>(SRqhpt1YoZg_tj*a9w;}bTsX*%}N6N>!$dd zw(jbq(k3d~8YAIq{$}ObUSW^NlmE zKSoBvo!N3!(E{U57+R_X;Qk$ zP||QmZ7Do}o6NTFilI=t+K{2V*ibO3sgy*H+-@-vXEc{C3QXBVR@ISD5><6oIt|Nh3w32f2NF5OxfcNEr>4 z4hA@HSf3!BcKm*dQ+2qpUup#9Z%P4}ohv;eLgkNAEM%1_O<)*W;ZQM2`WZr|N~f5d zVf@olyv~0ODv(Y}4(;=MDXB33Md=r2(wIF~aM4Vuzs-(|!i3kPK+z#=d7-3Wzt^P~ zM3{b1jKEt(($@yR=;tw6zM2MT(?gukwCfMJOgbS zk#U&$3Q>Ky=|t4M;vojK5qieQa}b?Km%;7aVq-yCBuX(U+v|8W$1Ve?uB( z`lJ|V$nrP=uc~rwa?lO=q=Q8HYOy8c-%yM<3grg4)|6X#LP)|6DkJ0oNLxsH{Q7Yr z1O~4l_Vtc*#!OfmBroB{gt-V)gXMk9WQAj1sJzS*YkPr^9Z(@DOb+zDZzSl^0<=vf zF-?n--*9%Hik1iaTrSLwmDh=I=OTqM@8_FMi@q1Q`1M?QD1odU(^gf9@GRB%w4&EADoytDZRk?ut?xB!Lgoi@8oV>ZEQih8C}iE4 zA*Z_)Ds79b=4WjOK9tphd4`_kRAyayIApevuR3lHU*U7Q2-jM0r;$I=9Uz&l<>Op& zuv8OLs%fSpx5!dVj&>!U0=a!*3{M%8=9sx6r9u3BTgVziDGv%fG~C%y-sJXjE4vYW z{oTXuz=quP<+FFum&U3bG3BHk+J#7))m?VGheUk^3bSMxzV9Lb!sLr^D-m7C#Mh$<32O5`W`R`*gU-Qhq> zs`jX|fwsop9fo<<#@x*nzS!ru@O6L8luvosz@zj?y#Hl+tUG=nPeKC>6q2F#50nOx zUzPLtjGIBZbBXemv*a^e#gVV@3TF$xKTrP1b0Ovzc%pa~{cOizm-BkVflE9Gvi5cP zvZEYmHr5aEf;UN#<;|tr51vmN!WSzi|AR=o>P?brmZ##u7z^j&oijpBT({TkP3~B# zJR0(sRMV`q?e3S)hOk^$D759X^wU48r7`!*CtT{nj+KN)!7}+*k1G9uAAt|9kSRIG zUVd?=+S7sLqjlCg*@gkDiBc@n$FXH14txCw&g6G!KTkz4WbOV8NBryapp!}HZxWzOc0B@DbLDe}0 zo^eX5`>FEmqAhZ~-@%?$fj+ij`ImAH!7+%pYbpI4NVC48(gAbWGlnX}%I_$U%lL#s zD&|{4c>{5fcUch3h!$@+Nf96TvVX}(iY8N}SGq$s;PBU^X<6o+sOifuCBeKoW;9s0 zg-9Istvuf?hP30Vmyoz*r|hHx90@%4Em5iZ>t;tp`R)V!h4Xbjo|YbDF2+9joJRr^ zVTNqYfy#OEXzcx?ta;8pNaXtZrWg-PV(cdHg=*D;U1Q0++i^f1>Uc%W5reEWLWB0* zZBXf)c!%xm*WGNVvADYtim@!P#!Hmz9YI?9Sd0|}S$mBLD6W*V`7M1n~E(@-=~{;I$j_?}if;@JQ-{ssv(|q^z(U?yx~@7o<>N z!4nN%hbR}B9OIEtJS<%Rvv?E{xzN{ug@-9V&v)|K1@(?2crZy8|@y1T2mf+jgv`qQK z4``R&%6EeA8*Uu1lAz!q@#~SjN-uXvR^F9j_%lB$j*9O0H06qJ9kvWeUMjVN#KVdK zQAeyh&KaJd+8M8N^sezZAoA9Lq{E7if;s1vzv~Xe*IrW$OuVX0N?LJ~c@6wj)5l1}u%&)D~hZIL{nXCa>y88HGdv&ekQ+PKE=1*Ij+d4{u!9Q+-6{_YQto9pV?u;f8)H=}lfw2ue~D zQGHw`FN;U3{y|_}T+(0tl9gn_@uflP0s%L@C%rCU)nHZfw>$J54RaeQ(NMlflA(C0 z`UQXTvxlkUodKz{~nLabvShSy~$j1)ms*yNopsflxAx~YR z@N5QIAwdQ++in9()~G53A0YB)y3|IVShz0SdP?QVOpKVS4p$xBv1qy~3-Ea-DzWAt zB-QoX^Xexx92&B3$XY^|IQyP@(s|e1_>_J@Nu4K_sd*v{*rvu~dZ~IO7(d*r))T!c zDV9aribsA_*XqoTp|mkj);2 z#8rXb)&LF@*D|@0`Ek{I1l(s00ix(iyGQyx>z0KPKP?5EwRan+6CjD@_ZW6b^YjTcBZr*M!k*t~FNqv6)+z9) zgD$_Y4~(Zxp!i;gcnY=wB^Rpb9Ck$-^6v$B*BQLK1pui9pc_2^_Z4}4A2Rk5S>O5I zf_Hz?$m?OmXGpU{kgEKd0&G1&M5tUUbac(X)B_3!3mOhGg#@w_=d_kcMeQLe4!>z% zGURur0^QJ6q!=3{iczo?{_nVHm2Z*l3t*BSEfLDh+fCr24MJB`oZ8w zKxUGVw4sYo*LRG2b6TmGh*b{=H3jH#k>v3n_<^T&Ak=R+($T%{ePD8gp2XS(g8owr z!3Pd`s~?55t(EV9yKlfc3;J+!HU;V`pkN?IPs03Yof69YAu;;!8KjwXH)i?CdiQ%Z z93V9ur1o(((j(x7|Hqx@wq}BU!J)8c!q*W%mbh)ce$~qWzrKK3Pf~*cZknifl)SxU z=}&sfIX|ceemIn%^YrZ{@n!_5pD(!95AT~g7jn&$eL|GYvt5j26 zRO#9BtsVvaSE@sx{x?<>Z0#&k>HHO&s%R_K6bM?S#=`Hf*fG#Y-RS7b}Uq`QfoojYBkPPB!k$xoks_4eSVq2Z}+i%HWsapZkQ+k~TpzglMla&-B9JJr8hvxf*G6T6;Rc z7`UE@gN-j^mo zfS?t@jfHlCheohN&_ZzNEPI1OvORIaeIv6cXTyT;=xy}~Fl!af)uZ9%0CO;`u4zWW zTHP29Tb5JmZb*jpJL(JU+5&#@meEvz(xayKzd&v^cQd7{QCbY^=9w^liQ*~0GWL83vI%!@OR7Z{> zWgoebXP?oJJIW~Y53>hPULy6&jNtOv0k&*5f8mCF!}EGK0guhI>xqn_9R-+CsH-6U zUH{oJv>8iHUyloU*(A>YZMz26Xo{7oj`Euy3~EBjg`f{i0}5Br2{Q}z)3BqP7K-y1 z=w$B5MWC*SVlxI!7kf5b0~79vRPNFjxRozM23c#0qt#g>O2%J8Nrl+=^s|nZrH+vl z?Dh|x45Y_jN`>Opx&f89gyvYbOs8Ohn@)ZlB?RAeuPh9-oCXqP4J2-yyxJGbMRAY7 z9VVt#e^DJ$P7M@)b*vKyN6j8(|D6egH|vhaWygx=y=YoU9v7LcU7zU@%=xmR{{bZg zN{=W_Tp2%be~h|x5=3gLr4{(@7IsJW(>3hJU^rH)|L!2dJj4xO>QrI9azwujH;(Fe z965?9*U4%#s^GBW`VzxAnQrLqvRH^^XLWL3IeoahNNpJ@FryEp;Og}exknksERuHz z>&plP+7$>(D)if2B9L|tG#T`kl+@CraN13svX{N?=rJ2^>xvsZ(=14>739Lv${6r= zSpaoePzB(uuHmLCeUDa@OH#!?SKeOF;y%&ukpPa9LzFqapi;8`WWZpoS#ar@swM&zLRH+Q$4Aqa15Mc z+z@c;^G1pYs|t*BxaYHg9|YYJ4c;Yv-(F?}*c?4*|0sFF1=*A+ zq#lT10g?tA;dtXC;}-$Xe{4)t*mDU5YJJFpfu9rkj&3qu)C{ki1Jns|60-kkobVv= z#Zq$Tc6OI;L**voOu;rovjEDBa}Lv%?>1sY+_~52VnK~###u}(H+~af;8ts3PQFGTbVdX+oe5hxfQaz_iQ8vnFo5V_2de zmVI8AuE9RRyzYRj5Y1sazZvFR=ITG`buiCSfV$})(xcEb(7fVYff^pj)$VI);kYZ< z+)f$8Dby#jIl^ozL)$p>G&YMjhe)=UMq@@zh9}<<eyw zH}f~YYj-$lB^TLhI>z-h`>HtO5%X_4h72;v*?C}yc@A0)Gt04Fws}SZX(at|$Dj2q zEOzvq*F?e7!Sb99V@#46E+YR5rdq(zDA~gPV@(PR|0uKr+-|_TIi`U@<4tPw;7co$ zj6m#>W0Lt{-?(LhS=-Ml0~Pvn7&il9><`q>T0dUC=)5KBWgrE9-#5gQ#m|{Fpe)h~ zgVq!2CIlx8xKX4|hE~#lb}eA;v*uY20trNY0ls+K=m0&>TPv3%_;) zq;>=98TnI}#qC4h%f$+JjyOGwaOKLyM@KUCq26|ZXa59sH#Iq~*WWNta^h_O^VR=? z7CB;k&olc>3vN9opK^#vMR|9~j6}Gle+>wxuQpA8UU{m9vyd1TE_$>;_WL^hWzaa; z?X{8fRTHUJp2;C@obr(5+kX-nc}9saOyg~wNVKA~Iti4G4Y#wOZU1H7<}aV)y7MzL0Smu2Py9s; z!(P&(UW-uRe3^NZ6P|gd3apzaw{~Rwu{|Uc90#t-suhg~{fRjEB$+*i2H4{Wdths7 zn&CL(sQIA3WG9!K7kp2IH#c}Iy-)nf5&ja_^{jcxkJ2nhfR!l!CgR{(HZe2vw)yMb zVE}BJV_oEfSa8)06kz&xy$u8Ec_~2;Stnq^Kzh$yLR;J4lRtv^ zWNW|Ql18J&nwXJd&D3#QJ!`pv)0$Y+^R%&<<(M>}(qA+LcP0aQxw&QP_+zHkhL`EbGo(8fTOQl$6?nS)^*%p zWCPt@oGow=Mmw;+wm)+J$Z_zFsn(nnO`M{;`Bcf6FY68&v zHlghgo*LU;;y~vgEneTN0aV(16XK^D23*>2U11w)AeHy_i}WXvgbxpvD-K(AeCJ@| zQA_jtOglzY@SRJu2G%*O&?{xYfJ$>zl^!P<_`-2Q*C7J8VN|7?D!}q2I~*JSYJ~`} z>a=x?p9oZ!YlJ`jX0?l=4`|+i8d%TQBQ~Ogt z)_mK-u7rhc?Fxt4R9CC-gb(y9s;IsFyW=OtWZHY&UVA`iyI8{SyV|BV%aA?KjDfhv z)w3u(WH+WlE_3Oribi4a^q2KWSfv?BP>E)?+u?+6o1#TSYkDZ|@EEF&$d3B){jmy;M>ky~XZfnatHR J>Hl=|e*o`pKc@fy diff --git a/package.json b/package.json index 8488ff28b..95dbb6597 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,101 @@ { - "name": "fosscord-server", + "name": "@fosscord/server", "version": "1.0.0", - "description": "A Fosscord server written in Node.js", - "workspaces": ["api", "cdn", "gateway"], - "scripts": {}, + "description": "", + "main": "src/start.js", + "scripts": { + "setup": "npm install --omit optional && ts-patch install -s && patch-package && npm run build", + "depclean": "node scripts/depclean.js", + "depcheck": "node scripts/depcheck.js", + "syncdeps": "node scripts/install.js", + "build": "node scripts/build.js", + "postinstall": "patch-package", + "genschemas": "node scripts/generate_schemas.js", + "start": "node scripts/build.js && node --enable-source-maps dist/start.js", + "start:bundle": "node --enable-source-maps dist/start.js", + "start:bundle:dbg": "node --enable-source-maps --inspect dist/start.js", + "start:bundle:vscode-dbg": "npm run build clean logerrors pretty-errors && node --enable-source-maps --inspect dist/start.js", + "migrate": "cd ../util/ && npm i && node --require ts-node/register node_modules/typeorm/cli.js -f ../util/ormconfig.json migration:run", + "tsnode": "npx ts-node --transpile-only -P tsnode.tsconfig.json src/start.ts" + }, "repository": { "type": "git", "url": "git+https://github.com/fosscord/fosscord-server.git" }, + "keywords": [], "author": "Fosscord", "license": "AGPL-3.0-only", "bugs": { "url": "https://github.com/fosscord/fosscord-server/issues" }, - "homepage": "https://fosscord.com" + "homepage": "https://fosscord.com", + "devDependencies": { + "@babel/core": "^7.18.9", + "@babel/preset-env": "^7.18.9", + "@babel/preset-typescript": "^7.15.0", + "@types/amqplib": "^0.8.1", + "@types/bcrypt": "^5.0.0", + "@types/body-parser": "^1.19.0", + "@types/dotenv": "^8.2.0", + "@types/express": "^4.17.12", + "@types/i18next-node-fs-backend": "^2.1.0", + "@types/jsonwebtoken": "^8.5.8", + "@types/morgan": "^1.9.3", + "@types/multer": "^1.4.7", + "@types/node": "^18.0.6", + "@types/node-os-utils": "^1.3.0", + "@types/ws": "^8.5.3", + "jest": "^28.1.3", + "jest-expect-message": "^1.0.2", + "supertest": "^6.1.6", + "ts-node": "^10.2.1", + "ts-node-dev": "^2.0.0", + "ts-patch": "^2.0.2", + "typescript": "^4.2.3", + "typescript-json-schema": "^0.54.0" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.137.0", + "@babel/preset-typescript": "^7.15.0", + "@ovos-media/ts-transform-paths": "^1.7.18-1", + "@sentry/node": "^7.7.0", + "@sentry/tracing": "^7.7.0", + "@types/node-fetch": "^2.6.2", + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "amqplib": "^0.10.1", + "bcrypt": "^5.0.1", + "body-parser": "^1.19.0", + "canvas": "^2.9.3", + "cheerio": "^1.0.0-rc.10", + "dotenv": "^16.0.1", + "exif-be-gone": "^1.3.0", + "express": "^4.17.1", + "file-type": "16.5", + "form-data": "^4.0.0", + "i18next": "^21.8.14", + "i18next-http-middleware": "^3.1.3", + "i18next-node-fs-backend": "^2.1.3", + "image-size": "^1.0.0", + "jest": "^28.1.3", + "jsonwebtoken": "^8.5.1", + "lambert-server": "^1.2.12", + "missing-native-js-functions": "^1.2.18", + "morgan": "^1.10.0", + "multer": "^1.4.5-lts.1", + "node-2fa": "^2.0.3", + "node-fetch": "^2.6.7", + "patch-package": "^6.4.7", + "picocolors": "^1.0.0", + "proxy-agent": "^5.0.0", + "reflect-metadata": "^0.1.13", + "typeorm": "^0.3.7", + "typescript": "^4.1.2", + "ws": "^8.8.1" + }, + "optionalDependencies": { + "mysql2": "^2.3.3", + "pg": "^8.7.3", + "sqlite3": "^5.0.11" + } } diff --git a/api/patches/ajv+8.6.2.patch b/patches/ajv+8.6.2.patch similarity index 100% rename from api/patches/ajv+8.6.2.patch rename to patches/ajv+8.6.2.patch diff --git a/api/patches/typescript-json-schema+0.54.0.patch b/patches/typescript-json-schema+0.54.0.patch similarity index 100% rename from api/patches/typescript-json-schema+0.54.0.patch rename to patches/typescript-json-schema+0.54.0.patch diff --git a/rtc/.gitignore b/rtc/.gitignore deleted file mode 100644 index f14b45488..000000000 --- a/rtc/.gitignore +++ /dev/null @@ -1,145 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port -.DS_Store - -# Compiled TypeScript code -dist/ -# Prerequisites -*.d - -# Compiled Object files -*.slo -*.lo -*.o -*.obj - -# Precompiled Headers -*.gch -*.pch - -# Compiled Dynamic libraries -*.so -*.dylib -*.dll - -# Fortran module files -*.mod -*.smod - -# Compiled Static libraries -*.lai -*.la -*.a -*.lib - -# Executables -*.o - -# Protobuffer builds -*.pb.cc -*.pb.h - -# Directories -build/ -.vscode/ diff --git a/rtc/.npmignore b/rtc/.npmignore deleted file mode 100644 index 05a9d0cf2..000000000 --- a/rtc/.npmignore +++ /dev/null @@ -1 +0,0 @@ -!dist/ \ No newline at end of file diff --git a/rtc/.prettierrc b/rtc/.prettierrc deleted file mode 100644 index d569c548e..000000000 --- a/rtc/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "tabWidth": 4, - "useTabs": true, - "printWidth": 120 -} diff --git a/rtc/CMakeLists.txt b/rtc/CMakeLists.txt deleted file mode 100644 index 2cf5c0a6d..000000000 --- a/rtc/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -cmake_minimum_required(VERSION 3.2) -project(fosscord-media) - -set(CMAKE_CXX_STANDARD 17) - -find_package(Threads REQUIRED) - -find_package(mongocxx REQUIRED) -find_package(Boost REQUIRED) - - -file(GLOB SourceFiles ${PROJECT_SOURCE_DIR}/src/*.cpp) -#include_directories("bsoncxx/v_noabi/bsoncxx/") -add_executable(${CMAKE_PROJECT_NAME} ${SourceFiles}) - -target_link_libraries(${CMAKE_PROJECT_NAME} datachannel mongo::mongocxx_shared Boost::boost) \ No newline at end of file diff --git a/rtc/README.md b/rtc/README.md deleted file mode 100644 index ee452adf3..000000000 --- a/rtc/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Fosscord-media - -A Fosscord media (voice and video) server - -## Installation - -### Prerequisites - -- Install the [libdatachannel](https://github.com/paullouisageneau/libdatachannel) library -- Install the [libmongocxx](http://mongocxx.org/mongocxx-v3/installation/) driver and its requirements - -### Building - -```bash -$ cmake -$ cd build -$ make -``` diff --git a/rtc/config.json b/rtc/config.json deleted file mode 100644 index 0967ef424..000000000 --- a/rtc/config.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/rtc/src/main.cpp b/rtc/src/main.cpp deleted file mode 100644 index 372eaa008..000000000 --- a/rtc/src/main.cpp +++ /dev/null @@ -1,47 +0,0 @@ -// $$$$$$\ $$\ -// $$ __$$\ $$ | -// $$ / \__|$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$$\ $$$$$$\ $$$$$$\ $$$$$$$ | -// $$$$\ $$ __$$\ $$ _____|$$ _____|$$ _____|$$ __$$\ $$ __$$\ $$ __$$ | -// $$ _| $$ / $$ |\$$$$$$\ \$$$$$$\ $$ / $$ / $$ |$$ | \__|$$ / $$ | -// $$ | $$ | $$ | \____$$\ \____$$\ $$ | $$ | $$ |$$ | $$ | $$ | -// $$ | \$$$$$$ |$$$$$$$ |$$$$$$$ |\$$$$$$$\ \$$$$$$ |$$ | \$$$$$$$ | -// \__| \______/ \_______/ \_______/ \_______| \______/ \__| \_______| -// -// -// -// $$\ $$$$$$\ -// \__| $$ __$$\ -// $$\ $$\ $$$$$$\ $$\ $$$$$$$\ $$$$$$\ $$ / \__| $$$$$$\ $$$$$$\ $$\ $$\ $$$$$$\ $$$$$$\ -// \$$\ $$ |$$ __$$\ $$ |$$ _____|$$ __$$\ \$$$$$$\ $$ __$$\ $$ __$$\\$$\ $$ |$$ __$$\ $$ __$$\ -// \$$\$$ / $$ / $$ |$$ |$$ / $$$$$$$$ | \____$$\ $$$$$$$$ |$$ | \__|\$$\$$ / $$$$$$$$ |$$ | \__| -// \$$$ / $$ | $$ |$$ |$$ | $$ ____|$$\ $$ |$$ ____|$$ | \$$$ / $$ ____|$$ | -// \$ / \$$$$$$ |$$ |\$$$$$$$\ \$$$$$$$\ \$$$$$$ |\$$$$$$$\ $$ | \$ / \$$$$$$$\ $$ | -// \_/ \______/ \__| \_______| \_______| \______/ \_______|\__| \_/ \_______|\__| -// -// -// - -#include "rtcPeerHandler.hpp" //Handle peer connection requests -#include "mongoStub.hpp" //Handle communication with the MongoDB server - -int main(int argc, char **argv){ - - auto commsHandler = std::make_shared(); - auto mongoHandler = std::make_unique(); - - mongocxx::options::change_stream options; - //voiceEvents collection watcher - mongocxx::change_stream colCs = mongoHandler->getCol().watch(options); - - std::cout << "Server created and listening for events" << std::endl; - - //Check for new messages in the collection - for (;;){ - std::vector t = mongoHandler->getNewMessages(&colCs); - for(auto &i : t){ - std::cout << "[" << i.eventName << "] " << std::endl; - } - } - - return 0; -} \ No newline at end of file diff --git a/rtc/src/mongoStub.cpp b/rtc/src/mongoStub.cpp deleted file mode 100644 index ccd2abda3..000000000 --- a/rtc/src/mongoStub.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "mongoStub.hpp" - -mongoStub::mongoStub() { - if (this->client) { - this->db = client["fosscord"]; - - if (this->db) { - this->col = db["events"]; - - } else { - std::cout << "db not found"; - exit(-1); - } - } else { - std::cout << "Client couldn't be initialized"; - exit(-1); - } -} - -// Too slow for my liking -std::vector mongoStub::getNewMessages( - mongocxx::change_stream* colCs) { - std::vector retVec; - - for (auto&& event : *colCs) { - mongoStub::mongoMessage returnValue; - - std::cout << bsoncxx::to_json(event) << std::endl; - - // Only listen to insert events (to avoid "precondition failed: data" - // exception) - if (event["operationType"].get_utf8().value.to_string() != "insert") { - continue; - } - - std::string evName = event["fullDocument"]["event"].get_utf8().value.to_string(); - - if(evName.substr(0, 7)=="VSERVER"){ continue; } //Ignore the event if it's been emited by a voice server - - if (evName == "UDP_CONNECTION") { - handleUdpRequest( - event["fullDocument"]["data"]["d"]["address"].get_utf8().value.to_string(), - event["fullDocument"]["data"]["d"]["port"].get_int32().value, - event["fullDocument"]["data"]["d"]["mode"].get_utf8().value.to_string() - ); - - } else if (evName == "VOICE_REQUEST") { - //TODO - continue; - } - - returnValue.eventName = evName; - retVec.push_back(returnValue); - } - - return retVec; -} - - -void mongoStub::handleUdpRequest(std::string address, int port, std::string mode) { - using bsoncxx::builder::basic::kvp; - using bsoncxx::builder::basic::sub_array; - using bsoncxx::builder::basic::sub_document; - - auto builder = bsoncxx::builder::basic::document{}; - - //Handle UDP socket stuff (later tho) - - builder.append(kvp("event", "VSERVER_UDP_RESPONSE")); - builder.append(kvp("op", "4")); - builder.append(kvp("d", [](sub_document subdoc) { - subdoc.append(kvp("mode", "CRYPT_MODE")), - subdoc.append(kvp("secret_key", [](sub_array subarr) { - subarr.append(1, 2, 3, 5); // HOW DO I GEN A SKEY? - })); - })); - - - bsoncxx::stdx::optional r= col.insert_one(builder.view()); -} - -void mongoStub::handleVoiceRequest() { - //Is this really needed? idk -} \ No newline at end of file diff --git a/rtc/src/mongoStub.hpp b/rtc/src/mongoStub.hpp deleted file mode 100644 index 2809142f7..000000000 --- a/rtc/src/mongoStub.hpp +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef MONGOSTUB_HPP -#define MONGOSTUB_HPP - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -class mongoStub{ - public: - mongoStub(); - - struct mongoMessage{ - std::string eventName; - std::vector data; - }; - - std::vector getNewMessages(mongocxx::change_stream* colCs); - - mongocxx::collection getCol() const { return col; } - - - - private: - mongocxx::instance instance; - mongocxx::client client{mongocxx::uri{}}; - mongocxx::database db; - mongocxx::collection col; - mongocxx::change_stream* colCs = nullptr; - - void handleUdpRequest(std::string address, int port, std::string mode); - void handleVoiceRequest(); -}; - -#endif diff --git a/rtc/src/rtcPeerHandler.cpp b/rtc/src/rtcPeerHandler.cpp deleted file mode 100644 index 9bfc64665..000000000 --- a/rtc/src/rtcPeerHandler.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include "rtcPeerHandler.hpp" - -rtcPeerHandler::rtcPeerHandler() { - rtc::InitLogger(rtc::LogLevel::Verbose, NULL); -} - -void rtcPeerHandler::initiateConnection(std::string peerIP, int peerPort) { - // Socket connection between client and server - SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); - sockaddr_in addr; - addr.sin_addr.s_addr = inet_addr(peerIP.c_str()); - addr.sin_port = htons(peerPort); - addr.sin_family = AF_INET; - - rtc::Configuration conf; - conf.enableIceTcp = false; - conf.disableAutoNegotiation = false; - - auto pc = std::make_shared(conf); - - rtc::Description::Audio media("audio", - rtc::Description::Direction::SendRecv); - media.addOpusCodec(96); - media.setBitrate(64); - - auto track = pc->addTrack(media); - - // auto session = std::make_shared(); - - // track->setMediaHandler(session); - - rtc::Reliability rtcRel; - rtcRel.unordered = true; - rtcRel.type = rtc::Reliability::Type::Timed; - rtcRel.rexmit = 500; - - rtc::DataChannelInit rtcConf; - rtcConf.reliability = rtcRel; - rtcConf.negotiated = false; - - pc->onStateChange([](rtc::PeerConnection::State state) { - std::cout << "State: " << state << std::endl; - if (state == rtc::PeerConnection::State::Disconnected || - state == rtc::PeerConnection::State::Failed || - state == rtc::PeerConnection::State::Closed) { - // remove disconnected client - } - }); - - pc->onGatheringStateChange([](rtc::PeerConnection::GatheringState state) { - std::cout << "Gathering State: " << state << std::endl; - }); - - /*std::tuple addAudio( - - const std::shared_ptr pc, - const uint8_t payloadType, const uint32_t ssrc, const std::string cname, - const std::string msid, const std::function onOpen) { - auto audio = Description::Audio(cname); - audio.addOpusCodec(payloadType); - audio.addSSRC(ssrc, cname, msid, cname); - auto track = pc->addTrack(audio); - // create RTP configuration - auto rtpConfig = make_shared( - ssrc, cname, payloadType, OpusRtpPacketizer::defaultClockRate); - // create packetizer - auto packetizer = make_shared(rtpConfig); - // create opus handler - auto opusHandler = make_shared(packetizer); - - // add RTCP SR handler - auto srReporter = make_shared(rtpConfig); - opusHandler->addToChain(srReporter); - - // set handler - track->setMediaHandler(opusHandler); - track->onOpen(onOpen); - auto trackData = make_shared(track, srReporter); - return trackData; - }*/ - - pc->createDataChannel("Fosscord voice connection", rtcConf); -} diff --git a/rtc/src/rtcPeerHandler.hpp b/rtc/src/rtcPeerHandler.hpp deleted file mode 100644 index 3ba32a832..000000000 --- a/rtc/src/rtcPeerHandler.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "libdatachannel/rtc.hpp" -#include -#include -#include "nlohmann/json.hpp" -#include - -#ifdef _WIN32 -#include -#else -#include -typedef int SOCKET; -#endif - -using json = nlohmann::json; - -#ifndef RTCPEERHANDLER -#define RTCPEERHANDLER -class rtcPeerHandler{ -public: - rtcPeerHandler(); - void initiateConnection(std::string peerIP, int peerPort); - - struct client - { - std::shared_ptr pc; - std::shared_ptr dc; - }; - -private: - std::map clients; -}; -#endif \ No newline at end of file diff --git a/rtc/src/rtcServer.hpp b/rtc/src/rtcServer.hpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/util/scripts/benchmark.js b/scripts/benchmark.js similarity index 100% rename from util/scripts/benchmark.js rename to scripts/benchmark.js diff --git a/bundle/scripts/benchmark/connections.js b/scripts/benchmark/connections.js similarity index 100% rename from bundle/scripts/benchmark/connections.js rename to scripts/benchmark/connections.js diff --git a/bundle/scripts/benchmark/index.js b/scripts/benchmark/index.js similarity index 100% rename from bundle/scripts/benchmark/index.js rename to scripts/benchmark/index.js diff --git a/bundle/scripts/benchmark/users.js b/scripts/benchmark/users.js similarity index 100% rename from bundle/scripts/benchmark/users.js rename to scripts/benchmark/users.js diff --git a/bundle/scripts/build.js b/scripts/build.js similarity index 77% rename from bundle/scripts/build.js rename to scripts/build.js index f53a22233..49353c877 100644 --- a/bundle/scripts/build.js +++ b/scripts/build.js @@ -1,9 +1,8 @@ const { execSync } = require("child_process"); const path = require("path"); const fs = require("fs"); -const { getSystemErrorMap } = require("util"); const { argv, stdout, exit } = require("process"); -const { copyRecursiveSync, execIn, parts } = require('./utils'); +const { execIn, parts } = require('./utils'); if(argv.includes("help")) { console.log(`Fosscord build script help: @@ -44,14 +43,6 @@ console.log(`[${++i}/${steps}] Checking if dependencies were installed correctly if(!fs.existsSync(path.join(__dirname, "..", "node_modules", "exif-be-gone", "index.js"))) execIn("npm run build", path.join(__dirname, "..", "node_modules", "exif-be-gone")); -console.log(`[${++i}/${steps}] Copying src files...`); -copyRecursiveSync(path.join(__dirname, "..", "..", "api", "assets"), path.join(__dirname, "..", "dist", "api", "assets")); -copyRecursiveSync(path.join(__dirname, "..", "..", "api", "client_test"), path.join(__dirname, "..", "dist", "api", "client_test")); -copyRecursiveSync(path.join(__dirname, "..", "..", "api", "locales"), path.join(__dirname, "..", "dist", "api", "locales")); -parts.forEach((a) => { - copyRecursiveSync("../" + a + "/src", "dist/" + a + "/src"); - if (verbose) console.log(`Copied ${"../" + a + "/dist"} -> ${"dist/" + a + "/src"}!`); -}); if (!argv.includes("copyonly")) { console.log(`[${++i}/${steps}] Compiling src files ...`); diff --git a/bundle/scripts/db_migrations.sh b/scripts/db_migrations.sh similarity index 100% rename from bundle/scripts/db_migrations.sh rename to scripts/db_migrations.sh diff --git a/bundle/scripts/depcheck.js b/scripts/depcheck.js similarity index 100% rename from bundle/scripts/depcheck.js rename to scripts/depcheck.js diff --git a/bundle/scripts/depclean.js b/scripts/depclean.js similarity index 100% rename from bundle/scripts/depclean.js rename to scripts/depclean.js diff --git a/api/scripts/droptables.sql b/scripts/droptables.sql similarity index 100% rename from api/scripts/droptables.sql rename to scripts/droptables.sql diff --git a/bundle/scripts/gen_index.js b/scripts/gen_index.js similarity index 100% rename from bundle/scripts/gen_index.js rename to scripts/gen_index.js diff --git a/api/scripts/generate_openapi.js b/scripts/generate_openapi.js similarity index 100% rename from api/scripts/generate_openapi.js rename to scripts/generate_openapi.js diff --git a/api/scripts/generate_schema.js b/scripts/generate_schema.js similarity index 96% rename from api/scripts/generate_schema.js rename to scripts/generate_schema.js index 1badfd326..6925df5d2 100644 --- a/api/scripts/generate_schema.js +++ b/scripts/generate_schema.js @@ -49,7 +49,7 @@ function modify(obj) { function main() { const files = [ - ...walk(path.join(__dirname, "..", "..", "util", "src", "schemas")), + ...walk(path.join(__dirname, "..", "src", "util", "schemas")), ]; const program = TJS.getProgramFromFiles( files, diff --git a/bundle/scripts/install.js b/scripts/install.js similarity index 100% rename from bundle/scripts/install.js rename to scripts/install.js diff --git a/util/scripts/migrate_db_engine.js b/scripts/migrate_db_engine.js similarity index 100% rename from util/scripts/migrate_db_engine.js rename to scripts/migrate_db_engine.js diff --git a/bundle/scripts/rights.js b/scripts/rights.js similarity index 100% rename from bundle/scripts/rights.js rename to scripts/rights.js diff --git a/api/scripts/stresstest/.gitignore b/scripts/stresstest/.gitignore similarity index 100% rename from api/scripts/stresstest/.gitignore rename to scripts/stresstest/.gitignore diff --git a/api/scripts/stresstest/accounts.json.example b/scripts/stresstest/accounts.json.example similarity index 100% rename from api/scripts/stresstest/accounts.json.example rename to scripts/stresstest/accounts.json.example diff --git a/api/scripts/stresstest/config.json.example b/scripts/stresstest/config.json.example similarity index 100% rename from api/scripts/stresstest/config.json.example rename to scripts/stresstest/config.json.example diff --git a/api/scripts/stresstest/index.js b/scripts/stresstest/index.js similarity index 100% rename from api/scripts/stresstest/index.js rename to scripts/stresstest/index.js diff --git a/api/scripts/stresstest/package-lock.json b/scripts/stresstest/package-lock.json similarity index 100% rename from api/scripts/stresstest/package-lock.json rename to scripts/stresstest/package-lock.json diff --git a/api/scripts/stresstest/package.json b/scripts/stresstest/package.json similarity index 100% rename from api/scripts/stresstest/package.json rename to scripts/stresstest/package.json diff --git a/api/scripts/stresstest/src/login/index.js b/scripts/stresstest/src/login/index.js similarity index 91% rename from api/scripts/stresstest/src/login/index.js rename to scripts/stresstest/src/login/index.js index ab6c9719e..b153550e8 100644 --- a/api/scripts/stresstest/src/login/index.js +++ b/scripts/stresstest/src/login/index.js @@ -1,6 +1,6 @@ const fetch = require("node-fetch"); const fs = require("fs"); -let config = require("./../../config.json"); +let config = require("../../config.json"); module.exports = login; async function login(account) { let body = { diff --git a/api/scripts/stresstest/src/message/send.js b/scripts/stresstest/src/message/send.js similarity index 100% rename from api/scripts/stresstest/src/message/send.js rename to scripts/stresstest/src/message/send.js diff --git a/api/scripts/stresstest/src/register/index.js b/scripts/stresstest/src/register/index.js similarity index 100% rename from api/scripts/stresstest/src/register/index.js rename to scripts/stresstest/src/register/index.js diff --git a/bundle/scripts/update_schemas.js b/scripts/update_schemas.js similarity index 100% rename from bundle/scripts/update_schemas.js rename to scripts/update_schemas.js diff --git a/bundle/scripts/utils.js b/scripts/utils.js similarity index 100% rename from bundle/scripts/utils.js rename to scripts/utils.js diff --git a/bundle/src/Server.ts b/src/Server.ts similarity index 97% rename from bundle/src/Server.ts rename to src/Server.ts index 165ab1212..4d5d64229 100644 --- a/bundle/src/Server.ts +++ b/src/Server.ts @@ -10,7 +10,7 @@ import { green, bold, yellow } from "picocolors"; import { Config, getOrInitialiseDatabase } from "@fosscord/util"; import * as Sentry from "@sentry/node"; import * as Tracing from "@sentry/tracing"; -import { PluginLoader } from "@fosscord/util"; +// import { PluginLoader } from "@fosscord/util"; const app = express(); const server = http.createServer(); @@ -95,7 +95,7 @@ async function main() { }); } console.log(`[Server] ${green(`listening on port ${bold(port)}`)}`); - PluginLoader.loadPlugins(); + // PluginLoader.loadPlugins(); } main().catch(console.error); diff --git a/api/src/Server.ts b/src/api/Server.ts similarity index 100% rename from api/src/Server.ts rename to src/api/Server.ts diff --git a/api/src/global.d.ts b/src/api/global.d.ts similarity index 100% rename from api/src/global.d.ts rename to src/api/global.d.ts diff --git a/api/src/index.ts b/src/api/index.ts similarity index 100% rename from api/src/index.ts rename to src/api/index.ts diff --git a/api/src/middlewares/Authentication.ts b/src/api/middlewares/Authentication.ts similarity index 100% rename from api/src/middlewares/Authentication.ts rename to src/api/middlewares/Authentication.ts diff --git a/api/src/middlewares/BodyParser.ts b/src/api/middlewares/BodyParser.ts similarity index 100% rename from api/src/middlewares/BodyParser.ts rename to src/api/middlewares/BodyParser.ts diff --git a/api/src/middlewares/CORS.ts b/src/api/middlewares/CORS.ts similarity index 100% rename from api/src/middlewares/CORS.ts rename to src/api/middlewares/CORS.ts diff --git a/api/src/middlewares/ErrorHandler.ts b/src/api/middlewares/ErrorHandler.ts similarity index 100% rename from api/src/middlewares/ErrorHandler.ts rename to src/api/middlewares/ErrorHandler.ts diff --git a/api/src/middlewares/RateLimit.ts b/src/api/middlewares/RateLimit.ts similarity index 100% rename from api/src/middlewares/RateLimit.ts rename to src/api/middlewares/RateLimit.ts diff --git a/api/src/middlewares/TestClient.ts b/src/api/middlewares/TestClient.ts similarity index 89% rename from api/src/middlewares/TestClient.ts rename to src/api/middlewares/TestClient.ts index 4fe631cb5..a47ff396e 100644 --- a/api/src/middlewares/TestClient.ts +++ b/src/api/middlewares/TestClient.ts @@ -7,11 +7,13 @@ import { Config } from "@fosscord/util"; import { AssetCacheItem } from "../util/entities/AssetCacheItem" import { green } from "picocolors"; +const AssetsPath = path.join(__dirname, "..", "..", "..", "assets") + export default function TestClient(app: Application) { const agent = new ProxyAgent(); //build client page - let html = fs.readFileSync(path.join(__dirname, "..", "..", "client_test", "index.html"), { encoding: "utf8" }); + let html = fs.readFileSync(path.join(AssetsPath, "index.html"), { encoding: "utf8" }); html = applyEnv(html); html = applyInlinePlugins(html); html = applyPlugins(html); @@ -19,7 +21,7 @@ export default function TestClient(app: Application) { //load asset cache let newAssetCache: Map = new Map(); - let assetCacheDir = path.join(__dirname, "..", "..", "assets", "cache"); + let assetCacheDir = path.join(AssetsPath, "cache"); if(process.env.ASSET_CACHE_DIR) assetCacheDir = process.env.ASSET_CACHE_DIR @@ -32,7 +34,7 @@ export default function TestClient(app: Application) { newAssetCache = new Map(Object.entries(JSON.parse(rawdata.toString()))); } - app.use("/assets", express.static(path.join(__dirname, "..", "..", "assets"))); + app.use("/assets", express.static(path.join(AssetsPath))); app.get("/assets/:file", async (req: Request, res: Response) => { delete req.headers.host; let response: FetchResponse; @@ -113,7 +115,7 @@ function applyEnv(html: string): string { function applyPlugins(html: string): string { // plugins - let files = fs.readdirSync(path.join(__dirname, "..", "..", "assets", "plugins")); + let files = fs.readdirSync(path.join(AssetsPath, "plugins")); let plugins = ""; files.forEach(x =>{if(x.endsWith(".js")) plugins += `\n`; }); return html.replaceAll("", plugins); @@ -121,7 +123,7 @@ function applyPlugins(html: string): string { function applyInlinePlugins(html: string): string{ // inline plugins - let files = fs.readdirSync(path.join(__dirname, "..", "..", "assets", "inline-plugins")); + let files = fs.readdirSync(path.join(AssetsPath, "inline-plugins")); let plugins = ""; files.forEach(x =>{if(x.endsWith(".js")) plugins += `\n\n`; }); return html.replaceAll("", plugins); @@ -129,9 +131,9 @@ function applyInlinePlugins(html: string): string{ function applyPreloadPlugins(html: string): string{ //preload plugins - let files = fs.readdirSync(path.join(__dirname, "..", "..", "assets", "preload-plugins")); + let files = fs.readdirSync(path.join(AssetsPath, "preload-plugins")); let plugins = ""; - files.forEach(x =>{if(x.endsWith(".js")) plugins += `\n`; }); + files.forEach(x =>{if(x.endsWith(".js")) plugins += `\n`; }); return html.replaceAll("", plugins); } diff --git a/api/src/middlewares/Translation.ts b/src/api/middlewares/Translation.ts similarity index 84% rename from api/src/middlewares/Translation.ts rename to src/api/middlewares/Translation.ts index baabf2210..64b03bf86 100644 --- a/api/src/middlewares/Translation.ts +++ b/src/api/middlewares/Translation.ts @@ -6,8 +6,8 @@ import i18nextBackend from "i18next-node-fs-backend"; import { Router } from "express"; export async function initTranslation(router: Router) { - const languages = fs.readdirSync(path.join(__dirname, "..", "..", "locales")); - const namespaces = fs.readdirSync(path.join(__dirname, "..", "..", "locales", "en")); + const languages = fs.readdirSync(path.join(__dirname, "..", "..", "..", "assets", "locales")); + const namespaces = fs.readdirSync(path.join(__dirname, "..", "..", "..", "assets", "locales", "en")); const ns = namespaces.filter((x) => x.endsWith(".json")).map((x) => x.slice(0, x.length - 5)); await i18next @@ -19,7 +19,7 @@ export async function initTranslation(router: Router) { fallbackLng: "en", ns, backend: { - loadPath: __dirname + "/../../locales/{{lng}}/{{ns}}.json" + loadPath: __dirname + "/../../../assets/locales/{{lng}}/{{ns}}.json" }, load: "all" }); diff --git a/api/src/middlewares/index.ts b/src/api/middlewares/index.ts similarity index 100% rename from api/src/middlewares/index.ts rename to src/api/middlewares/index.ts diff --git a/api/src/routes/-/healthz.ts b/src/api/routes/-/healthz.ts similarity index 100% rename from api/src/routes/-/healthz.ts rename to src/api/routes/-/healthz.ts diff --git a/api/src/routes/-/readyz.ts b/src/api/routes/-/readyz.ts similarity index 100% rename from api/src/routes/-/readyz.ts rename to src/api/routes/-/readyz.ts diff --git a/api/src/routes/applications/#id/entitlements.ts b/src/api/routes/applications/#id/entitlements.ts similarity index 100% rename from api/src/routes/applications/#id/entitlements.ts rename to src/api/routes/applications/#id/entitlements.ts diff --git a/api/src/routes/applications/detectable.ts b/src/api/routes/applications/detectable.ts similarity index 100% rename from api/src/routes/applications/detectable.ts rename to src/api/routes/applications/detectable.ts diff --git a/api/src/routes/applications/index.ts b/src/api/routes/applications/index.ts similarity index 100% rename from api/src/routes/applications/index.ts rename to src/api/routes/applications/index.ts diff --git a/api/src/routes/auth/location-metadata.ts b/src/api/routes/auth/location-metadata.ts similarity index 100% rename from api/src/routes/auth/location-metadata.ts rename to src/api/routes/auth/location-metadata.ts diff --git a/api/src/routes/auth/login.ts b/src/api/routes/auth/login.ts similarity index 100% rename from api/src/routes/auth/login.ts rename to src/api/routes/auth/login.ts diff --git a/api/src/routes/auth/mfa/totp.ts b/src/api/routes/auth/mfa/totp.ts similarity index 100% rename from api/src/routes/auth/mfa/totp.ts rename to src/api/routes/auth/mfa/totp.ts diff --git a/api/src/routes/auth/register.ts b/src/api/routes/auth/register.ts similarity index 100% rename from api/src/routes/auth/register.ts rename to src/api/routes/auth/register.ts diff --git a/api/src/routes/channels/#channel_id/followers.ts b/src/api/routes/channels/#channel_id/followers.ts similarity index 100% rename from api/src/routes/channels/#channel_id/followers.ts rename to src/api/routes/channels/#channel_id/followers.ts diff --git a/api/src/routes/channels/#channel_id/index.ts b/src/api/routes/channels/#channel_id/index.ts similarity index 100% rename from api/src/routes/channels/#channel_id/index.ts rename to src/api/routes/channels/#channel_id/index.ts diff --git a/api/src/routes/channels/#channel_id/invites.ts b/src/api/routes/channels/#channel_id/invites.ts similarity index 100% rename from api/src/routes/channels/#channel_id/invites.ts rename to src/api/routes/channels/#channel_id/invites.ts diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/ack.ts b/src/api/routes/channels/#channel_id/messages/#message_id/ack.ts similarity index 100% rename from api/src/routes/channels/#channel_id/messages/#message_id/ack.ts rename to src/api/routes/channels/#channel_id/messages/#message_id/ack.ts diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts b/src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts similarity index 100% rename from api/src/routes/channels/#channel_id/messages/#message_id/crosspost.ts rename to src/api/routes/channels/#channel_id/messages/#message_id/crosspost.ts diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/index.ts b/src/api/routes/channels/#channel_id/messages/#message_id/index.ts similarity index 100% rename from api/src/routes/channels/#channel_id/messages/#message_id/index.ts rename to src/api/routes/channels/#channel_id/messages/#message_id/index.ts diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts b/src/api/routes/channels/#channel_id/messages/#message_id/reactions.ts similarity index 100% rename from api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts rename to src/api/routes/channels/#channel_id/messages/#message_id/reactions.ts diff --git a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts b/src/api/routes/channels/#channel_id/messages/bulk-delete.ts similarity index 95% rename from api/src/routes/channels/#channel_id/messages/bulk-delete.ts rename to src/api/routes/channels/#channel_id/messages/bulk-delete.ts index 24a33d2d9..af44b5228 100644 --- a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts +++ b/src/api/routes/channels/#channel_id/messages/bulk-delete.ts @@ -13,7 +13,7 @@ export default router; // https://discord.com/developers/docs/resources/channel#bulk-delete-messages router.post("/", route({ body: "BulkDeleteSchema" }), async (req: Request, res: Response) => { const { channel_id } = req.params; - const channel = await Channel.findOneByOrFail({ id: channel_id }); + const channel = await Channel.findOneOrFail({where:{ id: channel_id} }); if (!channel.guild_id) throw new HTTPError("Can't bulk delete dm channel messages", 400); const rights = await getRights(req.user_id); diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/src/api/routes/channels/#channel_id/messages/index.ts similarity index 100% rename from api/src/routes/channels/#channel_id/messages/index.ts rename to src/api/routes/channels/#channel_id/messages/index.ts diff --git a/api/src/routes/channels/#channel_id/permissions.ts b/src/api/routes/channels/#channel_id/permissions.ts similarity index 100% rename from api/src/routes/channels/#channel_id/permissions.ts rename to src/api/routes/channels/#channel_id/permissions.ts diff --git a/api/src/routes/channels/#channel_id/pins.ts b/src/api/routes/channels/#channel_id/pins.ts similarity index 100% rename from api/src/routes/channels/#channel_id/pins.ts rename to src/api/routes/channels/#channel_id/pins.ts diff --git a/api/src/routes/channels/#channel_id/purge.ts b/src/api/routes/channels/#channel_id/purge.ts similarity index 100% rename from api/src/routes/channels/#channel_id/purge.ts rename to src/api/routes/channels/#channel_id/purge.ts diff --git a/api/src/routes/channels/#channel_id/recipients.ts b/src/api/routes/channels/#channel_id/recipients.ts similarity index 100% rename from api/src/routes/channels/#channel_id/recipients.ts rename to src/api/routes/channels/#channel_id/recipients.ts diff --git a/api/src/routes/channels/#channel_id/typing.ts b/src/api/routes/channels/#channel_id/typing.ts similarity index 100% rename from api/src/routes/channels/#channel_id/typing.ts rename to src/api/routes/channels/#channel_id/typing.ts diff --git a/api/src/routes/channels/#channel_id/webhooks.ts b/src/api/routes/channels/#channel_id/webhooks.ts similarity index 100% rename from api/src/routes/channels/#channel_id/webhooks.ts rename to src/api/routes/channels/#channel_id/webhooks.ts diff --git a/api/src/routes/discoverable-guilds.ts b/src/api/routes/discoverable-guilds.ts similarity index 100% rename from api/src/routes/discoverable-guilds.ts rename to src/api/routes/discoverable-guilds.ts diff --git a/api/src/routes/discovery.ts b/src/api/routes/discovery.ts similarity index 100% rename from api/src/routes/discovery.ts rename to src/api/routes/discovery.ts diff --git a/api/src/routes/downloads.ts b/src/api/routes/downloads.ts similarity index 100% rename from api/src/routes/downloads.ts rename to src/api/routes/downloads.ts diff --git a/api/src/routes/experiments.ts b/src/api/routes/experiments.ts similarity index 100% rename from api/src/routes/experiments.ts rename to src/api/routes/experiments.ts diff --git a/api/src/routes/gateway/bot.ts b/src/api/routes/gateway/bot.ts similarity index 100% rename from api/src/routes/gateway/bot.ts rename to src/api/routes/gateway/bot.ts diff --git a/api/src/routes/gateway/index.ts b/src/api/routes/gateway/index.ts similarity index 100% rename from api/src/routes/gateway/index.ts rename to src/api/routes/gateway/index.ts diff --git a/api/src/routes/gifs/search.ts b/src/api/routes/gifs/search.ts similarity index 100% rename from api/src/routes/gifs/search.ts rename to src/api/routes/gifs/search.ts diff --git a/api/src/routes/gifs/trending-gifs.ts b/src/api/routes/gifs/trending-gifs.ts similarity index 100% rename from api/src/routes/gifs/trending-gifs.ts rename to src/api/routes/gifs/trending-gifs.ts diff --git a/api/src/routes/gifs/trending.ts b/src/api/routes/gifs/trending.ts similarity index 100% rename from api/src/routes/gifs/trending.ts rename to src/api/routes/gifs/trending.ts diff --git a/api/src/routes/guild-recommendations.ts b/src/api/routes/guild-recommendations.ts similarity index 100% rename from api/src/routes/guild-recommendations.ts rename to src/api/routes/guild-recommendations.ts diff --git a/api/src/routes/guilds/#guild_id/audit-logs.ts b/src/api/routes/guilds/#guild_id/audit-logs.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/audit-logs.ts rename to src/api/routes/guilds/#guild_id/audit-logs.ts diff --git a/api/src/routes/guilds/#guild_id/bans.ts b/src/api/routes/guilds/#guild_id/bans.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/bans.ts rename to src/api/routes/guilds/#guild_id/bans.ts diff --git a/api/src/routes/guilds/#guild_id/channels.ts b/src/api/routes/guilds/#guild_id/channels.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/channels.ts rename to src/api/routes/guilds/#guild_id/channels.ts diff --git a/api/src/routes/guilds/#guild_id/delete.ts b/src/api/routes/guilds/#guild_id/delete.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/delete.ts rename to src/api/routes/guilds/#guild_id/delete.ts diff --git a/api/src/routes/guilds/#guild_id/discovery-requirements.ts b/src/api/routes/guilds/#guild_id/discovery-requirements.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/discovery-requirements.ts rename to src/api/routes/guilds/#guild_id/discovery-requirements.ts diff --git a/api/src/routes/guilds/#guild_id/emojis.ts b/src/api/routes/guilds/#guild_id/emojis.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/emojis.ts rename to src/api/routes/guilds/#guild_id/emojis.ts diff --git a/api/src/routes/guilds/#guild_id/index.ts b/src/api/routes/guilds/#guild_id/index.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/index.ts rename to src/api/routes/guilds/#guild_id/index.ts diff --git a/api/src/routes/guilds/#guild_id/integrations.ts b/src/api/routes/guilds/#guild_id/integrations.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/integrations.ts rename to src/api/routes/guilds/#guild_id/integrations.ts diff --git a/api/src/routes/guilds/#guild_id/invites.ts b/src/api/routes/guilds/#guild_id/invites.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/invites.ts rename to src/api/routes/guilds/#guild_id/invites.ts diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts b/src/api/routes/guilds/#guild_id/members/#member_id/index.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/members/#member_id/index.ts rename to src/api/routes/guilds/#guild_id/members/#member_id/index.ts diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/nick.ts b/src/api/routes/guilds/#guild_id/members/#member_id/nick.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/members/#member_id/nick.ts rename to src/api/routes/guilds/#guild_id/members/#member_id/nick.ts diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts b/src/api/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts rename to src/api/routes/guilds/#guild_id/members/#member_id/roles/#role_id/index.ts diff --git a/api/src/routes/guilds/#guild_id/members/index.ts b/src/api/routes/guilds/#guild_id/members/index.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/members/index.ts rename to src/api/routes/guilds/#guild_id/members/index.ts diff --git a/api/src/routes/guilds/#guild_id/premium.ts b/src/api/routes/guilds/#guild_id/premium.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/premium.ts rename to src/api/routes/guilds/#guild_id/premium.ts diff --git a/api/src/routes/guilds/#guild_id/prune.ts b/src/api/routes/guilds/#guild_id/prune.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/prune.ts rename to src/api/routes/guilds/#guild_id/prune.ts diff --git a/api/src/routes/guilds/#guild_id/regions.ts b/src/api/routes/guilds/#guild_id/regions.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/regions.ts rename to src/api/routes/guilds/#guild_id/regions.ts diff --git a/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts b/src/api/routes/guilds/#guild_id/roles/#role_id/index.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/roles/#role_id/index.ts rename to src/api/routes/guilds/#guild_id/roles/#role_id/index.ts diff --git a/api/src/routes/guilds/#guild_id/roles/index.ts b/src/api/routes/guilds/#guild_id/roles/index.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/roles/index.ts rename to src/api/routes/guilds/#guild_id/roles/index.ts diff --git a/api/src/routes/guilds/#guild_id/stickers.ts b/src/api/routes/guilds/#guild_id/stickers.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/stickers.ts rename to src/api/routes/guilds/#guild_id/stickers.ts diff --git a/api/src/routes/guilds/#guild_id/templates.ts b/src/api/routes/guilds/#guild_id/templates.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/templates.ts rename to src/api/routes/guilds/#guild_id/templates.ts diff --git a/api/src/routes/guilds/#guild_id/vanity-url.ts b/src/api/routes/guilds/#guild_id/vanity-url.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/vanity-url.ts rename to src/api/routes/guilds/#guild_id/vanity-url.ts diff --git a/api/src/routes/guilds/#guild_id/voice-states/#user_id/index.ts b/src/api/routes/guilds/#guild_id/voice-states/#user_id/index.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/voice-states/#user_id/index.ts rename to src/api/routes/guilds/#guild_id/voice-states/#user_id/index.ts diff --git a/api/src/routes/guilds/#guild_id/webhooks.ts b/src/api/routes/guilds/#guild_id/webhooks.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/webhooks.ts rename to src/api/routes/guilds/#guild_id/webhooks.ts diff --git a/api/src/routes/guilds/#guild_id/welcome_screen.ts b/src/api/routes/guilds/#guild_id/welcome_screen.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/welcome_screen.ts rename to src/api/routes/guilds/#guild_id/welcome_screen.ts diff --git a/api/src/routes/guilds/#guild_id/widget.json.ts b/src/api/routes/guilds/#guild_id/widget.json.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/widget.json.ts rename to src/api/routes/guilds/#guild_id/widget.json.ts diff --git a/api/src/routes/guilds/#guild_id/widget.png.ts b/src/api/routes/guilds/#guild_id/widget.png.ts similarity index 97% rename from api/src/routes/guilds/#guild_id/widget.png.ts rename to src/api/routes/guilds/#guild_id/widget.png.ts index ec0ac85cc..a61d938d8 100644 --- a/api/src/routes/guilds/#guild_id/widget.png.ts +++ b/src/api/routes/guilds/#guild_id/widget.png.ts @@ -34,7 +34,7 @@ router.get("/", route({}), async (req: Request, res: Response) => { const sizeOf = require("image-size"); // TODO: Widget style templates need Fosscord branding - const source = path.join(__dirname, "..", "..", "..", "..", "assets", "widget", `${style}.png`); + const source = path.join(__dirname, "..", "..", "..", "..", "..", "assets", "widget", `${style}.png`); if (!fs.existsSync(source)) { throw new HTTPError("Widget template does not exist.", 400); } diff --git a/api/src/routes/guilds/#guild_id/widget.ts b/src/api/routes/guilds/#guild_id/widget.ts similarity index 100% rename from api/src/routes/guilds/#guild_id/widget.ts rename to src/api/routes/guilds/#guild_id/widget.ts diff --git a/api/src/routes/guilds/index.ts b/src/api/routes/guilds/index.ts similarity index 100% rename from api/src/routes/guilds/index.ts rename to src/api/routes/guilds/index.ts diff --git a/api/src/routes/guilds/templates/index.ts b/src/api/routes/guilds/templates/index.ts similarity index 100% rename from api/src/routes/guilds/templates/index.ts rename to src/api/routes/guilds/templates/index.ts diff --git a/api/src/routes/invites/index.ts b/src/api/routes/invites/index.ts similarity index 100% rename from api/src/routes/invites/index.ts rename to src/api/routes/invites/index.ts diff --git a/api/src/routes/oauth2/tokens.ts b/src/api/routes/oauth2/tokens.ts similarity index 100% rename from api/src/routes/oauth2/tokens.ts rename to src/api/routes/oauth2/tokens.ts diff --git a/api/src/routes/outbound-promotions.ts b/src/api/routes/outbound-promotions.ts similarity index 100% rename from api/src/routes/outbound-promotions.ts rename to src/api/routes/outbound-promotions.ts diff --git a/api/src/routes/partners/#guild_id/requirements.ts b/src/api/routes/partners/#guild_id/requirements.ts similarity index 100% rename from api/src/routes/partners/#guild_id/requirements.ts rename to src/api/routes/partners/#guild_id/requirements.ts diff --git a/api/src/routes/ping.ts b/src/api/routes/ping.ts similarity index 100% rename from api/src/routes/ping.ts rename to src/api/routes/ping.ts diff --git a/api/src/routes/policies/instance/domains.ts b/src/api/routes/policies/instance/domains.ts similarity index 100% rename from api/src/routes/policies/instance/domains.ts rename to src/api/routes/policies/instance/domains.ts diff --git a/api/src/routes/policies/instance/index.ts b/src/api/routes/policies/instance/index.ts similarity index 100% rename from api/src/routes/policies/instance/index.ts rename to src/api/routes/policies/instance/index.ts diff --git a/api/src/routes/policies/instance/limits.ts b/src/api/routes/policies/instance/limits.ts similarity index 100% rename from api/src/routes/policies/instance/limits.ts rename to src/api/routes/policies/instance/limits.ts diff --git a/api/src/routes/scheduled-maintenances/upcoming_json.ts b/src/api/routes/scheduled-maintenances/upcoming_json.ts similarity index 100% rename from api/src/routes/scheduled-maintenances/upcoming_json.ts rename to src/api/routes/scheduled-maintenances/upcoming_json.ts diff --git a/api/src/routes/science.ts b/src/api/routes/science.ts similarity index 100% rename from api/src/routes/science.ts rename to src/api/routes/science.ts diff --git a/api/src/routes/stage-instances.ts b/src/api/routes/stage-instances.ts similarity index 100% rename from api/src/routes/stage-instances.ts rename to src/api/routes/stage-instances.ts diff --git a/api/src/routes/sticker-packs/index.ts b/src/api/routes/sticker-packs/index.ts similarity index 100% rename from api/src/routes/sticker-packs/index.ts rename to src/api/routes/sticker-packs/index.ts diff --git a/api/src/routes/stickers/#sticker_id/index.ts b/src/api/routes/stickers/#sticker_id/index.ts similarity index 100% rename from api/src/routes/stickers/#sticker_id/index.ts rename to src/api/routes/stickers/#sticker_id/index.ts diff --git a/api/src/routes/stop.ts b/src/api/routes/stop.ts similarity index 100% rename from api/src/routes/stop.ts rename to src/api/routes/stop.ts diff --git a/api/src/routes/store/published-listings/applications.ts b/src/api/routes/store/published-listings/applications.ts similarity index 100% rename from api/src/routes/store/published-listings/applications.ts rename to src/api/routes/store/published-listings/applications.ts diff --git a/api/src/routes/store/published-listings/applications/#id/subscription-plans.ts b/src/api/routes/store/published-listings/applications/#id/subscription-plans.ts similarity index 100% rename from api/src/routes/store/published-listings/applications/#id/subscription-plans.ts rename to src/api/routes/store/published-listings/applications/#id/subscription-plans.ts diff --git a/api/src/routes/store/published-listings/skus.ts b/src/api/routes/store/published-listings/skus.ts similarity index 100% rename from api/src/routes/store/published-listings/skus.ts rename to src/api/routes/store/published-listings/skus.ts diff --git a/api/src/routes/store/published-listings/skus/#sku_id/subscription-plans.ts b/src/api/routes/store/published-listings/skus/#sku_id/subscription-plans.ts similarity index 100% rename from api/src/routes/store/published-listings/skus/#sku_id/subscription-plans.ts rename to src/api/routes/store/published-listings/skus/#sku_id/subscription-plans.ts diff --git a/api/src/routes/teams.ts b/src/api/routes/teams.ts similarity index 100% rename from api/src/routes/teams.ts rename to src/api/routes/teams.ts diff --git a/api/src/routes/template.ts.disabled b/src/api/routes/template.ts.disabled similarity index 100% rename from api/src/routes/template.ts.disabled rename to src/api/routes/template.ts.disabled diff --git a/api/src/routes/track.ts b/src/api/routes/track.ts similarity index 100% rename from api/src/routes/track.ts rename to src/api/routes/track.ts diff --git a/api/src/routes/updates.ts b/src/api/routes/updates.ts similarity index 100% rename from api/src/routes/updates.ts rename to src/api/routes/updates.ts diff --git a/api/src/routes/users/#id/index.ts b/src/api/routes/users/#id/index.ts similarity index 100% rename from api/src/routes/users/#id/index.ts rename to src/api/routes/users/#id/index.ts diff --git a/api/src/routes/users/#id/profile.ts b/src/api/routes/users/#id/profile.ts similarity index 100% rename from api/src/routes/users/#id/profile.ts rename to src/api/routes/users/#id/profile.ts diff --git a/api/src/routes/users/#id/relationships.ts b/src/api/routes/users/#id/relationships.ts similarity index 100% rename from api/src/routes/users/#id/relationships.ts rename to src/api/routes/users/#id/relationships.ts diff --git a/api/src/routes/users/@me/activities/statistics/applications.ts b/src/api/routes/users/@me/activities/statistics/applications.ts similarity index 100% rename from api/src/routes/users/@me/activities/statistics/applications.ts rename to src/api/routes/users/@me/activities/statistics/applications.ts diff --git a/api/src/routes/users/@me/affinities/guilds.ts b/src/api/routes/users/@me/affinities/guilds.ts similarity index 100% rename from api/src/routes/users/@me/affinities/guilds.ts rename to src/api/routes/users/@me/affinities/guilds.ts diff --git a/api/src/routes/users/@me/affinities/users.ts b/src/api/routes/users/@me/affinities/users.ts similarity index 100% rename from api/src/routes/users/@me/affinities/users.ts rename to src/api/routes/users/@me/affinities/users.ts diff --git a/api/src/routes/users/@me/applications/#app_id/entitlements.ts b/src/api/routes/users/@me/applications/#app_id/entitlements.ts similarity index 100% rename from api/src/routes/users/@me/applications/#app_id/entitlements.ts rename to src/api/routes/users/@me/applications/#app_id/entitlements.ts diff --git a/api/src/routes/users/@me/billing/country-code.ts b/src/api/routes/users/@me/billing/country-code.ts similarity index 100% rename from api/src/routes/users/@me/billing/country-code.ts rename to src/api/routes/users/@me/billing/country-code.ts diff --git a/api/src/routes/users/@me/billing/payment-sources.ts b/src/api/routes/users/@me/billing/payment-sources.ts similarity index 100% rename from api/src/routes/users/@me/billing/payment-sources.ts rename to src/api/routes/users/@me/billing/payment-sources.ts diff --git a/api/src/routes/users/@me/billing/subscriptions.ts b/src/api/routes/users/@me/billing/subscriptions.ts similarity index 100% rename from api/src/routes/users/@me/billing/subscriptions.ts rename to src/api/routes/users/@me/billing/subscriptions.ts diff --git a/api/src/routes/users/@me/channels.ts b/src/api/routes/users/@me/channels.ts similarity index 100% rename from api/src/routes/users/@me/channels.ts rename to src/api/routes/users/@me/channels.ts diff --git a/api/src/routes/users/@me/connections.ts b/src/api/routes/users/@me/connections.ts similarity index 100% rename from api/src/routes/users/@me/connections.ts rename to src/api/routes/users/@me/connections.ts diff --git a/api/src/routes/users/@me/delete.ts b/src/api/routes/users/@me/delete.ts similarity index 100% rename from api/src/routes/users/@me/delete.ts rename to src/api/routes/users/@me/delete.ts diff --git a/api/src/routes/users/@me/devices.ts b/src/api/routes/users/@me/devices.ts similarity index 100% rename from api/src/routes/users/@me/devices.ts rename to src/api/routes/users/@me/devices.ts diff --git a/api/src/routes/users/@me/disable.ts b/src/api/routes/users/@me/disable.ts similarity index 100% rename from api/src/routes/users/@me/disable.ts rename to src/api/routes/users/@me/disable.ts diff --git a/api/src/routes/users/@me/email-settings.ts b/src/api/routes/users/@me/email-settings.ts similarity index 100% rename from api/src/routes/users/@me/email-settings.ts rename to src/api/routes/users/@me/email-settings.ts diff --git a/api/src/routes/users/@me/entitlements.ts b/src/api/routes/users/@me/entitlements.ts similarity index 100% rename from api/src/routes/users/@me/entitlements.ts rename to src/api/routes/users/@me/entitlements.ts diff --git a/api/src/routes/users/@me/guilds.ts b/src/api/routes/users/@me/guilds.ts similarity index 100% rename from api/src/routes/users/@me/guilds.ts rename to src/api/routes/users/@me/guilds.ts diff --git a/api/src/routes/users/@me/guilds/premium/subscription-slots.ts b/src/api/routes/users/@me/guilds/premium/subscription-slots.ts similarity index 100% rename from api/src/routes/users/@me/guilds/premium/subscription-slots.ts rename to src/api/routes/users/@me/guilds/premium/subscription-slots.ts diff --git a/api/src/routes/users/@me/index.ts b/src/api/routes/users/@me/index.ts similarity index 100% rename from api/src/routes/users/@me/index.ts rename to src/api/routes/users/@me/index.ts diff --git a/api/src/routes/users/@me/library.ts b/src/api/routes/users/@me/library.ts similarity index 100% rename from api/src/routes/users/@me/library.ts rename to src/api/routes/users/@me/library.ts diff --git a/api/src/routes/users/@me/mfa/codes.ts b/src/api/routes/users/@me/mfa/codes.ts similarity index 100% rename from api/src/routes/users/@me/mfa/codes.ts rename to src/api/routes/users/@me/mfa/codes.ts diff --git a/api/src/routes/users/@me/mfa/totp/disable.ts b/src/api/routes/users/@me/mfa/totp/disable.ts similarity index 100% rename from api/src/routes/users/@me/mfa/totp/disable.ts rename to src/api/routes/users/@me/mfa/totp/disable.ts diff --git a/api/src/routes/users/@me/mfa/totp/enable.ts b/src/api/routes/users/@me/mfa/totp/enable.ts similarity index 100% rename from api/src/routes/users/@me/mfa/totp/enable.ts rename to src/api/routes/users/@me/mfa/totp/enable.ts diff --git a/api/src/routes/users/@me/notes.ts b/src/api/routes/users/@me/notes.ts similarity index 100% rename from api/src/routes/users/@me/notes.ts rename to src/api/routes/users/@me/notes.ts diff --git a/api/src/routes/users/@me/relationships.ts b/src/api/routes/users/@me/relationships.ts similarity index 100% rename from api/src/routes/users/@me/relationships.ts rename to src/api/routes/users/@me/relationships.ts diff --git a/api/src/routes/users/@me/settings.ts b/src/api/routes/users/@me/settings.ts similarity index 100% rename from api/src/routes/users/@me/settings.ts rename to src/api/routes/users/@me/settings.ts diff --git a/api/src/routes/voice/regions.ts b/src/api/routes/voice/regions.ts similarity index 100% rename from api/src/routes/voice/regions.ts rename to src/api/routes/voice/regions.ts diff --git a/api/src/start.ts b/src/api/start.ts similarity index 92% rename from api/src/start.ts rename to src/api/start.ts index 98beb1fa8..9ba198e72 100644 --- a/api/src/start.ts +++ b/src/api/start.ts @@ -13,7 +13,7 @@ try { console.log("[API] Failed to get thread count! Using 1...") } -if (cluster.isPrimary && process.env.NODE_ENV == "production") { +if (cluster.isMaster && process.env.NODE_ENV == "production") { console.log(`Primary ${process.pid} is running`); // Fork workers. diff --git a/api/src/util/entities/AssetCacheItem.ts b/src/api/util/entities/AssetCacheItem.ts similarity index 100% rename from api/src/util/entities/AssetCacheItem.ts rename to src/api/util/entities/AssetCacheItem.ts diff --git a/api/src/util/entities/blockedEmailDomains.txt b/src/api/util/entities/blockedEmailDomains.txt similarity index 100% rename from api/src/util/entities/blockedEmailDomains.txt rename to src/api/util/entities/blockedEmailDomains.txt diff --git a/api/src/util/entities/trustedEmailDomains.txt b/src/api/util/entities/trustedEmailDomains.txt similarity index 100% rename from api/src/util/entities/trustedEmailDomains.txt rename to src/api/util/entities/trustedEmailDomains.txt diff --git a/api/src/util/handlers/Instance.ts b/src/api/util/handlers/Instance.ts similarity index 100% rename from api/src/util/handlers/Instance.ts rename to src/api/util/handlers/Instance.ts diff --git a/api/src/util/handlers/Message.ts b/src/api/util/handlers/Message.ts similarity index 100% rename from api/src/util/handlers/Message.ts rename to src/api/util/handlers/Message.ts diff --git a/api/src/util/handlers/Voice.ts b/src/api/util/handlers/Voice.ts similarity index 100% rename from api/src/util/handlers/Voice.ts rename to src/api/util/handlers/Voice.ts diff --git a/api/src/util/handlers/route.ts b/src/api/util/handlers/route.ts similarity index 97% rename from api/src/util/handlers/route.ts rename to src/api/util/handlers/route.ts index f8130f3cb..71e149555 100644 --- a/api/src/util/handlers/route.ts +++ b/src/api/util/handlers/route.ts @@ -19,7 +19,7 @@ import Ajv from "ajv"; import { AnyValidateFunction } from "ajv/dist/core"; import addFormats from "ajv-formats"; -const SchemaPath = path.join(__dirname, "..", "..", "..", "assets", "schemas.json"); +const SchemaPath = path.join(__dirname, "..", "..", "..","..", "assets", "schemas.json"); const schemas = JSON.parse(fs.readFileSync(SchemaPath, { encoding: "utf8" })); export const ajv = new Ajv({ diff --git a/api/src/util/index.ts b/src/api/util/index.ts similarity index 100% rename from api/src/util/index.ts rename to src/api/util/index.ts diff --git a/api/src/util/utility/Base64.ts b/src/api/util/utility/Base64.ts similarity index 100% rename from api/src/util/utility/Base64.ts rename to src/api/util/utility/Base64.ts diff --git a/api/src/util/utility/RandomInviteID.ts b/src/api/util/utility/RandomInviteID.ts similarity index 100% rename from api/src/util/utility/RandomInviteID.ts rename to src/api/util/utility/RandomInviteID.ts diff --git a/api/src/util/utility/String.ts b/src/api/util/utility/String.ts similarity index 100% rename from api/src/util/utility/String.ts rename to src/api/util/utility/String.ts diff --git a/api/src/util/utility/ipAddress.ts b/src/api/util/utility/ipAddress.ts similarity index 100% rename from api/src/util/utility/ipAddress.ts rename to src/api/util/utility/ipAddress.ts diff --git a/api/src/util/utility/passwordStrength.ts b/src/api/util/utility/passwordStrength.ts similarity index 100% rename from api/src/util/utility/passwordStrength.ts rename to src/api/util/utility/passwordStrength.ts diff --git a/cdn/src/Server.ts b/src/cdn/Server.ts similarity index 100% rename from cdn/src/Server.ts rename to src/cdn/Server.ts diff --git a/cdn/src/index.ts b/src/cdn/index.ts similarity index 100% rename from cdn/src/index.ts rename to src/cdn/index.ts diff --git a/cdn/src/routes/attachments.ts b/src/cdn/routes/attachments.ts similarity index 100% rename from cdn/src/routes/attachments.ts rename to src/cdn/routes/attachments.ts diff --git a/cdn/src/routes/avatars.ts b/src/cdn/routes/avatars.ts similarity index 100% rename from cdn/src/routes/avatars.ts rename to src/cdn/routes/avatars.ts diff --git a/cdn/src/routes/external.ts b/src/cdn/routes/external.ts similarity index 100% rename from cdn/src/routes/external.ts rename to src/cdn/routes/external.ts diff --git a/cdn/src/routes/ping.ts b/src/cdn/routes/ping.ts similarity index 100% rename from cdn/src/routes/ping.ts rename to src/cdn/routes/ping.ts diff --git a/cdn/src/routes/role-icons.ts b/src/cdn/routes/role-icons.ts similarity index 100% rename from cdn/src/routes/role-icons.ts rename to src/cdn/routes/role-icons.ts diff --git a/cdn/src/start.ts b/src/cdn/start.ts similarity index 100% rename from cdn/src/start.ts rename to src/cdn/start.ts diff --git a/cdn/src/util/FileStorage.ts b/src/cdn/util/FileStorage.ts similarity index 100% rename from cdn/src/util/FileStorage.ts rename to src/cdn/util/FileStorage.ts diff --git a/cdn/src/util/S3Storage.ts b/src/cdn/util/S3Storage.ts similarity index 100% rename from cdn/src/util/S3Storage.ts rename to src/cdn/util/S3Storage.ts diff --git a/cdn/src/util/Storage.ts b/src/cdn/util/Storage.ts similarity index 100% rename from cdn/src/util/Storage.ts rename to src/cdn/util/Storage.ts diff --git a/cdn/src/util/index.ts b/src/cdn/util/index.ts similarity index 100% rename from cdn/src/util/index.ts rename to src/cdn/util/index.ts diff --git a/cdn/src/util/multer.ts b/src/cdn/util/multer.ts similarity index 100% rename from cdn/src/util/multer.ts rename to src/cdn/util/multer.ts diff --git a/gateway/src/Server.ts b/src/gateway/Server.ts similarity index 100% rename from gateway/src/Server.ts rename to src/gateway/Server.ts diff --git a/gateway/src/events/Close.ts b/src/gateway/events/Close.ts similarity index 100% rename from gateway/src/events/Close.ts rename to src/gateway/events/Close.ts diff --git a/gateway/src/events/Connection.ts b/src/gateway/events/Connection.ts similarity index 100% rename from gateway/src/events/Connection.ts rename to src/gateway/events/Connection.ts diff --git a/gateway/src/events/Message.ts b/src/gateway/events/Message.ts similarity index 94% rename from gateway/src/events/Message.ts rename to src/gateway/events/Message.ts index 7ed1dd067..569f5fc70 100644 --- a/gateway/src/events/Message.ts +++ b/src/gateway/events/Message.ts @@ -6,7 +6,6 @@ try { } catch (error) {} import OPCodeHandlers from "../opcodes"; import { check } from "../opcodes/instanceOf"; -import WS from "ws"; const PayloadSchema = { op: Number, @@ -15,7 +14,7 @@ const PayloadSchema = { $t: String, }; -export async function Message(this: WebSocket, buffer: WS.RawData) { +export async function Message(this: WebSocket, buffer: Buffer) { // TODO: compression let data: Payload; diff --git a/gateway/src/index.ts b/src/gateway/index.ts similarity index 100% rename from gateway/src/index.ts rename to src/gateway/index.ts diff --git a/gateway/src/listener/listener.ts b/src/gateway/listener/listener.ts similarity index 100% rename from gateway/src/listener/listener.ts rename to src/gateway/listener/listener.ts diff --git a/gateway/src/opcodes/Heartbeat.ts b/src/gateway/opcodes/Heartbeat.ts similarity index 100% rename from gateway/src/opcodes/Heartbeat.ts rename to src/gateway/opcodes/Heartbeat.ts diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts new file mode 100644 index 000000000..4f17ab706 --- /dev/null +++ b/src/gateway/opcodes/Identify.ts @@ -0,0 +1,298 @@ +import { WebSocket, Payload } from "@fosscord/gateway"; +import { + checkToken, + Intents, + Member, + ReadyEventData, + User, + Session, + EVENTEnum, + Config, + PublicMember, + PublicUser, + PrivateUserProjection, + ReadState, + Application, + emitEvent, + SessionsReplace, + PrivateSessionProjection, + MemberPrivateProjection, + PresenceUpdateEvent, + UserSettings, + IdentifySchema, +} from "@fosscord/util"; +import { Send } from "../util/Send"; +import { CLOSECODES, OPCODES } from "../util/Constants"; +import { genSessionId } from "../util/SessionUtils"; +import { setupListener } from "../listener/listener"; +// import experiments from "./experiments.json"; +const experiments: any = []; +import { check } from "./instanceOf"; +import { Recipient } from "@fosscord/util"; +import { OrmUtils } from "@fosscord/util"; + +// TODO: user sharding +// TODO: check privileged intents, if defined in the config +// TODO: check if already identified + +export async function onIdentify(this: WebSocket, data: Payload) { + clearTimeout(this.readyTimeout); + check.call(this, IdentifySchema, data.d); + + const identify: IdentifySchema = data.d; + + try { + const { jwtSecret } = Config.get().security; + var { decoded } = await checkToken(identify.token, jwtSecret); // will throw an error if invalid + } catch (error) { + console.error("invalid token", error); + return this.close(CLOSECODES.Authentication_failed); + } + this.user_id = decoded.id; + + const session_id = genSessionId(); + this.session_id = session_id; //Set the session of the WebSocket object + + const [user, read_states, members, recipients, session, application] = + await Promise.all([ + User.findOneOrFail({ + where: { id: this.user_id }, + relations: ["relationships", "relationships.to", "settings"], + select: [...PrivateUserProjection, "relationships"], + }), + ReadState.find({ where: { user_id: this.user_id } }), + Member.find({ + where: { id: this.user_id }, + select: MemberPrivateProjection, + relations: [ + "guild", + "guild.channels", + "guild.emojis", + "guild.emojis.user", + "guild.roles", + "guild.stickers", + "user", + "roles", + ], + }), + Recipient.find({ + where: { user_id: this.user_id, closed: false }, + relations: [ + "channel", + "channel.recipients", + "channel.recipients.user", + ], + // TODO: public user selection + }), + // save the session and delete it when the websocket is closed + await OrmUtils.mergeDeep(new Session(), { + user_id: this.user_id, + session_id: session_id, + // TODO: check if status is only one of: online, dnd, offline, idle + status: identify.presence?.status || "offline", //does the session always start as online? + client_info: { + //TODO read from identity + client: "desktop", + os: identify.properties?.os, + version: 0, + }, + activities: [], + }).save(), + Application.findOne({ where: { id: this.user_id } }), + ]); + + if (!user) return this.close(CLOSECODES.Authentication_failed); + if (!user.settings) { //settings may not exist after updating... + user.settings = new UserSettings(); + user.settings.id = user.id; + await user.settings.save(); + } + + if (!identify.intents) identify.intents = "0x6ffffffff" + this.intents = new Intents(identify.intents); + if (identify.shard) { + this.shard_id = identify.shard[0]; + this.shard_count = identify.shard[1]; + if ( + this.shard_count == null || + this.shard_id == null || + this.shard_id >= this.shard_count || + this.shard_id < 0 || + this.shard_count <= 0 + ) { + console.log(identify.shard); + return this.close(CLOSECODES.Invalid_shard); + } + } + let users: PublicUser[] = []; + + const merged_members = members.map((x: Member) => { + return [ + { + ...x, + roles: x.roles.map((x) => x.id), + settings: undefined, + guild: undefined, + }, + ]; + }) as PublicMember[][]; + let guilds = members.map((x) => ({ ...x.guild, joined_at: x.joined_at })); + + // @ts-ignore + guilds = guilds.map((guild) => { + if (user.bot) { + setTimeout(() => { + Send(this, { + op: OPCODES.Dispatch, + t: EVENTEnum.GuildCreate, + s: this.sequence++, + d: guild, + }); + }, 500); + return { id: guild.id, unavailable: true }; + } + + return guild; + }); + + const user_guild_settings_entries = members.map((x) => x.settings); + + const channels = recipients.map((x) => { + // @ts-ignore + x.channel.recipients = x.channel.recipients?.map((x) => x.user); + //TODO is this needed? check if users in group dm that are not friends are sent in the READY event + users = users.concat(x.channel.recipients as unknown as User[]); + if (x.channel.isDm()) { + x.channel.recipients = x.channel.recipients!.filter( + (x) => x.id !== this.user_id + ); + } + return x.channel; + }); + + for (let relation of user.relationships) { + const related_user = relation.to; + const public_related_user = { + username: related_user.username, + discriminator: related_user.discriminator, + id: related_user.id, + public_flags: related_user.public_flags, + avatar: related_user.avatar, + bot: related_user.bot, + bio: related_user.bio, + premium_since: user.premium_since + }; + users.push(public_related_user); + } + + setImmediate(async () => { + // run in seperate "promise context" because ready payload is not dependent on those events + emitEvent({ + event: "SESSIONS_REPLACE", + user_id: this.user_id, + data: await Session.find({ + where: { user_id: this.user_id }, + select: PrivateSessionProjection, + }), + } as SessionsReplace); + emitEvent({ + event: "PRESENCE_UPDATE", + user_id: this.user_id, + data: { + user: await User.getPublicUser(this.user_id), + activities: session.activities, + client_status: session?.client_info, + status: session.status, + }, + } as PresenceUpdateEvent); + }); + + read_states.forEach((s: any) => { + s.id = s.channel_id; + delete s.user_id; + delete s.channel_id; + }); + + const privateUser = { + avatar: user.avatar, + mobile: user.mobile, + desktop: user.desktop, + discriminator: user.discriminator, + email: user.email, + flags: user.flags, + id: user.id, + mfa_enabled: user.mfa_enabled, + nsfw_allowed: user.nsfw_allowed, + phone: user.phone, + premium: user.premium, + premium_type: user.premium_type, + public_flags: user.public_flags, + username: user.username, + verified: user.verified, + bot: user.bot, + accent_color: user.accent_color || 0, + banner: user.banner, + bio: user.bio, + premium_since: user.premium_since + }; + + const d: ReadyEventData = { + v: 8, + application: {id: application?.id??'', flags: application?.flags??''}, //TODO: check this code! + user: privateUser, + user_settings: user.settings, + // @ts-ignore + guilds: guilds.map((x) => { + // @ts-ignore + x.guild_hashes = {}; // @ts-ignore + x.guild_scheduled_events = []; // @ts-ignore + x.threads = []; + return x; + }), + guild_experiments: [], // TODO + geo_ordered_rtc_regions: [], // TODO + relationships: user.relationships.map((x) => x.toPublicRelationship()), + read_state: { + entries: read_states, + partial: false, + version: 304128, + }, + user_guild_settings: { + entries: user_guild_settings_entries, + partial: false, // TODO partial + version: 642, + }, + private_channels: channels, + session_id: session_id, + analytics_token: "", // TODO + connected_accounts: [], // TODO + consents: { + personalization: { + consented: false, // TODO + }, + }, + country_code: user.settings.locale, + friend_suggestion_count: 0, // TODO + // @ts-ignore + experiments: experiments, // TODO + guild_join_requests: [], // TODO what is this? + users: users.filter((x) => x).unique(), + merged_members: merged_members, + // shard // TODO: only for user sharding + }; + + // TODO: send real proper data structure + await Send(this, { + op: OPCODES.Dispatch, + t: EVENTEnum.Ready, + s: this.sequence++, + d, + }); + + //TODO send READY_SUPPLEMENTAL + //TODO send GUILD_MEMBER_LIST_UPDATE + //TODO send SESSIONS_REPLACE + //TODO send VOICE_STATE_UPDATE to let the client know if another device is already connected to a voice channel + + await setupListener.call(this); +} diff --git a/gateway/src/opcodes/LazyRequest.ts b/src/gateway/opcodes/LazyRequest.ts similarity index 98% rename from gateway/src/opcodes/LazyRequest.ts rename to src/gateway/opcodes/LazyRequest.ts index cd0586de2..74996f5b8 100644 --- a/gateway/src/opcodes/LazyRequest.ts +++ b/src/gateway/opcodes/LazyRequest.ts @@ -16,7 +16,7 @@ async function getMembers(guild_id: string, range: [number, number]) { // TODO: wait for typeorm to implement ordering for .find queries https://github.com/typeorm/typeorm/issues/2620 // TODO: rewrite this, released in 0.3.0 - let members = await (await getOrInitialiseDatabase()).getRepository(Member) + let members: Member[] = await (await getOrInitialiseDatabase()).getRepository(Member) .createQueryBuilder("member") .where("member.guild_id = :guild_id", { guild_id }) .leftJoinAndSelect("member.roles", "role") diff --git a/gateway/src/opcodes/PresenceUpdate.ts b/src/gateway/opcodes/PresenceUpdate.ts similarity index 100% rename from gateway/src/opcodes/PresenceUpdate.ts rename to src/gateway/opcodes/PresenceUpdate.ts diff --git a/gateway/src/opcodes/RequestGuildMembers.ts b/src/gateway/opcodes/RequestGuildMembers.ts similarity index 100% rename from gateway/src/opcodes/RequestGuildMembers.ts rename to src/gateway/opcodes/RequestGuildMembers.ts diff --git a/gateway/src/opcodes/Resume.ts b/src/gateway/opcodes/Resume.ts similarity index 100% rename from gateway/src/opcodes/Resume.ts rename to src/gateway/opcodes/Resume.ts diff --git a/gateway/src/opcodes/VoiceStateUpdate.ts b/src/gateway/opcodes/VoiceStateUpdate.ts similarity index 98% rename from gateway/src/opcodes/VoiceStateUpdate.ts rename to src/gateway/opcodes/VoiceStateUpdate.ts index 73f73565c..c4297a68f 100644 --- a/gateway/src/opcodes/VoiceStateUpdate.ts +++ b/src/gateway/opcodes/VoiceStateUpdate.ts @@ -12,7 +12,7 @@ import { VoiceStateUpdateSchema, } from "@fosscord/util"; import { OrmUtils } from "@fosscord/util"; -import { Region } from "@fosscord/util/src/config"; +import { Region } from "@fosscord/util"; // TODO: check if a voice server is setup // Notice: Bot users respect the voice channel's user limit, if set. When the voice channel is full, you will not receive the Voice State Update or Voice Server Update events in response to your own Voice State Update. Having MANAGE_CHANNELS permission bypasses this limit and allows you to join regardless of the channel being full or not. diff --git a/gateway/src/opcodes/experiments.json b/src/gateway/opcodes/experiments.json similarity index 100% rename from gateway/src/opcodes/experiments.json rename to src/gateway/opcodes/experiments.json diff --git a/gateway/src/opcodes/index.ts b/src/gateway/opcodes/index.ts similarity index 100% rename from gateway/src/opcodes/index.ts rename to src/gateway/opcodes/index.ts diff --git a/gateway/src/opcodes/instanceOf.ts b/src/gateway/opcodes/instanceOf.ts similarity index 100% rename from gateway/src/opcodes/instanceOf.ts rename to src/gateway/opcodes/instanceOf.ts diff --git a/gateway/src/start.ts b/src/gateway/start.ts similarity index 100% rename from gateway/src/start.ts rename to src/gateway/start.ts diff --git a/gateway/src/util/Constants.ts b/src/gateway/util/Constants.ts similarity index 100% rename from gateway/src/util/Constants.ts rename to src/gateway/util/Constants.ts diff --git a/gateway/src/util/Heartbeat.ts b/src/gateway/util/Heartbeat.ts similarity index 100% rename from gateway/src/util/Heartbeat.ts rename to src/gateway/util/Heartbeat.ts diff --git a/gateway/src/util/Send.ts b/src/gateway/util/Send.ts similarity index 100% rename from gateway/src/util/Send.ts rename to src/gateway/util/Send.ts diff --git a/gateway/src/util/SessionUtils.ts b/src/gateway/util/SessionUtils.ts similarity index 100% rename from gateway/src/util/SessionUtils.ts rename to src/gateway/util/SessionUtils.ts diff --git a/gateway/src/util/WebSocket.ts b/src/gateway/util/WebSocket.ts similarity index 92% rename from gateway/src/util/WebSocket.ts rename to src/gateway/util/WebSocket.ts index e3313f406..9496da856 100644 --- a/gateway/src/util/WebSocket.ts +++ b/src/gateway/util/WebSocket.ts @@ -8,8 +8,8 @@ export interface WebSocket extends WS { session_id: string; encoding: "etf" | "json"; compress?: "zlib-stream"; - shard_count?: bigint; - shard_id?: bigint; + shard_count?: number; + shard_id?: number; deflate?: Deflate; heartbeatTimeout: NodeJS.Timeout; readyTimeout: NodeJS.Timeout; diff --git a/gateway/src/util/index.ts b/src/gateway/util/index.ts similarity index 100% rename from gateway/src/util/index.ts rename to src/gateway/util/index.ts diff --git a/bundle/src/start.ts b/src/start.ts similarity index 100% rename from bundle/src/start.ts rename to src/start.ts diff --git a/src/stats.ts b/src/stats.ts new file mode 100644 index 000000000..654e0a4f1 --- /dev/null +++ b/src/stats.ts @@ -0,0 +1,24 @@ +import os from "os"; +import { red } from "picocolors"; + +export function initStats() { + + console.log(`[Path] running in ${__dirname}`); + try { + console.log(`[CPU] ${os.cpus()[0].model} Cores x${os.cpus().length}`); + } + catch { + console.log('[CPU] Failed to get cpu model!') + } + + console.log(`[System] ${os.platform()} ${os.arch()}`); + console.log(`[Process] running with PID: ${process.pid}`); + if (process.getuid && process.getuid() === 0) { + console.warn( + red( + `[Process] Warning fosscord is running as root, this highly discouraged and might expose your system vulnerable to attackers. Please run fosscord as a user without root privileges.` + ) + ); + } + +} diff --git a/util/src/config/Config.ts b/src/util/config/Config.ts similarity index 95% rename from util/src/config/Config.ts rename to src/util/config/Config.ts index b703040f7..7aee17753 100644 --- a/util/src/config/Config.ts +++ b/src/util/config/Config.ts @@ -1,4 +1,4 @@ -import { ApiConfiguration, ClientConfiguration, DefaultsConfiguration, EndpointConfiguration, GeneralConfiguration, GifConfiguration, GuildConfiguration, KafkaConfiguration, LimitsConfiguration, LoginConfiguration, MetricsConfiguration, RabbitMQConfiguration, RegionConfiguration, RegisterConfiguration, SecurityConfiguration, SentryConfiguration, TemplateConfiguration } from "../config"; +import { ApiConfiguration, ClientConfiguration, DefaultsConfiguration, EndpointConfiguration, GeneralConfiguration, GifConfiguration, GuildConfiguration, KafkaConfiguration, LimitsConfiguration, LoginConfiguration, MetricsConfiguration, RabbitMQConfiguration, RegionConfiguration, RegisterConfiguration, SecurityConfiguration, SentryConfiguration, TemplateConfiguration } from "."; export class ConfigValue { gateway: EndpointConfiguration = new EndpointConfiguration(); diff --git a/util/src/config/index.ts b/src/util/config/index.ts similarity index 100% rename from util/src/config/index.ts rename to src/util/config/index.ts diff --git a/util/src/config/types/ApiConfiguration.ts b/src/util/config/types/ApiConfiguration.ts similarity index 100% rename from util/src/config/types/ApiConfiguration.ts rename to src/util/config/types/ApiConfiguration.ts diff --git a/util/src/config/types/ClientConfiguration.ts b/src/util/config/types/ClientConfiguration.ts similarity index 100% rename from util/src/config/types/ClientConfiguration.ts rename to src/util/config/types/ClientConfiguration.ts diff --git a/util/src/config/types/DefaultsConfiguration.ts b/src/util/config/types/DefaultsConfiguration.ts similarity index 100% rename from util/src/config/types/DefaultsConfiguration.ts rename to src/util/config/types/DefaultsConfiguration.ts diff --git a/util/src/config/types/EndpointConfiguration.ts b/src/util/config/types/EndpointConfiguration.ts similarity index 100% rename from util/src/config/types/EndpointConfiguration.ts rename to src/util/config/types/EndpointConfiguration.ts diff --git a/util/src/config/types/GeneralConfiguration.ts b/src/util/config/types/GeneralConfiguration.ts similarity index 100% rename from util/src/config/types/GeneralConfiguration.ts rename to src/util/config/types/GeneralConfiguration.ts diff --git a/util/src/config/types/GifConfiguration.ts b/src/util/config/types/GifConfiguration.ts similarity index 100% rename from util/src/config/types/GifConfiguration.ts rename to src/util/config/types/GifConfiguration.ts diff --git a/util/src/config/types/GuildConfiguration.ts b/src/util/config/types/GuildConfiguration.ts similarity index 100% rename from util/src/config/types/GuildConfiguration.ts rename to src/util/config/types/GuildConfiguration.ts diff --git a/util/src/config/types/KafkaConfiguration.ts b/src/util/config/types/KafkaConfiguration.ts similarity index 100% rename from util/src/config/types/KafkaConfiguration.ts rename to src/util/config/types/KafkaConfiguration.ts diff --git a/util/src/config/types/LimitConfigurations.ts b/src/util/config/types/LimitConfigurations.ts similarity index 100% rename from util/src/config/types/LimitConfigurations.ts rename to src/util/config/types/LimitConfigurations.ts diff --git a/util/src/config/types/LoginConfiguration.ts b/src/util/config/types/LoginConfiguration.ts similarity index 100% rename from util/src/config/types/LoginConfiguration.ts rename to src/util/config/types/LoginConfiguration.ts diff --git a/util/src/config/types/MetricsConfiguration.ts b/src/util/config/types/MetricsConfiguration.ts similarity index 100% rename from util/src/config/types/MetricsConfiguration.ts rename to src/util/config/types/MetricsConfiguration.ts diff --git a/util/src/config/types/RabbitMQConfiguration.ts b/src/util/config/types/RabbitMQConfiguration.ts similarity index 100% rename from util/src/config/types/RabbitMQConfiguration.ts rename to src/util/config/types/RabbitMQConfiguration.ts diff --git a/util/src/config/types/RegionConfiguration.ts b/src/util/config/types/RegionConfiguration.ts similarity index 100% rename from util/src/config/types/RegionConfiguration.ts rename to src/util/config/types/RegionConfiguration.ts diff --git a/util/src/config/types/RegisterConfiguration.ts b/src/util/config/types/RegisterConfiguration.ts similarity index 100% rename from util/src/config/types/RegisterConfiguration.ts rename to src/util/config/types/RegisterConfiguration.ts diff --git a/util/src/config/types/SecurityConfiguration.ts b/src/util/config/types/SecurityConfiguration.ts similarity index 100% rename from util/src/config/types/SecurityConfiguration.ts rename to src/util/config/types/SecurityConfiguration.ts diff --git a/util/src/config/types/SentryConfiguration.ts b/src/util/config/types/SentryConfiguration.ts similarity index 100% rename from util/src/config/types/SentryConfiguration.ts rename to src/util/config/types/SentryConfiguration.ts diff --git a/util/src/config/types/TemplateConfiguration.ts b/src/util/config/types/TemplateConfiguration.ts similarity index 100% rename from util/src/config/types/TemplateConfiguration.ts rename to src/util/config/types/TemplateConfiguration.ts diff --git a/util/src/config/types/index.ts b/src/util/config/types/index.ts similarity index 100% rename from util/src/config/types/index.ts rename to src/util/config/types/index.ts diff --git a/util/src/config/types/subconfigurations/client/ClientReleaseConfiguration.ts b/src/util/config/types/subconfigurations/client/ClientReleaseConfiguration.ts similarity index 100% rename from util/src/config/types/subconfigurations/client/ClientReleaseConfiguration.ts rename to src/util/config/types/subconfigurations/client/ClientReleaseConfiguration.ts diff --git a/util/src/config/types/subconfigurations/client/index.ts b/src/util/config/types/subconfigurations/client/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/client/index.ts rename to src/util/config/types/subconfigurations/client/index.ts diff --git a/util/src/config/types/subconfigurations/defaults/GuildDefaults.ts b/src/util/config/types/subconfigurations/defaults/GuildDefaults.ts similarity index 100% rename from util/src/config/types/subconfigurations/defaults/GuildDefaults.ts rename to src/util/config/types/subconfigurations/defaults/GuildDefaults.ts diff --git a/util/src/config/types/subconfigurations/defaults/UserDefaults.ts b/src/util/config/types/subconfigurations/defaults/UserDefaults.ts similarity index 100% rename from util/src/config/types/subconfigurations/defaults/UserDefaults.ts rename to src/util/config/types/subconfigurations/defaults/UserDefaults.ts diff --git a/util/src/config/types/subconfigurations/defaults/index.ts b/src/util/config/types/subconfigurations/defaults/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/defaults/index.ts rename to src/util/config/types/subconfigurations/defaults/index.ts diff --git a/util/src/config/types/subconfigurations/guild/AutoJoin.ts b/src/util/config/types/subconfigurations/guild/AutoJoin.ts similarity index 100% rename from util/src/config/types/subconfigurations/guild/AutoJoin.ts rename to src/util/config/types/subconfigurations/guild/AutoJoin.ts diff --git a/util/src/config/types/subconfigurations/guild/Discovery.ts b/src/util/config/types/subconfigurations/guild/Discovery.ts similarity index 100% rename from util/src/config/types/subconfigurations/guild/Discovery.ts rename to src/util/config/types/subconfigurations/guild/Discovery.ts diff --git a/util/src/config/types/subconfigurations/guild/index.ts b/src/util/config/types/subconfigurations/guild/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/guild/index.ts rename to src/util/config/types/subconfigurations/guild/index.ts diff --git a/util/src/config/types/subconfigurations/index.ts b/src/util/config/types/subconfigurations/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/index.ts rename to src/util/config/types/subconfigurations/index.ts diff --git a/util/src/config/types/subconfigurations/kafka/KafkaBroker.ts b/src/util/config/types/subconfigurations/kafka/KafkaBroker.ts similarity index 100% rename from util/src/config/types/subconfigurations/kafka/KafkaBroker.ts rename to src/util/config/types/subconfigurations/kafka/KafkaBroker.ts diff --git a/util/src/config/types/subconfigurations/kafka/index.ts b/src/util/config/types/subconfigurations/kafka/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/kafka/index.ts rename to src/util/config/types/subconfigurations/kafka/index.ts diff --git a/util/src/config/types/subconfigurations/limits/ChannelLimits.ts b/src/util/config/types/subconfigurations/limits/ChannelLimits.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/ChannelLimits.ts rename to src/util/config/types/subconfigurations/limits/ChannelLimits.ts diff --git a/util/src/config/types/subconfigurations/limits/GuildLimits.ts b/src/util/config/types/subconfigurations/limits/GuildLimits.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/GuildLimits.ts rename to src/util/config/types/subconfigurations/limits/GuildLimits.ts diff --git a/util/src/config/types/subconfigurations/limits/MessageLimits.ts b/src/util/config/types/subconfigurations/limits/MessageLimits.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/MessageLimits.ts rename to src/util/config/types/subconfigurations/limits/MessageLimits.ts diff --git a/util/src/config/types/subconfigurations/limits/RateLimits.ts b/src/util/config/types/subconfigurations/limits/RateLimits.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/RateLimits.ts rename to src/util/config/types/subconfigurations/limits/RateLimits.ts diff --git a/util/src/config/types/subconfigurations/limits/UserLimits.ts b/src/util/config/types/subconfigurations/limits/UserLimits.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/UserLimits.ts rename to src/util/config/types/subconfigurations/limits/UserLimits.ts diff --git a/util/src/config/types/subconfigurations/limits/index.ts b/src/util/config/types/subconfigurations/limits/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/index.ts rename to src/util/config/types/subconfigurations/limits/index.ts diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/Auth.ts b/src/util/config/types/subconfigurations/limits/ratelimits/Auth.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/ratelimits/Auth.ts rename to src/util/config/types/subconfigurations/limits/ratelimits/Auth.ts diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts b/src/util/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts rename to src/util/config/types/subconfigurations/limits/ratelimits/RateLimitOptions.ts diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/Route.ts b/src/util/config/types/subconfigurations/limits/ratelimits/Route.ts similarity index 90% rename from util/src/config/types/subconfigurations/limits/ratelimits/Route.ts rename to src/util/config/types/subconfigurations/limits/ratelimits/Route.ts index 3012a8a8d..844b1b9a9 100644 --- a/util/src/config/types/subconfigurations/limits/ratelimits/Route.ts +++ b/src/util/config/types/subconfigurations/limits/ratelimits/Route.ts @@ -1,4 +1,4 @@ -import { AuthRateLimit } from "."; +import { AuthRateLimit } from "./Auth"; import { RateLimitOptions } from "./RateLimitOptions"; export class RouteRateLimit { diff --git a/util/src/config/types/subconfigurations/limits/ratelimits/index.ts b/src/util/config/types/subconfigurations/limits/ratelimits/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/limits/ratelimits/index.ts rename to src/util/config/types/subconfigurations/limits/ratelimits/index.ts diff --git a/util/src/config/types/subconfigurations/region/Region.ts b/src/util/config/types/subconfigurations/region/Region.ts similarity index 100% rename from util/src/config/types/subconfigurations/region/Region.ts rename to src/util/config/types/subconfigurations/region/Region.ts diff --git a/util/src/config/types/subconfigurations/region/index.ts b/src/util/config/types/subconfigurations/region/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/region/index.ts rename to src/util/config/types/subconfigurations/region/index.ts diff --git a/util/src/config/types/subconfigurations/register/DateOfBirth.ts b/src/util/config/types/subconfigurations/register/DateOfBirth.ts similarity index 100% rename from util/src/config/types/subconfigurations/register/DateOfBirth.ts rename to src/util/config/types/subconfigurations/register/DateOfBirth.ts diff --git a/util/src/config/types/subconfigurations/register/Email.ts b/src/util/config/types/subconfigurations/register/Email.ts similarity index 100% rename from util/src/config/types/subconfigurations/register/Email.ts rename to src/util/config/types/subconfigurations/register/Email.ts diff --git a/util/src/config/types/subconfigurations/register/Password.ts b/src/util/config/types/subconfigurations/register/Password.ts similarity index 100% rename from util/src/config/types/subconfigurations/register/Password.ts rename to src/util/config/types/subconfigurations/register/Password.ts diff --git a/util/src/config/types/subconfigurations/register/index.ts b/src/util/config/types/subconfigurations/register/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/register/index.ts rename to src/util/config/types/subconfigurations/register/index.ts diff --git a/util/src/config/types/subconfigurations/security/Captcha.ts b/src/util/config/types/subconfigurations/security/Captcha.ts similarity index 100% rename from util/src/config/types/subconfigurations/security/Captcha.ts rename to src/util/config/types/subconfigurations/security/Captcha.ts diff --git a/util/src/config/types/subconfigurations/security/TwoFactor.ts b/src/util/config/types/subconfigurations/security/TwoFactor.ts similarity index 100% rename from util/src/config/types/subconfigurations/security/TwoFactor.ts rename to src/util/config/types/subconfigurations/security/TwoFactor.ts diff --git a/util/src/config/types/subconfigurations/security/index.ts b/src/util/config/types/subconfigurations/security/index.ts similarity index 100% rename from util/src/config/types/subconfigurations/security/index.ts rename to src/util/config/types/subconfigurations/security/index.ts diff --git a/util/src/dtos/DmChannelDTO.ts b/src/util/dtos/DmChannelDTO.ts similarity index 100% rename from util/src/dtos/DmChannelDTO.ts rename to src/util/dtos/DmChannelDTO.ts diff --git a/util/src/dtos/UserDTO.ts b/src/util/dtos/UserDTO.ts similarity index 100% rename from util/src/dtos/UserDTO.ts rename to src/util/dtos/UserDTO.ts diff --git a/util/src/dtos/index.ts b/src/util/dtos/index.ts similarity index 100% rename from util/src/dtos/index.ts rename to src/util/dtos/index.ts diff --git a/util/src/entities/Application.ts b/src/util/entities/Application.ts similarity index 100% rename from util/src/entities/Application.ts rename to src/util/entities/Application.ts diff --git a/util/src/entities/Attachment.ts b/src/util/entities/Attachment.ts similarity index 100% rename from util/src/entities/Attachment.ts rename to src/util/entities/Attachment.ts diff --git a/util/src/entities/AuditLog.ts b/src/util/entities/AuditLog.ts similarity index 100% rename from util/src/entities/AuditLog.ts rename to src/util/entities/AuditLog.ts diff --git a/util/src/entities/BackupCodes.ts b/src/util/entities/BackupCodes.ts similarity index 100% rename from util/src/entities/BackupCodes.ts rename to src/util/entities/BackupCodes.ts diff --git a/util/src/entities/Ban.ts b/src/util/entities/Ban.ts similarity index 100% rename from util/src/entities/Ban.ts rename to src/util/entities/Ban.ts diff --git a/util/src/entities/BaseClass.ts b/src/util/entities/BaseClass.ts similarity index 100% rename from util/src/entities/BaseClass.ts rename to src/util/entities/BaseClass.ts diff --git a/util/src/entities/Categories.ts b/src/util/entities/Categories.ts similarity index 100% rename from util/src/entities/Categories.ts rename to src/util/entities/Categories.ts diff --git a/util/src/entities/Channel.ts b/src/util/entities/Channel.ts similarity index 100% rename from util/src/entities/Channel.ts rename to src/util/entities/Channel.ts diff --git a/util/src/entities/ClientRelease.ts b/src/util/entities/ClientRelease.ts similarity index 100% rename from util/src/entities/ClientRelease.ts rename to src/util/entities/ClientRelease.ts diff --git a/util/src/entities/Config.ts b/src/util/entities/Config.ts similarity index 100% rename from util/src/entities/Config.ts rename to src/util/entities/Config.ts diff --git a/util/src/entities/ConnectedAccount.ts b/src/util/entities/ConnectedAccount.ts similarity index 100% rename from util/src/entities/ConnectedAccount.ts rename to src/util/entities/ConnectedAccount.ts diff --git a/util/src/entities/Emoji.ts b/src/util/entities/Emoji.ts similarity index 100% rename from util/src/entities/Emoji.ts rename to src/util/entities/Emoji.ts diff --git a/util/src/entities/Encryption.ts b/src/util/entities/Encryption.ts similarity index 100% rename from util/src/entities/Encryption.ts rename to src/util/entities/Encryption.ts diff --git a/util/src/entities/Group.ts b/src/util/entities/Group.ts similarity index 100% rename from util/src/entities/Group.ts rename to src/util/entities/Group.ts diff --git a/util/src/entities/Guild.ts b/src/util/entities/Guild.ts similarity index 100% rename from util/src/entities/Guild.ts rename to src/util/entities/Guild.ts diff --git a/util/src/entities/Invite.ts b/src/util/entities/Invite.ts similarity index 100% rename from util/src/entities/Invite.ts rename to src/util/entities/Invite.ts diff --git a/util/src/entities/Member.ts b/src/util/entities/Member.ts similarity index 100% rename from util/src/entities/Member.ts rename to src/util/entities/Member.ts diff --git a/util/src/entities/Message.ts b/src/util/entities/Message.ts similarity index 100% rename from util/src/entities/Message.ts rename to src/util/entities/Message.ts diff --git a/util/src/entities/Migration.ts b/src/util/entities/Migration.ts similarity index 100% rename from util/src/entities/Migration.ts rename to src/util/entities/Migration.ts diff --git a/util/src/entities/Note.ts b/src/util/entities/Note.ts similarity index 100% rename from util/src/entities/Note.ts rename to src/util/entities/Note.ts diff --git a/util/src/entities/RateLimit.ts b/src/util/entities/RateLimit.ts similarity index 100% rename from util/src/entities/RateLimit.ts rename to src/util/entities/RateLimit.ts diff --git a/util/src/entities/ReadState.ts b/src/util/entities/ReadState.ts similarity index 100% rename from util/src/entities/ReadState.ts rename to src/util/entities/ReadState.ts diff --git a/util/src/entities/Recipient.ts b/src/util/entities/Recipient.ts similarity index 100% rename from util/src/entities/Recipient.ts rename to src/util/entities/Recipient.ts diff --git a/util/src/entities/Relationship.ts b/src/util/entities/Relationship.ts similarity index 100% rename from util/src/entities/Relationship.ts rename to src/util/entities/Relationship.ts diff --git a/util/src/entities/Role.ts b/src/util/entities/Role.ts similarity index 100% rename from util/src/entities/Role.ts rename to src/util/entities/Role.ts diff --git a/util/src/entities/Session.ts b/src/util/entities/Session.ts similarity index 100% rename from util/src/entities/Session.ts rename to src/util/entities/Session.ts diff --git a/util/src/entities/Sticker.ts b/src/util/entities/Sticker.ts similarity index 100% rename from util/src/entities/Sticker.ts rename to src/util/entities/Sticker.ts diff --git a/util/src/entities/StickerPack.ts b/src/util/entities/StickerPack.ts similarity index 100% rename from util/src/entities/StickerPack.ts rename to src/util/entities/StickerPack.ts diff --git a/util/src/entities/Team.ts b/src/util/entities/Team.ts similarity index 100% rename from util/src/entities/Team.ts rename to src/util/entities/Team.ts diff --git a/util/src/entities/TeamMember.ts b/src/util/entities/TeamMember.ts similarity index 100% rename from util/src/entities/TeamMember.ts rename to src/util/entities/TeamMember.ts diff --git a/util/src/entities/Template.ts b/src/util/entities/Template.ts similarity index 100% rename from util/src/entities/Template.ts rename to src/util/entities/Template.ts diff --git a/util/src/entities/User.ts b/src/util/entities/User.ts similarity index 100% rename from util/src/entities/User.ts rename to src/util/entities/User.ts diff --git a/util/src/entities/UserGroup.ts b/src/util/entities/UserGroup.ts similarity index 100% rename from util/src/entities/UserGroup.ts rename to src/util/entities/UserGroup.ts diff --git a/util/src/entities/UserSettings.ts b/src/util/entities/UserSettings.ts similarity index 100% rename from util/src/entities/UserSettings.ts rename to src/util/entities/UserSettings.ts diff --git a/util/src/entities/VoiceState.ts b/src/util/entities/VoiceState.ts similarity index 100% rename from util/src/entities/VoiceState.ts rename to src/util/entities/VoiceState.ts diff --git a/util/src/entities/Webhook.ts b/src/util/entities/Webhook.ts similarity index 100% rename from util/src/entities/Webhook.ts rename to src/util/entities/Webhook.ts diff --git a/util/src/entities/index.ts b/src/util/entities/index.ts similarity index 100% rename from util/src/entities/index.ts rename to src/util/entities/index.ts diff --git a/util/src/index.ts b/src/util/index.ts similarity index 76% rename from util/src/index.ts rename to src/util/index.ts index daeffd698..d944dc49f 100644 --- a/util/src/index.ts +++ b/src/util/index.ts @@ -1,6 +1,7 @@ import "reflect-metadata"; export * from "./util/index"; +export * from "./config/index"; export * from "./interfaces/index"; export * from "./entities/index"; export * from "./dtos/index"; diff --git a/util/src/interfaces/Activity.ts b/src/util/interfaces/Activity.ts similarity index 100% rename from util/src/interfaces/Activity.ts rename to src/util/interfaces/Activity.ts diff --git a/util/src/interfaces/Event.ts b/src/util/interfaces/Event.ts similarity index 100% rename from util/src/interfaces/Event.ts rename to src/util/interfaces/Event.ts diff --git a/util/src/interfaces/Interaction.ts b/src/util/interfaces/Interaction.ts similarity index 100% rename from util/src/interfaces/Interaction.ts rename to src/util/interfaces/Interaction.ts diff --git a/util/src/interfaces/Presence.ts b/src/util/interfaces/Presence.ts similarity index 100% rename from util/src/interfaces/Presence.ts rename to src/util/interfaces/Presence.ts diff --git a/util/src/interfaces/Status.ts b/src/util/interfaces/Status.ts similarity index 100% rename from util/src/interfaces/Status.ts rename to src/util/interfaces/Status.ts diff --git a/util/src/interfaces/index.ts b/src/util/interfaces/index.ts similarity index 100% rename from util/src/interfaces/index.ts rename to src/util/interfaces/index.ts diff --git a/util/src/migrations/mariadb/1659901151025-initial.ts b/src/util/migrations/mariadb/1659901151025-initial.ts similarity index 100% rename from util/src/migrations/mariadb/1659901151025-initial.ts rename to src/util/migrations/mariadb/1659901151025-initial.ts diff --git a/util/src/migrations/mariadb/1659921859145-premium_since_as_date.ts b/src/util/migrations/mariadb/1659921859145-premium_since_as_date.ts similarity index 100% rename from util/src/migrations/mariadb/1659921859145-premium_since_as_date.ts rename to src/util/migrations/mariadb/1659921859145-premium_since_as_date.ts diff --git a/util/src/migrations/mariadb/1660258393551-CodeCleanup3.ts b/src/util/migrations/mariadb/1660258393551-CodeCleanup3.ts similarity index 100% rename from util/src/migrations/mariadb/1660258393551-CodeCleanup3.ts rename to src/util/migrations/mariadb/1660258393551-CodeCleanup3.ts diff --git a/util/src/migrations/mariadb/1660260587556-CodeCleanup4.ts b/src/util/migrations/mariadb/1660260587556-CodeCleanup4.ts similarity index 100% rename from util/src/migrations/mariadb/1660260587556-CodeCleanup4.ts rename to src/util/migrations/mariadb/1660260587556-CodeCleanup4.ts diff --git a/util/src/migrations/mariadb/1660265930624-CodeCleanup5.ts b/src/util/migrations/mariadb/1660265930624-CodeCleanup5.ts similarity index 100% rename from util/src/migrations/mariadb/1660265930624-CodeCleanup5.ts rename to src/util/migrations/mariadb/1660265930624-CodeCleanup5.ts diff --git a/util/src/migrations/postgres/1659899687168-initial.ts b/src/util/migrations/postgres/1659899687168-initial.ts similarity index 100% rename from util/src/migrations/postgres/1659899687168-initial.ts rename to src/util/migrations/postgres/1659899687168-initial.ts diff --git a/util/src/migrations/postgres/1659921826567-premium_since_as_date.ts b/src/util/migrations/postgres/1659921826567-premium_since_as_date.ts similarity index 100% rename from util/src/migrations/postgres/1659921826567-premium_since_as_date.ts rename to src/util/migrations/postgres/1659921826567-premium_since_as_date.ts diff --git a/util/src/migrations/postgres/1660257815436-CodeCleanup2.ts b/src/util/migrations/postgres/1660257815436-CodeCleanup2.ts similarity index 100% rename from util/src/migrations/postgres/1660257815436-CodeCleanup2.ts rename to src/util/migrations/postgres/1660257815436-CodeCleanup2.ts diff --git a/util/src/migrations/postgres/1660258372154-CodeCleanup3.ts b/src/util/migrations/postgres/1660258372154-CodeCleanup3.ts similarity index 100% rename from util/src/migrations/postgres/1660258372154-CodeCleanup3.ts rename to src/util/migrations/postgres/1660258372154-CodeCleanup3.ts diff --git a/util/src/migrations/postgres/1660260565996-CodeCleanup4.ts b/src/util/migrations/postgres/1660260565996-CodeCleanup4.ts similarity index 100% rename from util/src/migrations/postgres/1660260565996-CodeCleanup4.ts rename to src/util/migrations/postgres/1660260565996-CodeCleanup4.ts diff --git a/util/src/migrations/postgres/1660265907544-CodeCleanup5.ts b/src/util/migrations/postgres/1660265907544-CodeCleanup5.ts similarity index 100% rename from util/src/migrations/postgres/1660265907544-CodeCleanup5.ts rename to src/util/migrations/postgres/1660265907544-CodeCleanup5.ts diff --git a/util/src/migrations/sqlite/1659899662635-initial.ts b/src/util/migrations/sqlite/1659899662635-initial.ts similarity index 100% rename from util/src/migrations/sqlite/1659899662635-initial.ts rename to src/util/migrations/sqlite/1659899662635-initial.ts diff --git a/util/src/migrations/sqlite/1659921722863-premium_since_as_date.ts b/src/util/migrations/sqlite/1659921722863-premium_since_as_date.ts similarity index 100% rename from util/src/migrations/sqlite/1659921722863-premium_since_as_date.ts rename to src/util/migrations/sqlite/1659921722863-premium_since_as_date.ts diff --git a/util/src/migrations/sqlite/1660257576211-CodeCleanup1.ts b/src/util/migrations/sqlite/1660257576211-CodeCleanup1.ts similarity index 100% rename from util/src/migrations/sqlite/1660257576211-CodeCleanup1.ts rename to src/util/migrations/sqlite/1660257576211-CodeCleanup1.ts diff --git a/util/src/migrations/sqlite/1660257795259-CodeCleanup2.ts b/src/util/migrations/sqlite/1660257795259-CodeCleanup2.ts similarity index 100% rename from util/src/migrations/sqlite/1660257795259-CodeCleanup2.ts rename to src/util/migrations/sqlite/1660257795259-CodeCleanup2.ts diff --git a/util/src/migrations/sqlite/1660258351379-CodeCleanup3.ts b/src/util/migrations/sqlite/1660258351379-CodeCleanup3.ts similarity index 100% rename from util/src/migrations/sqlite/1660258351379-CodeCleanup3.ts rename to src/util/migrations/sqlite/1660258351379-CodeCleanup3.ts diff --git a/util/src/migrations/sqlite/1660260672914-CodeCleanup4.ts b/src/util/migrations/sqlite/1660260672914-CodeCleanup4.ts similarity index 100% rename from util/src/migrations/sqlite/1660260672914-CodeCleanup4.ts rename to src/util/migrations/sqlite/1660260672914-CodeCleanup4.ts diff --git a/util/src/schemas/ActivitySchema.ts b/src/util/schemas/ActivitySchema.ts similarity index 100% rename from util/src/schemas/ActivitySchema.ts rename to src/util/schemas/ActivitySchema.ts diff --git a/util/src/schemas/BanCreateSchema.ts b/src/util/schemas/BanCreateSchema.ts similarity index 100% rename from util/src/schemas/BanCreateSchema.ts rename to src/util/schemas/BanCreateSchema.ts diff --git a/util/src/schemas/BanModeratorSchema.ts b/src/util/schemas/BanModeratorSchema.ts similarity index 100% rename from util/src/schemas/BanModeratorSchema.ts rename to src/util/schemas/BanModeratorSchema.ts diff --git a/util/src/schemas/BanRegistrySchema.ts b/src/util/schemas/BanRegistrySchema.ts similarity index 100% rename from util/src/schemas/BanRegistrySchema.ts rename to src/util/schemas/BanRegistrySchema.ts diff --git a/util/src/schemas/BulkDeleteSchema.ts b/src/util/schemas/BulkDeleteSchema.ts similarity index 100% rename from util/src/schemas/BulkDeleteSchema.ts rename to src/util/schemas/BulkDeleteSchema.ts diff --git a/util/src/schemas/ChannelModifySchema.ts b/src/util/schemas/ChannelModifySchema.ts similarity index 100% rename from util/src/schemas/ChannelModifySchema.ts rename to src/util/schemas/ChannelModifySchema.ts diff --git a/util/src/schemas/ChannelPermissionOverwriteSchema.ts b/src/util/schemas/ChannelPermissionOverwriteSchema.ts similarity index 100% rename from util/src/schemas/ChannelPermissionOverwriteSchema.ts rename to src/util/schemas/ChannelPermissionOverwriteSchema.ts diff --git a/util/src/schemas/ChannelReorderSchema.ts b/src/util/schemas/ChannelReorderSchema.ts similarity index 100% rename from util/src/schemas/ChannelReorderSchema.ts rename to src/util/schemas/ChannelReorderSchema.ts diff --git a/util/src/schemas/DmChannelCreateSchema.ts b/src/util/schemas/DmChannelCreateSchema.ts similarity index 100% rename from util/src/schemas/DmChannelCreateSchema.ts rename to src/util/schemas/DmChannelCreateSchema.ts diff --git a/util/src/schemas/EmojiCreateSchema.ts b/src/util/schemas/EmojiCreateSchema.ts similarity index 100% rename from util/src/schemas/EmojiCreateSchema.ts rename to src/util/schemas/EmojiCreateSchema.ts diff --git a/util/src/schemas/EmojiModifySchema.ts b/src/util/schemas/EmojiModifySchema.ts similarity index 100% rename from util/src/schemas/EmojiModifySchema.ts rename to src/util/schemas/EmojiModifySchema.ts diff --git a/util/src/schemas/GuildCreateSchema.ts b/src/util/schemas/GuildCreateSchema.ts similarity index 100% rename from util/src/schemas/GuildCreateSchema.ts rename to src/util/schemas/GuildCreateSchema.ts diff --git a/util/src/schemas/GuildTemplateCreateSchema.ts b/src/util/schemas/GuildTemplateCreateSchema.ts similarity index 100% rename from util/src/schemas/GuildTemplateCreateSchema.ts rename to src/util/schemas/GuildTemplateCreateSchema.ts diff --git a/util/src/schemas/GuildUpdateSchema.ts b/src/util/schemas/GuildUpdateSchema.ts similarity index 100% rename from util/src/schemas/GuildUpdateSchema.ts rename to src/util/schemas/GuildUpdateSchema.ts diff --git a/util/src/schemas/GuildUpdateWelcomeScreenSchema.ts b/src/util/schemas/GuildUpdateWelcomeScreenSchema.ts similarity index 100% rename from util/src/schemas/GuildUpdateWelcomeScreenSchema.ts rename to src/util/schemas/GuildUpdateWelcomeScreenSchema.ts diff --git a/util/src/schemas/IdentifySchema.ts b/src/util/schemas/IdentifySchema.ts similarity index 93% rename from util/src/schemas/IdentifySchema.ts rename to src/util/schemas/IdentifySchema.ts index 8f95c6a0c..f3d60fb35 100644 --- a/util/src/schemas/IdentifySchema.ts +++ b/src/util/schemas/IdentifySchema.ts @@ -2,7 +2,7 @@ import { ActivitySchema } from "./ActivitySchema"; export const IdentifySchema = { token: String, - $intents: BigInt, // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt + $intents: String, // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt $properties: Object, // { // // discord uses $ in the property key for bots, so we need to double prefix it, because instanceOf treats $ (prefix) as a optional key @@ -33,7 +33,7 @@ export const IdentifySchema = { $presence: ActivitySchema, $compress: Boolean, $large_threshold: Number, - $shard: [BigInt, BigInt], + $shard: [Number, Number], $guild_subscriptions: Boolean, $capabilities: Number, $client_state: { @@ -71,11 +71,11 @@ export interface IdentifySchema { client_version?: string; system_locale?: string; }; - intents?: bigint; // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt + intents?: string; // discord uses a Integer for bitfields we use bigints tho. | instanceOf will automatically convert the Number to a BigInt presence?: ActivitySchema; compress?: boolean; large_threshold?: number; - shard?: [bigint, bigint]; + shard?: [number, number]; guild_subscriptions?: boolean; capabilities?: number; client_state?: { diff --git a/util/src/schemas/InviteCreateSchema.ts b/src/util/schemas/InviteCreateSchema.ts similarity index 100% rename from util/src/schemas/InviteCreateSchema.ts rename to src/util/schemas/InviteCreateSchema.ts diff --git a/util/src/schemas/LazyRequestSchema.ts b/src/util/schemas/LazyRequestSchema.ts similarity index 100% rename from util/src/schemas/LazyRequestSchema.ts rename to src/util/schemas/LazyRequestSchema.ts diff --git a/util/src/schemas/LoginSchema.ts b/src/util/schemas/LoginSchema.ts similarity index 100% rename from util/src/schemas/LoginSchema.ts rename to src/util/schemas/LoginSchema.ts diff --git a/util/src/schemas/MemberChangeSchema.ts b/src/util/schemas/MemberChangeSchema.ts similarity index 100% rename from util/src/schemas/MemberChangeSchema.ts rename to src/util/schemas/MemberChangeSchema.ts diff --git a/util/src/schemas/MemberNickChangeSchema.ts b/src/util/schemas/MemberNickChangeSchema.ts similarity index 100% rename from util/src/schemas/MemberNickChangeSchema.ts rename to src/util/schemas/MemberNickChangeSchema.ts diff --git a/util/src/schemas/MessageAcknowledgeSchema.ts b/src/util/schemas/MessageAcknowledgeSchema.ts similarity index 100% rename from util/src/schemas/MessageAcknowledgeSchema.ts rename to src/util/schemas/MessageAcknowledgeSchema.ts diff --git a/util/src/schemas/MessageCreateSchema.ts b/src/util/schemas/MessageCreateSchema.ts similarity index 100% rename from util/src/schemas/MessageCreateSchema.ts rename to src/util/schemas/MessageCreateSchema.ts diff --git a/util/src/schemas/MfaCodesSchema.ts b/src/util/schemas/MfaCodesSchema.ts similarity index 100% rename from util/src/schemas/MfaCodesSchema.ts rename to src/util/schemas/MfaCodesSchema.ts diff --git a/util/src/schemas/ModifyGuildStickerSchema.ts b/src/util/schemas/ModifyGuildStickerSchema.ts similarity index 100% rename from util/src/schemas/ModifyGuildStickerSchema.ts rename to src/util/schemas/ModifyGuildStickerSchema.ts diff --git a/util/src/schemas/PruneSchema.ts b/src/util/schemas/PruneSchema.ts similarity index 100% rename from util/src/schemas/PruneSchema.ts rename to src/util/schemas/PruneSchema.ts diff --git a/util/src/schemas/PurgeSchema.ts b/src/util/schemas/PurgeSchema.ts similarity index 100% rename from util/src/schemas/PurgeSchema.ts rename to src/util/schemas/PurgeSchema.ts diff --git a/util/src/schemas/RegisterSchema.ts b/src/util/schemas/RegisterSchema.ts similarity index 100% rename from util/src/schemas/RegisterSchema.ts rename to src/util/schemas/RegisterSchema.ts diff --git a/util/src/schemas/RelationshipPostSchema.ts b/src/util/schemas/RelationshipPostSchema.ts similarity index 100% rename from util/src/schemas/RelationshipPostSchema.ts rename to src/util/schemas/RelationshipPostSchema.ts diff --git a/util/src/schemas/RelationshipPutSchema.ts b/src/util/schemas/RelationshipPutSchema.ts similarity index 100% rename from util/src/schemas/RelationshipPutSchema.ts rename to src/util/schemas/RelationshipPutSchema.ts diff --git a/util/src/schemas/RoleModifySchema.ts b/src/util/schemas/RoleModifySchema.ts similarity index 100% rename from util/src/schemas/RoleModifySchema.ts rename to src/util/schemas/RoleModifySchema.ts diff --git a/util/src/schemas/RolePositionUpdateSchema.ts b/src/util/schemas/RolePositionUpdateSchema.ts similarity index 100% rename from util/src/schemas/RolePositionUpdateSchema.ts rename to src/util/schemas/RolePositionUpdateSchema.ts diff --git a/util/src/schemas/TemplateCreateSchema.ts b/src/util/schemas/TemplateCreateSchema.ts similarity index 100% rename from util/src/schemas/TemplateCreateSchema.ts rename to src/util/schemas/TemplateCreateSchema.ts diff --git a/util/src/schemas/TemplateModifySchema.ts b/src/util/schemas/TemplateModifySchema.ts similarity index 100% rename from util/src/schemas/TemplateModifySchema.ts rename to src/util/schemas/TemplateModifySchema.ts diff --git a/util/src/schemas/TotpDisableSchema.ts b/src/util/schemas/TotpDisableSchema.ts similarity index 100% rename from util/src/schemas/TotpDisableSchema.ts rename to src/util/schemas/TotpDisableSchema.ts diff --git a/util/src/schemas/TotpEnableSchema.ts b/src/util/schemas/TotpEnableSchema.ts similarity index 100% rename from util/src/schemas/TotpEnableSchema.ts rename to src/util/schemas/TotpEnableSchema.ts diff --git a/util/src/schemas/TotpSchema.ts b/src/util/schemas/TotpSchema.ts similarity index 100% rename from util/src/schemas/TotpSchema.ts rename to src/util/schemas/TotpSchema.ts diff --git a/util/src/schemas/UserModifySchema.ts b/src/util/schemas/UserModifySchema.ts similarity index 100% rename from util/src/schemas/UserModifySchema.ts rename to src/util/schemas/UserModifySchema.ts diff --git a/util/src/schemas/UserSettingsSchema.ts b/src/util/schemas/UserSettingsSchema.ts similarity index 100% rename from util/src/schemas/UserSettingsSchema.ts rename to src/util/schemas/UserSettingsSchema.ts diff --git a/util/src/schemas/VanityUrlSchema.ts b/src/util/schemas/VanityUrlSchema.ts similarity index 100% rename from util/src/schemas/VanityUrlSchema.ts rename to src/util/schemas/VanityUrlSchema.ts diff --git a/util/src/schemas/VoiceStateUpdateSchema.ts b/src/util/schemas/VoiceStateUpdateSchema.ts similarity index 100% rename from util/src/schemas/VoiceStateUpdateSchema.ts rename to src/util/schemas/VoiceStateUpdateSchema.ts diff --git a/util/src/schemas/WebhookCreateSchema.ts b/src/util/schemas/WebhookCreateSchema.ts similarity index 100% rename from util/src/schemas/WebhookCreateSchema.ts rename to src/util/schemas/WebhookCreateSchema.ts diff --git a/util/src/schemas/WidgetModifySchema.ts b/src/util/schemas/WidgetModifySchema.ts similarity index 100% rename from util/src/schemas/WidgetModifySchema.ts rename to src/util/schemas/WidgetModifySchema.ts diff --git a/util/src/schemas/index.ts b/src/util/schemas/index.ts similarity index 100% rename from util/src/schemas/index.ts rename to src/util/schemas/index.ts diff --git a/util/src/util/ApiError.ts b/src/util/util/ApiError.ts similarity index 100% rename from util/src/util/ApiError.ts rename to src/util/util/ApiError.ts diff --git a/util/src/util/Array.ts b/src/util/util/Array.ts similarity index 100% rename from util/src/util/Array.ts rename to src/util/util/Array.ts diff --git a/util/src/util/AutoUpdate.ts b/src/util/util/AutoUpdate.ts similarity index 100% rename from util/src/util/AutoUpdate.ts rename to src/util/util/AutoUpdate.ts diff --git a/util/src/util/BitField.ts b/src/util/util/BitField.ts similarity index 100% rename from util/src/util/BitField.ts rename to src/util/util/BitField.ts diff --git a/util/src/util/Categories.ts b/src/util/util/Categories.ts similarity index 100% rename from util/src/util/Categories.ts rename to src/util/util/Categories.ts diff --git a/util/src/util/Config.ts b/src/util/util/Config.ts similarity index 100% rename from util/src/util/Config.ts rename to src/util/util/Config.ts diff --git a/util/src/util/Constants.ts b/src/util/util/Constants.ts similarity index 100% rename from util/src/util/Constants.ts rename to src/util/util/Constants.ts diff --git a/util/src/util/Database.ts b/src/util/util/Database.ts similarity index 100% rename from util/src/util/Database.ts rename to src/util/util/Database.ts diff --git a/util/src/util/Email.ts b/src/util/util/Email.ts similarity index 100% rename from util/src/util/Email.ts rename to src/util/util/Email.ts diff --git a/util/src/util/Event.ts b/src/util/util/Event.ts similarity index 100% rename from util/src/util/Event.ts rename to src/util/util/Event.ts diff --git a/util/src/util/FieldError.ts b/src/util/util/FieldError.ts similarity index 100% rename from util/src/util/FieldError.ts rename to src/util/util/FieldError.ts diff --git a/util/src/util/Intents.ts b/src/util/util/Intents.ts similarity index 100% rename from util/src/util/Intents.ts rename to src/util/util/Intents.ts diff --git a/util/src/util/InvisibleCharacters.ts b/src/util/util/InvisibleCharacters.ts similarity index 100% rename from util/src/util/InvisibleCharacters.ts rename to src/util/util/InvisibleCharacters.ts diff --git a/util/src/util/MFA.ts b/src/util/util/MFA.ts similarity index 100% rename from util/src/util/MFA.ts rename to src/util/util/MFA.ts diff --git a/util/src/util/MessageFlags.ts b/src/util/util/MessageFlags.ts similarity index 100% rename from util/src/util/MessageFlags.ts rename to src/util/util/MessageFlags.ts diff --git a/util/src/util/Permissions.ts b/src/util/util/Permissions.ts similarity index 100% rename from util/src/util/Permissions.ts rename to src/util/util/Permissions.ts diff --git a/util/src/util/RabbitMQ.ts b/src/util/util/RabbitMQ.ts similarity index 100% rename from util/src/util/RabbitMQ.ts rename to src/util/util/RabbitMQ.ts diff --git a/util/src/util/Regex.ts b/src/util/util/Regex.ts similarity index 100% rename from util/src/util/Regex.ts rename to src/util/util/Regex.ts diff --git a/util/src/util/Rights.ts b/src/util/util/Rights.ts similarity index 100% rename from util/src/util/Rights.ts rename to src/util/util/Rights.ts diff --git a/util/src/util/Snowflake.ts b/src/util/util/Snowflake.ts similarity index 100% rename from util/src/util/Snowflake.ts rename to src/util/util/Snowflake.ts diff --git a/util/src/util/String.ts b/src/util/util/String.ts similarity index 100% rename from util/src/util/String.ts rename to src/util/util/String.ts diff --git a/util/src/util/Token.ts b/src/util/util/Token.ts similarity index 100% rename from util/src/util/Token.ts rename to src/util/util/Token.ts diff --git a/util/src/util/TraverseDirectory.ts b/src/util/util/TraverseDirectory.ts similarity index 100% rename from util/src/util/TraverseDirectory.ts rename to src/util/util/TraverseDirectory.ts diff --git a/util/src/util/cdn.ts b/src/util/util/cdn.ts similarity index 100% rename from util/src/util/cdn.ts rename to src/util/util/cdn.ts diff --git a/util/src/util/imports/Checks.ts b/src/util/util/imports/Checks.ts similarity index 100% rename from util/src/util/imports/Checks.ts rename to src/util/util/imports/Checks.ts diff --git a/util/src/util/imports/HTTPError.ts b/src/util/util/imports/HTTPError.ts similarity index 100% rename from util/src/util/imports/HTTPError.ts rename to src/util/util/imports/HTTPError.ts diff --git a/util/src/util/imports/OrmUtils.ts b/src/util/util/imports/OrmUtils.ts similarity index 100% rename from util/src/util/imports/OrmUtils.ts rename to src/util/util/imports/OrmUtils.ts diff --git a/util/src/util/imports/index.ts b/src/util/util/imports/index.ts similarity index 100% rename from util/src/util/imports/index.ts rename to src/util/util/imports/index.ts diff --git a/util/src/util/index.ts b/src/util/util/index.ts similarity index 100% rename from util/src/util/index.ts rename to src/util/util/index.ts diff --git a/util/tests/User.test.js b/tests/User.test.js similarity index 100% rename from util/tests/User.test.js rename to tests/User.test.js diff --git a/cdn/tests/antman.jpg b/tests/antman.jpg similarity index 100% rename from cdn/tests/antman.jpg rename to tests/antman.jpg diff --git a/cdn/tests/cdn_endpoints.test.js b/tests/cdn_endpoints.test.js similarity index 100% rename from cdn/tests/cdn_endpoints.test.js rename to tests/cdn_endpoints.test.js diff --git a/cdn/tests/filestorage.test.js b/tests/filestorage.test.js similarity index 100% rename from cdn/tests/filestorage.test.js rename to tests/filestorage.test.js diff --git a/api/tests/routes.test.ts b/tests/routes.test.ts similarity index 100% rename from api/tests/routes.test.ts rename to tests/routes.test.ts diff --git a/api/tests/routes/auth/login.test.js b/tests/routes/auth/login.test.js similarity index 100% rename from api/tests/routes/auth/login.test.js rename to tests/routes/auth/login.test.js diff --git a/api/tests/routes/auth/register.test.js b/tests/routes/auth/register.test.js similarity index 100% rename from api/tests/routes/auth/register.test.js rename to tests/routes/auth/register.test.js diff --git a/api/tests/routes/ping.test.js b/tests/routes/ping.test.js similarity index 100% rename from api/tests/routes/ping.test.js rename to tests/routes/ping.test.js diff --git a/util/tests/setupJest.js b/tests/setupJest.js similarity index 100% rename from util/tests/setupJest.js rename to tests/setupJest.js diff --git a/bundle/tsconfig.json b/tsconfig.json similarity index 92% rename from bundle/tsconfig.json rename to tsconfig.json index 87f6578ac..b9e17f299 100644 --- a/bundle/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["dist/**/*.ts"], + "include": ["src/**/*.ts"], "exclude": [], "compilerOptions": { @@ -18,7 +18,7 @@ "sourceMap": true /* Generates corresponding '.map' file. */, // "outFile": "./", /* Concatenate and emit output to single file. */ "outDir": "./dist/" /* Redirect output structure to the directory. */, - "rootDir": "./dist/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + "rootDir": "./src/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, // "composite": true, /* Enable project compilation */ // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ // "removeComments": true, /* Do not emit comments to output. */ @@ -71,12 +71,12 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "resolveJsonModule": true, - "baseUrl": "./dist/", + "baseUrl": "./src/", "paths": { - "@fosscord/api": ["api/src/index"], - "@fosscord/gateway": ["gateway/src/index"], - "@fosscord/cdn": ["cdn/src/index"], - "@fosscord/util": ["util/src/index"] + "@fosscord/api": ["./api/index"], + "@fosscord/gateway": ["./gateway/index"], + "@fosscord/cdn": ["./cdn/index"], + "@fosscord/util": ["./util/index"] }, "plugins": [{ "transform": "@ovos-media/ts-transform-paths" }], "noEmitHelpers": true, diff --git a/util/.gitignore b/util/.gitignore deleted file mode 100644 index 768a04259..000000000 --- a/util/.gitignore +++ /dev/null @@ -1,110 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -yarn.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port -.DS_Store - -# Compiled TypeScript code -dist/ -database.db \ No newline at end of file diff --git a/util/.npmignore b/util/.npmignore deleted file mode 100644 index 05a9d0cf2..000000000 --- a/util/.npmignore +++ /dev/null @@ -1 +0,0 @@ -!dist/ \ No newline at end of file diff --git a/util/.prettierrc b/util/.prettierrc deleted file mode 100644 index d569c548e..000000000 --- a/util/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "tabWidth": 4, - "useTabs": true, - "printWidth": 120 -} diff --git a/util/.vscode/launch.json b/util/.vscode/launch.json deleted file mode 100644 index 524622d13..000000000 --- a/util/.vscode/launch.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "sourceMaps": true, - "type": "node", - "request": "launch", - "name": "Launch Util", - "program": "${workspaceFolder}/dist/index.js", - "preLaunchTask": "tsc: build - tsconfig.json", - "outFiles": ["${workspaceFolder}/dist/**/*.js"] - }, - { - "name": "Debug Jest Tests", - "type": "node", - "request": "launch", - "runtimeArgs": ["--inspect-brk", "${workspaceRoot}/node_modules/jest/bin/jest.js", "--runInBand"], - "preLaunchTask": "tsc: build - tsconfig.json", - "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen", - "port": 9229 - } - ] -} diff --git a/util/README.md b/util/README.md deleted file mode 100644 index 1934df2a7..000000000 --- a/util/README.md +++ /dev/null @@ -1,29 +0,0 @@ -

- -

-

Fosscord server util

- -

- - - - - - - - -

- -## [About](https://fosscord.com) - -Fosscord is a free open source selfhostable chat, voice and video discord-compatible platform. - -Fosscord server util contains all necessary logic that is shared between the [api](https://github.com/fosscord/fosscord-server/tree/master/api), [gateway](https://github.com/fosscord/fosscord-server/tree/master/gateway) and [cdn](https://github.com/fosscord/fosscord-server/tree/master/cdn). - -It contains all mongoose database models and utility functions. - -## Installation - -```bash -npm install @fosscord/server-util -``` diff --git a/util/package-lock.json b/util/package-lock.json deleted file mode 100644 index 04b2857b792f34bf4fd4e060c1603cbc4aa21385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 460763 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

H=+_-1@OInQ~GFPQT37|fN$8TJZFLi7tB;s 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 j7y4@4xr%c08u1_7S`^KbtbZh+9D diff --git a/util/package.json b/util/package.json deleted file mode 100644 index 01c3d9f20..000000000 --- a/util/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "@fosscord/util", - "version": "1.0.0", - "description": "Utility functions for the all server repositories", - "main": "dist/index.js", - "types": "src/index.ts", - "scripts": { - "start": "npm run build && node dist/", - "test": "npm run build && npx jest", - "postinstall": "npm run build", - "build": "npx tsc -p .", - "typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/fosscord/fosscord-server.git" - }, - "keywords": [ - "discord", - "fosscord", - "fosscord-server", - "discord open source", - "discord-open-source" - ], - "author": "Fosscord", - "license": "AGPL-3.0-only", - "bugs": { - "url": "https://github.com/fosscord/fosscord-server/issues" - }, - "homepage": "https://docs.fosscord.com/", - "devDependencies": { - "@types/amqplib": "^0.8.1", - "@types/jsonwebtoken": "^8.5.8", - "@types/multer": "^1.4.7", - "@types/node": "^18.0.6", - "jest": "^28.1.3", - "ts-node": "^10.2.1" - }, - "dependencies": { - "@types/node-fetch": "^2.6.2", - "amqplib": "^0.10.0", - "form-data": "^4.0.0", - "jsonwebtoken": "^8.5.1", - "lambert-server": "^1.2.12", - "missing-native-js-functions": "^1.2.18", - "multer": "^1.4.5-lts.1", - "node-fetch": "^2.6.7", - "picocolors": "^1.0.0", - "proxy-agent": "^5.0.0", - "reflect-metadata": "^0.1.13", - "typeorm": "^0.3.7", - "typescript": "^4.7.4" - }, - "jest": { - "setupFilesAfterEnv": [ - "./tests/setupJest.js" - ] - } -} diff --git a/util/tsconfig.json b/util/tsconfig.json deleted file mode 100644 index a5d5ae05f..000000000 --- a/util/tsconfig.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "include": ["src/**/*.ts"], - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - "incremental": false /* Enable incremental compilation */, - "target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - "lib": ["ES2021"] /* Specify library files to be included in the compilation. */, - "allowJs": true /* Allow javascript files to be compiled. */, - "checkJs": true /* Report errors in .js files. */, - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - "declarationMap": false /* Generates a sourcemap for each corresponding '.d.ts' file. */, - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist/" /* Redirect output structure to the directory. */, - "rootDir": "./src/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - "strictNullChecks": true /* Enable strict null checks. */, - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": false /* Enable strict checking of property initialization in classes. */, - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": ["node"] /* Type declaration files to be included in compilation. */, - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "resolveJsonModule": true - } -} diff --git a/webrtc/.DS_Store b/webrtc/.DS_Store deleted file mode 100644 index bfb0a4165ee92c5850a98ab16b2c02a383ec7a7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5S<||EYYN-px6^2asv~Y6XXKOiGU)JBM`kiI1IPo2AqgDAHb1CN(y)* z%|7qUyj}Sf9*>CV@@caWnTtpbHeE23 zRDcRlfiDH@`%vJ9P2v#fpAIZO0s!qd-VM(_O8|=nfKB2MhzLxB3Jj{|h@nA8ykuRI zI0Ob=)NjT)d9&t(qJBH##mhyTK(17P3LGjhi|yR{|26!F`Tvl_9TlJge@X$Z+Eu&6 zD`jt;yqxvg0>6QO8fv{9i??E+w_ZG%D~L3VZ+r CMmVVi6$34h~<3Hb6of+CZ9_{_V~bk`N^oOZVL9 znd-ToxlF{meW{O%>Cu(oN4p9e+T!jXj+o4!AIry(t9a*sObD*D=Fe4 zeu==(n&Q!sOwj@#woONbj|`SSu)E;VUw?Xg%Yj$$e`*}?Bx@w_Sdn;9vw}JGrcF3J zcqoX5s0pIROEGEiR22n@wRFdTv;9_iC*I5Wuvi2-iMhZl`XR?j9H|e%TqS?)pYI)`Ej&s~OZAMjw zkPV~X;g9l!9?p>3abI^F`n+zGo%R}=57!LUR_jTLgp*YWC_LbRP$ZT}rC(o-b%7ai^k%ej6@)yL-igjU$DgdP$cO? zvp&KnzAUka%@n~VgEeXLL)-2jIYFp4mZnzEZ#zClNF!{_m2kstbX*17F{K7t75a*$ ztXzGzOK>iWQz2Fv(#CGqcf09BJ=i4XQ!64_@Qs;>20SNDa}8a=zi`S*)RM zr@Dyf8%*H++NQE?pQlx0kRJ^8r~49%R9YK zBNR_It|F9eqh3Tj;0#2#(mloqtSuI{x~a0zUQB^)C4lP77Cotx5)=WW5_f=M&?dfb z1B%{^Hz=BCRbjvEuVf5w8O%^Gd&-nC_>SG7R{Xp)<7z~n!ti2~#8|a{JRV1KDNnie zl5|2m?QD0Kq&03$n@aO6qSdFg5_+FeB2@M&o5dvX%}6ev)kq;Vz@YG|5D6l%eN_QHg@;&0%tqo(QGz~ z7B|w35@q>nNw(PK9KC8IPJ*7xMF-`;yh6h+2cE-e!rOOX>Rccme86QD3GOeHw999r zC-7tNaED&b9a{jsC!AY_we7&&NC_qac#gbwazko>=iwDFlK_ziJU6jZ=S-|c`ZQXO zlxDqjVyd`Ld9A^aG4sVqqk8rTbcpU}#(t~HiX_jb(^bdmR!z;NHrjSplkx=St3p-g zDPcH4Xh!nh5*N#J?Mpm$-` z9r?q5{tx2kzy0lJV3ppJ#M`N*q!G?E^!1-bfCNRbIf*-f1c2Cs{n2JxA494JcRa6I zZEv*JmV{1(>aZ@djXF-`C!2DqIV`IcZdPBA?G`U!b*GN9_!3(mI-9aIT6O)6U!CEz z1~m{H&d8LYUdfiqJp#;e!_?sh6co`Fm4XDL04YWUzS?WYGLtr7N#^s5Gx&fxt;$5v ziZV5lsn!zP%=$B`qDfPo?zHm;c^tcwZg;U`MwJfXsJvG6m!0ukuQJtz(UQyfxw5DH zeBNKU(quGIR}RJ-qx>VKD~Ox}4S6V>z#6#-(?jul=n7?WA&9BO5u9k`)Mmig&x>Yq zKnpNG_zxrz5O~0BL2sV~S4GE7kwU4;gc%{5Cem2X8|?Wss85>5jXIQVvI;^xePqIw z&c;H~$%)paTc@LJoV2>m>Zl=E+8UO?WCKvkK4;hU|+WqoLLln(q z;B6?{G337GLKnp<@VcVM9td!ibi)RLN)~!yVH^qQxIodpaBgmQFIY-y>n=;X%=JmT zONDVJ)dETlaOJ_KS)If9oL|U8Tdm{66+-BBlx&dg0omMa&?&k)iXD2@bn&V^%gbEF zJrpM%OD)Hx@r?48wmO&&OI)56=CiiTS>?sNffEwm#vVvEA|?@rk+EuwtT`&ce8GF0sSZlQ8 zv1LU$i%8)lbyXxNZ@Glk7;q5oa+qGqUbdp|&>&cyS~Lz+{fm*13o)?d%S9m|@j%Lk zd{rJfQ?jQr^B!;=8{|o#8D4GT45qU4(qiEXO=N6Y3Tu~AP$R$II2w{?ELySn$;@sLCeB4AS@r~%V_w{}|~VQ;ys>zVro-NZQVWNrl* zN`ld-a+DDQ76S;WvZ|>oN)WMx-$B6Jgv{R44v}qgZ_{qAhG^EQef(kbUGofojLjDw z3pkC~ME^4wdCAOpN-UF!@@LJwm>__d_!=lPm~wvrGh&Na^yPAy@E2>cx<#q=j@ctE zpIv+Y%x%~s7S;I~iiu6xF0D~Qa79Yp4zR(pG++kh!Ek+O?6>ElXm0&gKI_UPVnnXX|7 zO$or#L>r*fCCiipv5^?(K~k301YIp?j>?6w1&!!hq=Qp#Q0^Oy9mP=SI6)8qK8=eE zE(-b%*ny020u`@@VIVTs%$E-Gt-$+IMBWC`ooGfMQdPGf3bIwPpj<}DM%4I2x1f5v zM=2SGTSmN^p-s>PVhll{5Yl-h!uUo%?K*vR=B(IC$79FbtaDzK30s@(6@;BmCEq0N zJwvE9XVBR+R#IobYhxHMPc}0WJIEV%t<~D}m>w#!AfLFca{k;!`-CMw^vn}6>_0}& ze6nMI233=UwA3+8Al$Q>CZ-3EXatvqfY6;&3JiF?0^;K5b*ado7PIdBfXK(AS=!j= zUSz=EK|)v_7C>P(NCj9CR+D8cGA=HAdXW%&AiW5O;5AqzAarMuur90HpKO=Cdh3Ao z@Upy7Osac27wh@n&at!+L0ZLO?WB~>&h$LAYeIyPja+G5XB`cv(w?~fY1Xqe;)NjMi>sA1|jh>!5wg4Lda^TQ$I^PUTcv? zzsrrh5x?{LEoq#uYP7k=_)W+BJf(J1rIoQ>aL!+guv`g(RbOv{+(hNh+RKFo%}zOF ztt+zy*sS`Z*IN4y$s1eg^jYlmgJ+qV|HaXKDN>vy30IKtT|x91_^o%=0P%qC5VfOP zsXKCgSnH|!akp%*%jXW-UF8R-ytl@W8@Vl#PR#)FSeJdA0^r#~`NqU1~D#9x!C7t{5|_PhhluqxyZfFwC~ zYeL@6GGnviNk0oL35sB^5_dtM|Itz7){N5`h~#;HIFD$u0*fG}&Dm`>>PM&JZ&X}g zg4&Z!X@>y)2S zr5J@k_&G^T7_2RIt&Tgj7M+sB)_82fEjt6G*+ZK|+Za!)^I4;3D4ODLq>;10@Kc_2 zMrW^Ld&na^jxujSz~K@y503lq4FG&_@e?(!{GL?~ANccMVd3j9VZt3uA*09PrY9n` zYYXya|XJz)$znzV754$4)h}`b_kV9hQOmPhs#dfTX!@JFvQBnw|(IQl(>JR2>KVPdb*oZ8RbiQqBr^D>9T96}9 z?ONO#O`P3MtF1j(-1)?W5U*^xk;N!_D1i2%A{4ve!5uOByfNp+(yL@g&LiJ*!@2F)-Ki=Pqwy3uwyRUS zxn@RlZMzg!Hd|afRqQDP3hvj9z520c1svBvM&5Flf?vm$g7$!*I_?^z1^p@2LR6R; zpfv_Ow41t_kCbn#VQ#2jM*O4_Cd3ox8+Lsr*dlH$ZXKmIi zL7-c%H^3nU4QvlI%y;WLi*;$TXC$@SuhBeqUF#QbkxI*Za(7?t2>PN;Kp9Mm#3J`C zs{tqxM9R{pFo64F1UNwvKtkf~kL~%1&q>&1leJoCj=xx87g7T&4X=V)uSZ_G_`RBU z;#FR2mQuL)h1zAJK9;P_{5l;n=|i0^_WRx4F|p*_(oRXw7i@3&tav81_CG^MOIp}I zCRBi=M1>Haq-T;*dr$?H_z96j+#bAmGI9}20O}G*H;Ahx@D-5B`u&ja+lms*J^t~T zKu!QtazW%f7c^Z2`Hrw5B;;23KKyi&E0=FvJm#ml@=1@!C;a%HT^^~vmqa``b%rh> zua_cM5jh|N(dEO6YM7h+Zap3`R(|Prjd+#UN{iHPex0U-H0~t=3DCQE+>nr9SlpkQ z;@EGH|L@jOkY4kx^1r0eKUOBi;NgNxT6zx!BC{fU+H-Rh}<%J^aB{0OFo4&H4M za2C{j%~Inu+(f}&z=N9~0*OtmYxQjwo4#soZ@m0u { - socket.on("message", (message) => { - socket.emit( - JSON.stringify({ - op: 2, - d: { - ssrc: 1, - ip: "127.0.0.1", - port: 3004, - modes: [ - "xsalsa20_poly1305", - "xsalsa20_poly1305_suffix", - "xsalsa20_poly1305_lite", - ], - heartbeat_interval: 1, - }, - }) - ); - }); - }); - } - - async listen(): Promise { - // @ts-ignore - await (db as Promise); - await Config.init(); - console.log("[DB] connected"); - console.log(`[WebRTC] online on 0.0.0.0:${port}`); - } -} diff --git a/webrtc/src/index.ts b/webrtc/src/index.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/webrtc/src/start.ts b/webrtc/src/start.ts deleted file mode 100644 index 68867a2cf..000000000 --- a/webrtc/src/start.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Server } from "./Server"; - -const server = new Server(); diff --git a/webrtc/src/test.ts b/webrtc/src/test.ts deleted file mode 100644 index df407b56a..000000000 --- a/webrtc/src/test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { getSupportedRtpCapabilities } from "mediasoup"; - -async function test() { - console.log(getSupportedRtpCapabilities()); -} -setTimeout(() => {}, 1000000); - -test(); diff --git a/webrtc/tsconfig.json b/webrtc/tsconfig.json deleted file mode 100644 index 77353db0d..000000000 --- a/webrtc/tsconfig.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "include": ["src/**/*.ts"], - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - "lib": [ - "ES2021" - ] /* Specify library files to be included in the compilation. */, - "allowJs": true /* Allow javascript files to be compiled. */, - "checkJs": true /* Report errors in .js files. */, - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - "declarationMap": false /* Generates a sourcemap for each corresponding '.d.ts' file. */, - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist/" /* Redirect output structure to the directory. */, - "rootDir": "./src/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - "strictNullChecks": true /* Enable strict null checks. */, - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": false /* Enable strict checking of property initialization in classes. */, - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": [ - "node" - ] /* Type declaration files to be included in compilation. */, - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } -} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..3173ddfa8 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,6802 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@aws-crypto/crc32@2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-2.0.0.tgz" + integrity sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA== + dependencies: + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/crc32c@2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-2.0.0.tgz" + integrity sha512-vF0eMdMHx3O3MoOXUfBZry8Y4ZDtcuskjjKgJz8YfIDjLStxTZrYXk+kZqtl6A0uCmmiN/Eb/JbC/CndTV1MHg== + dependencies: + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/ie11-detection@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz" + integrity sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/sha1-browser@2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-2.0.0.tgz" + integrity sha512-3fIVRjPFY8EG5HWXR+ZJZMdWNRpwbxGzJ9IH9q93FpbgCH8u8GHRi46mZXp3cYD7gealmyqpm3ThZwLKJjWJhA== + dependencies: + "@aws-crypto/ie11-detection" "^2.0.0" + "@aws-crypto/supports-web-crypto" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-browser@2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz" + integrity sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A== + dependencies: + "@aws-crypto/ie11-detection" "^2.0.0" + "@aws-crypto/sha256-js" "^2.0.0" + "@aws-crypto/supports-web-crypto" "^2.0.0" + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-locate-window" "^3.0.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-crypto/sha256-js@2.0.0", "@aws-crypto/sha256-js@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz" + integrity sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig== + dependencies: + "@aws-crypto/util" "^2.0.0" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/supports-web-crypto@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz" + integrity sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA== + dependencies: + tslib "^1.11.1" + +"@aws-crypto/util@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.1.tgz" + integrity sha512-JJmFFwvbm08lULw4Nm5QOLg8+lAQeC8aCXK5xrtxntYzYXCGfHwUJ4Is3770Q7HmICsXthGQ+ZsDL7C2uH3yBQ== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/abort-controller@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.127.0.tgz" + integrity sha512-G77FLYcl9egUoD3ZmR6TX94NMqBMeT53hBGrEE3uVUJV1CwfGKfaF007mPpRZnIB3avnJBQGEK6MrwlCfv2qAw== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/chunked-blob-reader-native@3.109.0": + version "3.109.0" + resolved "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.109.0.tgz" + integrity sha512-Ybn3vDZ3CqGyprL2qdF6QZqoqlx8lA3qOJepobjuKKDRw+KgGxjUY4NvWe0R2MdRoduyaDj6uvhIay0S1MOSJQ== + dependencies: + "@aws-sdk/util-base64-browser" "3.109.0" + tslib "^2.3.1" + +"@aws-sdk/chunked-blob-reader@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.55.0.tgz" + integrity sha512-o/xjMCq81opAjSBjt7YdHJwIJcGVG5XIV9+C2KXcY5QwVimkOKPybWTv0mXPvSwSilSx+EhpLNhkcJuXdzhw4w== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/client-s3@^3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.137.0.tgz" + integrity sha512-WFOBywwV7ECAOkSOLecpPOGbgmYV5NxHzXHTJEio6xR6s2KzoLegJa0/mq5ljh0Zl5t2h5bsKT1CxYRC0sfwWw== + dependencies: + "@aws-crypto/sha1-browser" "2.0.0" + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/client-sts" "3.137.0" + "@aws-sdk/config-resolver" "3.130.0" + "@aws-sdk/credential-provider-node" "3.137.0" + "@aws-sdk/eventstream-serde-browser" "3.127.0" + "@aws-sdk/eventstream-serde-config-resolver" "3.127.0" + "@aws-sdk/eventstream-serde-node" "3.127.0" + "@aws-sdk/fetch-http-handler" "3.131.0" + "@aws-sdk/hash-blob-browser" "3.127.0" + "@aws-sdk/hash-node" "3.127.0" + "@aws-sdk/hash-stream-node" "3.127.0" + "@aws-sdk/invalid-dependency" "3.127.0" + "@aws-sdk/md5-js" "3.127.0" + "@aws-sdk/middleware-bucket-endpoint" "3.127.0" + "@aws-sdk/middleware-content-length" "3.127.0" + "@aws-sdk/middleware-expect-continue" "3.127.0" + "@aws-sdk/middleware-flexible-checksums" "3.127.0" + "@aws-sdk/middleware-host-header" "3.127.0" + "@aws-sdk/middleware-location-constraint" "3.127.0" + "@aws-sdk/middleware-logger" "3.127.0" + "@aws-sdk/middleware-recursion-detection" "3.127.0" + "@aws-sdk/middleware-retry" "3.127.0" + "@aws-sdk/middleware-sdk-s3" "3.127.0" + "@aws-sdk/middleware-serde" "3.127.0" + "@aws-sdk/middleware-signing" "3.130.0" + "@aws-sdk/middleware-ssec" "3.127.0" + "@aws-sdk/middleware-stack" "3.127.0" + "@aws-sdk/middleware-user-agent" "3.127.0" + "@aws-sdk/node-config-provider" "3.127.0" + "@aws-sdk/node-http-handler" "3.127.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/signature-v4-multi-region" "3.130.0" + "@aws-sdk/smithy-client" "3.137.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/url-parser" "3.127.0" + "@aws-sdk/util-base64-browser" "3.109.0" + "@aws-sdk/util-base64-node" "3.55.0" + "@aws-sdk/util-body-length-browser" "3.55.0" + "@aws-sdk/util-body-length-node" "3.55.0" + "@aws-sdk/util-defaults-mode-browser" "3.137.0" + "@aws-sdk/util-defaults-mode-node" "3.137.0" + "@aws-sdk/util-stream-browser" "3.131.0" + "@aws-sdk/util-stream-node" "3.129.0" + "@aws-sdk/util-user-agent-browser" "3.127.0" + "@aws-sdk/util-user-agent-node" "3.127.0" + "@aws-sdk/util-utf8-browser" "3.109.0" + "@aws-sdk/util-utf8-node" "3.109.0" + "@aws-sdk/util-waiter" "3.127.0" + "@aws-sdk/xml-builder" "3.109.0" + entities "2.2.0" + fast-xml-parser "3.19.0" + tslib "^2.3.1" + +"@aws-sdk/client-sso@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.137.0.tgz" + integrity sha512-l9y9usMuXGI+o1c/VO2qMccN0Bm0T5bFmmbRljB6kIzbJYXD/wVqR8GMZwSnFnz52cnURQ4pgqM1ETg54FlBYQ== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.130.0" + "@aws-sdk/fetch-http-handler" "3.131.0" + "@aws-sdk/hash-node" "3.127.0" + "@aws-sdk/invalid-dependency" "3.127.0" + "@aws-sdk/middleware-content-length" "3.127.0" + "@aws-sdk/middleware-host-header" "3.127.0" + "@aws-sdk/middleware-logger" "3.127.0" + "@aws-sdk/middleware-recursion-detection" "3.127.0" + "@aws-sdk/middleware-retry" "3.127.0" + "@aws-sdk/middleware-serde" "3.127.0" + "@aws-sdk/middleware-stack" "3.127.0" + "@aws-sdk/middleware-user-agent" "3.127.0" + "@aws-sdk/node-config-provider" "3.127.0" + "@aws-sdk/node-http-handler" "3.127.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/smithy-client" "3.137.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/url-parser" "3.127.0" + "@aws-sdk/util-base64-browser" "3.109.0" + "@aws-sdk/util-base64-node" "3.55.0" + "@aws-sdk/util-body-length-browser" "3.55.0" + "@aws-sdk/util-body-length-node" "3.55.0" + "@aws-sdk/util-defaults-mode-browser" "3.137.0" + "@aws-sdk/util-defaults-mode-node" "3.137.0" + "@aws-sdk/util-user-agent-browser" "3.127.0" + "@aws-sdk/util-user-agent-node" "3.127.0" + "@aws-sdk/util-utf8-browser" "3.109.0" + "@aws-sdk/util-utf8-node" "3.109.0" + tslib "^2.3.1" + +"@aws-sdk/client-sts@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.137.0.tgz" + integrity sha512-yJqfkEq0DG9Ds+oif/sc02PX6vfSNcyRe3YcaW5P6ouMyhJRljSIVCnA6iPwJaTsmK9BE9PDgFD2v/GYM/XgOA== + dependencies: + "@aws-crypto/sha256-browser" "2.0.0" + "@aws-crypto/sha256-js" "2.0.0" + "@aws-sdk/config-resolver" "3.130.0" + "@aws-sdk/credential-provider-node" "3.137.0" + "@aws-sdk/fetch-http-handler" "3.131.0" + "@aws-sdk/hash-node" "3.127.0" + "@aws-sdk/invalid-dependency" "3.127.0" + "@aws-sdk/middleware-content-length" "3.127.0" + "@aws-sdk/middleware-host-header" "3.127.0" + "@aws-sdk/middleware-logger" "3.127.0" + "@aws-sdk/middleware-recursion-detection" "3.127.0" + "@aws-sdk/middleware-retry" "3.127.0" + "@aws-sdk/middleware-sdk-sts" "3.130.0" + "@aws-sdk/middleware-serde" "3.127.0" + "@aws-sdk/middleware-signing" "3.130.0" + "@aws-sdk/middleware-stack" "3.127.0" + "@aws-sdk/middleware-user-agent" "3.127.0" + "@aws-sdk/node-config-provider" "3.127.0" + "@aws-sdk/node-http-handler" "3.127.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/smithy-client" "3.137.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/url-parser" "3.127.0" + "@aws-sdk/util-base64-browser" "3.109.0" + "@aws-sdk/util-base64-node" "3.55.0" + "@aws-sdk/util-body-length-browser" "3.55.0" + "@aws-sdk/util-body-length-node" "3.55.0" + "@aws-sdk/util-defaults-mode-browser" "3.137.0" + "@aws-sdk/util-defaults-mode-node" "3.137.0" + "@aws-sdk/util-user-agent-browser" "3.127.0" + "@aws-sdk/util-user-agent-node" "3.127.0" + "@aws-sdk/util-utf8-browser" "3.109.0" + "@aws-sdk/util-utf8-node" "3.109.0" + entities "2.2.0" + fast-xml-parser "3.19.0" + tslib "^2.3.1" + +"@aws-sdk/config-resolver@3.130.0": + version "3.130.0" + resolved "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.130.0.tgz" + integrity sha512-7dkCHHI9kRcHW6YNr9/2Ub6XkvU9Fu6H/BnlKbaKlDR8jq7QpaFhPhctOVi5D/NDpxJgALifexFne0dvo3piTw== + dependencies: + "@aws-sdk/signature-v4" "3.130.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-config-provider" "3.109.0" + "@aws-sdk/util-middleware" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-env@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.127.0.tgz" + integrity sha512-Ig7XhUikRBlnRTYT5JBGzWfYZp68X5vkFVIFCmsHHt/qVy0Nz9raZpmDHicdS1u67yxDkWgCPn/bNevWnM0GFg== + dependencies: + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-imds@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.127.0.tgz" + integrity sha512-I6KlIBBzmJn/U1KikiC50PK3SspT9G5lkVLBaW5a6YfOcijqVTXfAN3kYzqhfeS0j4IgfJEwKVsjsZfmprJO5A== + dependencies: + "@aws-sdk/node-config-provider" "3.127.0" + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/url-parser" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-ini@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.137.0.tgz" + integrity sha512-FNSYjHaW83b4sQac+EWh/C6p1taBdvPOXFAVml1mPH49Nlkv9/E4bbjaWwgxvlxjqjNCbkDMKzhb19DN3gVulA== + dependencies: + "@aws-sdk/credential-provider-env" "3.127.0" + "@aws-sdk/credential-provider-imds" "3.127.0" + "@aws-sdk/credential-provider-sso" "3.137.0" + "@aws-sdk/credential-provider-web-identity" "3.127.0" + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/shared-ini-file-loader" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-node@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.137.0.tgz" + integrity sha512-if4CzNSyPS3ZERLtDocNNC+l5ejK93d2hoOzNHP2qCmTppThEPWF2TH506ez0v0lbUzeI7qWgpYe9m4+BFLEwQ== + dependencies: + "@aws-sdk/credential-provider-env" "3.127.0" + "@aws-sdk/credential-provider-imds" "3.127.0" + "@aws-sdk/credential-provider-ini" "3.137.0" + "@aws-sdk/credential-provider-process" "3.127.0" + "@aws-sdk/credential-provider-sso" "3.137.0" + "@aws-sdk/credential-provider-web-identity" "3.127.0" + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/shared-ini-file-loader" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-process@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.127.0.tgz" + integrity sha512-6v0m2lqkO9J5fNlTl+HjriQNIdfg8mjVST544+5y9EnC/FVmTnIz64vfHveWdNkP/fehFx7wTimNENtoSqCn3A== + dependencies: + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/shared-ini-file-loader" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-sso@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.137.0.tgz" + integrity sha512-Up2Q3tWSo6Mv2icXMrHa8dGtnC9yQAeUnftrIlvLXi3P9RjxlOPZCSg1NF8FOS90RdEgORlj/7LPlIniHgGUmg== + dependencies: + "@aws-sdk/client-sso" "3.137.0" + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/shared-ini-file-loader" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/credential-provider-web-identity@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.127.0.tgz" + integrity sha512-85ahDZnLYB3dqkW+cQ0bWt+NVqOoxomTrJoq3IC2q6muebeFrJ0pyf0JEW/RNRzBiUvvsZujzGdWifzWyQKfVg== + dependencies: + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/eventstream-codec@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.127.0.tgz" + integrity sha512-+Tlujx3VkB4DK8tYzG0rwxIE0ee6hWItQgSEREEmi5CwHQFw7VpRLYAShYabEx9wIJmRFObWzhlKxWNRi+TfaA== + dependencies: + "@aws-crypto/crc32" "2.0.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-hex-encoding" "3.109.0" + tslib "^2.3.1" + +"@aws-sdk/eventstream-serde-browser@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.127.0.tgz" + integrity sha512-d1rTK4ljEp3Y/BQ78/AJ7eqgGyI6TE0bxNosCmXWcUBv00Tr5cerPqPe7Zvw8XwIMPX5y8cjtd1/cOtB2ePaBw== + dependencies: + "@aws-sdk/eventstream-serde-universal" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/eventstream-serde-config-resolver@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.127.0.tgz" + integrity sha512-dYvLfQYcKLOFtZVgwLwKDCykAxNkDyDLQRWytJK9DHCyjRig66IKi1codts9vOy4j0CeYwnXWs5WDavrUaE05g== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/eventstream-serde-node@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.127.0.tgz" + integrity sha512-Ie59jZYAIw3Kt6GePvEilp1k3JoYEQpY3WIyVZltm3dkVf0GmzhCZrPROH9vgF3qApzu1aGOWDV2wX91poXF8A== + dependencies: + "@aws-sdk/eventstream-serde-universal" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/eventstream-serde-universal@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.127.0.tgz" + integrity sha512-cJLSTtYDGTevknMTykzHpcDNRbD6yGve8FBUKSAczuNVjXZOedj0GbHJqkASuLj0ZnojbKBdCx4uu1XGyvubng== + dependencies: + "@aws-sdk/eventstream-codec" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/fetch-http-handler@3.131.0": + version "3.131.0" + resolved "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.131.0.tgz" + integrity sha512-eNxmPZQX2IUeBGWHNC7eNTekWn9VIPLYEMKJbKYUBJryxuTJ7TtLeyEK5oakUjMwP1AUvWT+CV7C+8L7uG1omQ== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/querystring-builder" "3.127.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-base64-browser" "3.109.0" + tslib "^2.3.1" + +"@aws-sdk/hash-blob-browser@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.127.0.tgz" + integrity sha512-XH9s2w6GXCtDI+3/y+sDAzMWJRTvhRXJJtI1fVDsCiyq96SYUTNKLLaUSuR01uawEBiRDBqGDDPMT8qJPDXc/w== + dependencies: + "@aws-sdk/chunked-blob-reader" "3.55.0" + "@aws-sdk/chunked-blob-reader-native" "3.109.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/hash-node@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.127.0.tgz" + integrity sha512-wx7DKlXdKebH4JcMsOevdsm2oDNMVm36kuMm0XWRIrFWQ/oq7OquDpEMJzWvGqWF/IfFUpb7FhAWZZpALwlcwA== + dependencies: + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-buffer-from" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/hash-stream-node@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.127.0.tgz" + integrity sha512-ZCNqi+FJViYFCo8JfSx+YK0Hd/SC555gHqBe24GVBMCDqJ8UFIled7tF+GOQ8wTcKjxuwp/0EXDTXoaAb0K89g== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/invalid-dependency@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.127.0.tgz" + integrity sha512-bxvmtmJ6gIRfOHvh1jAPZBH2mzppEblPjEOFo4mOzXz4U3qPIxeuukCjboMnGK9QEpV2wObWcYYld0vxoRrfiA== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/is-array-buffer@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.55.0.tgz" + integrity sha512-NbiPHVYuPxdqdFd6FxzzN3H1BQn/iWA3ri3Ry7AyLeP/tGs1yzEWMwf8BN8TSMALI0GXT6Sh0GDWy3Ok5xB6DA== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/md5-js@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.127.0.tgz" + integrity sha512-9FzD++p2bvfZ56hbDxvGcLlA9JIMt9uZB/m4NEvbuvrpx1qnUpFv6HqthhGaVuhctkK25hONT5ZpOYHSisATrA== + dependencies: + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-utf8-browser" "3.109.0" + "@aws-sdk/util-utf8-node" "3.109.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-bucket-endpoint@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.127.0.tgz" + integrity sha512-wJpXxWceBDhWktoxrRb4s6tMx0dWsEGYIaV0KkQPGhTPk2KMUgwa4xApfCXXVfYcE3THk486OKwHhPrR5jpe+g== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-arn-parser" "3.55.0" + "@aws-sdk/util-config-provider" "3.109.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-content-length@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.127.0.tgz" + integrity sha512-AFmMaIEW3Rzg0TaKB9l/RENLowd7ZEEOpm0trYw1CgUUORWW/ydCsDT7pekPlC25CPbhUmWXCSA4xPFSYOVnDw== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-expect-continue@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.127.0.tgz" + integrity sha512-+X7mdgFqt9UqUDeGuMt+afR8CBX9nMecTxEIilAKdVOLx+fuXzHnC2mpddKMtiE9IGKMU4BI1Ahf7t32Odhs1Q== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-flexible-checksums@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.127.0.tgz" + integrity sha512-sXkAwhE9dikO72sEJ7DrUCo5mawauAxICCqipCCSGp0geSkptvtZHhySgJNMVSbUJQmu5bcS+zsFpFVwuJvGxg== + dependencies: + "@aws-crypto/crc32" "2.0.0" + "@aws-crypto/crc32c" "2.0.0" + "@aws-sdk/is-array-buffer" "3.55.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-host-header@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.127.0.tgz" + integrity sha512-e2gTLJb5lYP9lRV7hN3rKY2l4jv8OygOoHElZJ3Z8KPZskjHelYPcQ8XbdfhSXXxC3vc/0QqN0ResFt3W3Pplg== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-location-constraint@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.127.0.tgz" + integrity sha512-UtPmbOKEVu+Ue7CwICFSOOOSePV8Piydco/v2IpdRkMO0e4bqQ3Tn0XprBlWWfSW4QCtAPzydrArLsUdk636GA== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-logger@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.127.0.tgz" + integrity sha512-jMNLcZB/ECA7OfkNBLNeAlrLRehyfnUeNQJHW3kcxs9h1+6VxaF6wY+WKozszLI7/3OBzQrFHBQCfRZV7ykSLg== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-recursion-detection@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.127.0.tgz" + integrity sha512-tB6WX+Z1kUKTnn5h38XFrTCzoqPKjUZLUjN4Wb27/cbeSiTSKGAZcCXHOJm36Ukorl5arlybQTqGe689EU00Hw== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-retry@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.127.0.tgz" + integrity sha512-ZSvg/AyGUacWnf3i8ZbyImtiCH+NyafF8uV7bITP7JkwPrG+VdNocJZOr88GRM0c1A0jfkOf7+oq+fInPwwiNA== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/service-error-classification" "3.127.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-middleware" "3.127.0" + tslib "^2.3.1" + uuid "^8.3.2" + +"@aws-sdk/middleware-sdk-s3@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.127.0.tgz" + integrity sha512-q1mkEN7kYYdQ3LOHIhaT56omYe8DCubyiCKOXuEo5ZiIkE5iq06K/BxWxj3f8bFZxSX80Ma1m8XA5jcOEMphSA== + dependencies: + "@aws-sdk/middleware-bucket-endpoint" "3.127.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-arn-parser" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-sdk-sts@3.130.0": + version "3.130.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.130.0.tgz" + integrity sha512-FDfs7+ohbhEK3eH3Dshr6JDiL8P72bp3ffeNpPBXuURFqwt4pCmjHuX3SqQR0JIJ2cl3aIdxc17rKaZJfOjtPw== + dependencies: + "@aws-sdk/middleware-signing" "3.130.0" + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/signature-v4" "3.130.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-serde@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.127.0.tgz" + integrity sha512-xmWMYV/t9M+b9yHjqaD1noDNJJViI2QwOH7TQZ9VbbrvdVtDrFuS9Sf9He80TBCJqeHShwQN9783W1I3Pu/8kw== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-signing@3.130.0": + version "3.130.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.130.0.tgz" + integrity sha512-JePq5XLR9TfRN3RQ0d7Za/bEW5D3xgtD1FNAwHeenWALeozMuQgRPjM5RroCnL/5jY3wuvCZI7cSXeqhawWqmA== + dependencies: + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/signature-v4" "3.130.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-ssec@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.127.0.tgz" + integrity sha512-R5A13EvdYPdYD2Tq9eW5jqIdscyZlQykQXFEolBD2oi4pew7TZpc/5aazZC0zo9YKJ29qiUR1P4NvjcFJ7zFBg== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/middleware-stack@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.127.0.tgz" + integrity sha512-S1IoUE5o1vCmjsF5nIE8zlItNOM1UE+lhmZeigF7knXJ9+a6ewMB6POAj/s4eoi0wcn0eSnAGsqJCWMSUjOPLA== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/middleware-user-agent@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.127.0.tgz" + integrity sha512-CHxgswoOzdkOEoIq7Oyob3Sx/4FYUv6BhUesAX7MNshaDDsTQPbSWjw5bqZDiL/gO+X/34fvqCVVpVD2GvxW/g== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/node-config-provider@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.127.0.tgz" + integrity sha512-bAHkASMhLZHT1yv2TX6OJGFV9Lc3t1gKfTMEKdXM2O2YhGfSx9A/qLeJm79oDfnILWQtSS2NicxlRDI2lYGf4g== + dependencies: + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/shared-ini-file-loader" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/node-http-handler@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.127.0.tgz" + integrity sha512-pyMKvheK8eDwWLgYIRsWy8wiyhsbYYcqkZQs3Eh6upI4E8iCY7eMmhWvHYCibvsO+UjsOwa4cAMOfwnv/Z9s8A== + dependencies: + "@aws-sdk/abort-controller" "3.127.0" + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/querystring-builder" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/property-provider@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.127.0.tgz" + integrity sha512-JxenxlTEkWfLrtJqIjaXaJzAVQbbscoCb5bNjmdud07ESLVfWRKJx2nAJdecHKYp2M5NQyqBuFhQ1ELSFYQKCA== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/protocol-http@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.127.0.tgz" + integrity sha512-UG83PVuKX40wilG2uRU0Fvz4OY8Bt+bSPOG776DFjwIXYzK7BwpJm9H2XI2HLhS5WxrJHhwrLBRgW6UiykMnFw== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/querystring-builder@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.127.0.tgz" + integrity sha512-tsoyp4lLPsASPDYWsezGAHD8VJsZbjUNATNAzTCFdH6p+4SKBK83Q5kfXCzxt13M+l3oKbxxIWLvS0kVQFyltQ== + dependencies: + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-uri-escape" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/querystring-parser@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.127.0.tgz" + integrity sha512-Vn/Dv+PqUSepp/DzLqq0LJJD8HdPefJCnLbO5WcHCARHSGlyGlZUFEM45k/oEHpTvgMXj/ORaP3A+tLwLu0AmA== + dependencies: + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/service-error-classification@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.127.0.tgz" + integrity sha512-wjZY9rnlA8SPrICUumTYicEKtK4/yKB62iadUk66hxe8MrH8JhuHH2NqIad0Pt/bK/YtNVhd3yb4pRapOeY5qQ== + +"@aws-sdk/shared-ini-file-loader@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.127.0.tgz" + integrity sha512-S3Nn4KRTqoJsB/TbRZSWBBUrkckNMR0Juqz7bOB+wupVvddKP6IcpspSC/GX9zgJjVMV8iGisZ6AUsYsC5r+cA== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/signature-v4-multi-region@3.130.0": + version "3.130.0" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.130.0.tgz" + integrity sha512-ZRRoPRoCVdkGDtjuog81pqHsSLfnXK6ELrWm4Dq8xdcHQGbEDNdYmeXARXG9yPAO42x9yIJXHNutMz5Y/P64cw== + dependencies: + "@aws-sdk/protocol-http" "3.127.0" + "@aws-sdk/signature-v4" "3.130.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-arn-parser" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/signature-v4@3.130.0": + version "3.130.0" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.130.0.tgz" + integrity sha512-g5G1a1NHL2uOoFfC2zQdZcj+wbjgBQPkx6xGdtqNKf9v2kS0n6ap5JUGEaqWE02lUlmWHsoMsS73hXtzwXaBRQ== + dependencies: + "@aws-sdk/is-array-buffer" "3.55.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-hex-encoding" "3.109.0" + "@aws-sdk/util-middleware" "3.127.0" + "@aws-sdk/util-uri-escape" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/smithy-client@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.137.0.tgz" + integrity sha512-YAuWiSzHJGV9jQCjmcBWxbWRoq/3INEpdtfAdpR+X+sEZaRJESDGPt4or7WbQ9Tmbd/uZ0uQLYIed/NDSyJLLQ== + dependencies: + "@aws-sdk/middleware-stack" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/types@3.127.0", "@aws-sdk/types@^3.1.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.127.0.tgz" + integrity sha512-e0wtx2IkOl7rwfKfLH5pPTzQ+d45V7b1WrjeL0WDI8kOu6w+sXmhNxI6uM2kf0k4NiTLN84lW290AEWupey9Og== + +"@aws-sdk/url-parser@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.127.0.tgz" + integrity sha512-njZ7zn41JHRpNfr3BCesVXCLZE0zcWSfEdtRV0ICw0cU1FgYcKELSuY9+gLUB4ci6uc7gq7mPE8+w30FcM4QeA== + dependencies: + "@aws-sdk/querystring-parser" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/util-arn-parser@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.55.0.tgz" + integrity sha512-76KJxp4MRWufHYWys7DFl64znr5yeJ3AIQNAPCKKw1sP0hzO7p6Kx0PaJnw9x+CPSzOrT4NbuApL6/srYhKDGg== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-base64-browser@3.109.0": + version "3.109.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.109.0.tgz" + integrity sha512-lAZ6fyDGiRLaIsKT9qh7P9FGuNyZ4gAbr1YOSQk/5mHtaTuUvxlPptZuInNM/0MPQm6lpcot00D8IWTucn4PbA== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-base64-node@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.55.0.tgz" + integrity sha512-UQ/ZuNoAc8CFMpSiRYmevaTsuRKzLwulZTnM8LNlIt9Wx1tpNvqp80cfvVj7yySKROtEi20wq29h31dZf1eYNQ== + dependencies: + "@aws-sdk/util-buffer-from" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/util-body-length-browser@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.55.0.tgz" + integrity sha512-Ei2OCzXQw5N6ZkTMZbamUzc1z+z1R1Ja5tMEagz5BxuX4vWdBObT+uGlSzL8yvTbjoPjnxWA2aXyEqaUP3JS8Q== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-body-length-node@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.55.0.tgz" + integrity sha512-lU1d4I+9wJwydduXs0SxSfd+mHKjxeyd39VwOv6i2KSwWkPbji9UQqpflKLKw+r45jL7+xU/zfeTUg5Tt/3Gew== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-buffer-from@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.55.0.tgz" + integrity sha512-uVzKG1UgvnV7XX2FPTylBujYMKBPBaq/qFBxfl0LVNfrty7YjpfieQxAe6yRLD+T0Kir/WDQwGvYC+tOYG3IGA== + dependencies: + "@aws-sdk/is-array-buffer" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/util-config-provider@3.109.0": + version "3.109.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.109.0.tgz" + integrity sha512-GrAZl/aBv0A28LkyNyq8SPJ5fmViCwz80fWLMeWx/6q5AbivuILogjlWwEZSvZ9zrlHOcFC0+AnCa5pQrjaslw== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-defaults-mode-browser@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.137.0.tgz" + integrity sha512-9f5045wqPAcGLKIAXzZKHE2n42ilGo/g4rLSS09OXx9CoFT4lVdqZPqBqh/prDUMrqXge9FK3EH2VId7L5GpEQ== + dependencies: + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/types" "3.127.0" + bowser "^2.11.0" + tslib "^2.3.1" + +"@aws-sdk/util-defaults-mode-node@3.137.0": + version "3.137.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.137.0.tgz" + integrity sha512-CvMpemcsOkoMEz0iALamyQBt1rHx98NvF/cay019F8m+umD03I8CclDugy/13DqESWfsVxn91lZY/DOnO+si7A== + dependencies: + "@aws-sdk/config-resolver" "3.130.0" + "@aws-sdk/credential-provider-imds" "3.127.0" + "@aws-sdk/node-config-provider" "3.127.0" + "@aws-sdk/property-provider" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/util-hex-encoding@3.109.0": + version "3.109.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.109.0.tgz" + integrity sha512-s8CgTNrn3cLkrdiohfxLuOYPCanzvHn/aH5RW6DaMoeQiG5Hl9QUiP/WtdQ9QQx3xvpQFpmvxIaSBwSgFNLQxA== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-locate-window@^3.0.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.55.0.tgz" + integrity sha512-0sPmK2JaJE2BbTcnvybzob/VrFKCXKfN4CUKcvn0yGg/me7Bz+vtzQRB3Xp+YSx+7OtWxzv63wsvHoAnXvgxgg== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-middleware@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.127.0.tgz" + integrity sha512-EwAPPed9TNqh+Wov2VStLn2NuJ/Wyt7IkZCbCsBuSNp3BFZ1V4gfwTjqtKCtB2LQgQ48MTgWgNCvrH0zjCSPGg== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-stream-browser@3.131.0": + version "3.131.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.131.0.tgz" + integrity sha512-1YFbBPDu+elIgp8z1woUfT7zM+2PAvgJiw6ljDBuAlJzsP5xMhwk0X9e+8aQ+Qe4XftA0e7y/PH0gqvjNgCx2A== + dependencies: + "@aws-sdk/fetch-http-handler" "3.131.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-base64-browser" "3.109.0" + "@aws-sdk/util-hex-encoding" "3.109.0" + "@aws-sdk/util-utf8-browser" "3.109.0" + tslib "^2.3.1" + +"@aws-sdk/util-stream-node@3.129.0": + version "3.129.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.129.0.tgz" + integrity sha512-1iWqsWvVXyP4JLPPPs8tBZKyzs7D5e7KctXuCtIjI+cnGOCeVLL+X4L/7KDZfV7sI2D6vONtIoTnUjMl5V/kEg== + dependencies: + "@aws-sdk/node-http-handler" "3.127.0" + "@aws-sdk/types" "3.127.0" + "@aws-sdk/util-buffer-from" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/util-uri-escape@3.55.0": + version "3.55.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.55.0.tgz" + integrity sha512-mmdDLUpFCN2nkfwlLdOM54lTD528GiGSPN1qb8XtGLgZsJUmg3uJSFIN2lPeSbEwJB3NFjVas/rnQC48i7mV8w== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-user-agent-browser@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.127.0.tgz" + integrity sha512-uO2oHmJswuYKJS+GiMdYI8izhpC9M7/jFFvnAmLlTEVwpEi1VX9KePAOF+u5AaBC2kzITo/7dg141XfRHZloIQ== + dependencies: + "@aws-sdk/types" "3.127.0" + bowser "^2.11.0" + tslib "^2.3.1" + +"@aws-sdk/util-user-agent-node@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.127.0.tgz" + integrity sha512-3P/M4ZDD2qMeeoCk7TE/Mw7cG5IjB87F6BP8nI8/oHuaz7j6fsI7D49SNpyjl8JApRynZ122Ad6hwQwRj3isYw== + dependencies: + "@aws-sdk/node-config-provider" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/util-utf8-browser@3.109.0", "@aws-sdk/util-utf8-browser@^3.0.0": + version "3.109.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.109.0.tgz" + integrity sha512-FmcGSz0v7Bqpl1SE8G1Gc0CtDpug+rvqNCG/szn86JApD/f5x8oByjbEiAyTU2ZH2VevUntx6EW68ulHyH+x+w== + dependencies: + tslib "^2.3.1" + +"@aws-sdk/util-utf8-node@3.109.0": + version "3.109.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.109.0.tgz" + integrity sha512-Ti/ZBdvz2eSTElsucjzNmzpyg2MwfD1rXmxD0hZuIF8bPON/0+sZYnWd5CbDw9kgmhy28dmKue086tbZ1G0iLQ== + dependencies: + "@aws-sdk/util-buffer-from" "3.55.0" + tslib "^2.3.1" + +"@aws-sdk/util-waiter@3.127.0": + version "3.127.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.127.0.tgz" + integrity sha512-E5qrRpBJS8dmClqSDW1pWVMKzCG/mxabG6jVUtlW/WLHnl/znxGaOQc6tnnwKik0nEq/4DpT9fEfPUz9JiLrkw== + dependencies: + "@aws-sdk/abort-controller" "3.127.0" + "@aws-sdk/types" "3.127.0" + tslib "^2.3.1" + +"@aws-sdk/xml-builder@3.109.0": + version "3.109.0" + resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.109.0.tgz" + integrity sha512-+aAXynnrqya1Eukz4Gxch4xIXCZolIMWGD4Ll/Q5yXT5uAjGh2HQWd9J0LWE+gYChpWetZbAVYZ3cEJ6F+SpZA== + dependencies: + tslib "^2.3.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz" + integrity sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz" + integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-function-name" "^7.18.6" + "@babel/helper-member-expression-to-functions" "^7.18.6" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz" + integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.1.0" + +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.6", "@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.6", "@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.18.6", "@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-remap-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz" + integrity sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-wrap-function" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-skip-transparent-expression-wrappers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz" + integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helper-wrap-function@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz" + integrity sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw== + dependencies: + "@babel/helper-function-name" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" + integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + +"@babel/plugin-proposal-async-generator-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz" + integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== + dependencies: + "@babel/helper-environment-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" + integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" + integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz" + integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.18.8" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" + integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz" + integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz" + integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" + integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-async-to-generator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" + integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-remap-async-to-generator" "^7.18.6" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz" + integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-classes@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz" + integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" + integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-destructuring@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz" + integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" + integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz" + integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz" + integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz" + integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-identifier" "^7.18.6" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz" + integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.18.8": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz" + integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz" + integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + regenerator-transform "^0.15.0" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz" + integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.18.6": + version "7.18.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz" + integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-typescript" "^7.18.6" + +"@babel/plugin-transform-unicode-escapes@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz" + integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.18.9": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz" + integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.18.9" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.18.9" + "@babel/plugin-transform-classes" "^7.18.9" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.18.9" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.18.6" + "@babel/plugin-transform-modules-commonjs" "^7.18.6" + "@babel/plugin-transform-modules-systemjs" "^7.18.9" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.18.6" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.18.8" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.18.9" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.18.9" + babel-plugin-polyfill-corejs2 "^0.3.1" + babel-plugin-polyfill-corejs3 "^0.5.2" + babel-plugin-polyfill-regenerator "^0.3.1" + core-js-compat "^3.22.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.15.0": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" + +"@babel/runtime@^7.17.2", "@babel/runtime@^7.8.4": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz" + integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.9" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.9" + resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@ovos-media/ts-transform-paths@^1.7.18-1": + version "1.7.18-1" + resolved "https://registry.npmjs.org/@ovos-media/ts-transform-paths/-/ts-transform-paths-1.7.18-1.tgz" + integrity sha512-5uYtraYSWg1klaMYus3ouCOUUNzcI40pS0NCaw0PhoaPTimVfT3MV061ZLYR/4F14THqyofMjmCNcHgFrBX3AA== + dependencies: + "@zerollup/ts-helpers" "^1.7.18" + +"@sentry/core@7.10.0": + version "7.10.0" + resolved "https://registry.npmjs.org/@sentry/core/-/core-7.10.0.tgz" + integrity sha512-uq6oUXPH+6cjsEL5/j/xSW91mVrJo7knTqax7E5MDiA5j98BPK4budGiBiPO7GEB856QhA7N+pOO0lccii5QYQ== + dependencies: + "@sentry/hub" "7.10.0" + "@sentry/types" "7.10.0" + "@sentry/utils" "7.10.0" + tslib "^1.9.3" + +"@sentry/hub@7.10.0": + version "7.10.0" + resolved "https://registry.npmjs.org/@sentry/hub/-/hub-7.10.0.tgz" + integrity sha512-9Appy7J87EU7Xu2BDY1cLK79nsuE72geeYmG71lgdttTD3XOMcQBOxET4/2sAI+d/ansurXnURx+DAQ9FOKT+w== + dependencies: + "@sentry/types" "7.10.0" + "@sentry/utils" "7.10.0" + tslib "^1.9.3" + +"@sentry/node@^7.7.0": + version "7.10.0" + resolved "https://registry.npmjs.org/@sentry/node/-/node-7.10.0.tgz" + integrity sha512-L/DSEJ7Biy8ovvlCyfu5MpCYG108FIGVbJ1h0NBGr5+uLxTNg2WJWojJoiQNiRcWl4s0dcIXrRdi0HR2Sx+DUw== + dependencies: + "@sentry/core" "7.10.0" + "@sentry/hub" "7.10.0" + "@sentry/types" "7.10.0" + "@sentry/utils" "7.10.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@^7.7.0": + version "7.10.0" + resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.10.0.tgz" + integrity sha512-ojuBYS1bL/IGWKt/ItY4HmC8NElJrYtTUvm73VbhylhIO4zcn5ICHmgMFj1lqL9gQ1nCnAlifKiWIjL9qUatTA== + dependencies: + "@sentry/hub" "7.10.0" + "@sentry/types" "7.10.0" + "@sentry/utils" "7.10.0" + tslib "^1.9.3" + +"@sentry/types@7.10.0": + version "7.10.0" + resolved "https://registry.npmjs.org/@sentry/types/-/types-7.10.0.tgz" + integrity sha512-1UBwdbS0xXzANzp63g4eNQly/qKIXp0swP5OTKWoADvKBtL4anroLUA/l8ADMtuwFZYtVANc8WRGxM2+YmaXtg== + +"@sentry/utils@7.10.0": + version "7.10.0" + resolved "https://registry.npmjs.org/@sentry/utils/-/utils-7.10.0.tgz" + integrity sha512-/aD2DnfyOhV0Wdbb6VF78vu4fQIZJyuReDpBI7MV/EqcEB6FxUKq2YjinfKZF/exHEPig6Ag/Yt+CRFgvtVFuw== + dependencies: + "@sentry/types" "7.10.0" + tslib "^1.9.3" + +"@sinclair/typebox@^0.24.1": + version "0.24.20" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.20.tgz" + integrity sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ== + +"@sinonjs/commons@^1.7.0": + version "1.8.3" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@sqltools/formatter@^1.2.2": + version "1.2.3" + resolved "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.3.tgz" + integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/amqplib@^0.8.1": + version "0.8.2" + resolved "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.8.2.tgz" + integrity sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA== + dependencies: + "@types/bluebird" "*" + "@types/node" "*" + +"@types/babel__core@^7.1.14": + version "7.1.19" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.4" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.1" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.17.1" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz" + integrity sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA== + dependencies: + "@babel/types" "^7.3.0" + +"@types/bcrypt@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz" + integrity sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw== + dependencies: + "@types/node" "*" + +"@types/bluebird@*": + version "3.5.36" + resolved "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz" + integrity sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q== + +"@types/body-parser@*", "@types/body-parser@^1.19.0": + version "1.19.2" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/dotenv@^8.2.0": + version "8.2.0" + resolved "https://registry.npmjs.org/@types/dotenv/-/dotenv-8.2.0.tgz" + integrity sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw== + dependencies: + dotenv "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.29" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz" + integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.12": + version "4.17.13" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" + integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.5" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + +"@types/i18next-node-fs-backend@^2.1.0": + version "2.1.1" + resolved "https://registry.npmjs.org/@types/i18next-node-fs-backend/-/i18next-node-fs-backend-2.1.1.tgz" + integrity sha512-ESvH90OICQkKU3yuuRzF6YfHt5KACE55FOiUM59mMGnC+h03lHGdEYo3z3THbwS5FdMskLyIs2O7f6Oaz8P9sw== + dependencies: + i18next ">=17.0.11" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/jsonwebtoken@^8.5.8": + version "8.5.8" + resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz" + integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== + dependencies: + "@types/node" "*" + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/morgan@^1.9.3": + version "1.9.3" + resolved "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.3.tgz" + integrity sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q== + dependencies: + "@types/node" "*" + +"@types/multer@^1.4.7": + version "1.4.7" + resolved "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz" + integrity sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA== + dependencies: + "@types/express" "*" + +"@types/node-fetch@^2.6.2": + version "2.6.2" + resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node-os-utils@^1.3.0": + version "1.3.0" + resolved "https://registry.npmjs.org/@types/node-os-utils/-/node-os-utils-1.3.0.tgz" + integrity sha512-XwVteWQx/XkfRPyaGkw8dEbrCAkoRZ73pI3XznUYIpzbCfpQB3UnDlR5TnmdhetlT889tUJGF8QWo9xrgTpsiA== + +"@types/node@*", "@types/node@^18.0.6": + version "18.6.3" + resolved "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz" + integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== + +"@types/node@^16.9.2": + version "16.11.45" + resolved "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz" + integrity sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ== + +"@types/notp@^2.0.0": + version "2.0.2" + resolved "https://registry.npmjs.org/@types/notp/-/notp-2.0.2.tgz" + integrity sha512-JUcVYN9Tmw0AjoAfvjslS4hbv39fPBbZdftBK3b50g5z/DmhLsu6cd0UOEBiQuMwy2FirshF2Gk9gAvfWjshMw== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.5": + version "2.6.3" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz" + integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/serve-static@*": + version "1.13.10" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.1" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + +"@types/stream-buffers@^3.0.3": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz" + integrity sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w== + dependencies: + "@types/node" "*" + +"@types/strip-bom@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== + +"@types/strip-json-comments@0.0.30": + version "0.0.30" + resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" + integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + +"@types/ws@^8.5.3": + version "8.5.3" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.10" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz" + integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== + dependencies: + "@types/yargs-parser" "*" + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@zerollup/ts-helpers@^1.7.18": + version "1.7.18" + resolved "https://registry.npmjs.org/@zerollup/ts-helpers/-/ts-helpers-1.7.18.tgz" + integrity sha512-S9zN+y+i5yN/evfWquzSO3lubqPXIsPQf6p9OiPMpRxDx/0totPLF39XoRw48Dav5dSvbIE8D2eAPpXXJxvKwg== + dependencies: + resolve "^1.12.0" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-walk@^8.1.1, acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.7.0: + version "8.7.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + +agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" + integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv@^8.0.0, ajv@^8.11.0: + version "8.11.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +amqplib@^0.10.1: + version "0.10.1" + resolved "https://registry.npmjs.org/amqplib/-/amqplib-0.10.1.tgz" + integrity sha512-Hs33MdtFmJ2WKQT9SBtrlet3aUNzMzZA/FF6p3NGGo7Fp/BVD4X3Po7bQxAA7uE0MmXPZ8EschLMbN+CjGx4dg== + dependencies: + bitsyntax "~0.1.0" + buffer-more-ints "~1.0.0" + readable-stream "1.x >=1.1.9" + url-parse "~1.5.10" + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^3.0.3, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz" + integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== + +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" + integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +ast-types@^0.13.2: + version "0.13.4" + resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz" + integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== + dependencies: + tslib "^2.0.1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.1" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" + +babel-plugin-polyfill-regenerator@^0.3.1: + version "0.3.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +basic-auth@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + +bcrypt@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz" + integrity sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + node-addon-api "^3.1.0" + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bitsyntax@~0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz" + integrity sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== + dependencies: + buffer-more-ints "~1.0.0" + debug "~2.6.9" + safe-buffer "~5.1.2" + +body-parser@1.20.0, body-parser@^1.19.0: + version "1.20.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bowser@^2.11.0: + version "2.11.0" + resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" + integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.20.2, browserslist@^4.21.1: + version "4.21.2" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz" + integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== + dependencies: + caniuse-lite "^1.0.30001366" + electron-to-chromium "^1.4.188" + node-releases "^2.0.6" + update-browserslist-db "^1.0.4" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-more-ints@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz" + integrity sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== + +buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +busboy@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001366: + version "1.0.30001367" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz" + integrity sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw== + +canvas@^2.9.3: + version "2.9.3" + resolved "https://registry.npmjs.org/canvas/-/canvas-2.9.3.tgz" + integrity sha512-WOUM7ghii5TV2rbhaZkh1youv/vW1/Canev6Yx6BG2W+1S07w8jKZqKkPnbiPpQEDsnJdN8ouDd7OvQEGXDcUw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + nan "^2.15.0" + simple-get "^3.0.3" + +chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.10: + version "1.0.0-rc.12" + resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.5.1: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.3.2" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +cjs-module-lexer@^1.0.0: + version "1.2.2" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +component-emitter@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cookiejar@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +core-js-compat@^3.21.0, core-js-compat@^3.22.1: + version "3.23.4" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.4.tgz" + integrity sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q== + dependencies: + browserslist "^4.21.1" + semver "7.0.0" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +data-uri-to-buffer@3: + version "3.0.1" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" + integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== + +date-fns@^2.28.0: + version "2.28.0" + resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz" + integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== + +debug@2.6.9, debug@~2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^4.2.0: + version "4.2.1" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" + integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== + dependencies: + mimic-response "^2.0.0" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +define-properties@^1.1.3: + version "1.1.4" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +degenerator@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz" + integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== + dependencies: + ast-types "^0.13.2" + escodegen "^1.8.1" + esprima "^4.0.0" + vm2 "^3.9.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +denque@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + +depd@2.0.0, depd@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +dezalgo@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" + integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== + dependencies: + asap "^2.0.0" + wrappy "1" + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dotenv@*, dotenv@^16.0.0, dotenv@^16.0.1: + version "16.0.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz" + integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== + +dynamic-dedupe@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" + integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== + dependencies: + xtend "^4.0.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.188: + version "1.4.192" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.192.tgz" + integrity sha512-8nCXyIQY9An88NXAp+PuPy5h3/w5ZY7Iu2lag65Q0XREprcat5F8gKhoHsBUnQcFuCRnmevpR8yEBYRU3d2HDw== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +entities@2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.3.0: + version "4.3.1" + resolved "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz" + integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^1.8.1: + version "1.14.3" + resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exif-be-gone@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/exif-be-gone/-/exif-be-gone-1.3.0.tgz" + integrity sha512-6s/SnuWviwtP6TB3Gc2Nc2GIWYCIs3N9V4Md773EWIfC4uOR+O3thZXO4ElbJJOvjtDNR4FVoMVNKgZWRKiQNQ== + dependencies: + "@types/stream-buffers" "^3.0.3" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + +express-async-errors@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz" + integrity sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng== + +express@^4.17.1: + version "4.18.1" + resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-xml-parser@3.19.0: + version "3.19.0" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" + integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== + +fb-watchman@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + +file-type@16.5: + version "16.5.4" + resolved "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== + dependencies: + readable-web-to-node-stream "^3.0.0" + strtok3 "^6.2.4" + token-types "^4.1.1" + +file-uri-to-path@2: + version "2.0.0" + resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz" + integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-yarn-workspace-root@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" + integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== + dependencies: + micromatch "^4.0.2" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +formidable@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz" + integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== + dependencies: + dezalgo "1.0.3" + hexoid "1.0.0" + once "1.4.0" + qs "6.9.3" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +ftp@^0.3.10: + version "0.3.10" + resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz" + integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-uri@3: + version "3.0.2" + resolved "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz" + integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== + dependencies: + "@tootallnate/once" "1" + data-uri-to-buffer "3" + debug "4" + file-uri-to-path "2" + fs-extra "^8.1.0" + ftp "^0.3.10" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.0: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" + integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.1, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +helmet@^4.4.1: + version "4.6.0" + resolved "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz" + integrity sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg== + +hexoid@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" + integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +htmlparser2@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz" + integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + domutils "^3.0.1" + entities "^4.3.0" + +http-cache-semantics@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@5, https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +i18next-http-middleware@^3.1.3: + version "3.2.1" + resolved "https://registry.npmjs.org/i18next-http-middleware/-/i18next-http-middleware-3.2.1.tgz" + integrity sha512-zBwXxDChT0YLoTXIR6jRuqnUUhXW0Iw7egoTnNXyaDRtTbfWNXwU0a53ThyuRPQ+k+tXu3ZMNKRzfLuononaRw== + +i18next-node-fs-backend@^2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/i18next-node-fs-backend/-/i18next-node-fs-backend-2.1.3.tgz" + integrity sha512-CreMFiVl3ChlMc5ys/e0QfuLFOZyFcL40Jj6jaKD6DxZ/GCUMxPI9BpU43QMWUgC7r+PClpxg2cGXAl0CjG04g== + dependencies: + js-yaml "3.13.1" + json5 "2.0.0" + +i18next@>=17.0.11, i18next@^21.8.14: + version "21.8.14" + resolved "https://registry.npmjs.org/i18next/-/i18next-21.8.14.tgz" + integrity sha512-4Yi+DtexvMm/Yw3Q9fllzY12SgLk+Mcmar+rCAccsOPul/2UmnBzoHbTGn/L48IPkFcmrNaH7xTLboBWIbH6pw== + dependencies: + "@babel/runtime" "^7.17.2" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2, iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +image-size@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +ip@^1.1.5: + version "1.1.8" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" + integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" + integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.5" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-expect-message@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz" + integrity sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q== + +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== + dependencies: + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" + import-local "^3.0.2" + jest-cli "^28.1.3" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.13.1, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.0.0.tgz" + integrity sha512-0EdQvHuLm7yJ7lyG5dp7Q3X2ku++BG5ZHaJ5FTnaXpKqDrw4pMxel5Bt3oAYMthnrthFBdnZ1FcsXTPyrQlV0w== + dependencies: + minimist "^1.2.0" + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +klaw-sync@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" + integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== + dependencies: + graceful-fs "^4.1.11" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +lambert-server@^1.2.12: + version "1.2.12" + resolved "https://registry.npmjs.org/lambert-server/-/lambert-server-1.2.12.tgz" + integrity sha512-TY6k60KLVfBpPrl9lcrN54RJdTBg9f8JqJPoHg5d/FMLnnwwQtT4budpoQjyLDwBLhS+zpXo0aBCwnnGgTVGaw== + dependencies: + body-parser "^1.19.0" + chalk "^4.1.1" + express "^4.17.1" + express-async-errors "^3.1.1" + helmet "^4.4.1" + missing-native-js-functions "^1.2.11" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +lru-cache@^4.1.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +make-dir@^3.0.0, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +methods@^1.1.2, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" + integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" + integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.6" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +missing-native-js-functions@^1.2.11, missing-native-js-functions@^1.2.18: + version "1.2.18" + resolved "https://registry.npmjs.org/missing-native-js-functions/-/missing-native-js-functions-1.2.18.tgz" + integrity sha512-TZr1muzDE4kfu0LHDzg63O7m2qW3Gpyc875ki8+YlSRj+4ibZRv0ySQ0cSB06GoBL9ejeehLmkQnybLpp9jYcg== + +mkdirp@^0.5.4: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +morgan@^1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" + integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== + dependencies: + basic-auth "~2.0.1" + debug "2.6.9" + depd "~2.0.0" + on-finished "~2.3.0" + on-headers "~1.0.2" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multer@^1.4.5-lts.1: + version "1.4.5-lts.1" + resolved "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz" + integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== + dependencies: + append-field "^1.0.0" + busboy "^1.0.0" + concat-stream "^1.5.2" + mkdirp "^0.5.4" + object-assign "^4.1.1" + type-is "^1.6.4" + xtend "^4.0.0" + +mysql2@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-2.3.3.tgz#944f3deca4b16629052ff8614fbf89d5552545a0" + integrity sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA== + dependencies: + denque "^2.0.1" + generate-function "^2.3.1" + iconv-lite "^0.6.3" + long "^4.0.0" + lru-cache "^6.0.0" + named-placeholders "^1.1.2" + seq-queue "^0.0.5" + sqlstring "^2.3.2" + +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +named-placeholders@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8" + integrity sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA== + dependencies: + lru-cache "^4.1.3" + +nan@^2.15.0: + version "2.16.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3, negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +netmask@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz" + integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-2fa@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/node-2fa/-/node-2fa-2.0.3.tgz" + integrity sha512-PQldrOhjuoZyoydMvMSctllPN1ZPZ1/NwkEcgYwY9faVqE/OymxR+3awPpbWZxm6acLKqvmNqQmdqTsqYyflFw== + dependencies: + "@types/notp" "^2.0.0" + notp "^2.0.3" + thirty-two "1.0.2" + tslib "^2.1.0" + +node-addon-api@^3.1.0: + version "3.2.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== + +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +notp@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/notp/-/notp-2.0.3.tgz" + integrity sha512-oBig/2uqkjQ5AkBuw4QJYwkEWa/q+zHxI5/I5z6IeP2NT0alpJFsP/trrfCC+9xOAgQSZXssNi962kp5KBmypQ== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.0.1, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@1.4.0, once@^1.3.0, once@^1.3.1: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.4.2: + version "7.4.2" + resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pac-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz" + integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + get-uri "3" + http-proxy-agent "^4.0.1" + https-proxy-agent "5" + pac-resolver "^5.0.0" + raw-body "^2.2.0" + socks-proxy-agent "5" + +pac-resolver@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz" + integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== + dependencies: + degenerator "^3.0.2" + ip "^1.1.5" + netmask "^2.0.2" + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +patch-package@^6.4.7: + version "6.4.7" + resolved "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz" + integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== + dependencies: + "@yarnpkg/lockfile" "^1.1.0" + chalk "^2.4.2" + cross-spawn "^6.0.5" + find-yarn-workspace-root "^2.0.0" + fs-extra "^7.0.1" + is-ci "^2.0.0" + klaw-sync "^6.0.0" + minimist "^1.2.0" + open "^7.4.2" + rimraf "^2.6.3" + semver "^5.6.0" + slash "^2.0.0" + tmp "^0.0.33" + +path-equal@^1.1.2: + version "1.2.2" + resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.2.2.tgz" + integrity sha512-AUJvbcle1Zgb1TgtftHYknlrgrSYyI1ytrYgSbKUHSybwqUDnbD2cw9PIWivuMvsN+GTXmr/DRN4VBXpHG6aGg== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +peek-readable@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz" + integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== + +pg-connection-string@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" + integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.5.1.tgz#f499ce76f9bf5097488b3b83b19861f28e4ed905" + integrity sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ== + +pg-protocol@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" + integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.7.3: + version "8.7.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.3.tgz#8a5bdd664ca4fda4db7997ec634c6e5455b27c44" + integrity sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.5.0" + pg-pool "^3.5.1" + pg-protocol "^1.5.0" + pg-types "^2.1.0" + pgpass "1.x" + +pgpass@1.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz" + integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== + dependencies: + agent-base "^6.0.0" + debug "4" + http-proxy-agent "^4.0.0" + https-proxy-agent "^5.0.0" + lru-cache "^5.1.1" + pac-proxy-agent "^5.0.0" + proxy-from-env "^1.0.0" + socks-proxy-agent "^5.0.0" + +proxy-from-env@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.10.3, qs@^6.10.3: + version "6.10.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +qs@6.9.3: + version "6.9.3" + resolved "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz" + integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1, raw-body@^2.2.0: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +readable-stream@1.1.x, "readable-stream@1.x >=1.1.9": + version "1.1.14" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-web-to-node-stream@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regenerate-unicode-properties@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" + integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.15.0: + version "0.15.0" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" + integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.0.1" + regjsgen "^0.6.0" + regjsparser "^0.8.2" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" + integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== + +regjsparser@^0.8.2: + version "0.8.4" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" + integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== + dependencies: + jsesc "~0.5.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve@^1.0.0, resolve@^1.1.6, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-stable-stringify@^2.2.0: + version "2.3.1" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz" + integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.5, semver@^7.3.7: + version "7.3.7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^3.0.3: + version "3.1.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" + integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== + dependencies: + decompress-response "^4.2.0" + once "^1.3.1" + simple-concat "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@5, socks-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz" + integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== + dependencies: + agent-base "^6.0.2" + debug "4" + socks "^2.3.3" + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.3.3: + version "2.6.2" + resolved "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz" + integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== + dependencies: + ip "^1.1.5" + smart-buffer "^4.2.0" + +socks@^2.6.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" + integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.12: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sqlite3@^5.0.11: + version "5.0.11" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.11.tgz#102c835d70be66da9d95a383fd6ea084a082ef7f" + integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + node-addon-api "^4.2.0" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +sqlstring@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stack-utils@^2.0.3: + version "2.0.5" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strtok3@^6.2.4: + version "6.3.0" + resolved "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz" + integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^4.1.0" + +superagent@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz" + integrity sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg== + dependencies: + component-emitter "^1.3.0" + cookiejar "^2.1.3" + debug "^4.3.4" + fast-safe-stringify "^2.1.1" + form-data "^4.0.0" + formidable "^2.0.1" + methods "^1.1.2" + mime "2.6.0" + qs "^6.10.3" + readable-stream "^3.6.0" + semver "^7.3.7" + +supertest@^6.1.6: + version "6.2.4" + resolved "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz" + integrity sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA== + dependencies: + methods "^1.1.2" + superagent "^8.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" + integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thirty-two@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + integrity sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +token-types@^4.1.1: + version "4.2.1" + resolved "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz" + integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tree-kill@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +ts-node-dev@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz" + integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== + dependencies: + chokidar "^3.5.1" + dynamic-dedupe "^0.3.0" + minimist "^1.2.6" + mkdirp "^1.0.4" + resolve "^1.0.0" + rimraf "^2.6.1" + source-map-support "^0.5.12" + tree-kill "^1.2.2" + ts-node "^10.4.0" + tsconfig "^7.0.0" + +ts-node@^10.2.1, ts-node@^10.4.0: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +ts-patch@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ts-patch/-/ts-patch-2.0.2.tgz#be9dc294ced6f53d6a8912f1f6ac98af23a715cd" + integrity sha512-NbgdS/J/ylaARJVaF1w4cPw378yvw6C1026fU5NKC2GO4jCwRlkuE/G7gwknNMHwkAOhwamKjuzkuLw/u4KlBg== + dependencies: + chalk "^4.1.2" + glob "^8.0.3" + global-prefix "^3.0.0" + minimist "^1.2.6" + resolve "^1.22.1" + shelljs "^0.8.5" + strip-ansi "^6.0.1" + +tsconfig@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" + integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + dependencies: + "@types/strip-bom" "^3.0.0" + "@types/strip-json-comments" "0.0.30" + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@^1.11.1, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.1: + version "2.4.0" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@^1.6.4, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typeorm@^0.3.7: + version "0.3.7" + resolved "https://registry.npmjs.org/typeorm/-/typeorm-0.3.7.tgz" + integrity sha512-MsPJeP6Zuwfe64c++l80+VRqpGEGxf0CkztIEnehQ+CMmQPSHjOnFbFxwBuZ2jiLqZTjLk2ZqQdVF0RmvxNF3Q== + dependencies: + "@sqltools/formatter" "^1.2.2" + app-root-path "^3.0.0" + buffer "^6.0.3" + chalk "^4.1.0" + cli-highlight "^2.1.11" + date-fns "^2.28.0" + debug "^4.3.3" + dotenv "^16.0.0" + glob "^7.2.0" + js-yaml "^4.1.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.3.1" + uuid "^8.3.2" + xml2js "^0.4.23" + yargs "^17.3.1" + +typescript-json-schema@^0.54.0: + version "0.54.0" + resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.54.0.tgz" + integrity sha512-/MNhm1pjdxXiVspjjyRCrQAA1B768cRzHU83aIqN5vQqQEW2NgyyKOfcguiRIMM64lseIZIelegnHOHEu7YDCg== + dependencies: + "@types/json-schema" "^7.0.9" + "@types/node" "^16.9.2" + glob "^7.1.7" + path-equal "^1.1.2" + safe-stable-stringify "^2.2.0" + ts-node "^10.2.1" + typescript "~4.6.0" + yargs "^17.1.1" + +typescript@^4.1.2: + version "4.7.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +typescript@~4.6.0: + version "4.6.4" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz" + integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz" + integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@~1.5.10: + version "1.5.10" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vm2@^3.9.8: + version "3.9.10" + resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz" + integrity sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ== + dependencies: + acorn "^8.7.0" + acorn-walk "^8.2.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^8.8.1: + version "8.8.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + +xml2js@^0.4.23: + version "0.4.23" + resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xregexp@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz" + integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.1.1, yargs@^17.3.1: + version "17.5.1" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 08d5aca13230308cb80199cf7a64e2d9752038f6 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Sat, 13 Aug 2022 04:21:48 +0200 Subject: [PATCH 13/23] Update scripts, update workspace, add launch.json --- .vscode/launch.json | 20 ++++++++ fosscord-server.code-workspace | 28 ++-------- package-lock.json | Bin 838348 -> 840738 bytes scripts/depcheck.js | 2 +- scripts/depclean.js | 91 ++++++++++++++++----------------- scripts/install.js | 23 --------- scripts/rights.js | 2 +- scripts/update_schemas.js | 2 +- scripts/utils.js | 2 - 9 files changed, 72 insertions(+), 98 deletions(-) create mode 100644 .vscode/launch.json delete mode 100644 scripts/install.js diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..1ddf16e7f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${file}", + "outFiles": [ + "${workspaceFolder}/**/*.js" + ] + } + ] +} \ No newline at end of file diff --git a/fosscord-server.code-workspace b/fosscord-server.code-workspace index 4a7440f67..1d6774adf 100644 --- a/fosscord-server.code-workspace +++ b/fosscord-server.code-workspace @@ -1,22 +1,16 @@ { "folders": [ { - "path": "bundle" + "path": "src/" }, { - "path": "api" + "path": "assets/" }, { - "path": "cdn" + "path": "scripts/" }, { - "path": "gateway" - }, - { - "path": "util" - }, - { - "path": "plugins" + "path": "." } ], "settings": { @@ -26,18 +20,6 @@ ".prettierrc": true, ".vscode": true, "*.ansi": true, - "benchmarks": true, - "database.db": true, - "files/": true, - "jest": true, - "locales/[!e]*": true, - "locales/e[!n]*": true, - "node_modules": true, - "package-lock.json": true, - "patches": true, - "README.md": true, - "tests/": true, - "tsconfig.tsbuildinfo": true } } -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a97e75be2b2923dedbc5574e8587c3730b3735aa..2da3174eebafdffcfe1571914522f6a31b0cbb27 100644 GIT binary patch delta 1492 zcmchXTWBLy7=W2fW-^(~W?e5$+il%#y0${PNhX&`qOxp~O(ypyY0|VQ=uR$8(%jli z(@7#K>O%!Vy9Dw`~96R`~v5 zqu#E!!o)f1xOC-}8}bn`djVgPf%O~NB<%0W&9J|s)WZF@kW-0;n$y1#v**LQvYX+O zp%x=FVu#@ubBa0+Z#Ym5`1fVQ5Q;0+u>Aq9hNpY@L*h||>=Oh&zkm;kAMVM8K?qWa zi$=i55cqBz9Y*Z1`#5R>;|@wmF`Yvvlg&!SVzowmb3VUek@l{!9JlD@LTot_4hJ&a zM!4Z&y$h@%$~Fp2+r~H7Q@*6H(P0X0CgpMY7_JVhMM?IA?bG15OuT zX{R%t*7Cf~9t)cm8C}U{p=YCMKez04a;1_dT(r)%{f$7hunsYol=$~{>_Nb9A~UeM zggxBPXmhKFODH4=38e%nZuL~Mz5mDLU4)pq2qg7iiVSg5F$tG-s$bx&K*f({8eBGi zI^SC5YJ90)gSAUUaA5UE&k|F~!?5}sJRhM<>I_%mBsFrUtK53F2xo4nPKamkk?)|W zG_0_LDKw}wtg!a6av(1@7~R`P6cdLeFn668g6(U>*zXpP!B0Er7~D5aYG$Mlq*|(# z`ib^c{-@y5=HH4-f6FnE&|Ljdg(2|hG)cizDHR62BMNoj=NGOi>AugXRZqk1o5bWH cIeq?p()6##ow!Gy5MQ}OCJ?dr3}p`g29q`7X#fBK delta 493 zcmZ3q!uZTo;|c30hj5xre$c=%T|tGNW3n*6*k%pJKWvk$h2@%^INF^!7=f4xh?#+y z1&CR3{p#B&LU%u_%P*2AC(Mh8hND=T^ED8)^qvMMQ=r z28XzqMdX`DIcFyMdl?r;Whd!Z6bEMII|fFS<(cFMWMvyOn=DCXfVC@EEf->;q(m!tm2I3(+^bfSTLGSf8WI>Hr@Ul7mr|Z zMruw@RNA;o`s&tbjKhzjp+-z*#x#XPh^W=+P?o2<4MNp22 { - console.log(`Installing all packages for ${part}...`); - execIn("npm i", path.join(__dirname, "..", "..", part)); -}); +console.log(`Installing all packages...`); +execIn("npm i", path.join(__dirname, "..")); -parts.forEach((part) => { - let partDir = path.join(__dirname, "..", "..", part); - let distDir = path.join(partDir, "dist"); - let start = 0; - start = getLines( - execIn("npm ls --parseable --package-lock-only -a", partDir) - ); - if (fs.existsSync(distDir)) - fs.rmSync(distDir, { - recursive: true, - force: true, - }); - let x = { - dependencies: [], - devDependencies: [], - invalidDirs: [], - invalidFiles: [], - missing: [], - using: [], - }; - let dcproc = execIn("npx depcheck --json", partDir); - if(dcproc.stdout) x = JSON.parse(dcproc.stdout); - else x = JSON.parse(dcproc); +let partDir = path.join(__dirname, ".."); +let distDir = path.join(partDir, "dist"); +let start = 0; +start = getLines( + execIn("npm ls --parseable --package-lock-only -a", partDir) +); +if (fs.existsSync(distDir)) + fs.rmSync(distDir, { + recursive: true, + force: true, + }); +let x = { + dependencies: [], + devDependencies: [], + invalidDirs: [], + invalidFiles: [], + missing: [], + using: [], +}; +let dcproc = execIn("npx depcheck --json", partDir); +if(dcproc.stdout) x = JSON.parse(dcproc.stdout); +else x = JSON.parse(dcproc); - fs.writeFileSync( - path.join(__dirname, "..", `depclean.out.${part}.json`), - JSON.stringify(x, null, "\t"), - { encoding: "utf8" } - ); +fs.writeFileSync( + path.join(__dirname, "..", `depclean.out.json`), + JSON.stringify(x, null, "\t"), + { encoding: "utf8" } +); - let depsToRemove = x.dependencies.join(" "); - if (depsToRemove) execIn(`npm r --save ${depsToRemove}`, partDir); +let depsToRemove = x.dependencies.join(" "); +if (depsToRemove) execIn(`npm r --save ${depsToRemove}`, partDir); - depsToRemove = x.devDependencies.join(" "); - if (depsToRemove) execIn(`npm r --save --dev ${depsToRemove}`, partDir); +depsToRemove = x.devDependencies.join(" "); +if (depsToRemove) execIn(`npm r --save --dev ${depsToRemove}`, partDir); + +if (removeModules && fs.existsSync(path.join(partDir, "node_modules"))) + fs.rmSync(path.join(partDir, "node_modules"), { + recursive: true, + force: true, + }); +let end = getLines( + execIn("npm ls --parseable --package-lock-only -a", partDir) +); +console.log(`${part}: ${start} -> ${end} (diff: ${start - end})`); - if (removeModules && fs.existsSync(path.join(partDir, "node_modules"))) - fs.rmSync(path.join(partDir, "node_modules"), { - recursive: true, - force: true, - }); - let end = getLines( - execIn("npm ls --parseable --package-lock-only -a", partDir) - ); - console.log(`${part}: ${start} -> ${end} (diff: ${start - end})`); -}); console.log("Installing required packages for bundle..."); execIn(`npm i --save ${bundleRequired.join(" ")}`, path.join(__dirname, "..")); diff --git a/scripts/install.js b/scripts/install.js deleted file mode 100644 index db9dadbc6..000000000 --- a/scripts/install.js +++ /dev/null @@ -1,23 +0,0 @@ -const path = require("path"); -const fs = require("fs"); -const parts = ["api", "util", "cdn", "gateway"]; - -const bundle = require("../package.json"); - -for (const part of parts) { - const { devDependencies, dependencies } = require(path.join( - "..", - "..", - part, - "package.json" - )); - bundle.devDependencies = { ...bundle.devDependencies, ...devDependencies }; - bundle.dependencies = { ...bundle.dependencies, ...dependencies }; - delete bundle.dependencies["@fosscord/util"]; -} - -fs.writeFileSync( - path.join(__dirname, "..", "package.json"), - JSON.stringify(bundle, null, "\t"), - { encoding: "utf8" } -); diff --git a/scripts/rights.js b/scripts/rights.js index c363b0c50..20fd139c7 100644 --- a/scripts/rights.js +++ b/scripts/rights.js @@ -6,7 +6,7 @@ const { argv, stdout, exit } = require("process"); const { execIn, getLines, parts } = require("./utils"); -let lines = fs.readFileSync(path.join(__dirname, "..", "..", "util", "src","util","Rights.ts")).toString() +let lines = fs.readFileSync(path.join(__dirname, "..", "src", "util", "util","Rights.ts")).toString() let lines2 = lines.split("\n"); let lines3 = lines2.filter(y=>y.includes(": BitFlag(")); let lines4 = lines3.map(x=>x.split("//")[0].trim()) diff --git a/scripts/update_schemas.js b/scripts/update_schemas.js index a018120b9..361bedc13 100644 --- a/scripts/update_schemas.js +++ b/scripts/update_schemas.js @@ -6,4 +6,4 @@ const { argv, stdout, exit } = require("process"); const { execIn, getLines, parts } = require("./utils"); -execIn("node scripts/generate_schema.js", path.join("..", "api")); \ No newline at end of file +execIn("node scripts/generate_schema.js", path.join('.')); \ No newline at end of file diff --git a/scripts/utils.js b/scripts/utils.js index f4b1ad7f6..ca41bcf20 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -4,8 +4,6 @@ const { env } = require("process"); const { execSync } = require("child_process"); const { argv, stdout, exit } = require("process"); -const parts = ["api", "util", "cdn", "gateway", "bundle"]; - function copyRecursiveSync(src, dest) { //if (verbose) console.log(`cpsync: ${src} -> ${dest}`); let exists = fs.existsSync(src); From 9e00f759d788d54cd190a23a0b39a8a192eec1b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erkin=20Alp=20G=C3=BCney?= Date: Sat, 13 Aug 2022 10:21:42 +0300 Subject: [PATCH 14/23] Update .vscode/launch.json --- .vscode/launch.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 1ddf16e7f..09ff71341 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,7 +1,4 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { From bed14559f83734c94ffb038a1407a2f5907e98df Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Sat, 13 Aug 2022 09:31:35 +0200 Subject: [PATCH 15/23] downgrade ajv so patches apply --- package-lock.json | Bin 840738 -> 840733 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 2da3174eebafdffcfe1571914522f6a31b0cbb27..0d6f7bd0679d4557bf4e4ddabcfaf06f81c3c21c 100644 GIT binary patch delta 290 zcmZ3q!g%fq;|(7fCqL%YXqIAXmttbvF2%&OymLCE2D9OGEe%ed=|LLIN+FgO2IfII z;g0Dcre-GPA=)lksg@9w%CRa=Kc&Ih)Gpb}1jNih%mT!$K+Fcj n?As-KIquIwb4w^K++sQXpaQ#0JJ2ye%mu{U+fQlmM63n??=)Vz delta 324 zcmbQc!g$dN;|(7fSqu&J3?@J2RBe`IYL{eU+%Cz)w7iqiaPq}HhP;VcW%|1MKvLI2 z&u}`UIjeGrdwM}pigTH7Vve(cQ&mYsS!RigQHHaDNn~1@V_8XYXr869SCV@~q>p2X zbEv;bMT(($uCsGgU`43EXGx}0c~qHKaB_IQg`a0xpl_hLVNpuK^u#;N3e%5ja5haZ zPhb|GzWxNOWqVpL6A&{4F$)m00x=s9vu{u9<>;S9XZJmP&n?@2OoJ1Mxqz5^`!Nlk G@YMk7_Hax9 diff --git a/package.json b/package.json index 95dbb6597..59c66811d 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@sentry/node": "^7.7.0", "@sentry/tracing": "^7.7.0", "@types/node-fetch": "^2.6.2", - "ajv": "^8.11.0", + "ajv": "^8.6.2", "ajv-formats": "^2.1.1", "amqplib": "^0.10.1", "bcrypt": "^5.0.1", From 5e629decfc5aaa58fb5c584fa15e76fd5b44c23f Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Sat, 13 Aug 2022 20:43:35 +0200 Subject: [PATCH 16/23] Do the funny thing (make user->invite cascade delet) --- ... => 1660416072362-InvitersAreDeletable.ts} | 37 +-- .../1660416055566-InvitersAreDeletable.ts | 26 ++ .../1660416010862-InvitersAreDeletable.ts | 246 ++++++++++++++++++ 3 files changed, 292 insertions(+), 17 deletions(-) rename src/util/migrations/mariadb/{1660265930624-CodeCleanup5.ts => 1660416072362-InvitersAreDeletable.ts} (51%) create mode 100644 src/util/migrations/postgres/1660416055566-InvitersAreDeletable.ts create mode 100644 src/util/migrations/sqlite/1660416010862-InvitersAreDeletable.ts diff --git a/src/util/migrations/mariadb/1660265930624-CodeCleanup5.ts b/src/util/migrations/mariadb/1660416072362-InvitersAreDeletable.ts similarity index 51% rename from src/util/migrations/mariadb/1660265930624-CodeCleanup5.ts rename to src/util/migrations/mariadb/1660416072362-InvitersAreDeletable.ts index 04f8e6af4..8374eafbc 100644 --- a/src/util/migrations/mariadb/1660265930624-CodeCleanup5.ts +++ b/src/util/migrations/mariadb/1660416072362-InvitersAreDeletable.ts @@ -1,16 +1,21 @@ import { MigrationInterface, QueryRunner } from "typeorm"; -export class CodeCleanup51660265930624 implements MigrationInterface { - name = 'CodeCleanup51660265930624' +export class InvitersAreDeletable1660416072362 implements MigrationInterface { + name = 'InvitersAreDeletable1660416072362' public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` - ALTER TABLE \`users\` - ADD \`settingsId\` varchar(255) NULL + ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` `); await queryRunner.query(` - ALTER TABLE \`users\` - ADD UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` (\`settingsId\`) + DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` + `); + await queryRunner.query(` + CREATE TABLE \`plugin_config\` ( + \`key\` varchar(255) NOT NULL, + \`value\` text NULL, + PRIMARY KEY (\`key\`) + ) ENGINE = InnoDB `); await queryRunner.query(` ALTER TABLE \`channels\` @@ -21,20 +26,14 @@ export class CodeCleanup51660265930624 implements MigrationInterface { ADD \`default_thread_rate_limit_per_user\` int NULL `); await queryRunner.query(` - CREATE UNIQUE INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) - `); - await queryRunner.query(` - ALTER TABLE \`users\` - ADD CONSTRAINT \`FK_76ba283779c8441fd5ff819c8cf\` FOREIGN KEY (\`settingsId\`) REFERENCES \`user_settings\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION + ALTER TABLE \`invites\` + ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE CASCADE ON UPDATE NO ACTION `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query(` - ALTER TABLE \`users\` DROP FOREIGN KEY \`FK_76ba283779c8441fd5ff819c8cf\` - `); - await queryRunner.query(` - DROP INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` + ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` `); await queryRunner.query(` ALTER TABLE \`channels\` DROP COLUMN \`default_thread_rate_limit_per_user\` @@ -43,10 +42,14 @@ export class CodeCleanup51660265930624 implements MigrationInterface { ALTER TABLE \`channels\` DROP COLUMN \`flags\` `); await queryRunner.query(` - ALTER TABLE \`users\` DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` + DROP TABLE \`plugin_config\` `); await queryRunner.query(` - ALTER TABLE \`users\` DROP COLUMN \`settingsId\` + CREATE UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) + `); + await queryRunner.query(` + ALTER TABLE \`invites\` + ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION `); } diff --git a/src/util/migrations/postgres/1660416055566-InvitersAreDeletable.ts b/src/util/migrations/postgres/1660416055566-InvitersAreDeletable.ts new file mode 100644 index 000000000..e61013189 --- /dev/null +++ b/src/util/migrations/postgres/1660416055566-InvitersAreDeletable.ts @@ -0,0 +1,26 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class InvitersAreDeletable1660416055566 implements MigrationInterface { + name = 'InvitersAreDeletable1660416055566' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "invites" DROP CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" + `); + await queryRunner.query(` + ALTER TABLE "invites" + ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "invites" DROP CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" + `); + await queryRunner.query(` + ALTER TABLE "invites" + ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION + `); + } + +} diff --git a/src/util/migrations/sqlite/1660416010862-InvitersAreDeletable.ts b/src/util/migrations/sqlite/1660416010862-InvitersAreDeletable.ts new file mode 100644 index 000000000..9b29e119e --- /dev/null +++ b/src/util/migrations/sqlite/1660416010862-InvitersAreDeletable.ts @@ -0,0 +1,246 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class InvitersAreDeletable1660416010862 implements MigrationInterface { + name = 'InvitersAreDeletable1660416010862' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "temporary_invites" ( + "code" varchar PRIMARY KEY NOT NULL, + "temporary" boolean NOT NULL, + "uses" integer NOT NULL, + "max_uses" integer NOT NULL, + "max_age" integer NOT NULL, + "created_at" datetime NOT NULL, + "expires_at" datetime NOT NULL, + "guild_id" varchar, + "channel_id" varchar, + "inviter_id" varchar, + "target_user_id" varchar, + "target_user_type" integer, + "vanity_url" boolean, + CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_invites"( + "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + ) + SELECT "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + FROM "invites" + `); + await queryRunner.query(` + DROP TABLE "invites" + `); + await queryRunner.query(` + ALTER TABLE "temporary_invites" + RENAME TO "invites" + `); + await queryRunner.query(` + CREATE TABLE "temporary_invites" ( + "code" varchar PRIMARY KEY NOT NULL, + "temporary" boolean NOT NULL, + "uses" integer NOT NULL, + "max_uses" integer NOT NULL, + "max_age" integer NOT NULL, + "created_at" datetime NOT NULL, + "expires_at" datetime NOT NULL, + "guild_id" varchar, + "channel_id" varchar, + "inviter_id" varchar, + "target_user_id" varchar, + "target_user_type" integer, + "vanity_url" boolean, + CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_invites"( + "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + ) + SELECT "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + FROM "invites" + `); + await queryRunner.query(` + DROP TABLE "invites" + `); + await queryRunner.query(` + ALTER TABLE "temporary_invites" + RENAME TO "invites" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "invites" + RENAME TO "temporary_invites" + `); + await queryRunner.query(` + CREATE TABLE "invites" ( + "code" varchar PRIMARY KEY NOT NULL, + "temporary" boolean NOT NULL, + "uses" integer NOT NULL, + "max_uses" integer NOT NULL, + "max_age" integer NOT NULL, + "created_at" datetime NOT NULL, + "expires_at" datetime NOT NULL, + "guild_id" varchar, + "channel_id" varchar, + "inviter_id" varchar, + "target_user_id" varchar, + "target_user_type" integer, + "vanity_url" boolean, + CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "invites"( + "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + ) + SELECT "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + FROM "temporary_invites" + `); + await queryRunner.query(` + DROP TABLE "temporary_invites" + `); + await queryRunner.query(` + ALTER TABLE "invites" + RENAME TO "temporary_invites" + `); + await queryRunner.query(` + CREATE TABLE "invites" ( + "code" varchar PRIMARY KEY NOT NULL, + "temporary" boolean NOT NULL, + "uses" integer NOT NULL, + "max_uses" integer NOT NULL, + "max_age" integer NOT NULL, + "created_at" datetime NOT NULL, + "expires_at" datetime NOT NULL, + "guild_id" varchar, + "channel_id" varchar, + "inviter_id" varchar, + "target_user_id" varchar, + "target_user_type" integer, + "vanity_url" boolean, + CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, + CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "invites"( + "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + ) + SELECT "code", + "temporary", + "uses", + "max_uses", + "max_age", + "created_at", + "expires_at", + "guild_id", + "channel_id", + "inviter_id", + "target_user_id", + "target_user_type", + "vanity_url" + FROM "temporary_invites" + `); + await queryRunner.query(` + DROP TABLE "temporary_invites" + `); + } + +} From 6d3706c2c8efda6e170eac2081a60f41a09bb41f Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Sat, 13 Aug 2022 22:14:22 +0200 Subject: [PATCH 17/23] Fix rebase conflicts --- gateway/src/opcodes/Identify.ts | 298 ------------------ .../api}/routes/applications/#id/bot/index.ts | 0 .../api}/routes/applications/#id/index.ts | 0 .../api}/routes/applications/#id/skus.ts | 0 src/gateway/opcodes/Identify.ts | 4 +- .../1660130586602-updated-applications.ts | 0 .../1660131942703-apps_nullable_team.ts | 0 .../mariadb/1660258393551-CodeCleanup3.ts | 232 -------------- .../1660130561959-updated-applications.ts | 0 .../1660130536131-updated-applications.ts | 0 .../1660416072362-InvitersAreDeletable.ts | 56 ---- .../1660416055566-InvitersAreDeletable.ts | 26 -- .../1660416010862-InvitersAreDeletable.ts | 246 --------------- 13 files changed, 2 insertions(+), 860 deletions(-) delete mode 100644 gateway/src/opcodes/Identify.ts rename {api/src => src/api}/routes/applications/#id/bot/index.ts (100%) rename {api/src => src/api}/routes/applications/#id/index.ts (100%) rename {api/src => src/api}/routes/applications/#id/skus.ts (100%) rename {util/src => src/util}/migrations/mariadb/1660130586602-updated-applications.ts (100%) rename {util/src => src/util}/migrations/mariadb/1660131942703-apps_nullable_team.ts (100%) delete mode 100644 src/util/migrations/mariadb/1660258393551-CodeCleanup3.ts rename {util/src => src/util}/migrations/postgres/1660130561959-updated-applications.ts (100%) rename {util/src => src/util}/migrations/sqlite/1660130536131-updated-applications.ts (100%) delete mode 100644 util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts delete mode 100644 util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts delete mode 100644 util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts diff --git a/gateway/src/opcodes/Identify.ts b/gateway/src/opcodes/Identify.ts deleted file mode 100644 index e62c15700..000000000 --- a/gateway/src/opcodes/Identify.ts +++ /dev/null @@ -1,298 +0,0 @@ -import { WebSocket, Payload } from "@fosscord/gateway"; -import { - checkToken, - Intents, - Member, - ReadyEventData, - User, - Session, - EVENTEnum, - Config, - PublicMember, - PublicUser, - PrivateUserProjection, - ReadState, - Application, - emitEvent, - SessionsReplace, - PrivateSessionProjection, - MemberPrivateProjection, - PresenceUpdateEvent, - UserSettings, - IdentifySchema, -} from "@fosscord/util"; -import { Send } from "../util/Send"; -import { CLOSECODES, OPCODES } from "../util/Constants"; -import { genSessionId } from "../util/SessionUtils"; -import { setupListener } from "../listener/listener"; -// import experiments from "./experiments.json"; -const experiments: any = []; -import { check } from "./instanceOf"; -import { Recipient } from "@fosscord/util"; -import { OrmUtils } from "@fosscord/util"; - -// TODO: user sharding -// TODO: check privileged intents, if defined in the config -// TODO: check if already identified - -export async function onIdentify(this: WebSocket, data: Payload) { - clearTimeout(this.readyTimeout); - check.call(this, IdentifySchema, data.d); - - const identify: IdentifySchema = data.d; - - try { - const { jwtSecret } = Config.get().security; - var { decoded } = await checkToken(identify.token, jwtSecret); // will throw an error if invalid - } catch (error) { - console.error("invalid token", error); - return this.close(CLOSECODES.Authentication_failed); - } - this.user_id = decoded.id; - - const session_id = genSessionId(); - this.session_id = session_id; //Set the session of the WebSocket object - - const [user, read_states, members, recipients, session, application] = - await Promise.all([ - User.findOneOrFail({ - where: { id: this.user_id }, - relations: ["relationships", "relationships.to", "settings"], - select: [...PrivateUserProjection, "relationships"], - }), - ReadState.find({ where: { user_id: this.user_id } }), - Member.find({ - where: { id: this.user_id }, - select: MemberPrivateProjection, - relations: [ - "guild", - "guild.channels", - "guild.emojis", - "guild.emojis.user", - "guild.roles", - "guild.stickers", - "user", - "roles", - ], - }), - Recipient.find({ - where: { user_id: this.user_id, closed: false }, - relations: [ - "channel", - "channel.recipients", - "channel.recipients.user", - ], - // TODO: public user selection - }), - // save the session and delete it when the websocket is closed - await OrmUtils.mergeDeep(new Session(), { - user_id: this.user_id, - session_id: session_id, - // TODO: check if status is only one of: online, dnd, offline, idle - status: identify.presence?.status || "offline", //does the session always start as online? - client_info: { - //TODO read from identity - client: "desktop", - os: identify.properties?.os, - version: 0, - }, - activities: [], - }).save(), - Application.findOne({ where: { id: this.user_id } }), - ]); - - if (!user) return this.close(CLOSECODES.Authentication_failed); - if (!user.settings) { //settings may not exist after updating... - user.settings = new UserSettings(); - user.settings.id = user.id; - await user.settings.save(); - } - - if (!identify.intents) identify.intents = BigInt("0x6ffffffff"); - this.intents = new Intents(identify.intents); - if (identify.shard) { - this.shard_id = identify.shard[0]; - this.shard_count = identify.shard[1]; - if ( - this.shard_count == null || - this.shard_id == null || - this.shard_id >= this.shard_count || - this.shard_id < 0 || - this.shard_count <= 0 - ) { - console.log(identify.shard); - return this.close(CLOSECODES.Invalid_shard); - } - } - let users: PublicUser[] = []; - - const merged_members = members.map((x: Member) => { - return [ - { - ...x, - roles: x.roles.map((x) => x.id), - settings: undefined, - guild: undefined, - }, - ]; - }) as PublicMember[][]; - let guilds = members.map((x) => ({ ...x.guild, joined_at: x.joined_at })); - - // @ts-ignore - guilds = guilds.map((guild) => { - if (user.bot) { - setTimeout(() => { - Send(this, { - op: OPCODES.Dispatch, - t: EVENTEnum.GuildCreate, - s: this.sequence++, - d: guild, - }); - }, 500); - return { id: guild.id, unavailable: true }; - } - - return guild; - }); - - const user_guild_settings_entries = members.map((x) => x.settings); - - const channels = recipients.map((x) => { - // @ts-ignore - x.channel.recipients = x.channel.recipients?.map((x) => x.user); - //TODO is this needed? check if users in group dm that are not friends are sent in the READY event - users = users.concat(x.channel.recipients as unknown as User[]); - if (x.channel.isDm()) { - x.channel.recipients = x.channel.recipients!.filter( - (x) => x.id !== this.user_id - ); - } - return x.channel; - }); - - for (let relation of user.relationships) { - const related_user = relation.to; - const public_related_user = { - username: related_user.username, - discriminator: related_user.discriminator, - id: related_user.id, - public_flags: related_user.public_flags, - avatar: related_user.avatar, - bot: related_user.bot, - bio: related_user.bio, - premium_since: user.premium_since - }; - users.push(public_related_user); - } - - setImmediate(async () => { - // run in seperate "promise context" because ready payload is not dependent on those events - emitEvent({ - event: "SESSIONS_REPLACE", - user_id: this.user_id, - data: await Session.find({ - where: { user_id: this.user_id }, - select: PrivateSessionProjection, - }), - } as SessionsReplace); - emitEvent({ - event: "PRESENCE_UPDATE", - user_id: this.user_id, - data: { - user: await User.getPublicUser(this.user_id), - activities: session.activities, - client_status: session?.client_info, - status: session.status, - }, - } as PresenceUpdateEvent); - }); - - read_states.forEach((s: any) => { - s.id = s.channel_id; - delete s.user_id; - delete s.channel_id; - }); - - const privateUser = { - avatar: user.avatar, - mobile: user.mobile, - desktop: user.desktop, - discriminator: user.discriminator, - email: user.email, - flags: user.flags, - id: user.id, - mfa_enabled: user.mfa_enabled, - nsfw_allowed: user.nsfw_allowed, - phone: user.phone, - premium: user.premium, - premium_type: user.premium_type, - public_flags: user.public_flags, - username: user.username, - verified: user.verified, - bot: user.bot, - accent_color: user.accent_color || 0, - banner: user.banner, - bio: user.bio, - premium_since: user.premium_since - }; - - const d: ReadyEventData = { - v: 8, - application: {id: application?.id??'', flags: application?.flags??0}, //TODO: check this code! - user: privateUser, - user_settings: user.settings, - // @ts-ignore - guilds: guilds.map((x) => { - // @ts-ignore - x.guild_hashes = {}; // @ts-ignore - x.guild_scheduled_events = []; // @ts-ignore - x.threads = []; - return x; - }), - guild_experiments: [], // TODO - geo_ordered_rtc_regions: [], // TODO - relationships: user.relationships.map((x) => x.toPublicRelationship()), - read_state: { - entries: read_states, - partial: false, - version: 304128, - }, - user_guild_settings: { - entries: user_guild_settings_entries, - partial: false, // TODO partial - version: 642, - }, - private_channels: channels, - session_id: session_id, - analytics_token: "", // TODO - connected_accounts: [], // TODO - consents: { - personalization: { - consented: false, // TODO - }, - }, - country_code: user.settings.locale, - friend_suggestion_count: 0, // TODO - // @ts-ignore - experiments: experiments, // TODO - guild_join_requests: [], // TODO what is this? - users: users.filter((x) => x).unique(), - merged_members: merged_members, - // shard // TODO: only for user sharding - }; - - // TODO: send real proper data structure - await Send(this, { - op: OPCODES.Dispatch, - t: EVENTEnum.Ready, - s: this.sequence++, - d, - }); - - //TODO send READY_SUPPLEMENTAL - //TODO send GUILD_MEMBER_LIST_UPDATE - //TODO send SESSIONS_REPLACE - //TODO send VOICE_STATE_UPDATE to let the client know if another device is already connected to a voice channel - - await setupListener.call(this); -} diff --git a/api/src/routes/applications/#id/bot/index.ts b/src/api/routes/applications/#id/bot/index.ts similarity index 100% rename from api/src/routes/applications/#id/bot/index.ts rename to src/api/routes/applications/#id/bot/index.ts diff --git a/api/src/routes/applications/#id/index.ts b/src/api/routes/applications/#id/index.ts similarity index 100% rename from api/src/routes/applications/#id/index.ts rename to src/api/routes/applications/#id/index.ts diff --git a/api/src/routes/applications/#id/skus.ts b/src/api/routes/applications/#id/skus.ts similarity index 100% rename from api/src/routes/applications/#id/skus.ts rename to src/api/routes/applications/#id/skus.ts diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index 4f17ab706..d5dae7b04 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -108,7 +108,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { await user.settings.save(); } - if (!identify.intents) identify.intents = "0x6ffffffff" + if (!identify.intents) identify.intents = "30064771071"; this.intents = new Intents(identify.intents); if (identify.shard) { this.shard_id = identify.shard[0]; @@ -238,7 +238,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { const d: ReadyEventData = { v: 8, - application: {id: application?.id??'', flags: application?.flags??''}, //TODO: check this code! + application: {id: application?.id??'', flags: application?.flags??0}, //TODO: check this code! user: privateUser, user_settings: user.settings, // @ts-ignore diff --git a/util/src/migrations/mariadb/1660130586602-updated-applications.ts b/src/util/migrations/mariadb/1660130586602-updated-applications.ts similarity index 100% rename from util/src/migrations/mariadb/1660130586602-updated-applications.ts rename to src/util/migrations/mariadb/1660130586602-updated-applications.ts diff --git a/util/src/migrations/mariadb/1660131942703-apps_nullable_team.ts b/src/util/migrations/mariadb/1660131942703-apps_nullable_team.ts similarity index 100% rename from util/src/migrations/mariadb/1660131942703-apps_nullable_team.ts rename to src/util/migrations/mariadb/1660131942703-apps_nullable_team.ts diff --git a/src/util/migrations/mariadb/1660258393551-CodeCleanup3.ts b/src/util/migrations/mariadb/1660258393551-CodeCleanup3.ts deleted file mode 100644 index 87d075e44..000000000 --- a/src/util/migrations/mariadb/1660258393551-CodeCleanup3.ts +++ /dev/null @@ -1,232 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class CodeCleanup31660258393551 implements MigrationInterface { - name = 'CodeCleanup31660258393551' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`applications\` DROP FOREIGN KEY \`FK_2ce5a55796fe4c2f77ece57a647\` - `); - await queryRunner.query(` - DROP INDEX \`REL_2ce5a55796fe4c2f77ece57a64\` ON \`applications\` - `); - await queryRunner.query(` - CREATE TABLE \`user_settings\` ( - \`id\` varchar(255) NOT NULL, - \`afk_timeout\` int NULL, - \`allow_accessibility_detection\` tinyint NULL, - \`animate_emoji\` tinyint NULL, - \`animate_stickers\` int NULL, - \`contact_sync_enabled\` tinyint NULL, - \`convert_emoticons\` tinyint NULL, - \`custom_status\` text NULL, - \`default_guilds_restricted\` tinyint NULL, - \`detect_platform_accounts\` tinyint NULL, - \`developer_mode\` tinyint NULL, - \`disable_games_tab\` tinyint NULL, - \`enable_tts_command\` tinyint NULL, - \`explicit_content_filter\` int NULL, - \`friend_source_flags\` text NULL, - \`gateway_connected\` tinyint NULL, - \`gif_auto_play\` tinyint NULL, - \`guild_folders\` text NULL, - \`guild_positions\` text NULL, - \`inline_attachment_media\` tinyint NULL, - \`inline_embed_media\` tinyint NULL, - \`locale\` varchar(255) NULL, - \`message_display_compact\` tinyint NULL, - \`native_phone_integration_enabled\` tinyint NULL, - \`render_embeds\` tinyint NULL, - \`render_reactions\` tinyint NULL, - \`restricted_guilds\` text NULL, - \`show_current_game\` tinyint NULL, - \`status\` varchar(255) NULL, - \`stream_notifications_enabled\` tinyint NULL, - \`theme\` varchar(255) NULL, - \`timezone_offset\` int NULL, - PRIMARY KEY (\`id\`) - ) ENGINE = InnoDB - `); - await queryRunner.query(` - ALTER TABLE \`users\` DROP COLUMN \`settings\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`type\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`hook\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`redirect_uris\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`rpc_application_state\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`store_application_state\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`verification_state\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`interactions_endpoint_url\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`integration_public\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`integration_require_code_grant\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`discoverability_state\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`discovery_eligibility_flags\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`tags\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`install_params\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`bot_user_id\` - `); - await queryRunner.query(` - ALTER TABLE \`guilds\` - ADD \`premium_progress_bar_enabled\` tinyint NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`rpc_origins\` text NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`primary_sku_id\` varchar(255) NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`slug\` varchar(255) NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`guild_id\` varchar(255) NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` CHANGE \`description\` \`description\` varchar(255) NOT NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`flags\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`flags\` varchar(255) NOT NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD CONSTRAINT \`FK_e5bf78cdbbe9ba91062d74c5aba\` FOREIGN KEY (\`guild_id\`) REFERENCES \`guilds\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`applications\` DROP FOREIGN KEY \`FK_e5bf78cdbbe9ba91062d74c5aba\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`flags\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`flags\` int NOT NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` CHANGE \`description\` \`description\` varchar(255) NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`guild_id\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`slug\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`primary_sku_id\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` DROP COLUMN \`rpc_origins\` - `); - await queryRunner.query(` - ALTER TABLE \`guilds\` DROP COLUMN \`premium_progress_bar_enabled\` - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`bot_user_id\` varchar(255) NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`install_params\` text NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`tags\` text NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`discovery_eligibility_flags\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`discoverability_state\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`integration_require_code_grant\` tinyint NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`integration_public\` tinyint NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`interactions_endpoint_url\` varchar(255) NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`verification_state\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`store_application_state\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`rpc_application_state\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`redirect_uris\` text NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`hook\` tinyint NOT NULL - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD \`type\` text NULL - `); - await queryRunner.query(` - ALTER TABLE \`users\` - ADD \`settings\` text NOT NULL - `); - await queryRunner.query(` - DROP TABLE \`user_settings\` - `); - await queryRunner.query(` - CREATE UNIQUE INDEX \`REL_2ce5a55796fe4c2f77ece57a64\` ON \`applications\` (\`bot_user_id\`) - `); - await queryRunner.query(` - ALTER TABLE \`applications\` - ADD CONSTRAINT \`FK_2ce5a55796fe4c2f77ece57a647\` FOREIGN KEY (\`bot_user_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION - `); - } - -} diff --git a/util/src/migrations/postgres/1660130561959-updated-applications.ts b/src/util/migrations/postgres/1660130561959-updated-applications.ts similarity index 100% rename from util/src/migrations/postgres/1660130561959-updated-applications.ts rename to src/util/migrations/postgres/1660130561959-updated-applications.ts diff --git a/util/src/migrations/sqlite/1660130536131-updated-applications.ts b/src/util/migrations/sqlite/1660130536131-updated-applications.ts similarity index 100% rename from util/src/migrations/sqlite/1660130536131-updated-applications.ts rename to src/util/migrations/sqlite/1660130536131-updated-applications.ts diff --git a/util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts b/util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts deleted file mode 100644 index 8374eafbc..000000000 --- a/util/src/migrations/mariadb/1660416072362-InvitersAreDeletable.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class InvitersAreDeletable1660416072362 implements MigrationInterface { - name = 'InvitersAreDeletable1660416072362' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` - `); - await queryRunner.query(` - DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` - `); - await queryRunner.query(` - CREATE TABLE \`plugin_config\` ( - \`key\` varchar(255) NOT NULL, - \`value\` text NULL, - PRIMARY KEY (\`key\`) - ) ENGINE = InnoDB - `); - await queryRunner.query(` - ALTER TABLE \`channels\` - ADD \`flags\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`channels\` - ADD \`default_thread_rate_limit_per_user\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`invites\` - ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE CASCADE ON UPDATE NO ACTION - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` - `); - await queryRunner.query(` - ALTER TABLE \`channels\` DROP COLUMN \`default_thread_rate_limit_per_user\` - `); - await queryRunner.query(` - ALTER TABLE \`channels\` DROP COLUMN \`flags\` - `); - await queryRunner.query(` - DROP TABLE \`plugin_config\` - `); - await queryRunner.query(` - CREATE UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) - `); - await queryRunner.query(` - ALTER TABLE \`invites\` - ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION - `); - } - -} diff --git a/util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts b/util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts deleted file mode 100644 index e61013189..000000000 --- a/util/src/migrations/postgres/1660416055566-InvitersAreDeletable.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class InvitersAreDeletable1660416055566 implements MigrationInterface { - name = 'InvitersAreDeletable1660416055566' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE "invites" DROP CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" - `); - await queryRunner.query(` - ALTER TABLE "invites" - ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE NO ACTION - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE "invites" DROP CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" - `); - await queryRunner.query(` - ALTER TABLE "invites" - ADD CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION - `); - } - -} diff --git a/util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts b/util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts deleted file mode 100644 index 9b29e119e..000000000 --- a/util/src/migrations/sqlite/1660416010862-InvitersAreDeletable.ts +++ /dev/null @@ -1,246 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class InvitersAreDeletable1660416010862 implements MigrationInterface { - name = 'InvitersAreDeletable1660416010862' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - CREATE TABLE "temporary_invites" ( - "code" varchar PRIMARY KEY NOT NULL, - "temporary" boolean NOT NULL, - "uses" integer NOT NULL, - "max_uses" integer NOT NULL, - "max_age" integer NOT NULL, - "created_at" datetime NOT NULL, - "expires_at" datetime NOT NULL, - "guild_id" varchar, - "channel_id" varchar, - "inviter_id" varchar, - "target_user_id" varchar, - "target_user_type" integer, - "vanity_url" boolean, - CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION - ) - `); - await queryRunner.query(` - INSERT INTO "temporary_invites"( - "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - ) - SELECT "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - FROM "invites" - `); - await queryRunner.query(` - DROP TABLE "invites" - `); - await queryRunner.query(` - ALTER TABLE "temporary_invites" - RENAME TO "invites" - `); - await queryRunner.query(` - CREATE TABLE "temporary_invites" ( - "code" varchar PRIMARY KEY NOT NULL, - "temporary" boolean NOT NULL, - "uses" integer NOT NULL, - "max_uses" integer NOT NULL, - "max_age" integer NOT NULL, - "created_at" datetime NOT NULL, - "expires_at" datetime NOT NULL, - "guild_id" varchar, - "channel_id" varchar, - "inviter_id" varchar, - "target_user_id" varchar, - "target_user_type" integer, - "vanity_url" boolean, - CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION - ) - `); - await queryRunner.query(` - INSERT INTO "temporary_invites"( - "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - ) - SELECT "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - FROM "invites" - `); - await queryRunner.query(` - DROP TABLE "invites" - `); - await queryRunner.query(` - ALTER TABLE "temporary_invites" - RENAME TO "invites" - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE "invites" - RENAME TO "temporary_invites" - `); - await queryRunner.query(` - CREATE TABLE "invites" ( - "code" varchar PRIMARY KEY NOT NULL, - "temporary" boolean NOT NULL, - "uses" integer NOT NULL, - "max_uses" integer NOT NULL, - "max_age" integer NOT NULL, - "created_at" datetime NOT NULL, - "expires_at" datetime NOT NULL, - "guild_id" varchar, - "channel_id" varchar, - "inviter_id" varchar, - "target_user_id" varchar, - "target_user_type" integer, - "vanity_url" boolean, - CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION - ) - `); - await queryRunner.query(` - INSERT INTO "invites"( - "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - ) - SELECT "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - FROM "temporary_invites" - `); - await queryRunner.query(` - DROP TABLE "temporary_invites" - `); - await queryRunner.query(` - ALTER TABLE "invites" - RENAME TO "temporary_invites" - `); - await queryRunner.query(` - CREATE TABLE "invites" ( - "code" varchar PRIMARY KEY NOT NULL, - "temporary" boolean NOT NULL, - "uses" integer NOT NULL, - "max_uses" integer NOT NULL, - "max_age" integer NOT NULL, - "created_at" datetime NOT NULL, - "expires_at" datetime NOT NULL, - "guild_id" varchar, - "channel_id" varchar, - "inviter_id" varchar, - "target_user_id" varchar, - "target_user_type" integer, - "vanity_url" boolean, - CONSTRAINT "FK_11a0d394f8fc649c19ce5f16b59" FOREIGN KEY ("target_user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_15c35422032e0b22b4ada95f48f" FOREIGN KEY ("inviter_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, - CONSTRAINT "FK_6a15b051fe5050aa00a4b9ff0f6" FOREIGN KEY ("channel_id") REFERENCES "channels" ("id") ON DELETE CASCADE ON UPDATE NO ACTION, - CONSTRAINT "FK_3f4939aa1461e8af57fea3fb05d" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION - ) - `); - await queryRunner.query(` - INSERT INTO "invites"( - "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - ) - SELECT "code", - "temporary", - "uses", - "max_uses", - "max_age", - "created_at", - "expires_at", - "guild_id", - "channel_id", - "inviter_id", - "target_user_id", - "target_user_type", - "vanity_url" - FROM "temporary_invites" - `); - await queryRunner.query(` - DROP TABLE "temporary_invites" - `); - } - -} From 79d97a9252beff84104cdb8fabe477b310e81956 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 15 Aug 2022 06:14:02 +0200 Subject: [PATCH 18/23] Update db migration script --- scripts/db_migrations.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/db_migrations.sh b/scripts/db_migrations.sh index 83f15a2ba..242b01f00 100755 --- a/scripts/db_migrations.sh +++ b/scripts/db_migrations.sh @@ -15,10 +15,10 @@ fi make_migration() { echo "Creating migrations for $2" - mkdir "../util/src/migrations/$2" + mkdir "src/util/migrations/$2" # npm run build clean logerrors pretty-errors # THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle - THREADS=1 DATABASE="$1" DB_MIGRATE=a npx typeorm-ts-node-commonjs migration:generate "../util/src/migrations/$2/$FILENAME" -d ../util/src/util/Database.ts -p + THREADS=1 DATABASE="$1" DB_MIGRATE=a npx typeorm-ts-node-commonjs migration:generate "src/migrations/$2/$FILENAME" -d ../util/src/util/Database.ts -p npm run build clean logerrors pretty-errors THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle } From fcef1f4d273f8f792ec70ac75c1ea77fc9b03cd1 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 15 Aug 2022 06:22:22 +0200 Subject: [PATCH 19/23] Fix missing stuff --- fosscord-server.code-workspace | 4 - package.json | 1 - scripts/build.js | 79 +++++++++---------- scripts/utils.js | 1 - .../plugins}/example-plugin/build.sh | 0 .../plugins}/example-plugin/index.ts | 4 +- .../plugins}/example-plugin/plugin.json | 0 .../plugins}/example-plugin/tsconfig.json | 0 8 files changed, 38 insertions(+), 51 deletions(-) rename {plugins => src/plugins}/example-plugin/build.sh (100%) rename {plugins => src/plugins}/example-plugin/index.ts (76%) rename {plugins => src/plugins}/example-plugin/plugin.json (100%) rename {plugins => src/plugins}/example-plugin/tsconfig.json (100%) diff --git a/fosscord-server.code-workspace b/fosscord-server.code-workspace index 1d6774adf..f2df1e9ee 100644 --- a/fosscord-server.code-workspace +++ b/fosscord-server.code-workspace @@ -15,10 +15,6 @@ ], "settings": { "files.exclude": { - ".gitignore": true, - ".npmignore": true, - ".prettierrc": true, - ".vscode": true, "*.ansi": true, } } diff --git a/package.json b/package.json index 59c66811d..f1242d2bc 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,6 @@ "setup": "npm install --omit optional && ts-patch install -s && patch-package && npm run build", "depclean": "node scripts/depclean.js", "depcheck": "node scripts/depcheck.js", - "syncdeps": "node scripts/install.js", "build": "node scripts/build.js", "postinstall": "patch-package", "genschemas": "node scripts/generate_schemas.js", diff --git a/scripts/build.js b/scripts/build.js index 49353c877..f5ec6bac0 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -8,7 +8,6 @@ if(argv.includes("help")) { console.log(`Fosscord build script help: Arguments: clean Cleans up previous builds - copyonly Only copy source files, don't build (useful for updating assets) verbose Enable verbose logging logerrors Log build errors to console pretty-errors Pretty-print build errors @@ -18,7 +17,6 @@ Arguments: let steps = 3, i = 0; if (argv.includes("clean")) steps++; -if (argv.includes("copyonly")) steps--; const verbose = argv.includes("verbose") || argv.includes("v"); const logerr = argv.includes("logerrors"); @@ -29,13 +27,11 @@ if(silent) console.error = console.log = function(){} if (argv.includes("clean")) { console.log(`[${++i}/${steps}] Cleaning...`); - parts.forEach((a) => { - let d = "../" + a + "/dist"; - if (fs.existsSync(d)) { - fs.rmSync(d, { recursive: true }); - if (verbose) console.log(`Deleted ${d}!`); - } - }); + let d = "dist"; + if (fs.existsSync(d)) { + fs.rmSync(d, { recursive: true }); + if (verbose) console.log(`Deleted ${d}!`); + } } console.log(`[${++i}/${steps}] Checking if dependencies were installed correctly...`); @@ -43,42 +39,39 @@ console.log(`[${++i}/${steps}] Checking if dependencies were installed correctly if(!fs.existsSync(path.join(__dirname, "..", "node_modules", "exif-be-gone", "index.js"))) execIn("npm run build", path.join(__dirname, "..", "node_modules", "exif-be-gone")); +console.log(`[${++i}/${steps}] Compiling src files ...`); -if (!argv.includes("copyonly")) { - console.log(`[${++i}/${steps}] Compiling src files ...`); +let buildFlags = '' +if(pretty) buildFlags += '--pretty ' - let buildFlags = '' - if(pretty) buildFlags += '--pretty ' - - try { - execSync( - 'node "' + - path.join(__dirname, "..", "node_modules", "typescript", "lib", "tsc.js") + - '" -p "' + - path.join(__dirname, "..") + - '" ' + buildFlags, - { - cwd: path.join(__dirname, ".."), - shell: true, - env: process.env, - encoding: "utf8" +try { + execSync( + 'node "' + + path.join(__dirname, "..", "node_modules", "typescript", "lib", "tsc.js") + + '" -p "' + + path.join(__dirname, "..") + + '" ' + buildFlags, + { + cwd: path.join(__dirname, ".."), + shell: true, + env: process.env, + encoding: "utf8" + } + ) +} catch (error) { + if(verbose || logerr) { + error.stdout.split(/\r?\n/).forEach((line) => { + let _line = line.replace('dist/','',1); + if(!pretty && _line.includes('.ts(')) { + //reformat file path for easy jumping + _line = _line.replace('(',':',1).replace(',',':',1).replace(')','',1) } - ) - } catch (error) { - if(verbose || logerr) { - error.stdout.split(/\r?\n/).forEach((line) => { - let _line = line.replace('dist/','',1); - if(!pretty && _line.includes('.ts(')) { - //reformat file path for easy jumping - _line = _line.replace('(',':',1).replace(',',':',1).replace(')','',1) - } - console.error(_line); - }) - } - console.error(`Build failed! Please check build.log for info!`); - if(!silent){ - if(pretty) fs.writeFileSync("build.log.ansi", error.stdout); - fs.writeFileSync("build.log", error.stdout.replaceAll(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '')); - } + console.error(_line); + }) + } + console.error(`Build failed! Please check build.log for info!`); + if(!silent){ + if(pretty) fs.writeFileSync("build.log.ansi", error.stdout); + fs.writeFileSync("build.log", error.stdout.replaceAll(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '')); } } \ No newline at end of file diff --git a/scripts/utils.js b/scripts/utils.js index ca41bcf20..84aaeed61 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -46,7 +46,6 @@ function getLines(output) { module.exports = { //consts - parts, //functions copyRecursiveSync, execIn, getLines }; diff --git a/plugins/example-plugin/build.sh b/src/plugins/example-plugin/build.sh similarity index 100% rename from plugins/example-plugin/build.sh rename to src/plugins/example-plugin/build.sh diff --git a/plugins/example-plugin/index.ts b/src/plugins/example-plugin/index.ts similarity index 76% rename from plugins/example-plugin/index.ts rename to src/plugins/example-plugin/index.ts index ec1ed7b50..d5db6563f 100644 --- a/plugins/example-plugin/index.ts +++ b/src/plugins/example-plugin/index.ts @@ -1,7 +1,7 @@ -import { Plugin } from "@fosscord/util" +/*import { Plugin } from "@fosscord/util" export default class TestPlugin extends Plugin { onPluginLoaded(): void { console.log("Hello from test plugin! IT WORKS!!!!!!!"); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/plugins/example-plugin/plugin.json b/src/plugins/example-plugin/plugin.json similarity index 100% rename from plugins/example-plugin/plugin.json rename to src/plugins/example-plugin/plugin.json diff --git a/plugins/example-plugin/tsconfig.json b/src/plugins/example-plugin/tsconfig.json similarity index 100% rename from plugins/example-plugin/tsconfig.json rename to src/plugins/example-plugin/tsconfig.json From 551fa530cf2d19b62707c40ca1202bcd6d92c0c0 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 15 Aug 2022 07:16:41 +0200 Subject: [PATCH 20/23] Update package, sync migrations --- package-lock.json | Bin 840733 -> 840752 bytes package.json | 6 +- scripts/build.js | 7 +- scripts/db_migrations.sh | 13 +- .../mariadb/1660540527213-sync_migrations.ts | 127 + .../sqlite/1660538628956-sync_migrations.ts | 172 + .../mariadb/1660260587556-CodeCleanup4.ts | 39 - .../1660416072362-InvitersAreDeletable.ts | 56 - yarn.lock | 9002 +++++++++-------- 9 files changed, 4895 insertions(+), 4527 deletions(-) create mode 100644 src/migrations/mariadb/1660540527213-sync_migrations.ts create mode 100644 src/migrations/sqlite/1660538628956-sync_migrations.ts delete mode 100644 src/util/migrations/mariadb/1660260587556-CodeCleanup4.ts delete mode 100644 src/util/migrations/mariadb/1660416072362-InvitersAreDeletable.ts diff --git a/package-lock.json b/package-lock.json index 0d6f7bd0679d4557bf4e4ddabcfaf06f81c3c21c..0892cb884cfa2204a6ccaa744fc8f5cace7b0498 100644 GIT binary patch delta 825 zcmbQc!gvD^onxA=WWcRF`98noWG-ecW=lPT$$PoVCa+`OJ$W*R#O6$v^GuB9(*qS* zM4SEC+x^%XxBIa(eNUdQe3I30`hqkj_UZFZvhgxo=$TJ14C7P^@k+1qcP$Su^$l^V z@Tf|63er!@$Z+xxFDi4&D)ZN_3MfepO;1WH4a~GKD2nuq@+itS%=JqO3M~wXDh&1s zF!C@DDlai~b@TDjFY)tnF^s6tpWgU{S!()(c%Ws~xlCN`dO1wn^>Ucm#HRZmW7eO3 z@++spbma;*h0q+2GQYy4#E@bSgYc@1s1uhqvYh!ph}CRRM)UbH}BwFzqGP6gFLh1A|Fq;Oang`r|`0j$k3eWAM4o^reAPk zVc#y_%*+-yec}{m!)fkZ?9<~OGV@JuoX)Nk>ZEO^UzuWFXhi}SP<&! zTw(5R;h1TrT~ZjCQRJLa9BJa48(8R-;ci~&Ws(|V=96papBI#onHrXw<64qdkztbP z7?@p>;ujWG;xfIlgjr9(SJ>I6pJ!#`YwvgC0%Gp%{cb#c Fy#Uyt8#e#| delta 874 zcmdn6!g%fq;|=GSCST^anastkHTeQp)#SCzyC+}Z?%T}A>c}*G9y>et^qVgjxu-|- zaq=`5vbPtqGj1K*-7`GW*|XT#&oa!!H^toC z*frcU&Do^XKSZ#$<3P)_oSdpi zL!;nypKNX4cC9q!9N!eIFAG&wy;Vu>2XqQn$vS0G3&JZKVk-A79eH?Vm2UV-|qj2BSV8gOvKY7CQ8z6 zZI!q/dev/null + source .env.tmp 2>/dev/null ) +npm run build clean logerrors pretty-errors make_migration() { echo "Creating migrations for $2" - mkdir "src/util/migrations/$2" + mkdir "src/util/migrations/$2" 2>/dev/null # npm run build clean logerrors pretty-errors -# THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle - THREADS=1 DATABASE="$1" DB_MIGRATE=a npx typeorm-ts-node-commonjs migration:generate "src/migrations/$2/$FILENAME" -d ../util/src/util/Database.ts -p + THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle + THREADS=1 DATABASE="$1" DB_MIGRATE=a npx typeorm-ts-node-commonjs migration:generate "src/migrations/$2/$FILENAME" -d src/util/util/Database.ts -p npm run build clean logerrors pretty-errors THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle } @@ -36,5 +37,5 @@ make_migration "database.db" "sqlite" make_migration "$FC_DB_MARIADB" "mariadb" ) -[ -f ".env.tmp" ] && mv .env.tmp .env +[ -f ".env.tmp" ] && mv .env.tmp .env 2>/dev/null diff --git a/src/migrations/mariadb/1660540527213-sync_migrations.ts b/src/migrations/mariadb/1660540527213-sync_migrations.ts new file mode 100644 index 000000000..8cc1d2f17 --- /dev/null +++ b/src/migrations/mariadb/1660540527213-sync_migrations.ts @@ -0,0 +1,127 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class syncMigrations1660540527213 implements MigrationInterface { + name = 'syncMigrations1660540527213' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` CHANGE \`settings\` \`settingsId\` text NOT NULL + `); + await queryRunner.query(` + CREATE TABLE \`user_settings\` ( + \`id\` varchar(255) NOT NULL, + \`afk_timeout\` int NULL, + \`allow_accessibility_detection\` tinyint NULL, + \`animate_emoji\` tinyint NULL, + \`animate_stickers\` int NULL, + \`contact_sync_enabled\` tinyint NULL, + \`convert_emoticons\` tinyint NULL, + \`custom_status\` text NULL, + \`default_guilds_restricted\` tinyint NULL, + \`detect_platform_accounts\` tinyint NULL, + \`developer_mode\` tinyint NULL, + \`disable_games_tab\` tinyint NULL, + \`enable_tts_command\` tinyint NULL, + \`explicit_content_filter\` int NULL, + \`friend_source_flags\` text NULL, + \`gateway_connected\` tinyint NULL, + \`gif_auto_play\` tinyint NULL, + \`guild_folders\` text NULL, + \`guild_positions\` text NULL, + \`inline_attachment_media\` tinyint NULL, + \`inline_embed_media\` tinyint NULL, + \`locale\` varchar(255) NULL, + \`message_display_compact\` tinyint NULL, + \`native_phone_integration_enabled\` tinyint NULL, + \`render_embeds\` tinyint NULL, + \`render_reactions\` tinyint NULL, + \`restricted_guilds\` text NULL, + \`show_current_game\` tinyint NULL, + \`status\` varchar(255) NULL, + \`stream_notifications_enabled\` tinyint NULL, + \`theme\` varchar(255) NULL, + \`timezone_offset\` int NULL, + PRIMARY KEY (\`id\`) + ) ENGINE = InnoDB + `); + await queryRunner.query(` + ALTER TABLE \`channels\` + ADD \`flags\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`channels\` + ADD \`default_thread_rate_limit_per_user\` int NULL + `); + await queryRunner.query(` + ALTER TABLE \`guilds\` + ADD \`premium_progress_bar_enabled\` tinyint NULL + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP COLUMN \`settingsId\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD \`settingsId\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` (\`settingsId\`) + `); + await queryRunner.query(` + CREATE UNIQUE INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD CONSTRAINT \`FK_76ba283779c8441fd5ff819c8cf\` FOREIGN KEY (\`settingsId\`) REFERENCES \`user_settings\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION + `); + await queryRunner.query(` + ALTER TABLE \`invites\` + ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE CASCADE ON UPDATE NO ACTION + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP FOREIGN KEY \`FK_76ba283779c8441fd5ff819c8cf\` + `); + await queryRunner.query(` + DROP INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` DROP COLUMN \`settingsId\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` + ADD \`settingsId\` text NOT NULL + `); + await queryRunner.query(` + ALTER TABLE \`guilds\` DROP COLUMN \`premium_progress_bar_enabled\` + `); + await queryRunner.query(` + ALTER TABLE \`channels\` DROP COLUMN \`default_thread_rate_limit_per_user\` + `); + await queryRunner.query(` + ALTER TABLE \`channels\` DROP COLUMN \`flags\` + `); + await queryRunner.query(` + DROP TABLE \`user_settings\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` CHANGE \`settingsId\` \`settings\` text NOT NULL + `); + await queryRunner.query(` + ALTER TABLE \`invites\` + ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION + `); + } + +} diff --git a/src/migrations/sqlite/1660538628956-sync_migrations.ts b/src/migrations/sqlite/1660538628956-sync_migrations.ts new file mode 100644 index 000000000..9cdc064fb --- /dev/null +++ b/src/migrations/sqlite/1660538628956-sync_migrations.ts @@ -0,0 +1,172 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class syncMigrations1660538628956 implements MigrationInterface { + name = 'syncMigrations1660538628956' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "temporary_channels" ( + "id" varchar PRIMARY KEY NOT NULL, + "created_at" datetime NOT NULL, + "name" varchar, + "icon" text, + "type" integer NOT NULL, + "last_message_id" varchar, + "guild_id" varchar, + "parent_id" varchar, + "owner_id" varchar, + "last_pin_timestamp" integer, + "default_auto_archive_duration" integer, + "position" integer, + "permission_overwrites" text, + "video_quality_mode" integer, + "bitrate" integer, + "user_limit" integer, + "nsfw" boolean, + "rate_limit_per_user" integer, + "topic" varchar, + "retention_policy_id" varchar, + "flags" integer, + "default_thread_rate_limit_per_user" integer, + CONSTRAINT "FK_3873ed438575cce703ecff4fc7b" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_3274522d14af40540b1a883fc80" FOREIGN KEY ("parent_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_c253dafe5f3a03ec00cd8fb4581" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_channels"( + "id", + "created_at", + "name", + "icon", + "type", + "last_message_id", + "guild_id", + "parent_id", + "owner_id", + "last_pin_timestamp", + "default_auto_archive_duration", + "position", + "permission_overwrites", + "video_quality_mode", + "bitrate", + "user_limit", + "nsfw", + "rate_limit_per_user", + "topic", + "retention_policy_id" + ) + SELECT "id", + "created_at", + "name", + "icon", + "type", + "last_message_id", + "guild_id", + "parent_id", + "owner_id", + "last_pin_timestamp", + "default_auto_archive_duration", + "position", + "permission_overwrites", + "video_quality_mode", + "bitrate", + "user_limit", + "nsfw", + "rate_limit_per_user", + "topic", + "retention_policy_id" + FROM "channels" + `); + await queryRunner.query(` + DROP TABLE "channels" + `); + await queryRunner.query(` + ALTER TABLE "temporary_channels" + RENAME TO "channels" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "channels" + RENAME TO "temporary_channels" + `); + await queryRunner.query(` + CREATE TABLE "channels" ( + "id" varchar PRIMARY KEY NOT NULL, + "created_at" datetime NOT NULL, + "name" varchar, + "icon" text, + "type" integer NOT NULL, + "last_message_id" varchar, + "guild_id" varchar, + "parent_id" varchar, + "owner_id" varchar, + "last_pin_timestamp" integer, + "default_auto_archive_duration" integer, + "position" integer, + "permission_overwrites" text, + "video_quality_mode" integer, + "bitrate" integer, + "user_limit" integer, + "nsfw" boolean, + "rate_limit_per_user" integer, + "topic" varchar, + "retention_policy_id" varchar, + CONSTRAINT "FK_3873ed438575cce703ecff4fc7b" FOREIGN KEY ("owner_id") REFERENCES "users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_3274522d14af40540b1a883fc80" FOREIGN KEY ("parent_id") REFERENCES "channels" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION, + CONSTRAINT "FK_c253dafe5f3a03ec00cd8fb4581" FOREIGN KEY ("guild_id") REFERENCES "guilds" ("id") ON DELETE CASCADE ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "channels"( + "id", + "created_at", + "name", + "icon", + "type", + "last_message_id", + "guild_id", + "parent_id", + "owner_id", + "last_pin_timestamp", + "default_auto_archive_duration", + "position", + "permission_overwrites", + "video_quality_mode", + "bitrate", + "user_limit", + "nsfw", + "rate_limit_per_user", + "topic", + "retention_policy_id" + ) + SELECT "id", + "created_at", + "name", + "icon", + "type", + "last_message_id", + "guild_id", + "parent_id", + "owner_id", + "last_pin_timestamp", + "default_auto_archive_duration", + "position", + "permission_overwrites", + "video_quality_mode", + "bitrate", + "user_limit", + "nsfw", + "rate_limit_per_user", + "topic", + "retention_policy_id" + FROM "temporary_channels" + `); + await queryRunner.query(` + DROP TABLE "temporary_channels" + `); + } + +} diff --git a/src/util/migrations/mariadb/1660260587556-CodeCleanup4.ts b/src/util/migrations/mariadb/1660260587556-CodeCleanup4.ts deleted file mode 100644 index 98da67dbf..000000000 --- a/src/util/migrations/mariadb/1660260587556-CodeCleanup4.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class CodeCleanup41660260587556 implements MigrationInterface { - name = 'CodeCleanup41660260587556' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`users\` - ADD \`settingsId\` varchar(255) NULL - `); - await queryRunner.query(` - ALTER TABLE \`users\` - ADD UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` (\`settingsId\`) - `); - await queryRunner.query(` - CREATE UNIQUE INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) - `); - await queryRunner.query(` - ALTER TABLE \`users\` - ADD CONSTRAINT \`FK_76ba283779c8441fd5ff819c8cf\` FOREIGN KEY (\`settingsId\`) REFERENCES \`user_settings\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`users\` DROP FOREIGN KEY \`FK_76ba283779c8441fd5ff819c8cf\` - `); - await queryRunner.query(` - DROP INDEX \`REL_76ba283779c8441fd5ff819c8c\` ON \`users\` - `); - await queryRunner.query(` - ALTER TABLE \`users\` DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` - `); - await queryRunner.query(` - ALTER TABLE \`users\` DROP COLUMN \`settingsId\` - `); - } - -} diff --git a/src/util/migrations/mariadb/1660416072362-InvitersAreDeletable.ts b/src/util/migrations/mariadb/1660416072362-InvitersAreDeletable.ts deleted file mode 100644 index 8374eafbc..000000000 --- a/src/util/migrations/mariadb/1660416072362-InvitersAreDeletable.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; - -export class InvitersAreDeletable1660416072362 implements MigrationInterface { - name = 'InvitersAreDeletable1660416072362' - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` - `); - await queryRunner.query(` - DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` - `); - await queryRunner.query(` - CREATE TABLE \`plugin_config\` ( - \`key\` varchar(255) NOT NULL, - \`value\` text NULL, - PRIMARY KEY (\`key\`) - ) ENGINE = InnoDB - `); - await queryRunner.query(` - ALTER TABLE \`channels\` - ADD \`flags\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`channels\` - ADD \`default_thread_rate_limit_per_user\` int NULL - `); - await queryRunner.query(` - ALTER TABLE \`invites\` - ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE CASCADE ON UPDATE NO ACTION - `); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query(` - ALTER TABLE \`invites\` DROP FOREIGN KEY \`FK_15c35422032e0b22b4ada95f48f\` - `); - await queryRunner.query(` - ALTER TABLE \`channels\` DROP COLUMN \`default_thread_rate_limit_per_user\` - `); - await queryRunner.query(` - ALTER TABLE \`channels\` DROP COLUMN \`flags\` - `); - await queryRunner.query(` - DROP TABLE \`plugin_config\` - `); - await queryRunner.query(` - CREATE UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) - `); - await queryRunner.query(` - ALTER TABLE \`invites\` - ADD CONSTRAINT \`FK_15c35422032e0b22b4ada95f48f\` FOREIGN KEY (\`inviter_id\`) REFERENCES \`users\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION - `); - } - -} diff --git a/yarn.lock b/yarn.lock index 3173ddfa8..c69f3ac0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,54 +3,54 @@ "@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + "version" "2.2.0" dependencies: "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" "@aws-crypto/crc32@2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-2.0.0.tgz" - integrity sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA== + "integrity" "sha512-TvE1r2CUueyXOuHdEigYjIZVesInd9KN+K/TFFNfkkxRThiNxO6i4ZqqAVMoEjAamZZ1AA8WXJkjCz7YShHPQA==" + "resolved" "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-2.0.0.tgz" + "version" "2.0.0" dependencies: "@aws-crypto/util" "^2.0.0" "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" + "tslib" "^1.11.1" "@aws-crypto/crc32c@2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-2.0.0.tgz" - integrity sha512-vF0eMdMHx3O3MoOXUfBZry8Y4ZDtcuskjjKgJz8YfIDjLStxTZrYXk+kZqtl6A0uCmmiN/Eb/JbC/CndTV1MHg== + "integrity" "sha512-vF0eMdMHx3O3MoOXUfBZry8Y4ZDtcuskjjKgJz8YfIDjLStxTZrYXk+kZqtl6A0uCmmiN/Eb/JbC/CndTV1MHg==" + "resolved" "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-2.0.0.tgz" + "version" "2.0.0" dependencies: "@aws-crypto/util" "^2.0.0" "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" + "tslib" "^1.11.1" "@aws-crypto/ie11-detection@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz" - integrity sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA== + "integrity" "sha512-pkVXf/dq6PITJ0jzYZ69VhL8VFOFoPZLZqtU/12SGnzYuJOOGNfF41q9GxdI1yqC8R13Rq3jOLKDFpUJFT5eTA==" + "resolved" "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-2.0.0.tgz" + "version" "2.0.0" dependencies: - tslib "^1.11.1" + "tslib" "^1.11.1" "@aws-crypto/sha1-browser@2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-2.0.0.tgz" - integrity sha512-3fIVRjPFY8EG5HWXR+ZJZMdWNRpwbxGzJ9IH9q93FpbgCH8u8GHRi46mZXp3cYD7gealmyqpm3ThZwLKJjWJhA== + "integrity" "sha512-3fIVRjPFY8EG5HWXR+ZJZMdWNRpwbxGzJ9IH9q93FpbgCH8u8GHRi46mZXp3cYD7gealmyqpm3ThZwLKJjWJhA==" + "resolved" "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-2.0.0.tgz" + "version" "2.0.0" dependencies: "@aws-crypto/ie11-detection" "^2.0.0" "@aws-crypto/supports-web-crypto" "^2.0.0" "@aws-sdk/types" "^3.1.0" "@aws-sdk/util-locate-window" "^3.0.0" "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" + "tslib" "^1.11.1" "@aws-crypto/sha256-browser@2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz" - integrity sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A== + "integrity" "sha512-rYXOQ8BFOaqMEHJrLHul/25ckWH6GTJtdLSajhlqGMx0PmSueAuvboCuZCTqEKlxR8CQOwRarxYMZZSYlhRA1A==" + "resolved" "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-2.0.0.tgz" + "version" "2.0.0" dependencies: "@aws-crypto/ie11-detection" "^2.0.0" "@aws-crypto/sha256-js" "^2.0.0" @@ -59,60 +59,60 @@ "@aws-sdk/types" "^3.1.0" "@aws-sdk/util-locate-window" "^3.0.0" "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" + "tslib" "^1.11.1" -"@aws-crypto/sha256-js@2.0.0", "@aws-crypto/sha256-js@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz" - integrity sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig== +"@aws-crypto/sha256-js@^2.0.0", "@aws-crypto/sha256-js@2.0.0": + "integrity" "sha512-VZY+mCY4Nmrs5WGfitmNqXzaE873fcIZDu54cbaDaaamsaTOP1DBImV9F4pICc3EHjQXujyE8jig+PFCaew9ig==" + "resolved" "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-2.0.0.tgz" + "version" "2.0.0" dependencies: "@aws-crypto/util" "^2.0.0" "@aws-sdk/types" "^3.1.0" - tslib "^1.11.1" + "tslib" "^1.11.1" "@aws-crypto/supports-web-crypto@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz" - integrity sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA== + "integrity" "sha512-Ge7WQ3E0OC7FHYprsZV3h0QIcpdyJLvIeg+uTuHqRYm8D6qCFJoiC+edSzSyFiHtZf+NOQDJ1q46qxjtzIY2nA==" + "resolved" "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-2.0.0.tgz" + "version" "2.0.0" dependencies: - tslib "^1.11.1" + "tslib" "^1.11.1" "@aws-crypto/util@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.1.tgz" - integrity sha512-JJmFFwvbm08lULw4Nm5QOLg8+lAQeC8aCXK5xrtxntYzYXCGfHwUJ4Is3770Q7HmICsXthGQ+ZsDL7C2uH3yBQ== + "integrity" "sha512-JJmFFwvbm08lULw4Nm5QOLg8+lAQeC8aCXK5xrtxntYzYXCGfHwUJ4Is3770Q7HmICsXthGQ+ZsDL7C2uH3yBQ==" + "resolved" "https://registry.npmjs.org/@aws-crypto/util/-/util-2.0.1.tgz" + "version" "2.0.1" dependencies: "@aws-sdk/types" "^3.1.0" "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" + "tslib" "^1.11.1" "@aws-sdk/abort-controller@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.127.0.tgz" - integrity sha512-G77FLYcl9egUoD3ZmR6TX94NMqBMeT53hBGrEE3uVUJV1CwfGKfaF007mPpRZnIB3avnJBQGEK6MrwlCfv2qAw== + "integrity" "sha512-G77FLYcl9egUoD3ZmR6TX94NMqBMeT53hBGrEE3uVUJV1CwfGKfaF007mPpRZnIB3avnJBQGEK6MrwlCfv2qAw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/abort-controller/-/abort-controller-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/chunked-blob-reader-native@3.109.0": - version "3.109.0" - resolved "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.109.0.tgz" - integrity sha512-Ybn3vDZ3CqGyprL2qdF6QZqoqlx8lA3qOJepobjuKKDRw+KgGxjUY4NvWe0R2MdRoduyaDj6uvhIay0S1MOSJQ== + "integrity" "sha512-Ybn3vDZ3CqGyprL2qdF6QZqoqlx8lA3qOJepobjuKKDRw+KgGxjUY4NvWe0R2MdRoduyaDj6uvhIay0S1MOSJQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader-native/-/chunked-blob-reader-native-3.109.0.tgz" + "version" "3.109.0" dependencies: "@aws-sdk/util-base64-browser" "3.109.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/chunked-blob-reader@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.55.0.tgz" - integrity sha512-o/xjMCq81opAjSBjt7YdHJwIJcGVG5XIV9+C2KXcY5QwVimkOKPybWTv0mXPvSwSilSx+EhpLNhkcJuXdzhw4w== + "integrity" "sha512-o/xjMCq81opAjSBjt7YdHJwIJcGVG5XIV9+C2KXcY5QwVimkOKPybWTv0mXPvSwSilSx+EhpLNhkcJuXdzhw4w==" + "resolved" "https://registry.npmjs.org/@aws-sdk/chunked-blob-reader/-/chunked-blob-reader-3.55.0.tgz" + "version" "3.55.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/client-s3@^3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.137.0.tgz" - integrity sha512-WFOBywwV7ECAOkSOLecpPOGbgmYV5NxHzXHTJEio6xR6s2KzoLegJa0/mq5ljh0Zl5t2h5bsKT1CxYRC0sfwWw== + "integrity" "sha512-WFOBywwV7ECAOkSOLecpPOGbgmYV5NxHzXHTJEio6xR6s2KzoLegJa0/mq5ljh0Zl5t2h5bsKT1CxYRC0sfwWw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-crypto/sha1-browser" "2.0.0" "@aws-crypto/sha256-browser" "2.0.0" @@ -165,14 +165,14 @@ "@aws-sdk/util-utf8-node" "3.109.0" "@aws-sdk/util-waiter" "3.127.0" "@aws-sdk/xml-builder" "3.109.0" - entities "2.2.0" - fast-xml-parser "3.19.0" - tslib "^2.3.1" + "entities" "2.2.0" + "fast-xml-parser" "3.19.0" + "tslib" "^2.3.1" "@aws-sdk/client-sso@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.137.0.tgz" - integrity sha512-l9y9usMuXGI+o1c/VO2qMccN0Bm0T5bFmmbRljB6kIzbJYXD/wVqR8GMZwSnFnz52cnURQ4pgqM1ETg54FlBYQ== + "integrity" "sha512-l9y9usMuXGI+o1c/VO2qMccN0Bm0T5bFmmbRljB6kIzbJYXD/wVqR8GMZwSnFnz52cnURQ4pgqM1ETg54FlBYQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" @@ -204,12 +204,12 @@ "@aws-sdk/util-user-agent-node" "3.127.0" "@aws-sdk/util-utf8-browser" "3.109.0" "@aws-sdk/util-utf8-node" "3.109.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/client-sts@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.137.0.tgz" - integrity sha512-yJqfkEq0DG9Ds+oif/sc02PX6vfSNcyRe3YcaW5P6ouMyhJRljSIVCnA6iPwJaTsmK9BE9PDgFD2v/GYM/XgOA== + "integrity" "sha512-yJqfkEq0DG9Ds+oif/sc02PX6vfSNcyRe3YcaW5P6ouMyhJRljSIVCnA6iPwJaTsmK9BE9PDgFD2v/GYM/XgOA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-crypto/sha256-browser" "2.0.0" "@aws-crypto/sha256-js" "2.0.0" @@ -244,45 +244,45 @@ "@aws-sdk/util-user-agent-node" "3.127.0" "@aws-sdk/util-utf8-browser" "3.109.0" "@aws-sdk/util-utf8-node" "3.109.0" - entities "2.2.0" - fast-xml-parser "3.19.0" - tslib "^2.3.1" + "entities" "2.2.0" + "fast-xml-parser" "3.19.0" + "tslib" "^2.3.1" "@aws-sdk/config-resolver@3.130.0": - version "3.130.0" - resolved "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.130.0.tgz" - integrity sha512-7dkCHHI9kRcHW6YNr9/2Ub6XkvU9Fu6H/BnlKbaKlDR8jq7QpaFhPhctOVi5D/NDpxJgALifexFne0dvo3piTw== + "integrity" "sha512-7dkCHHI9kRcHW6YNr9/2Ub6XkvU9Fu6H/BnlKbaKlDR8jq7QpaFhPhctOVi5D/NDpxJgALifexFne0dvo3piTw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/config-resolver/-/config-resolver-3.130.0.tgz" + "version" "3.130.0" dependencies: "@aws-sdk/signature-v4" "3.130.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-config-provider" "3.109.0" "@aws-sdk/util-middleware" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/credential-provider-env@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.127.0.tgz" - integrity sha512-Ig7XhUikRBlnRTYT5JBGzWfYZp68X5vkFVIFCmsHHt/qVy0Nz9raZpmDHicdS1u67yxDkWgCPn/bNevWnM0GFg== + "integrity" "sha512-Ig7XhUikRBlnRTYT5JBGzWfYZp68X5vkFVIFCmsHHt/qVy0Nz9raZpmDHicdS1u67yxDkWgCPn/bNevWnM0GFg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/credential-provider-imds@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.127.0.tgz" - integrity sha512-I6KlIBBzmJn/U1KikiC50PK3SspT9G5lkVLBaW5a6YfOcijqVTXfAN3kYzqhfeS0j4IgfJEwKVsjsZfmprJO5A== + "integrity" "sha512-I6KlIBBzmJn/U1KikiC50PK3SspT9G5lkVLBaW5a6YfOcijqVTXfAN3kYzqhfeS0j4IgfJEwKVsjsZfmprJO5A==" + "resolved" "https://registry.npmjs.org/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/node-config-provider" "3.127.0" "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/url-parser" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/credential-provider-ini@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.137.0.tgz" - integrity sha512-FNSYjHaW83b4sQac+EWh/C6p1taBdvPOXFAVml1mPH49Nlkv9/E4bbjaWwgxvlxjqjNCbkDMKzhb19DN3gVulA== + "integrity" "sha512-FNSYjHaW83b4sQac+EWh/C6p1taBdvPOXFAVml1mPH49Nlkv9/E4bbjaWwgxvlxjqjNCbkDMKzhb19DN3gVulA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-sdk/credential-provider-env" "3.127.0" "@aws-sdk/credential-provider-imds" "3.127.0" @@ -291,12 +291,12 @@ "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/credential-provider-node@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.137.0.tgz" - integrity sha512-if4CzNSyPS3ZERLtDocNNC+l5ejK93d2hoOzNHP2qCmTppThEPWF2TH506ez0v0lbUzeI7qWgpYe9m4+BFLEwQ== + "integrity" "sha512-if4CzNSyPS3ZERLtDocNNC+l5ejK93d2hoOzNHP2qCmTppThEPWF2TH506ez0v0lbUzeI7qWgpYe9m4+BFLEwQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-sdk/credential-provider-env" "3.127.0" "@aws-sdk/credential-provider-imds" "3.127.0" @@ -307,599 +307,599 @@ "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/credential-provider-process@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.127.0.tgz" - integrity sha512-6v0m2lqkO9J5fNlTl+HjriQNIdfg8mjVST544+5y9EnC/FVmTnIz64vfHveWdNkP/fehFx7wTimNENtoSqCn3A== + "integrity" "sha512-6v0m2lqkO9J5fNlTl+HjriQNIdfg8mjVST544+5y9EnC/FVmTnIz64vfHveWdNkP/fehFx7wTimNENtoSqCn3A==" + "resolved" "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/credential-provider-sso@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.137.0.tgz" - integrity sha512-Up2Q3tWSo6Mv2icXMrHa8dGtnC9yQAeUnftrIlvLXi3P9RjxlOPZCSg1NF8FOS90RdEgORlj/7LPlIniHgGUmg== + "integrity" "sha512-Up2Q3tWSo6Mv2icXMrHa8dGtnC9yQAeUnftrIlvLXi3P9RjxlOPZCSg1NF8FOS90RdEgORlj/7LPlIniHgGUmg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-sdk/client-sso" "3.137.0" "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/credential-provider-web-identity@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.127.0.tgz" - integrity sha512-85ahDZnLYB3dqkW+cQ0bWt+NVqOoxomTrJoq3IC2q6muebeFrJ0pyf0JEW/RNRzBiUvvsZujzGdWifzWyQKfVg== + "integrity" "sha512-85ahDZnLYB3dqkW+cQ0bWt+NVqOoxomTrJoq3IC2q6muebeFrJ0pyf0JEW/RNRzBiUvvsZujzGdWifzWyQKfVg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/eventstream-codec@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.127.0.tgz" - integrity sha512-+Tlujx3VkB4DK8tYzG0rwxIE0ee6hWItQgSEREEmi5CwHQFw7VpRLYAShYabEx9wIJmRFObWzhlKxWNRi+TfaA== + "integrity" "sha512-+Tlujx3VkB4DK8tYzG0rwxIE0ee6hWItQgSEREEmi5CwHQFw7VpRLYAShYabEx9wIJmRFObWzhlKxWNRi+TfaA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/eventstream-codec/-/eventstream-codec-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-crypto/crc32" "2.0.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-hex-encoding" "3.109.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/eventstream-serde-browser@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.127.0.tgz" - integrity sha512-d1rTK4ljEp3Y/BQ78/AJ7eqgGyI6TE0bxNosCmXWcUBv00Tr5cerPqPe7Zvw8XwIMPX5y8cjtd1/cOtB2ePaBw== + "integrity" "sha512-d1rTK4ljEp3Y/BQ78/AJ7eqgGyI6TE0bxNosCmXWcUBv00Tr5cerPqPe7Zvw8XwIMPX5y8cjtd1/cOtB2ePaBw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/eventstream-serde-browser/-/eventstream-serde-browser-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/eventstream-serde-universal" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/eventstream-serde-config-resolver@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.127.0.tgz" - integrity sha512-dYvLfQYcKLOFtZVgwLwKDCykAxNkDyDLQRWytJK9DHCyjRig66IKi1codts9vOy4j0CeYwnXWs5WDavrUaE05g== + "integrity" "sha512-dYvLfQYcKLOFtZVgwLwKDCykAxNkDyDLQRWytJK9DHCyjRig66IKi1codts9vOy4j0CeYwnXWs5WDavrUaE05g==" + "resolved" "https://registry.npmjs.org/@aws-sdk/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/eventstream-serde-node@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.127.0.tgz" - integrity sha512-Ie59jZYAIw3Kt6GePvEilp1k3JoYEQpY3WIyVZltm3dkVf0GmzhCZrPROH9vgF3qApzu1aGOWDV2wX91poXF8A== + "integrity" "sha512-Ie59jZYAIw3Kt6GePvEilp1k3JoYEQpY3WIyVZltm3dkVf0GmzhCZrPROH9vgF3qApzu1aGOWDV2wX91poXF8A==" + "resolved" "https://registry.npmjs.org/@aws-sdk/eventstream-serde-node/-/eventstream-serde-node-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/eventstream-serde-universal" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/eventstream-serde-universal@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.127.0.tgz" - integrity sha512-cJLSTtYDGTevknMTykzHpcDNRbD6yGve8FBUKSAczuNVjXZOedj0GbHJqkASuLj0ZnojbKBdCx4uu1XGyvubng== + "integrity" "sha512-cJLSTtYDGTevknMTykzHpcDNRbD6yGve8FBUKSAczuNVjXZOedj0GbHJqkASuLj0ZnojbKBdCx4uu1XGyvubng==" + "resolved" "https://registry.npmjs.org/@aws-sdk/eventstream-serde-universal/-/eventstream-serde-universal-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/eventstream-codec" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/fetch-http-handler@3.131.0": - version "3.131.0" - resolved "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.131.0.tgz" - integrity sha512-eNxmPZQX2IUeBGWHNC7eNTekWn9VIPLYEMKJbKYUBJryxuTJ7TtLeyEK5oakUjMwP1AUvWT+CV7C+8L7uG1omQ== + "integrity" "sha512-eNxmPZQX2IUeBGWHNC7eNTekWn9VIPLYEMKJbKYUBJryxuTJ7TtLeyEK5oakUjMwP1AUvWT+CV7C+8L7uG1omQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.131.0.tgz" + "version" "3.131.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/querystring-builder" "3.127.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-base64-browser" "3.109.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/hash-blob-browser@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.127.0.tgz" - integrity sha512-XH9s2w6GXCtDI+3/y+sDAzMWJRTvhRXJJtI1fVDsCiyq96SYUTNKLLaUSuR01uawEBiRDBqGDDPMT8qJPDXc/w== + "integrity" "sha512-XH9s2w6GXCtDI+3/y+sDAzMWJRTvhRXJJtI1fVDsCiyq96SYUTNKLLaUSuR01uawEBiRDBqGDDPMT8qJPDXc/w==" + "resolved" "https://registry.npmjs.org/@aws-sdk/hash-blob-browser/-/hash-blob-browser-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/chunked-blob-reader" "3.55.0" "@aws-sdk/chunked-blob-reader-native" "3.109.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/hash-node@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.127.0.tgz" - integrity sha512-wx7DKlXdKebH4JcMsOevdsm2oDNMVm36kuMm0XWRIrFWQ/oq7OquDpEMJzWvGqWF/IfFUpb7FhAWZZpALwlcwA== + "integrity" "sha512-wx7DKlXdKebH4JcMsOevdsm2oDNMVm36kuMm0XWRIrFWQ/oq7OquDpEMJzWvGqWF/IfFUpb7FhAWZZpALwlcwA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/hash-node/-/hash-node-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" "@aws-sdk/util-buffer-from" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/hash-stream-node@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.127.0.tgz" - integrity sha512-ZCNqi+FJViYFCo8JfSx+YK0Hd/SC555gHqBe24GVBMCDqJ8UFIled7tF+GOQ8wTcKjxuwp/0EXDTXoaAb0K89g== + "integrity" "sha512-ZCNqi+FJViYFCo8JfSx+YK0Hd/SC555gHqBe24GVBMCDqJ8UFIled7tF+GOQ8wTcKjxuwp/0EXDTXoaAb0K89g==" + "resolved" "https://registry.npmjs.org/@aws-sdk/hash-stream-node/-/hash-stream-node-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/invalid-dependency@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.127.0.tgz" - integrity sha512-bxvmtmJ6gIRfOHvh1jAPZBH2mzppEblPjEOFo4mOzXz4U3qPIxeuukCjboMnGK9QEpV2wObWcYYld0vxoRrfiA== + "integrity" "sha512-bxvmtmJ6gIRfOHvh1jAPZBH2mzppEblPjEOFo4mOzXz4U3qPIxeuukCjboMnGK9QEpV2wObWcYYld0vxoRrfiA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/invalid-dependency/-/invalid-dependency-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/is-array-buffer@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.55.0.tgz" - integrity sha512-NbiPHVYuPxdqdFd6FxzzN3H1BQn/iWA3ri3Ry7AyLeP/tGs1yzEWMwf8BN8TSMALI0GXT6Sh0GDWy3Ok5xB6DA== + "integrity" "sha512-NbiPHVYuPxdqdFd6FxzzN3H1BQn/iWA3ri3Ry7AyLeP/tGs1yzEWMwf8BN8TSMALI0GXT6Sh0GDWy3Ok5xB6DA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/is-array-buffer/-/is-array-buffer-3.55.0.tgz" + "version" "3.55.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/md5-js@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.127.0.tgz" - integrity sha512-9FzD++p2bvfZ56hbDxvGcLlA9JIMt9uZB/m4NEvbuvrpx1qnUpFv6HqthhGaVuhctkK25hONT5ZpOYHSisATrA== + "integrity" "sha512-9FzD++p2bvfZ56hbDxvGcLlA9JIMt9uZB/m4NEvbuvrpx1qnUpFv6HqthhGaVuhctkK25hONT5ZpOYHSisATrA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/md5-js/-/md5-js-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" "@aws-sdk/util-utf8-browser" "3.109.0" "@aws-sdk/util-utf8-node" "3.109.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-bucket-endpoint@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.127.0.tgz" - integrity sha512-wJpXxWceBDhWktoxrRb4s6tMx0dWsEGYIaV0KkQPGhTPk2KMUgwa4xApfCXXVfYcE3THk486OKwHhPrR5jpe+g== + "integrity" "sha512-wJpXxWceBDhWktoxrRb4s6tMx0dWsEGYIaV0KkQPGhTPk2KMUgwa4xApfCXXVfYcE3THk486OKwHhPrR5jpe+g==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-arn-parser" "3.55.0" "@aws-sdk/util-config-provider" "3.109.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-content-length@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.127.0.tgz" - integrity sha512-AFmMaIEW3Rzg0TaKB9l/RENLowd7ZEEOpm0trYw1CgUUORWW/ydCsDT7pekPlC25CPbhUmWXCSA4xPFSYOVnDw== + "integrity" "sha512-AFmMaIEW3Rzg0TaKB9l/RENLowd7ZEEOpm0trYw1CgUUORWW/ydCsDT7pekPlC25CPbhUmWXCSA4xPFSYOVnDw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-content-length/-/middleware-content-length-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-expect-continue@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.127.0.tgz" - integrity sha512-+X7mdgFqt9UqUDeGuMt+afR8CBX9nMecTxEIilAKdVOLx+fuXzHnC2mpddKMtiE9IGKMU4BI1Ahf7t32Odhs1Q== + "integrity" "sha512-+X7mdgFqt9UqUDeGuMt+afR8CBX9nMecTxEIilAKdVOLx+fuXzHnC2mpddKMtiE9IGKMU4BI1Ahf7t32Odhs1Q==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-flexible-checksums@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.127.0.tgz" - integrity sha512-sXkAwhE9dikO72sEJ7DrUCo5mawauAxICCqipCCSGp0geSkptvtZHhySgJNMVSbUJQmu5bcS+zsFpFVwuJvGxg== + "integrity" "sha512-sXkAwhE9dikO72sEJ7DrUCo5mawauAxICCqipCCSGp0geSkptvtZHhySgJNMVSbUJQmu5bcS+zsFpFVwuJvGxg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-crypto/crc32" "2.0.0" "@aws-crypto/crc32c" "2.0.0" "@aws-sdk/is-array-buffer" "3.55.0" "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-host-header@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.127.0.tgz" - integrity sha512-e2gTLJb5lYP9lRV7hN3rKY2l4jv8OygOoHElZJ3Z8KPZskjHelYPcQ8XbdfhSXXxC3vc/0QqN0ResFt3W3Pplg== + "integrity" "sha512-e2gTLJb5lYP9lRV7hN3rKY2l4jv8OygOoHElZJ3Z8KPZskjHelYPcQ8XbdfhSXXxC3vc/0QqN0ResFt3W3Pplg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-location-constraint@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.127.0.tgz" - integrity sha512-UtPmbOKEVu+Ue7CwICFSOOOSePV8Piydco/v2IpdRkMO0e4bqQ3Tn0XprBlWWfSW4QCtAPzydrArLsUdk636GA== + "integrity" "sha512-UtPmbOKEVu+Ue7CwICFSOOOSePV8Piydco/v2IpdRkMO0e4bqQ3Tn0XprBlWWfSW4QCtAPzydrArLsUdk636GA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-logger@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.127.0.tgz" - integrity sha512-jMNLcZB/ECA7OfkNBLNeAlrLRehyfnUeNQJHW3kcxs9h1+6VxaF6wY+WKozszLI7/3OBzQrFHBQCfRZV7ykSLg== + "integrity" "sha512-jMNLcZB/ECA7OfkNBLNeAlrLRehyfnUeNQJHW3kcxs9h1+6VxaF6wY+WKozszLI7/3OBzQrFHBQCfRZV7ykSLg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-recursion-detection@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.127.0.tgz" - integrity sha512-tB6WX+Z1kUKTnn5h38XFrTCzoqPKjUZLUjN4Wb27/cbeSiTSKGAZcCXHOJm36Ukorl5arlybQTqGe689EU00Hw== + "integrity" "sha512-tB6WX+Z1kUKTnn5h38XFrTCzoqPKjUZLUjN4Wb27/cbeSiTSKGAZcCXHOJm36Ukorl5arlybQTqGe689EU00Hw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-retry@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.127.0.tgz" - integrity sha512-ZSvg/AyGUacWnf3i8ZbyImtiCH+NyafF8uV7bITP7JkwPrG+VdNocJZOr88GRM0c1A0jfkOf7+oq+fInPwwiNA== + "integrity" "sha512-ZSvg/AyGUacWnf3i8ZbyImtiCH+NyafF8uV7bITP7JkwPrG+VdNocJZOr88GRM0c1A0jfkOf7+oq+fInPwwiNA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-retry/-/middleware-retry-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/service-error-classification" "3.127.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-middleware" "3.127.0" - tslib "^2.3.1" - uuid "^8.3.2" + "tslib" "^2.3.1" + "uuid" "^8.3.2" "@aws-sdk/middleware-sdk-s3@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.127.0.tgz" - integrity sha512-q1mkEN7kYYdQ3LOHIhaT56omYe8DCubyiCKOXuEo5ZiIkE5iq06K/BxWxj3f8bFZxSX80Ma1m8XA5jcOEMphSA== + "integrity" "sha512-q1mkEN7kYYdQ3LOHIhaT56omYe8DCubyiCKOXuEo5ZiIkE5iq06K/BxWxj3f8bFZxSX80Ma1m8XA5jcOEMphSA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/middleware-bucket-endpoint" "3.127.0" "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-arn-parser" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-sdk-sts@3.130.0": - version "3.130.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.130.0.tgz" - integrity sha512-FDfs7+ohbhEK3eH3Dshr6JDiL8P72bp3ffeNpPBXuURFqwt4pCmjHuX3SqQR0JIJ2cl3aIdxc17rKaZJfOjtPw== + "integrity" "sha512-FDfs7+ohbhEK3eH3Dshr6JDiL8P72bp3ffeNpPBXuURFqwt4pCmjHuX3SqQR0JIJ2cl3aIdxc17rKaZJfOjtPw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.130.0.tgz" + "version" "3.130.0" dependencies: "@aws-sdk/middleware-signing" "3.130.0" "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/signature-v4" "3.130.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-serde@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.127.0.tgz" - integrity sha512-xmWMYV/t9M+b9yHjqaD1noDNJJViI2QwOH7TQZ9VbbrvdVtDrFuS9Sf9He80TBCJqeHShwQN9783W1I3Pu/8kw== + "integrity" "sha512-xmWMYV/t9M+b9yHjqaD1noDNJJViI2QwOH7TQZ9VbbrvdVtDrFuS9Sf9He80TBCJqeHShwQN9783W1I3Pu/8kw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-serde/-/middleware-serde-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-signing@3.130.0": - version "3.130.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.130.0.tgz" - integrity sha512-JePq5XLR9TfRN3RQ0d7Za/bEW5D3xgtD1FNAwHeenWALeozMuQgRPjM5RroCnL/5jY3wuvCZI7cSXeqhawWqmA== + "integrity" "sha512-JePq5XLR9TfRN3RQ0d7Za/bEW5D3xgtD1FNAwHeenWALeozMuQgRPjM5RroCnL/5jY3wuvCZI7cSXeqhawWqmA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.130.0.tgz" + "version" "3.130.0" dependencies: "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/signature-v4" "3.130.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-ssec@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.127.0.tgz" - integrity sha512-R5A13EvdYPdYD2Tq9eW5jqIdscyZlQykQXFEolBD2oi4pew7TZpc/5aazZC0zo9YKJ29qiUR1P4NvjcFJ7zFBg== + "integrity" "sha512-R5A13EvdYPdYD2Tq9eW5jqIdscyZlQykQXFEolBD2oi4pew7TZpc/5aazZC0zo9YKJ29qiUR1P4NvjcFJ7zFBg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-stack@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.127.0.tgz" - integrity sha512-S1IoUE5o1vCmjsF5nIE8zlItNOM1UE+lhmZeigF7knXJ9+a6ewMB6POAj/s4eoi0wcn0eSnAGsqJCWMSUjOPLA== + "integrity" "sha512-S1IoUE5o1vCmjsF5nIE8zlItNOM1UE+lhmZeigF7knXJ9+a6ewMB6POAj/s4eoi0wcn0eSnAGsqJCWMSUjOPLA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-stack/-/middleware-stack-3.127.0.tgz" + "version" "3.127.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/middleware-user-agent@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.127.0.tgz" - integrity sha512-CHxgswoOzdkOEoIq7Oyob3Sx/4FYUv6BhUesAX7MNshaDDsTQPbSWjw5bqZDiL/gO+X/34fvqCVVpVD2GvxW/g== + "integrity" "sha512-CHxgswoOzdkOEoIq7Oyob3Sx/4FYUv6BhUesAX7MNshaDDsTQPbSWjw5bqZDiL/gO+X/34fvqCVVpVD2GvxW/g==" + "resolved" "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/node-config-provider@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.127.0.tgz" - integrity sha512-bAHkASMhLZHT1yv2TX6OJGFV9Lc3t1gKfTMEKdXM2O2YhGfSx9A/qLeJm79oDfnILWQtSS2NicxlRDI2lYGf4g== + "integrity" "sha512-bAHkASMhLZHT1yv2TX6OJGFV9Lc3t1gKfTMEKdXM2O2YhGfSx9A/qLeJm79oDfnILWQtSS2NicxlRDI2lYGf4g==" + "resolved" "https://registry.npmjs.org/@aws-sdk/node-config-provider/-/node-config-provider-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/shared-ini-file-loader" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/node-http-handler@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.127.0.tgz" - integrity sha512-pyMKvheK8eDwWLgYIRsWy8wiyhsbYYcqkZQs3Eh6upI4E8iCY7eMmhWvHYCibvsO+UjsOwa4cAMOfwnv/Z9s8A== + "integrity" "sha512-pyMKvheK8eDwWLgYIRsWy8wiyhsbYYcqkZQs3Eh6upI4E8iCY7eMmhWvHYCibvsO+UjsOwa4cAMOfwnv/Z9s8A==" + "resolved" "https://registry.npmjs.org/@aws-sdk/node-http-handler/-/node-http-handler-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/abort-controller" "3.127.0" "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/querystring-builder" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/property-provider@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.127.0.tgz" - integrity sha512-JxenxlTEkWfLrtJqIjaXaJzAVQbbscoCb5bNjmdud07ESLVfWRKJx2nAJdecHKYp2M5NQyqBuFhQ1ELSFYQKCA== + "integrity" "sha512-JxenxlTEkWfLrtJqIjaXaJzAVQbbscoCb5bNjmdud07ESLVfWRKJx2nAJdecHKYp2M5NQyqBuFhQ1ELSFYQKCA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/property-provider/-/property-provider-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/protocol-http@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.127.0.tgz" - integrity sha512-UG83PVuKX40wilG2uRU0Fvz4OY8Bt+bSPOG776DFjwIXYzK7BwpJm9H2XI2HLhS5WxrJHhwrLBRgW6UiykMnFw== + "integrity" "sha512-UG83PVuKX40wilG2uRU0Fvz4OY8Bt+bSPOG776DFjwIXYzK7BwpJm9H2XI2HLhS5WxrJHhwrLBRgW6UiykMnFw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/protocol-http/-/protocol-http-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/querystring-builder@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.127.0.tgz" - integrity sha512-tsoyp4lLPsASPDYWsezGAHD8VJsZbjUNATNAzTCFdH6p+4SKBK83Q5kfXCzxt13M+l3oKbxxIWLvS0kVQFyltQ== + "integrity" "sha512-tsoyp4lLPsASPDYWsezGAHD8VJsZbjUNATNAzTCFdH6p+4SKBK83Q5kfXCzxt13M+l3oKbxxIWLvS0kVQFyltQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/querystring-builder/-/querystring-builder-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" "@aws-sdk/util-uri-escape" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/querystring-parser@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.127.0.tgz" - integrity sha512-Vn/Dv+PqUSepp/DzLqq0LJJD8HdPefJCnLbO5WcHCARHSGlyGlZUFEM45k/oEHpTvgMXj/ORaP3A+tLwLu0AmA== + "integrity" "sha512-Vn/Dv+PqUSepp/DzLqq0LJJD8HdPefJCnLbO5WcHCARHSGlyGlZUFEM45k/oEHpTvgMXj/ORaP3A+tLwLu0AmA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/querystring-parser/-/querystring-parser-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/service-error-classification@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.127.0.tgz" - integrity sha512-wjZY9rnlA8SPrICUumTYicEKtK4/yKB62iadUk66hxe8MrH8JhuHH2NqIad0Pt/bK/YtNVhd3yb4pRapOeY5qQ== + "integrity" "sha512-wjZY9rnlA8SPrICUumTYicEKtK4/yKB62iadUk66hxe8MrH8JhuHH2NqIad0Pt/bK/YtNVhd3yb4pRapOeY5qQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/service-error-classification/-/service-error-classification-3.127.0.tgz" + "version" "3.127.0" "@aws-sdk/shared-ini-file-loader@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.127.0.tgz" - integrity sha512-S3Nn4KRTqoJsB/TbRZSWBBUrkckNMR0Juqz7bOB+wupVvddKP6IcpspSC/GX9zgJjVMV8iGisZ6AUsYsC5r+cA== + "integrity" "sha512-S3Nn4KRTqoJsB/TbRZSWBBUrkckNMR0Juqz7bOB+wupVvddKP6IcpspSC/GX9zgJjVMV8iGisZ6AUsYsC5r+cA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.127.0.tgz" + "version" "3.127.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/signature-v4-multi-region@3.130.0": - version "3.130.0" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.130.0.tgz" - integrity sha512-ZRRoPRoCVdkGDtjuog81pqHsSLfnXK6ELrWm4Dq8xdcHQGbEDNdYmeXARXG9yPAO42x9yIJXHNutMz5Y/P64cw== + "integrity" "sha512-ZRRoPRoCVdkGDtjuog81pqHsSLfnXK6ELrWm4Dq8xdcHQGbEDNdYmeXARXG9yPAO42x9yIJXHNutMz5Y/P64cw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.130.0.tgz" + "version" "3.130.0" dependencies: "@aws-sdk/protocol-http" "3.127.0" "@aws-sdk/signature-v4" "3.130.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-arn-parser" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/signature-v4@3.130.0": - version "3.130.0" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.130.0.tgz" - integrity sha512-g5G1a1NHL2uOoFfC2zQdZcj+wbjgBQPkx6xGdtqNKf9v2kS0n6ap5JUGEaqWE02lUlmWHsoMsS73hXtzwXaBRQ== + "integrity" "sha512-g5G1a1NHL2uOoFfC2zQdZcj+wbjgBQPkx6xGdtqNKf9v2kS0n6ap5JUGEaqWE02lUlmWHsoMsS73hXtzwXaBRQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/signature-v4/-/signature-v4-3.130.0.tgz" + "version" "3.130.0" dependencies: "@aws-sdk/is-array-buffer" "3.55.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-hex-encoding" "3.109.0" "@aws-sdk/util-middleware" "3.127.0" "@aws-sdk/util-uri-escape" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/smithy-client@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.137.0.tgz" - integrity sha512-YAuWiSzHJGV9jQCjmcBWxbWRoq/3INEpdtfAdpR+X+sEZaRJESDGPt4or7WbQ9Tmbd/uZ0uQLYIed/NDSyJLLQ== + "integrity" "sha512-YAuWiSzHJGV9jQCjmcBWxbWRoq/3INEpdtfAdpR+X+sEZaRJESDGPt4or7WbQ9Tmbd/uZ0uQLYIed/NDSyJLLQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/smithy-client/-/smithy-client-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-sdk/middleware-stack" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" -"@aws-sdk/types@3.127.0", "@aws-sdk/types@^3.1.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.127.0.tgz" - integrity sha512-e0wtx2IkOl7rwfKfLH5pPTzQ+d45V7b1WrjeL0WDI8kOu6w+sXmhNxI6uM2kf0k4NiTLN84lW290AEWupey9Og== +"@aws-sdk/types@^3.1.0", "@aws-sdk/types@3.127.0": + "integrity" "sha512-e0wtx2IkOl7rwfKfLH5pPTzQ+d45V7b1WrjeL0WDI8kOu6w+sXmhNxI6uM2kf0k4NiTLN84lW290AEWupey9Og==" + "resolved" "https://registry.npmjs.org/@aws-sdk/types/-/types-3.127.0.tgz" + "version" "3.127.0" "@aws-sdk/url-parser@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.127.0.tgz" - integrity sha512-njZ7zn41JHRpNfr3BCesVXCLZE0zcWSfEdtRV0ICw0cU1FgYcKELSuY9+gLUB4ci6uc7gq7mPE8+w30FcM4QeA== + "integrity" "sha512-njZ7zn41JHRpNfr3BCesVXCLZE0zcWSfEdtRV0ICw0cU1FgYcKELSuY9+gLUB4ci6uc7gq7mPE8+w30FcM4QeA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/url-parser/-/url-parser-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/querystring-parser" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-arn-parser@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.55.0.tgz" - integrity sha512-76KJxp4MRWufHYWys7DFl64znr5yeJ3AIQNAPCKKw1sP0hzO7p6Kx0PaJnw9x+CPSzOrT4NbuApL6/srYhKDGg== + "integrity" "sha512-76KJxp4MRWufHYWys7DFl64znr5yeJ3AIQNAPCKKw1sP0hzO7p6Kx0PaJnw9x+CPSzOrT4NbuApL6/srYhKDGg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.55.0.tgz" + "version" "3.55.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-base64-browser@3.109.0": - version "3.109.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.109.0.tgz" - integrity sha512-lAZ6fyDGiRLaIsKT9qh7P9FGuNyZ4gAbr1YOSQk/5mHtaTuUvxlPptZuInNM/0MPQm6lpcot00D8IWTucn4PbA== + "integrity" "sha512-lAZ6fyDGiRLaIsKT9qh7P9FGuNyZ4gAbr1YOSQk/5mHtaTuUvxlPptZuInNM/0MPQm6lpcot00D8IWTucn4PbA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-base64-browser/-/util-base64-browser-3.109.0.tgz" + "version" "3.109.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-base64-node@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.55.0.tgz" - integrity sha512-UQ/ZuNoAc8CFMpSiRYmevaTsuRKzLwulZTnM8LNlIt9Wx1tpNvqp80cfvVj7yySKROtEi20wq29h31dZf1eYNQ== + "integrity" "sha512-UQ/ZuNoAc8CFMpSiRYmevaTsuRKzLwulZTnM8LNlIt9Wx1tpNvqp80cfvVj7yySKROtEi20wq29h31dZf1eYNQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.55.0.tgz" + "version" "3.55.0" dependencies: "@aws-sdk/util-buffer-from" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-body-length-browser@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.55.0.tgz" - integrity sha512-Ei2OCzXQw5N6ZkTMZbamUzc1z+z1R1Ja5tMEagz5BxuX4vWdBObT+uGlSzL8yvTbjoPjnxWA2aXyEqaUP3JS8Q== + "integrity" "sha512-Ei2OCzXQw5N6ZkTMZbamUzc1z+z1R1Ja5tMEagz5BxuX4vWdBObT+uGlSzL8yvTbjoPjnxWA2aXyEqaUP3JS8Q==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.55.0.tgz" + "version" "3.55.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-body-length-node@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.55.0.tgz" - integrity sha512-lU1d4I+9wJwydduXs0SxSfd+mHKjxeyd39VwOv6i2KSwWkPbji9UQqpflKLKw+r45jL7+xU/zfeTUg5Tt/3Gew== + "integrity" "sha512-lU1d4I+9wJwydduXs0SxSfd+mHKjxeyd39VwOv6i2KSwWkPbji9UQqpflKLKw+r45jL7+xU/zfeTUg5Tt/3Gew==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-body-length-node/-/util-body-length-node-3.55.0.tgz" + "version" "3.55.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-buffer-from@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.55.0.tgz" - integrity sha512-uVzKG1UgvnV7XX2FPTylBujYMKBPBaq/qFBxfl0LVNfrty7YjpfieQxAe6yRLD+T0Kir/WDQwGvYC+tOYG3IGA== + "integrity" "sha512-uVzKG1UgvnV7XX2FPTylBujYMKBPBaq/qFBxfl0LVNfrty7YjpfieQxAe6yRLD+T0Kir/WDQwGvYC+tOYG3IGA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-buffer-from/-/util-buffer-from-3.55.0.tgz" + "version" "3.55.0" dependencies: "@aws-sdk/is-array-buffer" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-config-provider@3.109.0": - version "3.109.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.109.0.tgz" - integrity sha512-GrAZl/aBv0A28LkyNyq8SPJ5fmViCwz80fWLMeWx/6q5AbivuILogjlWwEZSvZ9zrlHOcFC0+AnCa5pQrjaslw== + "integrity" "sha512-GrAZl/aBv0A28LkyNyq8SPJ5fmViCwz80fWLMeWx/6q5AbivuILogjlWwEZSvZ9zrlHOcFC0+AnCa5pQrjaslw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-config-provider/-/util-config-provider-3.109.0.tgz" + "version" "3.109.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-defaults-mode-browser@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.137.0.tgz" - integrity sha512-9f5045wqPAcGLKIAXzZKHE2n42ilGo/g4rLSS09OXx9CoFT4lVdqZPqBqh/prDUMrqXge9FK3EH2VId7L5GpEQ== + "integrity" "sha512-9f5045wqPAcGLKIAXzZKHE2n42ilGo/g4rLSS09OXx9CoFT4lVdqZPqBqh/prDUMrqXge9FK3EH2VId7L5GpEQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/types" "3.127.0" - bowser "^2.11.0" - tslib "^2.3.1" + "bowser" "^2.11.0" + "tslib" "^2.3.1" "@aws-sdk/util-defaults-mode-node@3.137.0": - version "3.137.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.137.0.tgz" - integrity sha512-CvMpemcsOkoMEz0iALamyQBt1rHx98NvF/cay019F8m+umD03I8CclDugy/13DqESWfsVxn91lZY/DOnO+si7A== + "integrity" "sha512-CvMpemcsOkoMEz0iALamyQBt1rHx98NvF/cay019F8m+umD03I8CclDugy/13DqESWfsVxn91lZY/DOnO+si7A==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.137.0.tgz" + "version" "3.137.0" dependencies: "@aws-sdk/config-resolver" "3.130.0" "@aws-sdk/credential-provider-imds" "3.127.0" "@aws-sdk/node-config-provider" "3.127.0" "@aws-sdk/property-provider" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-hex-encoding@3.109.0": - version "3.109.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.109.0.tgz" - integrity sha512-s8CgTNrn3cLkrdiohfxLuOYPCanzvHn/aH5RW6DaMoeQiG5Hl9QUiP/WtdQ9QQx3xvpQFpmvxIaSBwSgFNLQxA== + "integrity" "sha512-s8CgTNrn3cLkrdiohfxLuOYPCanzvHn/aH5RW6DaMoeQiG5Hl9QUiP/WtdQ9QQx3xvpQFpmvxIaSBwSgFNLQxA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.109.0.tgz" + "version" "3.109.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-locate-window@^3.0.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.55.0.tgz" - integrity sha512-0sPmK2JaJE2BbTcnvybzob/VrFKCXKfN4CUKcvn0yGg/me7Bz+vtzQRB3Xp+YSx+7OtWxzv63wsvHoAnXvgxgg== + "integrity" "sha512-0sPmK2JaJE2BbTcnvybzob/VrFKCXKfN4CUKcvn0yGg/me7Bz+vtzQRB3Xp+YSx+7OtWxzv63wsvHoAnXvgxgg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.55.0.tgz" + "version" "3.55.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-middleware@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.127.0.tgz" - integrity sha512-EwAPPed9TNqh+Wov2VStLn2NuJ/Wyt7IkZCbCsBuSNp3BFZ1V4gfwTjqtKCtB2LQgQ48MTgWgNCvrH0zjCSPGg== + "integrity" "sha512-EwAPPed9TNqh+Wov2VStLn2NuJ/Wyt7IkZCbCsBuSNp3BFZ1V4gfwTjqtKCtB2LQgQ48MTgWgNCvrH0zjCSPGg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-middleware/-/util-middleware-3.127.0.tgz" + "version" "3.127.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-stream-browser@3.131.0": - version "3.131.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.131.0.tgz" - integrity sha512-1YFbBPDu+elIgp8z1woUfT7zM+2PAvgJiw6ljDBuAlJzsP5xMhwk0X9e+8aQ+Qe4XftA0e7y/PH0gqvjNgCx2A== + "integrity" "sha512-1YFbBPDu+elIgp8z1woUfT7zM+2PAvgJiw6ljDBuAlJzsP5xMhwk0X9e+8aQ+Qe4XftA0e7y/PH0gqvjNgCx2A==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-stream-browser/-/util-stream-browser-3.131.0.tgz" + "version" "3.131.0" dependencies: "@aws-sdk/fetch-http-handler" "3.131.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-base64-browser" "3.109.0" "@aws-sdk/util-hex-encoding" "3.109.0" "@aws-sdk/util-utf8-browser" "3.109.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-stream-node@3.129.0": - version "3.129.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.129.0.tgz" - integrity sha512-1iWqsWvVXyP4JLPPPs8tBZKyzs7D5e7KctXuCtIjI+cnGOCeVLL+X4L/7KDZfV7sI2D6vONtIoTnUjMl5V/kEg== + "integrity" "sha512-1iWqsWvVXyP4JLPPPs8tBZKyzs7D5e7KctXuCtIjI+cnGOCeVLL+X4L/7KDZfV7sI2D6vONtIoTnUjMl5V/kEg==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-stream-node/-/util-stream-node-3.129.0.tgz" + "version" "3.129.0" dependencies: "@aws-sdk/node-http-handler" "3.127.0" "@aws-sdk/types" "3.127.0" "@aws-sdk/util-buffer-from" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-uri-escape@3.55.0": - version "3.55.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.55.0.tgz" - integrity sha512-mmdDLUpFCN2nkfwlLdOM54lTD528GiGSPN1qb8XtGLgZsJUmg3uJSFIN2lPeSbEwJB3NFjVas/rnQC48i7mV8w== + "integrity" "sha512-mmdDLUpFCN2nkfwlLdOM54lTD528GiGSPN1qb8XtGLgZsJUmg3uJSFIN2lPeSbEwJB3NFjVas/rnQC48i7mV8w==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-uri-escape/-/util-uri-escape-3.55.0.tgz" + "version" "3.55.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-user-agent-browser@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.127.0.tgz" - integrity sha512-uO2oHmJswuYKJS+GiMdYI8izhpC9M7/jFFvnAmLlTEVwpEi1VX9KePAOF+u5AaBC2kzITo/7dg141XfRHZloIQ== + "integrity" "sha512-uO2oHmJswuYKJS+GiMdYI8izhpC9M7/jFFvnAmLlTEVwpEi1VX9KePAOF+u5AaBC2kzITo/7dg141XfRHZloIQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/types" "3.127.0" - bowser "^2.11.0" - tslib "^2.3.1" + "bowser" "^2.11.0" + "tslib" "^2.3.1" "@aws-sdk/util-user-agent-node@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.127.0.tgz" - integrity sha512-3P/M4ZDD2qMeeoCk7TE/Mw7cG5IjB87F6BP8nI8/oHuaz7j6fsI7D49SNpyjl8JApRynZ122Ad6hwQwRj3isYw== + "integrity" "sha512-3P/M4ZDD2qMeeoCk7TE/Mw7cG5IjB87F6BP8nI8/oHuaz7j6fsI7D49SNpyjl8JApRynZ122Ad6hwQwRj3isYw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/node-config-provider" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" -"@aws-sdk/util-utf8-browser@3.109.0", "@aws-sdk/util-utf8-browser@^3.0.0": - version "3.109.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.109.0.tgz" - integrity sha512-FmcGSz0v7Bqpl1SE8G1Gc0CtDpug+rvqNCG/szn86JApD/f5x8oByjbEiAyTU2ZH2VevUntx6EW68ulHyH+x+w== +"@aws-sdk/util-utf8-browser@^3.0.0", "@aws-sdk/util-utf8-browser@3.109.0": + "integrity" "sha512-FmcGSz0v7Bqpl1SE8G1Gc0CtDpug+rvqNCG/szn86JApD/f5x8oByjbEiAyTU2ZH2VevUntx6EW68ulHyH+x+w==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.109.0.tgz" + "version" "3.109.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-utf8-node@3.109.0": - version "3.109.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.109.0.tgz" - integrity sha512-Ti/ZBdvz2eSTElsucjzNmzpyg2MwfD1rXmxD0hZuIF8bPON/0+sZYnWd5CbDw9kgmhy28dmKue086tbZ1G0iLQ== + "integrity" "sha512-Ti/ZBdvz2eSTElsucjzNmzpyg2MwfD1rXmxD0hZuIF8bPON/0+sZYnWd5CbDw9kgmhy28dmKue086tbZ1G0iLQ==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-utf8-node/-/util-utf8-node-3.109.0.tgz" + "version" "3.109.0" dependencies: "@aws-sdk/util-buffer-from" "3.55.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/util-waiter@3.127.0": - version "3.127.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.127.0.tgz" - integrity sha512-E5qrRpBJS8dmClqSDW1pWVMKzCG/mxabG6jVUtlW/WLHnl/znxGaOQc6tnnwKik0nEq/4DpT9fEfPUz9JiLrkw== + "integrity" "sha512-E5qrRpBJS8dmClqSDW1pWVMKzCG/mxabG6jVUtlW/WLHnl/znxGaOQc6tnnwKik0nEq/4DpT9fEfPUz9JiLrkw==" + "resolved" "https://registry.npmjs.org/@aws-sdk/util-waiter/-/util-waiter-3.127.0.tgz" + "version" "3.127.0" dependencies: "@aws-sdk/abort-controller" "3.127.0" "@aws-sdk/types" "3.127.0" - tslib "^2.3.1" + "tslib" "^2.3.1" "@aws-sdk/xml-builder@3.109.0": - version "3.109.0" - resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.109.0.tgz" - integrity sha512-+aAXynnrqya1Eukz4Gxch4xIXCZolIMWGD4Ll/Q5yXT5uAjGh2HQWd9J0LWE+gYChpWetZbAVYZ3cEJ6F+SpZA== + "integrity" "sha512-+aAXynnrqya1Eukz4Gxch4xIXCZolIMWGD4Ll/Q5yXT5uAjGh2HQWd9J0LWE+gYChpWetZbAVYZ3cEJ6F+SpZA==" + "resolved" "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.109.0.tgz" + "version" "3.109.0" dependencies: - tslib "^2.3.1" + "tslib" "^2.3.1" "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + "integrity" "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/highlight" "^7.18.6" "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": - version "7.18.8" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz" - integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + "integrity" "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz" + "version" "7.18.8" -"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.18.9", "@babel/core@^7.4.0-0", "@babel/core@^7.8.0": + "integrity" "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz" + "version" "7.18.9" dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" @@ -911,50 +911,50 @@ "@babel/template" "^7.18.6" "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.1" + "semver" "^6.3.0" "@babel/generator@^7.18.9", "@babel/generator@^7.7.2": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz" - integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + "integrity" "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/types" "^7.18.9" "@jridgewell/gen-mapping" "^0.3.2" - jsesc "^2.5.1" + "jsesc" "^2.5.1" "@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + "integrity" "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz" - integrity sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw== + "integrity" "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==" + "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.6" "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz" - integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + "integrity" "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" - semver "^6.3.0" + "browserslist" "^4.20.2" + "semver" "^6.3.0" "@babel/helper-create-class-features-plugin@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz" - integrity sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw== + "integrity" "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.6" @@ -965,72 +965,72 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-create-regexp-features-plugin@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz" - integrity sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A== + "integrity" "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" - regexpu-core "^5.1.0" + "regexpu-core" "^5.1.0" "@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + "integrity" "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz" + "version" "0.3.1" dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" "@babel/helper-plugin-utils" "^7.13.0" "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + "semver" "^6.1.2" "@babel/helper-environment-visitor@^7.18.6", "@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + "integrity" "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz" + "version" "7.18.9" "@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + "integrity" "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==" + "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-function-name@^7.18.6", "@babel/helper-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz" - integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + "integrity" "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/template" "^7.18.6" "@babel/types" "^7.18.9" "@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-member-expression-to-functions@^7.18.6", "@babel/helper-member-expression-to-functions@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" - integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + "integrity" "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/types" "^7.18.9" "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" - integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + "integrity" "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz" - integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + "integrity" "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" @@ -1042,21 +1042,21 @@ "@babel/types" "^7.18.9" "@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + "integrity" "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz" - integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + "integrity" "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz" + "version" "7.18.9" "@babel/helper-remap-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz" - integrity sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ== + "integrity" "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.6" @@ -1064,9 +1064,9 @@ "@babel/types" "^7.18.6" "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz" - integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + "integrity" "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-member-expression-to-functions" "^7.18.9" @@ -1075,40 +1075,40 @@ "@babel/types" "^7.18.9" "@babel/helper-simple-access@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" - integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + "integrity" "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-skip-transparent-expression-wrappers@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz" - integrity sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw== + "integrity" "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/types" "^7.18.9" "@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/types" "^7.18.6" "@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + "integrity" "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz" + "version" "7.18.6" "@babel/helper-validator-option@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" - integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + "integrity" "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz" + "version" "7.18.6" "@babel/helper-wrap-function@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz" - integrity sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw== + "integrity" "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==" + "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-function-name" "^7.18.6" "@babel/template" "^7.18.6" @@ -1116,48 +1116,48 @@ "@babel/types" "^7.18.6" "@babel/helpers@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz" - integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + "integrity" "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/template" "^7.18.6" "@babel/traverse" "^7.18.9" "@babel/types" "^7.18.9" "@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz" - integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + "integrity" "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz" + "version" "7.18.9" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + "integrity" "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" - integrity sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg== + "integrity" "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-proposal-optional-chaining" "^7.18.9" "@babel/plugin-proposal-async-generator-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz" - integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== + "integrity" "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-environment-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" @@ -1165,74 +1165,74 @@ "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + "integrity" "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-class-static-block@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" - integrity sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw== + "integrity" "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + "integrity" "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + "integrity" "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + "integrity" "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" - integrity sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q== + "integrity" "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + "integrity" "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + "integrity" "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz" - integrity sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q== + "integrity" "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-compilation-targets" "^7.18.9" @@ -1241,34 +1241,34 @@ "@babel/plugin-transform-parameters" "^7.18.8" "@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + "integrity" "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-proposal-optional-chaining@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" - integrity sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w== + "integrity" "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + "integrity" "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-private-property-in-object@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz" - integrity sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw== + "integrity" "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-create-class-features-plugin" "^7.18.6" @@ -1276,173 +1276,173 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + "integrity" "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-import-assertions@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz" - integrity sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ== + "integrity" "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.18.6", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" - integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + "integrity" "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-arrow-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" - integrity sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ== + "integrity" "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-async-to-generator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" - integrity sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag== + "integrity" "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-module-imports" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-remap-async-to-generator" "^7.18.6" "@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + "integrity" "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-block-scoping@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz" - integrity sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw== + "integrity" "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-classes@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz" - integrity sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g== + "integrity" "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-environment-visitor" "^7.18.9" @@ -1451,229 +1451,229 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-replace-supers" "^7.18.9" "@babel/helper-split-export-declaration" "^7.18.6" - globals "^11.1.0" + "globals" "^11.1.0" "@babel/plugin-transform-computed-properties@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" - integrity sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw== + "integrity" "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-destructuring@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz" - integrity sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA== + "integrity" "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + "integrity" "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + "integrity" "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + "integrity" "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-for-of@^7.18.8": - version "7.18.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" - integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== + "integrity" "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz" + "version" "7.18.8" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + "integrity" "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + "integrity" "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + "integrity" "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-modules-amd@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz" - integrity sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg== + "integrity" "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "babel-plugin-dynamic-import-node" "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz" - integrity sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q== + "integrity" "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-simple-access" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "babel-plugin-dynamic-import-node" "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz" - integrity sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A== + "integrity" "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-module-transforms" "^7.18.9" "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-validator-identifier" "^7.18.6" - babel-plugin-dynamic-import-node "^2.3.3" + "babel-plugin-dynamic-import-node" "^2.3.3" "@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + "integrity" "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-module-transforms" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-named-capturing-groups-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz" - integrity sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg== + "integrity" "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + "integrity" "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + "integrity" "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-replace-supers" "^7.18.6" "@babel/plugin-transform-parameters@^7.18.8": - version "7.18.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz" - integrity sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg== + "integrity" "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz" + "version" "7.18.8" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + "integrity" "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-regenerator@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz" - integrity sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ== + "integrity" "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" - regenerator-transform "^0.15.0" + "regenerator-transform" "^0.15.0" "@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + "integrity" "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + "integrity" "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-spread@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz" - integrity sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA== + "integrity" "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + "integrity" "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + "integrity" "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + "integrity" "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typescript@^7.18.6": - version "7.18.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz" - integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== + "integrity" "sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz" + "version" "7.18.8" dependencies: "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-typescript" "^7.18.6" "@babel/plugin-transform-unicode-escapes@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz" - integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== + "integrity" "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + "integrity" "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-env@^7.18.9": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz" - integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== + "integrity" "sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg==" + "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-compilation-targets" "^7.18.9" @@ -1745,52 +1745,52 @@ "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" "@babel/types" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" - core-js-compat "^3.22.1" - semver "^6.3.0" + "babel-plugin-polyfill-corejs2" "^0.3.1" + "babel-plugin-polyfill-corejs3" "^0.5.2" + "babel-plugin-polyfill-regenerator" "^0.3.1" + "core-js-compat" "^3.22.1" + "semver" "^6.3.0" "@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + "integrity" "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==" + "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + "version" "0.1.5" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" - esutils "^2.0.2" + "esutils" "^2.0.2" "@babel/preset-typescript@^7.15.0": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz" - integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + "integrity" "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==" + "resolved" "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/helper-plugin-utils" "^7.18.6" "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-transform-typescript" "^7.18.6" "@babel/runtime@^7.17.2", "@babel/runtime@^7.8.4": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz" - integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== + "integrity" "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz" + "version" "7.18.6" dependencies: - regenerator-runtime "^0.13.4" + "regenerator-runtime" "^0.13.4" "@babel/template@^7.18.6", "@babel/template@^7.3.3": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + "integrity" "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz" + "version" "7.18.6" dependencies: "@babel/code-frame" "^7.18.6" "@babel/parser" "^7.18.6" "@babel/types" "^7.18.6" "@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + "integrity" "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/code-frame" "^7.18.6" "@babel/generator" "^7.18.9" @@ -1800,66 +1800,66 @@ "@babel/helper-split-export-declaration" "^7.18.6" "@babel/parser" "^7.18.9" "@babel/types" "^7.18.9" - debug "^4.1.0" - globals "^11.1.0" + "debug" "^4.1.0" + "globals" "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.9" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + "integrity" "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz" + "version" "7.18.9" dependencies: "@babel/helper-validator-identifier" "^7.18.6" - to-fast-properties "^2.0.0" + "to-fast-properties" "^2.0.0" "@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" "@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + "version" "0.8.1" dependencies: "@jridgewell/trace-mapping" "0.3.9" "@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" "@jest/console@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" - integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + "integrity" "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" + "chalk" "^4.0.0" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "slash" "^3.0.0" "@jest/core@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" - integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + "integrity" "sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/reporters" "^28.1.3" @@ -1867,80 +1867,80 @@ "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^28.1.3" - jest-config "^28.1.3" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-resolve-dependencies "^28.1.3" - jest-runner "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - jest-watcher "^28.1.3" - micromatch "^4.0.4" - pretty-format "^28.1.3" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "jest-changed-files" "^28.1.3" + "jest-config" "^28.1.3" + "jest-haste-map" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-resolve-dependencies" "^28.1.3" + "jest-runner" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "jest-watcher" "^28.1.3" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.3" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" "@jest/environment@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" - integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + "integrity" "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.3" + "jest-mock" "^28.1.3" "@jest/expect-utils@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" - integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + "integrity" "sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA==" + "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.3.tgz" + "version" "28.1.3" dependencies: - jest-get-type "^28.0.2" + "jest-get-type" "^28.0.2" "@jest/expect@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" - integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + "integrity" "sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw==" + "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-28.1.3.tgz" + "version" "28.1.3" dependencies: - expect "^28.1.3" - jest-snapshot "^28.1.3" + "expect" "^28.1.3" + "jest-snapshot" "^28.1.3" "@jest/fake-timers@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" - integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + "integrity" "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-util "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-mock" "^28.1.3" + "jest-util" "^28.1.3" "@jest/globals@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" - integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + "integrity" "sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/types" "^28.1.3" "@jest/reporters@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" - integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + "integrity" "sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.3.tgz" + "version" "28.1.3" dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^28.1.3" @@ -1949,302 +1949,302 @@ "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - jest-worker "^28.1.3" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - terminal-link "^2.0.0" - v8-to-istanbul "^9.0.1" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^5.1.0" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "jest-worker" "^28.1.3" + "slash" "^3.0.0" + "string-length" "^4.0.1" + "strip-ansi" "^6.0.0" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^9.0.1" "@jest/schemas@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" - integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + "integrity" "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" + "version" "28.1.3" dependencies: "@sinclair/typebox" "^0.24.1" "@jest/source-map@^28.1.2": - version "28.1.2" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" - integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + "integrity" "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz" + "version" "28.1.2" dependencies: "@jridgewell/trace-mapping" "^0.3.13" - callsites "^3.0.0" - graceful-fs "^4.2.9" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.9" "@jest/test-result@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" - integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + "integrity" "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/types" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "collect-v8-coverage" "^1.0.0" "@jest/test-sequencer@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" - integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + "integrity" "sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/test-result" "^28.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - slash "^3.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "slash" "^3.0.0" "@jest/transform@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" - integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + "integrity" "sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@jest/types" "^28.1.3" "@jridgewell/trace-mapping" "^0.3.13" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.1" + "babel-plugin-istanbul" "^6.1.1" + "chalk" "^4.0.0" + "convert-source-map" "^1.4.0" + "fast-json-stable-stringify" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.3" + "micromatch" "^4.0.4" + "pirates" "^4.0.4" + "slash" "^3.0.0" + "write-file-atomic" "^4.0.1" "@jest/types@^28.1.3": - version "28.1.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" - integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + "integrity" "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/schemas" "^28.1.3" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^17.0.8" - chalk "^4.0.0" + "chalk" "^4.0.0" "@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + "version" "0.1.1" dependencies: "@jridgewell/set-array" "^1.0.0" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + "integrity" "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" + "version" "0.3.2" dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" + "version" "3.1.0" "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "integrity" "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + "version" "1.4.14" -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz" + "version" "0.3.14" dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.14" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz" - integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== +"@jridgewell/trace-mapping@0.3.9": + "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + "version" "0.3.9" dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" "@mapbox/node-pre-gyp@^1.0.0": - version "1.0.9" - resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" - integrity sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw== + "integrity" "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==" + "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz" + "version" "1.0.9" dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" + "detect-libc" "^2.0.0" + "https-proxy-agent" "^5.0.0" + "make-dir" "^3.1.0" + "node-fetch" "^2.6.7" + "nopt" "^5.0.0" + "npmlog" "^5.0.1" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.11" "@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + "integrity" "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz" + "version" "1.1.1" dependencies: "@gar/promisify" "^1.0.1" - semver "^7.3.5" + "semver" "^7.3.5" "@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + "integrity" "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz" + "version" "1.1.2" dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" "@ovos-media/ts-transform-paths@^1.7.18-1": - version "1.7.18-1" - resolved "https://registry.npmjs.org/@ovos-media/ts-transform-paths/-/ts-transform-paths-1.7.18-1.tgz" - integrity sha512-5uYtraYSWg1klaMYus3ouCOUUNzcI40pS0NCaw0PhoaPTimVfT3MV061ZLYR/4F14THqyofMjmCNcHgFrBX3AA== + "integrity" "sha512-5uYtraYSWg1klaMYus3ouCOUUNzcI40pS0NCaw0PhoaPTimVfT3MV061ZLYR/4F14THqyofMjmCNcHgFrBX3AA==" + "resolved" "https://registry.npmjs.org/@ovos-media/ts-transform-paths/-/ts-transform-paths-1.7.18-1.tgz" + "version" "1.7.18-1" dependencies: "@zerollup/ts-helpers" "^1.7.18" "@sentry/core@7.10.0": - version "7.10.0" - resolved "https://registry.npmjs.org/@sentry/core/-/core-7.10.0.tgz" - integrity sha512-uq6oUXPH+6cjsEL5/j/xSW91mVrJo7knTqax7E5MDiA5j98BPK4budGiBiPO7GEB856QhA7N+pOO0lccii5QYQ== + "integrity" "sha512-uq6oUXPH+6cjsEL5/j/xSW91mVrJo7knTqax7E5MDiA5j98BPK4budGiBiPO7GEB856QhA7N+pOO0lccii5QYQ==" + "resolved" "https://registry.npmjs.org/@sentry/core/-/core-7.10.0.tgz" + "version" "7.10.0" dependencies: "@sentry/hub" "7.10.0" "@sentry/types" "7.10.0" "@sentry/utils" "7.10.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/hub@7.10.0": - version "7.10.0" - resolved "https://registry.npmjs.org/@sentry/hub/-/hub-7.10.0.tgz" - integrity sha512-9Appy7J87EU7Xu2BDY1cLK79nsuE72geeYmG71lgdttTD3XOMcQBOxET4/2sAI+d/ansurXnURx+DAQ9FOKT+w== + "integrity" "sha512-9Appy7J87EU7Xu2BDY1cLK79nsuE72geeYmG71lgdttTD3XOMcQBOxET4/2sAI+d/ansurXnURx+DAQ9FOKT+w==" + "resolved" "https://registry.npmjs.org/@sentry/hub/-/hub-7.10.0.tgz" + "version" "7.10.0" dependencies: "@sentry/types" "7.10.0" "@sentry/utils" "7.10.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/node@^7.7.0": - version "7.10.0" - resolved "https://registry.npmjs.org/@sentry/node/-/node-7.10.0.tgz" - integrity sha512-L/DSEJ7Biy8ovvlCyfu5MpCYG108FIGVbJ1h0NBGr5+uLxTNg2WJWojJoiQNiRcWl4s0dcIXrRdi0HR2Sx+DUw== + "integrity" "sha512-L/DSEJ7Biy8ovvlCyfu5MpCYG108FIGVbJ1h0NBGr5+uLxTNg2WJWojJoiQNiRcWl4s0dcIXrRdi0HR2Sx+DUw==" + "resolved" "https://registry.npmjs.org/@sentry/node/-/node-7.10.0.tgz" + "version" "7.10.0" dependencies: "@sentry/core" "7.10.0" "@sentry/hub" "7.10.0" "@sentry/types" "7.10.0" "@sentry/utils" "7.10.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" + "cookie" "^0.4.1" + "https-proxy-agent" "^5.0.0" + "lru_map" "^0.3.3" + "tslib" "^1.9.3" "@sentry/tracing@^7.7.0": - version "7.10.0" - resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.10.0.tgz" - integrity sha512-ojuBYS1bL/IGWKt/ItY4HmC8NElJrYtTUvm73VbhylhIO4zcn5ICHmgMFj1lqL9gQ1nCnAlifKiWIjL9qUatTA== + "integrity" "sha512-ojuBYS1bL/IGWKt/ItY4HmC8NElJrYtTUvm73VbhylhIO4zcn5ICHmgMFj1lqL9gQ1nCnAlifKiWIjL9qUatTA==" + "resolved" "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.10.0.tgz" + "version" "7.10.0" dependencies: "@sentry/hub" "7.10.0" "@sentry/types" "7.10.0" "@sentry/utils" "7.10.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/types@7.10.0": - version "7.10.0" - resolved "https://registry.npmjs.org/@sentry/types/-/types-7.10.0.tgz" - integrity sha512-1UBwdbS0xXzANzp63g4eNQly/qKIXp0swP5OTKWoADvKBtL4anroLUA/l8ADMtuwFZYtVANc8WRGxM2+YmaXtg== + "integrity" "sha512-1UBwdbS0xXzANzp63g4eNQly/qKIXp0swP5OTKWoADvKBtL4anroLUA/l8ADMtuwFZYtVANc8WRGxM2+YmaXtg==" + "resolved" "https://registry.npmjs.org/@sentry/types/-/types-7.10.0.tgz" + "version" "7.10.0" "@sentry/utils@7.10.0": - version "7.10.0" - resolved "https://registry.npmjs.org/@sentry/utils/-/utils-7.10.0.tgz" - integrity sha512-/aD2DnfyOhV0Wdbb6VF78vu4fQIZJyuReDpBI7MV/EqcEB6FxUKq2YjinfKZF/exHEPig6Ag/Yt+CRFgvtVFuw== + "integrity" "sha512-/aD2DnfyOhV0Wdbb6VF78vu4fQIZJyuReDpBI7MV/EqcEB6FxUKq2YjinfKZF/exHEPig6Ag/Yt+CRFgvtVFuw==" + "resolved" "https://registry.npmjs.org/@sentry/utils/-/utils-7.10.0.tgz" + "version" "7.10.0" dependencies: "@sentry/types" "7.10.0" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sinclair/typebox@^0.24.1": - version "0.24.20" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.20.tgz" - integrity sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ== + "integrity" "sha512-kVaO5aEFZb33nPMTZBxiPEkY+slxiPtqC7QX8f9B3eGOMBvEfuMfxp9DSTTCsRJPumPKjrge4yagyssO4q6qzQ==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.20.tgz" + "version" "0.24.20" "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + "version" "1.8.3" dependencies: - type-detect "4.0.8" + "type-detect" "4.0.8" "@sinonjs/fake-timers@^9.1.2": - version "9.1.2" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" - integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + "integrity" "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz" + "version" "9.1.2" dependencies: "@sinonjs/commons" "^1.7.0" "@sqltools/formatter@^1.2.2": - version "1.2.3" - resolved "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.3.tgz" - integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== + "integrity" "sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg==" + "resolved" "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.3.tgz" + "version" "1.2.3" "@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "integrity" "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + "resolved" "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" + "version" "0.3.0" "@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + "version" "1.1.2" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + "version" "1.0.9" "@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + "version" "1.0.11" "@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + "version" "1.0.3" "@tsconfig/node16@^1.0.2": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" - integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + "integrity" "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" + "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" + "version" "1.0.3" "@types/amqplib@^0.8.1": - version "0.8.2" - resolved "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.8.2.tgz" - integrity sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA== + "integrity" "sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA==" + "resolved" "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.8.2.tgz" + "version" "0.8.2" dependencies: "@types/bluebird" "*" "@types/node" "*" "@types/babel__core@^7.1.14": - version "7.1.19" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" - integrity sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw== + "integrity" "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz" + "version" "7.1.19" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -2253,74 +2253,74 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + "integrity" "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" + "version" "7.6.4" dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + "version" "7.4.1" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.17.1" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz" - integrity sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA== + "integrity" "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz" + "version" "7.17.1" dependencies: "@babel/types" "^7.3.0" "@types/bcrypt@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz" - integrity sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw== + "integrity" "sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==" + "resolved" "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz" + "version" "5.0.0" dependencies: "@types/node" "*" "@types/bluebird@*": - version "3.5.36" - resolved "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz" - integrity sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q== + "integrity" "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==" + "resolved" "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz" + "version" "3.5.36" "@types/body-parser@*", "@types/body-parser@^1.19.0": - version "1.19.2" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + "integrity" "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + "version" "1.19.2" dependencies: "@types/connect" "*" "@types/node" "*" "@types/connect@*": - version "3.4.35" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" - integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + "version" "3.4.35" dependencies: "@types/node" "*" "@types/dotenv@^8.2.0": - version "8.2.0" - resolved "https://registry.npmjs.org/@types/dotenv/-/dotenv-8.2.0.tgz" - integrity sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw== + "integrity" "sha512-ylSC9GhfRH7m1EUXBXofhgx4lUWmFeQDINW5oLuS+gxWdfUeW4zJdeVTYVkexEW+e2VUvlZR2kGnGGipAWR7kw==" + "resolved" "https://registry.npmjs.org/@types/dotenv/-/dotenv-8.2.0.tgz" + "version" "8.2.0" dependencies: - dotenv "*" + "dotenv" "*" "@types/express-serve-static-core@^4.17.18": - version "4.17.29" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz" - integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + "integrity" "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==" + "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz" + "version" "4.17.29" dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*", "@types/express@^4.17.12": - version "4.17.13" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" - integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== +"@types/express@*", "@types/express@^4.17.12", "@types/express@^4.17.9": + "integrity" "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==" + "resolved" "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" + "version" "4.17.13" dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.18" @@ -2328,432 +2328,439 @@ "@types/serve-static" "*" "@types/graceful-fs@^4.1.3": - version "4.1.5" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + "version" "4.1.5" dependencies: "@types/node" "*" "@types/i18next-node-fs-backend@^2.1.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@types/i18next-node-fs-backend/-/i18next-node-fs-backend-2.1.1.tgz" - integrity sha512-ESvH90OICQkKU3yuuRzF6YfHt5KACE55FOiUM59mMGnC+h03lHGdEYo3z3THbwS5FdMskLyIs2O7f6Oaz8P9sw== + "integrity" "sha512-ESvH90OICQkKU3yuuRzF6YfHt5KACE55FOiUM59mMGnC+h03lHGdEYo3z3THbwS5FdMskLyIs2O7f6Oaz8P9sw==" + "resolved" "https://registry.npmjs.org/@types/i18next-node-fs-backend/-/i18next-node-fs-backend-2.1.1.tgz" + "version" "2.1.1" dependencies: - i18next ">=17.0.11" + "i18next" ">=17.0.11" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "integrity" "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" + "version" "2.0.4" "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/istanbul-lib-report" "*" "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "integrity" "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + "version" "7.0.11" "@types/jsonwebtoken@^8.5.8": - version "8.5.8" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz" - integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== + "integrity" "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==" + "resolved" "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz" + "version" "8.5.8" dependencies: "@types/node" "*" "@types/mime@^1": - version "1.3.2" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "integrity" "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + "resolved" "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" + "version" "1.3.2" "@types/morgan@^1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.3.tgz" - integrity sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q== + "integrity" "sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q==" + "resolved" "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.3.tgz" + "version" "1.9.3" dependencies: "@types/node" "*" -"@types/multer@^1.4.7": - version "1.4.7" - resolved "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz" - integrity sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA== +"@types/multer@^1.4.5", "@types/multer@^1.4.7": + "integrity" "sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==" + "resolved" "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz" + "version" "1.4.7" dependencies: "@types/express" "*" "@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + "integrity" "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==" + "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz" + "version" "2.6.2" dependencies: "@types/node" "*" - form-data "^3.0.0" + "form-data" "^3.0.0" "@types/node-os-utils@^1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@types/node-os-utils/-/node-os-utils-1.3.0.tgz" - integrity sha512-XwVteWQx/XkfRPyaGkw8dEbrCAkoRZ73pI3XznUYIpzbCfpQB3UnDlR5TnmdhetlT889tUJGF8QWo9xrgTpsiA== + "integrity" "sha512-XwVteWQx/XkfRPyaGkw8dEbrCAkoRZ73pI3XznUYIpzbCfpQB3UnDlR5TnmdhetlT889tUJGF8QWo9xrgTpsiA==" + "resolved" "https://registry.npmjs.org/@types/node-os-utils/-/node-os-utils-1.3.0.tgz" + "version" "1.3.0" -"@types/node@*", "@types/node@^18.0.6": - version "18.6.3" - resolved "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz" - integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== +"@types/node@*", "@types/node@^18.0.6", "@types/node@^18.6.3", "@types/node@^18.7.3": + "integrity" "sha512-LJgzOEwWuMTBxHzgBR/fhhBOWrvBjvO+zPteUgbbuQi80rYIZHrk1mNbRUqPZqSLP2H7Rwt1EFLL/tNLD1Xx/w==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-18.7.3.tgz" + "version" "18.7.3" "@types/node@^16.9.2": - version "16.11.45" - resolved "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz" - integrity sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ== + "integrity" "sha512-3rKg/L5x0rofKuuUt5zlXzOnKyIHXmIu5R8A0TuNDMF2062/AOIDBciFIjToLEJ/9F9DzkHNot+BpNsMI1OLdQ==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-16.11.45.tgz" + "version" "16.11.45" "@types/notp@^2.0.0": - version "2.0.2" - resolved "https://registry.npmjs.org/@types/notp/-/notp-2.0.2.tgz" - integrity sha512-JUcVYN9Tmw0AjoAfvjslS4hbv39fPBbZdftBK3b50g5z/DmhLsu6cd0UOEBiQuMwy2FirshF2Gk9gAvfWjshMw== + "integrity" "sha512-JUcVYN9Tmw0AjoAfvjslS4hbv39fPBbZdftBK3b50g5z/DmhLsu6cd0UOEBiQuMwy2FirshF2Gk9gAvfWjshMw==" + "resolved" "https://registry.npmjs.org/@types/notp/-/notp-2.0.2.tgz" + "version" "2.0.2" dependencies: "@types/node" "*" "@types/prettier@^2.1.5": - version "2.6.3" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz" - integrity sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg== + "integrity" "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==" + "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz" + "version" "2.6.3" "@types/qs@*": - version "6.9.7" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" + "version" "6.9.7" "@types/range-parser@*": - version "1.2.4" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" - integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + "integrity" "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + "version" "1.2.4" "@types/serve-static@*": - version "1.13.10" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + "integrity" "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==" + "resolved" "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" + "version" "1.13.10" dependencies: "@types/mime" "^1" "@types/node" "*" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + "version" "2.0.1" "@types/stream-buffers@^3.0.3": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz" - integrity sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w== + "integrity" "sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w==" + "resolved" "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz" + "version" "3.0.4" dependencies: "@types/node" "*" "@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== + "integrity" "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==" + "resolved" "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" "@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" - integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + "integrity" "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==" + "resolved" "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" + "version" "0.0.30" "@types/ws@^8.5.3": - version "8.5.3" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + "integrity" "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==" + "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz" + "version" "8.5.3" dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" + "version" "21.0.0" "@types/yargs@^17.0.8": - version "17.0.10" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz" - integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== + "integrity" "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz" + "version" "17.0.10" dependencies: "@types/yargs-parser" "*" "@yarnpkg/lockfile@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" - integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + "version" "1.1.0" "@zerollup/ts-helpers@^1.7.18": - version "1.7.18" - resolved "https://registry.npmjs.org/@zerollup/ts-helpers/-/ts-helpers-1.7.18.tgz" - integrity sha512-S9zN+y+i5yN/evfWquzSO3lubqPXIsPQf6p9OiPMpRxDx/0totPLF39XoRw48Dav5dSvbIE8D2eAPpXXJxvKwg== + "integrity" "sha512-S9zN+y+i5yN/evfWquzSO3lubqPXIsPQf6p9OiPMpRxDx/0totPLF39XoRw48Dav5dSvbIE8D2eAPpXXJxvKwg==" + "resolved" "https://registry.npmjs.org/@zerollup/ts-helpers/-/ts-helpers-1.7.18.tgz" + "version" "1.7.18" dependencies: - resolve "^1.12.0" + "resolve" "^1.12.0" -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== +"accepts@~1.3.8": + "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + "version" "1.3.8" dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" + "mime-types" "~2.1.34" + "negotiator" "0.6.3" -acorn-walk@^8.1.1, acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== +"acorn-walk@^8.1.1", "acorn-walk@^8.2.0": + "integrity" "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + "version" "8.2.0" -acorn@^8.4.1, acorn@^8.7.0: - version "8.7.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +"acorn@^8.4.1", "acorn@^8.7.0": + "integrity" "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" + "version" "8.7.1" -agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== +"agent-base@^6.0.0", "agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" dependencies: - debug "4" + "debug" "4" -agentkeepalive@^4.1.3: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz#a7975cbb9f83b367f06c90cc51ff28fe7d499717" - integrity sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA== +"agentkeepalive@^4.1.3": + "integrity" "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz" + "version" "4.2.1" dependencies: - debug "^4.1.0" - depd "^1.1.2" - humanize-ms "^1.2.1" + "debug" "^4.1.0" + "depd" "^1.1.2" + "humanize-ms" "^1.2.1" -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== +"ajv-formats@^2.1.1": + "integrity" "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==" + "resolved" "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + "version" "2.1.1" dependencies: - ajv "^8.0.0" + "ajv" "^8.0.0" -ajv@^8.0.0, ajv@^8.11.0: - version "8.11.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== +"ajv@^8.0.0", "ajv@^8.6.2", "ajv@8.6.2": + "integrity" "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + "version" "8.6.2" dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" -amqplib@^0.10.1: - version "0.10.1" - resolved "https://registry.npmjs.org/amqplib/-/amqplib-0.10.1.tgz" - integrity sha512-Hs33MdtFmJ2WKQT9SBtrlet3aUNzMzZA/FF6p3NGGo7Fp/BVD4X3Po7bQxAA7uE0MmXPZ8EschLMbN+CjGx4dg== +"amqplib@^0.10.0", "amqplib@^0.10.1": + "integrity" "sha512-Hs33MdtFmJ2WKQT9SBtrlet3aUNzMzZA/FF6p3NGGo7Fp/BVD4X3Po7bQxAA7uE0MmXPZ8EschLMbN+CjGx4dg==" + "resolved" "https://registry.npmjs.org/amqplib/-/amqplib-0.10.1.tgz" + "version" "0.10.1" dependencies: - bitsyntax "~0.1.0" - buffer-more-ints "~1.0.0" - readable-stream "1.x >=1.1.9" - url-parse "~1.5.10" + "bitsyntax" "~0.1.0" + "buffer-more-ints" "~1.0.0" + "readable-stream" "1.x >=1.1.9" + "url-parse" "~1.5.10" -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== +"ansi-escapes@^4.2.1": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" dependencies: - type-fest "^0.21.3" + "type-fest" "^0.21.3" -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" dependencies: - color-convert "^1.9.0" + "color-convert" "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== +"ansi-styles@^4.0.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" dependencies: - color-convert "^2.0.1" + "color-convert" "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +"ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" + "color-convert" "^2.0.1" -app-root-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz" - integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== +"ansi-styles@^5.0.0": + "integrity" "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" + "version" "5.2.0" -append-field@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" - integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== +"any-promise@^1.0.0": + "integrity" "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "resolved" "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" + "version" "1.3.0" + +"anymatch@^3.0.3", "anymatch@~3.1.2": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"app-root-path@^3.0.0": + "integrity" "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==" + "resolved" "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz" + "version" "3.0.0" + +"append-field@^1.0.0": + "integrity" "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + "resolved" "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" + "version" "1.0.0" "aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== +"are-we-there-yet@^2.0.0": + "integrity" "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" + "version" "2.0.0" dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" dependencies: - sprintf-js "~1.0.2" + "sprintf-js" "~1.0.2" -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +"array-flatten@1.1.1": + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" -asap@^2.0.0: - version "2.0.6" - resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +"asap@^2.0.0": + "integrity" "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + "version" "2.0.6" -ast-types@^0.13.2: - version "0.13.4" - resolved "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz" - integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== +"ast-types@^0.13.2": + "integrity" "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==" + "resolved" "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz" + "version" "0.13.4" dependencies: - tslib "^2.0.1" + "tslib" "^2.0.1" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== +"asynckit@^0.4.0": + "integrity" "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" -babel-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" - integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== +"babel-jest@^28.1.3": + "integrity" "sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/transform" "^28.1.3" "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^28.1.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" + "babel-plugin-istanbul" "^6.1.1" + "babel-preset-jest" "^28.1.3" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "slash" "^3.0.0" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== +"babel-plugin-dynamic-import-node@^2.3.3": + "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + "version" "2.3.3" dependencies: - object.assign "^4.1.0" + "object.assign" "^4.1.0" -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== +"babel-plugin-istanbul@^6.1.1": + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + "version" "6.1.1" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" + "istanbul-lib-instrument" "^5.0.4" + "test-exclude" "^6.0.0" -babel-plugin-jest-hoist@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" - integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== +"babel-plugin-jest-hoist@^28.1.3": + "integrity" "sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +"babel-plugin-polyfill-corejs2@^0.3.1": + "integrity" "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz" + "version" "0.3.1" dependencies: "@babel/compat-data" "^7.13.11" "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" + "semver" "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +"babel-plugin-polyfill-corejs3@^0.5.2": + "integrity" "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz" + "version" "0.5.2" dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" + "core-js-compat" "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +"babel-plugin-polyfill-regenerator@^0.3.1": + "integrity" "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" + "version" "0.3.1" dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== +"babel-preset-current-node-syntax@^1.0.0": + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + "version" "1.0.1" dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -2768,1727 +2775,1778 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" - integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== +"babel-preset-jest@^28.1.3": + "integrity" "sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz" + "version" "28.1.3" dependencies: - babel-plugin-jest-hoist "^28.1.3" - babel-preset-current-node-syntax "^1.0.0" + "babel-plugin-jest-hoist" "^28.1.3" + "babel-preset-current-node-syntax" "^1.0.0" -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" -basic-auth@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" - integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== +"basic-auth@~2.0.1": + "integrity" "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==" + "resolved" "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" + "version" "2.0.1" dependencies: - safe-buffer "5.1.2" + "safe-buffer" "5.1.2" -bcrypt@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz" - integrity sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw== +"bcrypt@^5.0.1": + "integrity" "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==" + "resolved" "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz" + "version" "5.0.1" dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^3.1.0" + "node-addon-api" "^3.1.0" -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" -bitsyntax@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz" - integrity sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== +"bitsyntax@~0.1.0": + "integrity" "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==" + "resolved" "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz" + "version" "0.1.0" dependencies: - buffer-more-ints "~1.0.0" - debug "~2.6.9" - safe-buffer "~5.1.2" + "buffer-more-ints" "~1.0.0" + "debug" "~2.6.9" + "safe-buffer" "~5.1.2" -body-parser@1.20.0, body-parser@^1.19.0: - version "1.20.0" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== +"bl@^2.2.1": + "integrity" "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==" + "resolved" "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz" + "version" "2.2.1" dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" + "readable-stream" "^2.3.5" + "safe-buffer" "^5.1.1" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== +"body-parser@^1.19.0", "body-parser@1.20.0": + "integrity" "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" + "version" "1.20.0" dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" + "bytes" "3.1.2" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "on-finished" "2.4.1" + "qs" "6.10.3" + "raw-body" "2.5.1" + "type-is" "~1.6.18" + "unpipe" "1.0.0" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== +"boolbase@^1.0.0": + "integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + "version" "1.0.0" + +"bowser@^2.11.0": + "integrity" "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" + "resolved" "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" + "version" "2.11.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" dependencies: - balanced-match "^1.0.0" + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" dependencies: - fill-range "^7.0.1" + "balanced-match" "^1.0.0" -browserslist@^4.20.2, browserslist@^4.21.1: - version "4.21.2" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz" - integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== +"braces@^3.0.2", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" dependencies: - caniuse-lite "^1.0.30001366" - electron-to-chromium "^1.4.188" - node-releases "^2.0.6" - update-browserslist-db "^1.0.4" + "fill-range" "^7.0.1" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== +"browserslist@^4.20.2", "browserslist@^4.21.1", "browserslist@>= 4.21.0": + "integrity" "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz" + "version" "4.21.2" dependencies: - node-int64 "^0.4.0" + "caniuse-lite" "^1.0.30001366" + "electron-to-chromium" "^1.4.188" + "node-releases" "^2.0.6" + "update-browserslist-db" "^1.0.4" -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-more-ints@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz" - integrity sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== - -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" + "node-int64" "^0.4.0" -busboy@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== +"bson@^1.1.4": + "integrity" "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" + "resolved" "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz" + "version" "1.1.6" + +"buffer-equal-constant-time@1.0.1": + "integrity" "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "resolved" "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + "version" "1.0.1" + +"buffer-from@^1.0.0": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"buffer-more-ints@~1.0.0": + "integrity" "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" + "resolved" "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz" + "version" "1.0.0" + +"buffer-writer@2.0.0": + "integrity" "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + "resolved" "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz" + "version" "2.0.0" + +"buffer@^6.0.3": + "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + "version" "6.0.3" dependencies: - streamsearch "^1.1.0" + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +"busboy@^1.0.0": + "integrity" "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==" + "resolved" "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "streamsearch" "^1.1.0" -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== +"bytes@3.1.2": + "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + "version" "3.1.2" + +"cacache@^15.2.0": + "integrity" "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz" + "version" "15.3.0" dependencies: "@npmcli/fs" "^1.0.0" "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "glob" "^7.1.4" + "infer-owner" "^1.0.4" + "lru-cache" "^6.0.0" + "minipass" "^3.1.1" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.2" + "mkdirp" "^1.0.3" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^8.0.1" + "tar" "^6.0.2" + "unique-filename" "^1.1.1" -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +"call-bind@^1.0.0": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +"camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +"camelcase@^6.2.0": + "integrity" "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" + "version" "6.3.0" -caniuse-lite@^1.0.30001366: - version "1.0.30001367" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz" - integrity sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw== +"caniuse-lite@^1.0.30001366": + "integrity" "sha512-XDgbeOHfifWV3GEES2B8rtsrADx4Jf+juKX2SICJcaUhjYBO3bR96kvEIHa15VU6ohtOhBZuPGGYGbXMRn0NCw==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001367.tgz" + "version" "1.0.30001367" -canvas@^2.9.3: - version "2.9.3" - resolved "https://registry.npmjs.org/canvas/-/canvas-2.9.3.tgz" - integrity sha512-WOUM7ghii5TV2rbhaZkh1youv/vW1/Canev6Yx6BG2W+1S07w8jKZqKkPnbiPpQEDsnJdN8ouDd7OvQEGXDcUw== +"canvas@^2.9.3": + "integrity" "sha512-WOUM7ghii5TV2rbhaZkh1youv/vW1/Canev6Yx6BG2W+1S07w8jKZqKkPnbiPpQEDsnJdN8ouDd7OvQEGXDcUw==" + "resolved" "https://registry.npmjs.org/canvas/-/canvas-2.9.3.tgz" + "version" "2.9.3" dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - nan "^2.15.0" - simple-get "^3.0.3" + "nan" "^2.15.0" + "simple-get" "^3.0.3" -chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +"chalk@^2.0.0", "chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== +"chalk@^4.0.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== +"chalk@^4.1.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" -cheerio@^1.0.0-rc.10: - version "1.0.0-rc.12" - resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== +"chalk@^4.1.1": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" -chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +"chalk@^4.1.2": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"cheerio-select@^2.1.0": + "integrity" "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==" + "resolved" "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "boolbase" "^1.0.0" + "css-select" "^5.1.0" + "css-what" "^6.1.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.3" + "domutils" "^3.0.1" + +"cheerio@^1.0.0-rc.10": + "integrity" "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==" + "resolved" "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" + "version" "1.0.0-rc.12" + dependencies: + "cheerio-select" "^2.1.0" + "dom-serializer" "^2.0.0" + "domhandler" "^5.0.3" + "domutils" "^3.0.1" + "htmlparser2" "^8.0.1" + "parse5" "^7.0.0" + "parse5-htmlparser2-tree-adapter" "^7.0.0" + +"chokidar@^3.5.1": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" optionalDependencies: - fsevents "~2.3.2" + "fsevents" "~2.3.2" -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" -ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== +"ci-info@^3.2.0": + "integrity" "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" + "version" "3.3.2" -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== +"cjs-module-lexer@^1.0.0": + "integrity" "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" + "version" "1.2.2" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== +"cli-highlight@^2.1.11": + "integrity" "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==" + "resolved" "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz" + "version" "2.1.11" dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" + "chalk" "^4.0.0" + "highlight.js" "^10.7.1" + "mz" "^2.4.0" + "parse5" "^5.1.1" + "parse5-htmlparser2-tree-adapter" "^6.0.0" + "yargs" "^16.0.0" -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== +"co@^4.6.0": + "integrity" "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + "version" "1.0.1" -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" dependencies: - color-name "1.1.3" + "color-name" "1.1.3" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" dependencies: - color-name "~1.1.4" + "color-name" "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +"color-name@1.1.3": + "integrity" "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" -color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +"color-support@^1.1.2", "color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== +"combined-stream@^1.0.8": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" dependencies: - delayed-stream "~1.0.0" + "delayed-stream" "~1.0.0" -component-emitter@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== +"component-emitter@^1.3.0": + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + "version" "1.3.0" -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +"concat-map@0.0.1": + "integrity" "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" -concat-stream@^1.5.2: - version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== +"concat-stream@^1.5.2": + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +"console-control-strings@^1.0.0", "console-control-strings@^1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== +"content-disposition@0.5.4": + "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" dependencies: - safe-buffer "5.2.1" + "safe-buffer" "5.2.1" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +"content-type@~1.0.4": + "integrity" "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + "version" "1.0.4" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== +"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + "version" "1.8.0" dependencies: - safe-buffer "~5.1.1" + "safe-buffer" "~5.1.1" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +"cookie-signature@1.0.6": + "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +"cookie@^0.4.1": + "integrity" "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" + "version" "0.4.2" -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +"cookie@0.5.0": + "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + "version" "0.5.0" -cookiejar@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" - integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== +"cookiejar@^2.1.3": + "integrity" "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" + "resolved" "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz" + "version" "2.1.3" -core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.23.4" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.4.tgz" - integrity sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q== +"core-js-compat@^3.21.0", "core-js-compat@^3.22.1": + "integrity" "sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.4.tgz" + "version" "3.23.4" dependencies: - browserslist "^4.21.1" - semver "7.0.0" + "browserslist" "^4.21.1" + "semver" "7.0.0" -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +"core-util-is@~1.0.0": + "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + "version" "1.0.3" -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== +"cross-spawn@^6.0.5": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +"cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== +"css-select@^5.1.0": + "integrity" "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + "version" "5.1.0" dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" + "boolbase" "^1.0.0" + "css-what" "^6.1.0" + "domhandler" "^5.0.2" + "domutils" "^3.0.1" + "nth-check" "^2.0.1" -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +"css-what@^6.1.0": + "integrity" "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + "resolved" "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + "version" "6.1.0" -data-uri-to-buffer@3: - version "3.0.1" - resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== +"data-uri-to-buffer@3": + "integrity" "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" + "resolved" "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" + "version" "3.0.1" -date-fns@^2.28.0: - version "2.28.0" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz" - integrity sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw== +"date-fns@^2.28.0": + "integrity" "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==" + "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz" + "version" "2.28.0" -debug@2.6.9, debug@~2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.3", "debug@^4.3.4", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" dependencies: - ms "2.0.0" + "ms" "2.1.2" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +"debug@~2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" dependencies: - ms "2.1.2" + "ms" "2.0.0" -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" dependencies: - mimic-response "^2.0.0" + "ms" "2.0.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== - -deep-is@~0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -define-properties@^1.1.3: - version "1.1.4" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== +"decompress-response@^4.2.0": + "integrity" "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" + "version" "4.2.1" dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" + "mimic-response" "^2.0.0" -degenerator@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz" - integrity sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ== +"dedent@^0.7.0": + "integrity" "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" + "version" "0.7.0" + +"deep-is@~0.1.3": + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" + +"define-properties@^1.1.3": + "integrity" "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz" + "version" "1.1.4" dependencies: - ast-types "^0.13.2" - escodegen "^1.8.1" - esprima "^4.0.0" - vm2 "^3.9.8" + "has-property-descriptors" "^1.0.0" + "object-keys" "^1.1.1" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -denque@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" - integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== - -depd@2.0.0, depd@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" - integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dezalgo@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" - integrity sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ== +"degenerator@^3.0.2": + "integrity" "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==" + "resolved" "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz" + "version" "3.0.2" dependencies: - asap "^2.0.0" - wrappy "1" + "ast-types" "^0.13.2" + "escodegen" "^1.8.1" + "esprima" "^4.0.0" + "vm2" "^3.9.8" -diff-sequences@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" - integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== +"delayed-stream@~1.0.0": + "integrity" "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +"delegates@^1.0.0": + "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== +"denque@^1.4.1": + "integrity" "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" + "resolved" "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz" + "version" "1.5.1" + +"denque@^2.0.1": + "integrity" "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + "resolved" "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz" + "version" "2.1.0" + +"depd@^1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"depd@~2.0.0", "depd@2.0.0": + "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + "version" "2.0.0" + +"destroy@1.2.0": + "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + "version" "1.2.0" + +"detect-libc@^2.0.0": + "integrity" "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + "version" "2.0.1" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"dezalgo@1.0.3": + "integrity" "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==" + "resolved" "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz" + "version" "1.0.3" dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" + "asap" "^2.0.0" + "wrappy" "1" -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== +"diff-sequences@^28.1.1": + "integrity" "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz" + "version" "28.1.1" -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"dom-serializer@^2.0.0": + "integrity" "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + "version" "2.0.0" dependencies: - domelementtype "^2.3.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.2" + "entities" "^4.2.0" -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== +"domelementtype@^2.3.0": + "integrity" "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + "version" "2.3.0" + +"domhandler@^5.0.1", "domhandler@^5.0.2", "domhandler@^5.0.3": + "integrity" "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + "version" "5.0.3" dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" + "domelementtype" "^2.3.0" -dotenv@*, dotenv@^16.0.0, dotenv@^16.0.1: - version "16.0.1" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz" - integrity sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ== - -dynamic-dedupe@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" - integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== +"domutils@^3.0.1": + "integrity" "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz" + "version" "3.0.1" dependencies: - xtend "^4.0.0" + "dom-serializer" "^2.0.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.1" -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== +"dotenv@*", "dotenv@^16.0.0", "dotenv@^16.0.1": + "integrity" "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==" + "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz" + "version" "16.0.1" + +"dynamic-dedupe@^0.3.0": + "integrity" "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==" + "resolved" "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" + "version" "0.3.0" dependencies: - safe-buffer "^5.0.1" + "xtend" "^4.0.0" -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.188: - version "1.4.192" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.192.tgz" - integrity sha512-8nCXyIQY9An88NXAp+PuPy5h3/w5ZY7Iu2lag65Q0XREprcat5F8gKhoHsBUnQcFuCRnmevpR8yEBYRU3d2HDw== - -emittery@^0.10.2: - version "0.10.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== +"ecdsa-sig-formatter@1.0.11": + "integrity" "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==" + "resolved" "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + "version" "1.0.11" dependencies: - iconv-lite "^0.6.2" + "safe-buffer" "^5.0.1" -entities@2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +"ee-first@1.1.1": + "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" -entities@^4.2.0, entities@^4.3.0: - version "4.3.1" - resolved "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz" - integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== +"electron-to-chromium@^1.4.188": + "integrity" "sha512-8nCXyIQY9An88NXAp+PuPy5h3/w5ZY7Iu2lag65Q0XREprcat5F8gKhoHsBUnQcFuCRnmevpR8yEBYRU3d2HDw==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.192.tgz" + "version" "1.4.192" -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== +"emittery@^0.10.2": + "integrity" "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" + "version" "0.10.2" -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== +"encodeurl@~1.0.2": + "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"encoding@^0.1.0", "encoding@^0.1.12": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" dependencies: - is-arrayish "^0.2.1" + "iconv-lite" "^0.6.2" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +"entities@^4.2.0": + "integrity" "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==" + "resolved" "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz" + "version" "4.3.1" -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== +"entities@^4.3.0": + "integrity" "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==" + "resolved" "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz" + "version" "4.3.1" -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +"entities@2.2.0": + "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + "version" "2.2.0" -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" -escodegen@^1.8.1: - version "1.14.3" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" + "is-arrayish" "^0.2.1" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-html@~1.0.3": + "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.5": + "integrity" "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escodegen@^1.8.1": + "integrity" "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" + "version" "1.14.3" + dependencies: + "esprima" "^4.0.1" + "estraverse" "^4.2.0" + "esutils" "^2.0.2" + "optionator" "^0.8.1" optionalDependencies: - source-map "~0.6.1" + "source-map" "~0.6.1" -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +"esprima@^4.0.0", "esprima@^4.0.1": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" -estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +"estraverse@^4.2.0": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +"etag@~1.8.1": + "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== +"execa@^5.0.0": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" -exif-be-gone@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/exif-be-gone/-/exif-be-gone-1.3.0.tgz" - integrity sha512-6s/SnuWviwtP6TB3Gc2Nc2GIWYCIs3N9V4Md773EWIfC4uOR+O3thZXO4ElbJJOvjtDNR4FVoMVNKgZWRKiQNQ== +"exif-be-gone@^1.3.0", "exif-be-gone@^1.3.1": + "integrity" "sha512-lHvNqbaTsH0WzhzfxxiTh9KwmXjAfiiTfY6UVmUZXJsaU62ccURy8beEVYFKSmNfvf0n6srLIFi0NDBWvhYUlQ==" + "resolved" "https://registry.npmjs.org/exif-be-gone/-/exif-be-gone-1.3.1.tgz" + "version" "1.3.1" dependencies: "@types/stream-buffers" "^3.0.3" -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== +"exit@^0.1.2": + "integrity" "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" -expect@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" - integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== +"expect@^28.1.3": + "integrity" "sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g==" + "resolved" "https://registry.npmjs.org/expect/-/expect-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/expect-utils" "^28.1.3" - jest-get-type "^28.0.2" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" + "jest-get-type" "^28.0.2" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" -express-async-errors@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz" - integrity sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng== +"express-async-errors@^3.1.1": + "integrity" "sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==" + "resolved" "https://registry.npmjs.org/express-async-errors/-/express-async-errors-3.1.1.tgz" + "version" "3.1.1" -express@^4.17.1: - version "4.18.1" - resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== +"express@^4.16.2", "express@^4.17.1": + "integrity" "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.1.tgz" + "version" "4.18.1" dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.0" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.10.3" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" + "accepts" "~1.3.8" + "array-flatten" "1.1.1" + "body-parser" "1.20.0" + "content-disposition" "0.5.4" + "content-type" "~1.0.4" + "cookie" "0.5.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "2.0.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "1.2.0" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.7" + "qs" "6.10.3" + "range-parser" "~1.2.1" + "safe-buffer" "5.2.1" + "send" "0.18.0" + "serve-static" "1.15.0" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +"fast-deep-equal@^3.1.1": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== +"fast-levenshtein@~2.0.6": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" -fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +"fast-safe-stringify@^2.1.1": + "integrity" "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" + "version" "2.1.1" -fast-xml-parser@3.19.0: - version "3.19.0" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" - integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== +"fast-xml-parser@3.19.0": + "integrity" "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" + "resolved" "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" + "version" "3.19.0" -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== +"fb-watchman@^2.0.0": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" dependencies: - bser "2.1.1" + "bser" "2.1.1" -file-type@16.5: - version "16.5.4" - resolved "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz" - integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== +"file-type@16.5": + "integrity" "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==" + "resolved" "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz" + "version" "16.5.4" dependencies: - readable-web-to-node-stream "^3.0.0" - strtok3 "^6.2.4" - token-types "^4.1.1" + "readable-web-to-node-stream" "^3.0.0" + "strtok3" "^6.2.4" + "token-types" "^4.1.1" -file-uri-to-path@2: - version "2.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz" - integrity sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg== +"file-uri-to-path@2": + "integrity" "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==" + "resolved" "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz" + "version" "2.0.0" -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" dependencies: - to-regex-range "^5.0.1" + "to-regex-range" "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +"finalhandler@1.2.0": + "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + "version" "1.2.0" dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "statuses" "2.0.1" + "unpipe" "~1.0.0" -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +"find-up@^4.0.0", "find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" -find-yarn-workspace-root@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" - integrity sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ== +"find-yarn-workspace-root@^2.0.0": + "integrity" "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==" + "resolved" "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz" + "version" "2.0.0" dependencies: - micromatch "^4.0.2" + "micromatch" "^4.0.2" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +"form-data@^3.0.0": + "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + "version" "3.0.1" dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== +"form-data@^4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" -formidable@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz" - integrity sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ== +"formidable@^2.0.1": + "integrity" "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==" + "resolved" "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz" + "version" "2.0.1" dependencies: - dezalgo "1.0.3" - hexoid "1.0.0" - once "1.4.0" - qs "6.9.3" + "dezalgo" "1.0.3" + "hexoid" "1.0.0" + "once" "1.4.0" + "qs" "6.9.3" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +"fresh@0.5.2": + "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== +"fs-extra@^7.0.1": + "integrity" "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" + "version" "7.0.1" dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" + "graceful-fs" "^4.1.2" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +"fs-extra@^8.1.0": + "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + "version" "8.1.0" dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^4.0.0" + "universalify" "^0.1.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +"fs.realpath@^1.0.0": + "integrity" "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -ftp@^0.3.10: - version "0.3.10" - resolved "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz" - integrity sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ== +"ftp@^0.3.10": + "integrity" "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==" + "resolved" "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz" + "version" "0.3.10" dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" + "readable-stream" "1.1.x" + "xregexp" "2.0.0" -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== +"gauge@^3.0.0": + "integrity" "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" + "version" "3.0.2" dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.2" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.1" + "object-assign" "^4.1.1" + "signal-exit" "^3.0.0" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.2" -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" -generate-function@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" - integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== +"generate-function@^2.3.1": + "integrity" "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==" + "resolved" "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz" + "version" "2.3.1" dependencies: - is-property "^1.0.2" + "is-property" "^1.0.2" -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +"get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.1": + "integrity" "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" + "version" "1.1.2" dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.3" -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +"get-stream@^6.0.0": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" -get-uri@3: - version "3.0.2" - resolved "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz" - integrity sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg== +"get-uri@3": + "integrity" "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==" + "resolved" "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz" + "version" "3.0.2" dependencies: "@tootallnate/once" "1" - data-uri-to-buffer "3" - debug "4" - file-uri-to-path "2" - fs-extra "^8.1.0" - ftp "^0.3.10" + "data-uri-to-buffer" "3" + "debug" "4" + "file-uri-to-path" "2" + "fs-extra" "^8.1.0" + "ftp" "^0.3.10" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== +"glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" dependencies: - is-glob "^4.0.1" + "is-glob" "^4.0.1" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.0: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +"glob@^7.0.0", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.7", "glob@^7.2.0": + "integrity" "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + "version" "7.2.3" dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.1.1" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" -glob@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== +"glob@^8.0.3": + "integrity" "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz" + "version" "8.0.3" dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== +"global-prefix@^3.0.0": + "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" + "version" "3.0.0" dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" + "ini" "^1.3.5" + "kind-of" "^6.0.2" + "which" "^1.3.1" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +"graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": + "integrity" "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + "version" "4.2.10" -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +"has-flag@^3.0.0": + "integrity" "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +"has-property-descriptors@^1.0.0": + "integrity" "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==" + "resolved" "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" + "version" "1.0.0" dependencies: - get-intrinsic "^1.1.1" + "get-intrinsic" "^1.1.1" -has-symbols@^1.0.1, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +"has-symbols@^1.0.1", "has-symbols@^1.0.3": + "integrity" "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + "version" "1.0.3" -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== +"has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" dependencies: - function-bind "^1.1.1" + "function-bind" "^1.1.1" -helmet@^4.4.1: - version "4.6.0" - resolved "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz" - integrity sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg== +"helmet@^4.4.1": + "integrity" "sha512-HVqALKZlR95ROkrnesdhbbZJFi/rIVSoNq6f3jA/9u6MIbTsPh3xZwihjeI5+DO/2sOV6HMHooXcEOuwskHpTg==" + "resolved" "https://registry.npmjs.org/helmet/-/helmet-4.6.0.tgz" + "version" "4.6.0" -hexoid@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" - integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== +"hexoid@1.0.0": + "integrity" "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + "resolved" "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" + "version" "1.0.0" -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== +"highlight.js@^10.7.1": + "integrity" "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" + "resolved" "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" + "version" "10.7.3" -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" -htmlparser2@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz" - integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA== +"htmlparser2@^8.0.1": + "integrity" "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==" + "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz" + "version" "8.0.1" dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - domutils "^3.0.1" - entities "^4.3.0" + "domelementtype" "^2.3.0" + "domhandler" "^5.0.2" + "domutils" "^3.0.1" + "entities" "^4.3.0" -http-cache-semantics@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== +"http-cache-semantics@^4.1.0": + "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + "version" "4.1.0" -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== +"http-errors@2.0.0": + "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + "version" "2.0.0" dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" -http-proxy-agent@^4.0.0, http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== +"http-proxy-agent@^4.0.0", "http-proxy-agent@^4.0.1": + "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + "version" "4.0.1" dependencies: "@tootallnate/once" "1" - agent-base "6" - debug "4" + "agent-base" "6" + "debug" "4" -https-proxy-agent@5, https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +"https-proxy-agent@^5.0.0", "https-proxy-agent@5": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" dependencies: - agent-base "6" - debug "4" + "agent-base" "6" + "debug" "4" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" dependencies: - ms "^2.0.0" + "ms" "^2.0.0" -i18next-http-middleware@^3.1.3: - version "3.2.1" - resolved "https://registry.npmjs.org/i18next-http-middleware/-/i18next-http-middleware-3.2.1.tgz" - integrity sha512-zBwXxDChT0YLoTXIR6jRuqnUUhXW0Iw7egoTnNXyaDRtTbfWNXwU0a53ThyuRPQ+k+tXu3ZMNKRzfLuononaRw== +"i18next-http-middleware@^3.1.3": + "integrity" "sha512-zBwXxDChT0YLoTXIR6jRuqnUUhXW0Iw7egoTnNXyaDRtTbfWNXwU0a53ThyuRPQ+k+tXu3ZMNKRzfLuononaRw==" + "resolved" "https://registry.npmjs.org/i18next-http-middleware/-/i18next-http-middleware-3.2.1.tgz" + "version" "3.2.1" -i18next-node-fs-backend@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/i18next-node-fs-backend/-/i18next-node-fs-backend-2.1.3.tgz" - integrity sha512-CreMFiVl3ChlMc5ys/e0QfuLFOZyFcL40Jj6jaKD6DxZ/GCUMxPI9BpU43QMWUgC7r+PClpxg2cGXAl0CjG04g== +"i18next-node-fs-backend@^2.1.3": + "integrity" "sha512-CreMFiVl3ChlMc5ys/e0QfuLFOZyFcL40Jj6jaKD6DxZ/GCUMxPI9BpU43QMWUgC7r+PClpxg2cGXAl0CjG04g==" + "resolved" "https://registry.npmjs.org/i18next-node-fs-backend/-/i18next-node-fs-backend-2.1.3.tgz" + "version" "2.1.3" dependencies: - js-yaml "3.13.1" - json5 "2.0.0" + "js-yaml" "3.13.1" + "json5" "2.0.0" -i18next@>=17.0.11, i18next@^21.8.14: - version "21.8.14" - resolved "https://registry.npmjs.org/i18next/-/i18next-21.8.14.tgz" - integrity sha512-4Yi+DtexvMm/Yw3Q9fllzY12SgLk+Mcmar+rCAccsOPul/2UmnBzoHbTGn/L48IPkFcmrNaH7xTLboBWIbH6pw== +"i18next@^21.8.14", "i18next@^21.9.0", "i18next@>=17.0.11": + "integrity" "sha512-B+6/yd7rCpJidyPuBaEApUECx7G8Ai6+tqYhrChsY4MmQqJhG7qJ4eT6Lm1OnRhieVelEtfxh4aAQktdNVZtDA==" + "resolved" "https://registry.npmjs.org/i18next/-/i18next-21.9.0.tgz" + "version" "21.9.0" dependencies: "@babel/runtime" "^7.17.2" -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== +"iconv-lite@^0.6.2": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" dependencies: - safer-buffer ">= 2.1.2 < 3" + "safer-buffer" ">= 2.1.2 < 3.0.0" -iconv-lite@^0.6.2, iconv-lite@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== +"iconv-lite@^0.6.3": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" + "safer-buffer" ">= 2.1.2 < 3.0.0" -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -image-size@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz" - integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== +"iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" dependencies: - queue "6.0.2" + "safer-buffer" ">= 2.1.2 < 3" -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== +"ieee754@^1.2.1": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"image-size@^1.0.0": + "integrity" "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==" + "resolved" "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz" + "version" "1.0.2" dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" + "queue" "6.0.2" -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== +"import-local@^3.0.2": + "integrity" "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" + "version" "3.1.0" dependencies: - once "^1.3.0" - wrappy "1" + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" -ip@^1.1.5: - version "1.1.8" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" - integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== +"inflight@^1.0.4": + "integrity" "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" dependencies: - binary-extensions "^2.0.0" + "once" "^1.3.0" + "wrappy" "1" -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== +"inherits@^2.0.1", "inherits@^2.0.3", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@^1.3.5": + "integrity" "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + "version" "1.3.8" + +"interpret@^1.0.0": + "integrity" "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "resolved" "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" + "version" "1.4.0" + +"ip@^1.1.5": + "integrity" "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" + "resolved" "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" + "version" "1.1.8" + +"ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" dependencies: - ci-info "^2.0.0" + "binary-extensions" "^2.0.0" -is-core-module@^2.9.0: - version "2.9.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== +"is-ci@^2.0.0": + "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + "version" "2.0.0" dependencies: - has "^1.0.3" + "ci-info" "^2.0.0" -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== +"is-core-module@^2.9.0": + "integrity" "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" + "version" "2.9.0" dependencies: - is-extglob "^2.1.1" + "has" "^1.0.3" -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== +"is-docker@^2.0.0": + "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + "version" "2.2.1" -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" -is-property@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== +"is-glob@^4.0.1", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" dependencies: - is-docker "^2.0.0" + "is-extglob" "^2.1.1" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +"is-property@^1.0.2": + "integrity" "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + "resolved" "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz" + "version" "1.0.2" -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" - integrity sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A== +"is-wsl@^2.1.1": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + +"isarray@~1.0.0": + "integrity" "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isarray@0.0.1": + "integrity" "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "version" "0.0.1" + +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": + "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" + "version" "3.2.0" + +"istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": + "integrity" "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^6.3.0" -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + "version" "4.0.1" dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" -istanbul-reports@^3.1.3: - version "3.1.5" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== +"istanbul-reports@^3.1.3": + "integrity" "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" + "version" "3.1.5" dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" -jest-changed-files@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" - integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== +"jest-changed-files@^28.1.3": + "integrity" "sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.1.3.tgz" + "version" "28.1.3" dependencies: - execa "^5.0.0" - p-limit "^3.1.0" + "execa" "^5.0.0" + "p-limit" "^3.1.0" -jest-circus@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" - integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== +"jest-circus@^28.1.3": + "integrity" "sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow==" + "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/expect" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - is-generator-fn "^2.0.0" - jest-each "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-runtime "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - p-limit "^3.1.0" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" + "chalk" "^4.0.0" + "co" "^4.6.0" + "dedent" "^0.7.0" + "is-generator-fn" "^2.0.0" + "jest-each" "^28.1.3" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "p-limit" "^3.1.0" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" -jest-cli@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" - integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== +"jest-cli@^28.1.3": + "integrity" "sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/core" "^28.1.3" "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - prompts "^2.0.1" - yargs "^17.3.1" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "import-local" "^3.0.2" + "jest-config" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "prompts" "^2.0.1" + "yargs" "^17.3.1" -jest-config@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" - integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== +"jest-config@^28.1.3": + "integrity" "sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^28.1.3" "@jest/types" "^28.1.3" - babel-jest "^28.1.3" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^28.1.3" - jest-environment-node "^28.1.3" - jest-get-type "^28.0.2" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-runner "^28.1.3" - jest-util "^28.1.3" - jest-validate "^28.1.3" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^28.1.3" - slash "^3.0.0" - strip-json-comments "^3.1.1" + "babel-jest" "^28.1.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-circus" "^28.1.3" + "jest-environment-node" "^28.1.3" + "jest-get-type" "^28.0.2" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-runner" "^28.1.3" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "micromatch" "^4.0.4" + "parse-json" "^5.2.0" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "strip-json-comments" "^3.1.1" -jest-diff@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" - integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== +"jest-diff@^28.1.3": + "integrity" "sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.3.tgz" + "version" "28.1.3" dependencies: - chalk "^4.0.0" - diff-sequences "^28.1.1" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + "chalk" "^4.0.0" + "diff-sequences" "^28.1.1" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" -jest-docblock@^28.1.1: - version "28.1.1" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" - integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== +"jest-docblock@^28.1.1": + "integrity" "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz" + "version" "28.1.1" dependencies: - detect-newline "^3.0.0" + "detect-newline" "^3.0.0" -jest-each@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" - integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== +"jest-each@^28.1.3": + "integrity" "sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" - chalk "^4.0.0" - jest-get-type "^28.0.2" - jest-util "^28.1.3" - pretty-format "^28.1.3" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "jest-util" "^28.1.3" + "pretty-format" "^28.1.3" -jest-environment-node@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" - integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== +"jest-environment-node@^28.1.3": + "integrity" "sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - jest-mock "^28.1.3" - jest-util "^28.1.3" + "jest-mock" "^28.1.3" + "jest-util" "^28.1.3" -jest-expect-message@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz" - integrity sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q== +"jest-expect-message@^1.0.2": + "integrity" "sha512-WFiXMgwS2lOqQZt1iJMI/hOXpUm32X+ApsuzYcQpW5m16Pv6/Gd9kgC+Q+Q1YVNU04kYcAOv9NXMnjg6kKUy6Q==" + "resolved" "https://registry.npmjs.org/jest-expect-message/-/jest-expect-message-1.0.2.tgz" + "version" "1.0.2" -jest-get-type@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" - integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== +"jest-get-type@^28.0.2": + "integrity" "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz" + "version" "28.0.2" -jest-haste-map@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" - integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== +"jest-haste-map@^28.1.3": + "integrity" "sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/graceful-fs" "^4.1.3" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^28.0.2" - jest-util "^28.1.3" - jest-worker "^28.1.3" - micromatch "^4.0.4" - walker "^1.0.8" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-regex-util" "^28.0.2" + "jest-util" "^28.1.3" + "jest-worker" "^28.1.3" + "micromatch" "^4.0.4" + "walker" "^1.0.8" optionalDependencies: - fsevents "^2.3.2" + "fsevents" "^2.3.2" -jest-leak-detector@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" - integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== +"jest-leak-detector@^28.1.3": + "integrity" "sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz" + "version" "28.1.3" dependencies: - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" -jest-matcher-utils@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" - integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== +"jest-matcher-utils@^28.1.3": + "integrity" "sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz" + "version" "28.1.3" dependencies: - chalk "^4.0.0" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - pretty-format "^28.1.3" + "chalk" "^4.0.0" + "jest-diff" "^28.1.3" + "jest-get-type" "^28.0.2" + "pretty-format" "^28.1.3" -jest-message-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" - integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== +"jest-message-util@^28.1.3": + "integrity" "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^28.1.3" "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^28.1.3" - slash "^3.0.0" - stack-utils "^2.0.3" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "micromatch" "^4.0.4" + "pretty-format" "^28.1.3" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" -jest-mock@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" - integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== +"jest-mock@^28.1.3": + "integrity" "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + "version" "1.2.2" -jest-regex-util@^28.0.2: - version "28.0.2" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" - integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== +"jest-regex-util@^28.0.2": + "integrity" "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" + "version" "28.0.2" -jest-resolve-dependencies@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" - integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== +"jest-resolve-dependencies@^28.1.3": + "integrity" "sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz" + "version" "28.1.3" dependencies: - jest-regex-util "^28.0.2" - jest-snapshot "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-snapshot" "^28.1.3" -jest-resolve@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" - integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== +"jest-resolve@*", "jest-resolve@^28.1.3": + "integrity" "sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.3.tgz" + "version" "28.1.3" dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-pnp-resolver "^1.2.2" - jest-util "^28.1.3" - jest-validate "^28.1.3" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^28.1.3" + "jest-validate" "^28.1.3" + "resolve" "^1.20.0" + "resolve.exports" "^1.1.0" + "slash" "^3.0.0" -jest-runner@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" - integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== +"jest-runner@^28.1.3": + "integrity" "sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/console" "^28.1.3" "@jest/environment" "^28.1.3" @@ -4496,26 +4554,26 @@ jest-runner@^28.1.3: "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - emittery "^0.10.2" - graceful-fs "^4.2.9" - jest-docblock "^28.1.1" - jest-environment-node "^28.1.3" - jest-haste-map "^28.1.3" - jest-leak-detector "^28.1.3" - jest-message-util "^28.1.3" - jest-resolve "^28.1.3" - jest-runtime "^28.1.3" - jest-util "^28.1.3" - jest-watcher "^28.1.3" - jest-worker "^28.1.3" - p-limit "^3.1.0" - source-map-support "0.5.13" + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "graceful-fs" "^4.2.9" + "jest-docblock" "^28.1.1" + "jest-environment-node" "^28.1.3" + "jest-haste-map" "^28.1.3" + "jest-leak-detector" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-resolve" "^28.1.3" + "jest-runtime" "^28.1.3" + "jest-util" "^28.1.3" + "jest-watcher" "^28.1.3" + "jest-worker" "^28.1.3" + "p-limit" "^3.1.0" + "source-map-support" "0.5.13" -jest-runtime@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" - integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== +"jest-runtime@^28.1.3": + "integrity" "sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/environment" "^28.1.3" "@jest/fake-timers" "^28.1.3" @@ -4524,26 +4582,26 @@ jest-runtime@^28.1.3: "@jest/test-result" "^28.1.3" "@jest/transform" "^28.1.3" "@jest/types" "^28.1.3" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^28.1.3" - jest-message-util "^28.1.3" - jest-mock "^28.1.3" - jest-regex-util "^28.0.2" - jest-resolve "^28.1.3" - jest-snapshot "^28.1.3" - jest-util "^28.1.3" - slash "^3.0.0" - strip-bom "^4.0.0" + "chalk" "^4.0.0" + "cjs-module-lexer" "^1.0.0" + "collect-v8-coverage" "^1.0.0" + "execa" "^5.0.0" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-mock" "^28.1.3" + "jest-regex-util" "^28.0.2" + "jest-resolve" "^28.1.3" + "jest-snapshot" "^28.1.3" + "jest-util" "^28.1.3" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" -jest-snapshot@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" - integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== +"jest-snapshot@^28.1.3": + "integrity" "sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.3.tgz" + "version" "28.1.3" dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -4555,2248 +4613,2358 @@ jest-snapshot@^28.1.3: "@jest/types" "^28.1.3" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^28.1.3" - graceful-fs "^4.2.9" - jest-diff "^28.1.3" - jest-get-type "^28.0.2" - jest-haste-map "^28.1.3" - jest-matcher-utils "^28.1.3" - jest-message-util "^28.1.3" - jest-util "^28.1.3" - natural-compare "^1.4.0" - pretty-format "^28.1.3" - semver "^7.3.5" + "babel-preset-current-node-syntax" "^1.0.0" + "chalk" "^4.0.0" + "expect" "^28.1.3" + "graceful-fs" "^4.2.9" + "jest-diff" "^28.1.3" + "jest-get-type" "^28.0.2" + "jest-haste-map" "^28.1.3" + "jest-matcher-utils" "^28.1.3" + "jest-message-util" "^28.1.3" + "jest-util" "^28.1.3" + "natural-compare" "^1.4.0" + "pretty-format" "^28.1.3" + "semver" "^7.3.5" -jest-util@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" - integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== +"jest-util@^28.1.3": + "integrity" "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" -jest-validate@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" - integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== +"jest-validate@^28.1.3": + "integrity" "sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/types" "^28.1.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^28.0.2" - leven "^3.1.0" - pretty-format "^28.1.3" + "camelcase" "^6.2.0" + "chalk" "^4.0.0" + "jest-get-type" "^28.0.2" + "leven" "^3.1.0" + "pretty-format" "^28.1.3" -jest-watcher@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" - integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== +"jest-watcher@^28.1.3": + "integrity" "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/test-result" "^28.1.3" "@jest/types" "^28.1.3" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.10.2" - jest-util "^28.1.3" - string-length "^4.0.1" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "emittery" "^0.10.2" + "jest-util" "^28.1.3" + "string-length" "^4.0.1" -jest-worker@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" - integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== +"jest-worker@^28.1.3": + "integrity" "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz" + "version" "28.1.3" dependencies: "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" -jest@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz" - integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== +"jest@^28.1.3": + "integrity" "sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA==" + "resolved" "https://registry.npmjs.org/jest/-/jest-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/core" "^28.1.3" "@jest/types" "^28.1.3" - import-local "^3.0.2" - jest-cli "^28.1.3" + "import-local" "^3.0.2" + "jest-cli" "^28.1.3" -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" -js-yaml@3.13.1, js-yaml@^3.13.1: - version "3.13.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +"js-yaml@^3.13.1", "js-yaml@3.13.1": + "integrity" "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" + "version" "3.13.1" dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + "argparse" "^1.0.7" + "esprima" "^4.0.0" -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== +"js-yaml@^4.1.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" dependencies: - argparse "^2.0.1" + "argparse" "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +"jsesc@~0.5.0": + "integrity" "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + "version" "0.5.0" -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +"json-parse-even-better-errors@^2.3.0": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" -json5@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.0.0.tgz" - integrity sha512-0EdQvHuLm7yJ7lyG5dp7Q3X2ku++BG5ZHaJ5FTnaXpKqDrw4pMxel5Bt3oAYMthnrthFBdnZ1FcsXTPyrQlV0w== +"json5@^2.2.1": + "integrity" "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" + "version" "2.2.1" + +"json5@2.0.0": + "integrity" "sha512-0EdQvHuLm7yJ7lyG5dp7Q3X2ku++BG5ZHaJ5FTnaXpKqDrw4pMxel5Bt3oAYMthnrthFBdnZ1FcsXTPyrQlV0w==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.0.0.tgz" + "version" "2.0.0" dependencies: - minimist "^1.2.0" + "minimist" "^1.2.0" -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== +"jsonfile@^4.0.0": + "integrity" "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + "version" "4.0.0" optionalDependencies: - graceful-fs "^4.1.6" + "graceful-fs" "^4.1.6" -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== +"jsonwebtoken@^8.5.1": + "integrity" "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==" + "resolved" "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" + "version" "8.5.1" dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" + "jws" "^3.2.2" + "lodash.includes" "^4.3.0" + "lodash.isboolean" "^3.0.3" + "lodash.isinteger" "^4.0.4" + "lodash.isnumber" "^3.0.3" + "lodash.isplainobject" "^4.0.6" + "lodash.isstring" "^4.0.1" + "lodash.once" "^4.0.0" + "ms" "^2.1.1" + "semver" "^5.6.0" -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== +"jwa@^1.4.1": + "integrity" "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==" + "resolved" "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + "version" "1.4.1" dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" + "buffer-equal-constant-time" "1.0.1" + "ecdsa-sig-formatter" "1.0.11" + "safe-buffer" "^5.0.1" -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== +"jws@^3.2.2": + "integrity" "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==" + "resolved" "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + "version" "3.2.2" dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" + "jwa" "^1.4.1" + "safe-buffer" "^5.0.1" -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +"kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== +"klaw-sync@^6.0.0": + "integrity" "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==" + "resolved" "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" + "version" "6.0.0" dependencies: - graceful-fs "^4.1.11" + "graceful-fs" "^4.1.11" -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" -lambert-server@^1.2.12: - version "1.2.12" - resolved "https://registry.npmjs.org/lambert-server/-/lambert-server-1.2.12.tgz" - integrity sha512-TY6k60KLVfBpPrl9lcrN54RJdTBg9f8JqJPoHg5d/FMLnnwwQtT4budpoQjyLDwBLhS+zpXo0aBCwnnGgTVGaw== +"lambert-server@^1.2.12": + "integrity" "sha512-TY6k60KLVfBpPrl9lcrN54RJdTBg9f8JqJPoHg5d/FMLnnwwQtT4budpoQjyLDwBLhS+zpXo0aBCwnnGgTVGaw==" + "resolved" "https://registry.npmjs.org/lambert-server/-/lambert-server-1.2.12.tgz" + "version" "1.2.12" dependencies: - body-parser "^1.19.0" - chalk "^4.1.1" - express "^4.17.1" - express-async-errors "^3.1.1" - helmet "^4.4.1" - missing-native-js-functions "^1.2.11" + "body-parser" "^1.19.0" + "chalk" "^4.1.1" + "express" "^4.17.1" + "express-async-errors" "^3.1.1" + "helmet" "^4.4.1" + "missing-native-js-functions" "^1.2.11" -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== +"levn@~0.3.0": + "integrity" "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + "version" "0.3.0" dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" dependencies: - p-locate "^4.1.0" + "p-locate" "^4.1.0" -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== +"lodash.debounce@^4.0.8": + "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== +"lodash.includes@^4.3.0": + "integrity" "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "resolved" "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + "version" "4.3.0" -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== +"lodash.isboolean@^3.0.3": + "integrity" "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "resolved" "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + "version" "3.0.3" -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== +"lodash.isinteger@^4.0.4": + "integrity" "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "resolved" "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + "version" "4.0.4" -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== +"lodash.isnumber@^3.0.3": + "integrity" "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "resolved" "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + "version" "3.0.3" -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== +"lodash.isplainobject@^4.0.6": + "integrity" "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + "version" "4.0.6" -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== +"lodash.isstring@^4.0.1": + "integrity" "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "resolved" "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + "version" "4.0.1" -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== +"lodash.once@^4.0.0": + "integrity" "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "resolved" "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + "version" "4.1.1" -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +"long@^4.0.0": + "integrity" "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "resolved" "https://registry.npmjs.org/long/-/long-4.0.0.tgz" + "version" "4.0.0" -lru-cache@^4.1.3: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== +"lru_map@^0.3.3": + "integrity" "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + "resolved" "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + "version" "0.3.3" + +"lru-cache@^4.1.3": + "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + "version" "4.1.5" dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" + "pseudomap" "^1.0.2" + "yallist" "^2.1.2" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" dependencies: - yallist "^3.0.2" + "yallist" "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" dependencies: - yallist "^4.0.0" + "yallist" "^4.0.0" -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -make-dir@^3.0.0, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +"make-dir@^3.0.0", "make-dir@^3.1.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" dependencies: - semver "^6.0.0" + "semver" "^6.0.0" -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +"make-error@^1.1.1": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== +"make-fetch-happen@^9.1.0": + "integrity" "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz" + "version" "9.1.0" dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" + "agentkeepalive" "^4.1.3" + "cacache" "^15.2.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^4.0.1" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^6.0.0" + "minipass" "^3.1.3" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^1.3.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.2" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^6.0.0" + "ssri" "^8.0.0" -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== +"makeerror@1.0.12": + "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" + "version" "1.0.12" dependencies: - tmpl "1.0.5" + "tmpl" "1.0.5" -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +"media-typer@0.3.0": + "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +"memory-pager@^1.0.2": + "integrity" "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + "resolved" "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" + "version" "1.5.0" -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +"merge-descriptors@1.0.1": + "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" -methods@^1.1.2, methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +"methods@^1.1.2", "methods@~1.1.2": + "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^4.0.2", "micromatch@^4.0.4": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" dependencies: - braces "^3.0.2" - picomatch "^2.3.1" + "braces" "^3.0.2" + "picomatch" "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +"mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== +"mime-types@^2.1.12", "mime-types@~2.1.24", "mime-types@~2.1.34": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" dependencies: - mime-db "1.52.0" + "mime-db" "1.52.0" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +"mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" -mime@2.6.0: - version "2.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" - integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== +"mime@2.6.0": + "integrity" "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + "version" "2.6.0" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== +"mimic-response@^2.0.0": + "integrity" "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" + "version" "2.1.0" -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +"minimatch@^3.0.4", "minimatch@^3.1.1": + "integrity" "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + "version" "3.1.2" dependencies: - brace-expansion "^1.1.7" + "brace-expansion" "^1.1.7" -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== +"minimatch@^5.0.1": + "integrity" "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" + "version" "5.1.0" dependencies: - brace-expansion "^2.0.1" + "brace-expansion" "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +"minimist@^1.2.0", "minimist@^1.2.6": + "integrity" "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" + "version" "1.2.6" -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== +"minipass-fetch@^1.3.2": + "integrity" "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz" + "version" "1.4.1" dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" + "minipass" "^3.1.0" + "minipass-sized" "^1.0.3" + "minizlib" "^2.0.0" optionalDependencies: - encoding "^0.1.12" + "encoding" "^0.1.12" -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== +"minipass-pipeline@^1.2.2", "minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" dependencies: - minipass "^3.0.0" + "minipass" "^3.0.0" -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== +"minipass@^3.0.0", "minipass@^3.1.0", "minipass@^3.1.1", "minipass@^3.1.3": + "integrity" "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz" + "version" "3.3.4" dependencies: - yallist "^4.0.0" + "yallist" "^4.0.0" -minizlib@^2.0.0, minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== +"minizlib@^2.0.0", "minizlib@^2.1.1": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" dependencies: - minipass "^3.0.0" - yallist "^4.0.0" + "minipass" "^3.0.0" + "yallist" "^4.0.0" -missing-native-js-functions@^1.2.11, missing-native-js-functions@^1.2.18: - version "1.2.18" - resolved "https://registry.npmjs.org/missing-native-js-functions/-/missing-native-js-functions-1.2.18.tgz" - integrity sha512-TZr1muzDE4kfu0LHDzg63O7m2qW3Gpyc875ki8+YlSRj+4ibZRv0ySQ0cSB06GoBL9ejeehLmkQnybLpp9jYcg== +"missing-native-js-functions@^1.2.11", "missing-native-js-functions@^1.2.18": + "integrity" "sha512-TZr1muzDE4kfu0LHDzg63O7m2qW3Gpyc875ki8+YlSRj+4ibZRv0ySQ0cSB06GoBL9ejeehLmkQnybLpp9jYcg==" + "resolved" "https://registry.npmjs.org/missing-native-js-functions/-/missing-native-js-functions-1.2.18.tgz" + "version" "1.2.18" -mkdirp@^0.5.4: - version "0.5.6" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== +"mkdirp@^0.5.4": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" dependencies: - minimist "^1.2.6" + "minimist" "^1.2.6" -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" -morgan@^1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" - integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mongodb@^3.6.0": + "integrity" "sha512-Psm+g3/wHXhjBEktkxXsFMZvd3nemI0r3IPsE0bU+4//PnvNWKkzhZcEsbPcYiWqe8XqXJJEg4Tgtr7Raw67Yw==" + "resolved" "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz" + "version" "3.7.3" dependencies: - basic-auth "~2.0.1" - debug "2.6.9" - depd "~2.0.0" - on-finished "~2.3.0" - on-headers "~1.0.2" + "bl" "^2.2.1" + "bson" "^1.1.4" + "denque" "^1.4.1" + "optional-require" "^1.1.8" + "safe-buffer" "^5.1.2" + optionalDependencies: + "saslprep" "^1.0.0" -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multer@^1.4.5-lts.1: - version "1.4.5-lts.1" - resolved "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz" - integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== +"morgan@^1.10.0": + "integrity" "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==" + "resolved" "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" + "version" "1.10.0" dependencies: - append-field "^1.0.0" - busboy "^1.0.0" - concat-stream "^1.5.2" - mkdirp "^0.5.4" - object-assign "^4.1.1" - type-is "^1.6.4" - xtend "^4.0.0" + "basic-auth" "~2.0.1" + "debug" "2.6.9" + "depd" "~2.0.0" + "on-finished" "~2.3.0" + "on-headers" "~1.0.2" -mysql2@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-2.3.3.tgz#944f3deca4b16629052ff8614fbf89d5552545a0" - integrity sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA== +"ms@^2.0.0", "ms@^2.1.1", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"multer@^1.4.5-lts.1": + "integrity" "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==" + "resolved" "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz" + "version" "1.4.5-lts.1" dependencies: - denque "^2.0.1" - generate-function "^2.3.1" - iconv-lite "^0.6.3" - long "^4.0.0" - lru-cache "^6.0.0" - named-placeholders "^1.1.2" - seq-queue "^0.0.5" - sqlstring "^2.3.2" + "append-field" "^1.0.0" + "busboy" "^1.0.0" + "concat-stream" "^1.5.2" + "mkdirp" "^0.5.4" + "object-assign" "^4.1.1" + "type-is" "^1.6.4" + "xtend" "^4.0.0" -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== +"mysql2@^2.2.5", "mysql2@^2.3.3": + "integrity" "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==" + "resolved" "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz" + "version" "2.3.3" dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" + "denque" "^2.0.1" + "generate-function" "^2.3.1" + "iconv-lite" "^0.6.3" + "long" "^4.0.0" + "lru-cache" "^6.0.0" + "named-placeholders" "^1.1.2" + "seq-queue" "^0.0.5" + "sqlstring" "^2.3.2" -named-placeholders@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8" - integrity sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA== +"mz@^2.4.0": + "integrity" "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==" + "resolved" "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" + "version" "2.7.0" dependencies: - lru-cache "^4.1.3" + "any-promise" "^1.0.0" + "object-assign" "^4.0.1" + "thenify-all" "^1.0.0" -nan@^2.15.0: - version "2.16.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== +"named-placeholders@^1.1.2": + "integrity" "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==" + "resolved" "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "lru-cache" "^4.1.3" -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +"nan@^2.15.0": + "integrity" "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==" + "resolved" "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz" + "version" "2.16.0" -negotiator@0.6.3, negotiator@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +"natural-compare@^1.4.0": + "integrity" "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" -netmask@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz" - integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== +"negotiator@^0.6.2", "negotiator@0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +"netmask@^2.0.2": + "integrity" "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + "resolved" "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz" + "version" "2.0.2" -node-2fa@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/node-2fa/-/node-2fa-2.0.3.tgz" - integrity sha512-PQldrOhjuoZyoydMvMSctllPN1ZPZ1/NwkEcgYwY9faVqE/OymxR+3awPpbWZxm6acLKqvmNqQmdqTsqYyflFw== +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"node-2fa@^2.0.3": + "integrity" "sha512-PQldrOhjuoZyoydMvMSctllPN1ZPZ1/NwkEcgYwY9faVqE/OymxR+3awPpbWZxm6acLKqvmNqQmdqTsqYyflFw==" + "resolved" "https://registry.npmjs.org/node-2fa/-/node-2fa-2.0.3.tgz" + "version" "2.0.3" dependencies: "@types/notp" "^2.0.0" - notp "^2.0.3" - thirty-two "1.0.2" - tslib "^2.1.0" + "notp" "^2.0.3" + "thirty-two" "1.0.2" + "tslib" "^2.1.0" -node-addon-api@^3.1.0: - version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== +"node-addon-api@^3.1.0": + "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + "version" "3.2.1" -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== +"node-addon-api@^4.2.0": + "integrity" "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" + "version" "4.3.0" -node-fetch@^2.6.7: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== +"node-fetch@^2.6.7": + "integrity" "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" + "version" "2.6.7" dependencies: - whatwg-url "^5.0.0" + "whatwg-url" "^5.0.0" -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== +"node-gyp@8.x": + "integrity" "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz" + "version" "8.4.1" dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" + "env-paths" "^2.2.0" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^9.1.0" + "nopt" "^5.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== +"node-int64@^0.4.0": + "integrity" "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" -node-releases@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" - integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== +"node-releases@^2.0.6": + "integrity" "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz" + "version" "2.0.6" -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" dependencies: - abbrev "1" + "abbrev" "1" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" -notp@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/notp/-/notp-2.0.3.tgz" - integrity sha512-oBig/2uqkjQ5AkBuw4QJYwkEWa/q+zHxI5/I5z6IeP2NT0alpJFsP/trrfCC+9xOAgQSZXssNi962kp5KBmypQ== +"notp@^2.0.3": + "integrity" "sha512-oBig/2uqkjQ5AkBuw4QJYwkEWa/q+zHxI5/I5z6IeP2NT0alpJFsP/trrfCC+9xOAgQSZXssNi962kp5KBmypQ==" + "resolved" "https://registry.npmjs.org/notp/-/notp-2.0.3.tgz" + "version" "2.0.3" -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" dependencies: - path-key "^3.0.0" + "path-key" "^3.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== +"npmlog@^5.0.1": + "integrity" "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" + "version" "5.0.1" dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" + "are-we-there-yet" "^2.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^3.0.0" + "set-blocking" "^2.0.0" -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== +"npmlog@^6.0.0": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== +"nth-check@^2.0.1": + "integrity" "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==" + "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + "version" "2.1.1" dependencies: - boolbase "^1.0.0" + "boolbase" "^1.0.0" -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== +"object-assign@^4.0.1", "object-assign@^4.1.1": + "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +"object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +"object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" -object.assign@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +"object.assign@^4.1.0": + "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + "version" "4.1.2" dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" + "call-bind" "^1.0.0" + "define-properties" "^1.1.3" + "has-symbols" "^1.0.1" + "object-keys" "^1.1.1" -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== +"on-finished@~2.3.0": + "integrity" "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + "version" "2.3.0" dependencies: - ee-first "1.1.1" + "ee-first" "1.1.1" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== +"on-finished@2.4.1": + "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + "version" "2.4.1" dependencies: - ee-first "1.1.1" + "ee-first" "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== +"on-headers@~1.0.2": + "integrity" "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "resolved" "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + "version" "1.0.2" -once@1.4.0, once@^1.3.0, once@^1.3.1: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== +"once@^1.3.0", "once@^1.3.1", "once@1.4.0": + "integrity" "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" dependencies: - wrappy "1" + "wrappy" "1" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== +"onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" dependencies: - mimic-fn "^2.1.0" + "mimic-fn" "^2.1.0" -open@^7.4.2: - version "7.4.2" - resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== +"open@^7.4.2": + "integrity" "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==" + "resolved" "https://registry.npmjs.org/open/-/open-7.4.2.tgz" + "version" "7.4.2" dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" + "is-docker" "^2.0.0" + "is-wsl" "^2.1.1" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== +"optional-require@^1.1.8": + "integrity" "sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==" + "resolved" "https://registry.npmjs.org/optional-require/-/optional-require-1.1.8.tgz" + "version" "1.1.8" dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" + "require-at" "^1.0.6" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== +"optionator@^0.8.1": + "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + "version" "0.8.3" dependencies: - p-try "^2.0.0" + "deep-is" "~0.1.3" + "fast-levenshtein" "~2.0.6" + "levn" "~0.3.0" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + "word-wrap" "~1.2.3" -p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== +"os-tmpdir@~1.0.2": + "integrity" "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" dependencies: - yocto-queue "^0.1.0" + "p-try" "^2.0.0" -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== +"p-limit@^3.1.0": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" dependencies: - p-limit "^2.2.0" + "yocto-queue" "^0.1.0" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" dependencies: - aggregate-error "^3.0.0" + "p-limit" "^2.2.0" -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" -pac-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz" - integrity sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ== +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"pac-proxy-agent@^5.0.0": + "integrity" "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==" + "resolved" "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz" + "version" "5.0.0" dependencies: "@tootallnate/once" "1" - agent-base "6" - debug "4" - get-uri "3" - http-proxy-agent "^4.0.1" - https-proxy-agent "5" - pac-resolver "^5.0.0" - raw-body "^2.2.0" - socks-proxy-agent "5" + "agent-base" "6" + "debug" "4" + "get-uri" "3" + "http-proxy-agent" "^4.0.1" + "https-proxy-agent" "5" + "pac-resolver" "^5.0.0" + "raw-body" "^2.2.0" + "socks-proxy-agent" "5" -pac-resolver@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz" - integrity sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q== +"pac-resolver@^5.0.0": + "integrity" "sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==" + "resolved" "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.1.tgz" + "version" "5.0.1" dependencies: - degenerator "^3.0.2" - ip "^1.1.5" - netmask "^2.0.2" + "degenerator" "^3.0.2" + "ip" "^1.1.5" + "netmask" "^2.0.2" -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== +"packet-reader@1.0.0": + "integrity" "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + "resolved" "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz" + "version" "1.0.0" -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== +"parse-json@^5.2.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== +"parse5-htmlparser2-tree-adapter@^6.0.0": + "integrity" "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==" + "resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" + "version" "6.0.1" dependencies: - parse5 "^6.0.1" + "parse5" "^6.0.1" -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== +"parse5-htmlparser2-tree-adapter@^7.0.0": + "integrity" "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==" + "resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" + "version" "7.0.0" dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" + "domhandler" "^5.0.2" + "parse5" "^7.0.0" -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +"parse5@^5.1.1": + "integrity" "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" + "version" "5.1.1" -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +"parse5@^6.0.1": + "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + "version" "6.0.1" -parse5@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz" - integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== +"parse5@^7.0.0": + "integrity" "sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-7.0.0.tgz" + "version" "7.0.0" dependencies: - entities "^4.3.0" + "entities" "^4.3.0" -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +"parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" -patch-package@^6.4.7: - version "6.4.7" - resolved "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz" - integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== +"patch-package@^6.4.7": + "integrity" "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==" + "resolved" "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz" + "version" "6.4.7" dependencies: "@yarnpkg/lockfile" "^1.1.0" - chalk "^2.4.2" - cross-spawn "^6.0.5" - find-yarn-workspace-root "^2.0.0" - fs-extra "^7.0.1" - is-ci "^2.0.0" - klaw-sync "^6.0.0" - minimist "^1.2.0" - open "^7.4.2" - rimraf "^2.6.3" - semver "^5.6.0" - slash "^2.0.0" - tmp "^0.0.33" + "chalk" "^2.4.2" + "cross-spawn" "^6.0.5" + "find-yarn-workspace-root" "^2.0.0" + "fs-extra" "^7.0.1" + "is-ci" "^2.0.0" + "klaw-sync" "^6.0.0" + "minimist" "^1.2.0" + "open" "^7.4.2" + "rimraf" "^2.6.3" + "semver" "^5.6.0" + "slash" "^2.0.0" + "tmp" "^0.0.33" -path-equal@^1.1.2: - version "1.2.2" - resolved "https://registry.npmjs.org/path-equal/-/path-equal-1.2.2.tgz" - integrity sha512-AUJvbcle1Zgb1TgtftHYknlrgrSYyI1ytrYgSbKUHSybwqUDnbD2cw9PIWivuMvsN+GTXmr/DRN4VBXpHG6aGg== +"path-equal@^1.1.2": + "integrity" "sha512-AUJvbcle1Zgb1TgtftHYknlrgrSYyI1ytrYgSbKUHSybwqUDnbD2cw9PIWivuMvsN+GTXmr/DRN4VBXpHG6aGg==" + "resolved" "https://registry.npmjs.org/path-equal/-/path-equal-1.2.2.tgz" + "version" "1.2.2" -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +"path-is-absolute@^1.0.0": + "integrity" "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== +"path-key@^2.0.1": + "integrity" "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +"path-to-regexp@0.1.7": + "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" -peek-readable@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz" - integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== +"peek-readable@^4.1.0": + "integrity" "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==" + "resolved" "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz" + "version" "4.1.0" -pg-connection-string@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" - integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== +"pg-connection-string@^2.5.0": + "integrity" "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + "resolved" "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz" + "version" "2.5.0" -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== +"pg-int8@1.0.1": + "integrity" "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + "resolved" "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz" + "version" "1.0.1" -pg-pool@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.5.1.tgz#f499ce76f9bf5097488b3b83b19861f28e4ed905" - integrity sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ== +"pg-pool@^3.5.1": + "integrity" "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==" + "resolved" "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz" + "version" "3.5.1" -pg-protocol@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.5.0.tgz#b5dd452257314565e2d54ab3c132adc46565a6a0" - integrity sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ== +"pg-protocol@^1.5.0": + "integrity" "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==" + "resolved" "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz" + "version" "1.5.0" -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== +"pg-types@^2.1.0": + "integrity" "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==" + "resolved" "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz" + "version" "2.2.0" dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" + "pg-int8" "1.0.1" + "postgres-array" "~2.0.0" + "postgres-bytea" "~1.0.0" + "postgres-date" "~1.0.4" + "postgres-interval" "^1.1.0" -pg@^8.7.3: - version "8.7.3" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.7.3.tgz#8a5bdd664ca4fda4db7997ec634c6e5455b27c44" - integrity sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw== +"pg@^8.5.1", "pg@^8.7.3", "pg@>=8.0": + "integrity" "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==" + "resolved" "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz" + "version" "8.7.3" dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.5.0" - pg-pool "^3.5.1" - pg-protocol "^1.5.0" - pg-types "^2.1.0" - pgpass "1.x" + "buffer-writer" "2.0.0" + "packet-reader" "1.0.0" + "pg-connection-string" "^2.5.0" + "pg-pool" "^3.5.1" + "pg-protocol" "^1.5.0" + "pg-types" "^2.1.0" + "pgpass" "1.x" -pgpass@1.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== +"pgpass@1.x": + "integrity" "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==" + "resolved" "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz" + "version" "1.0.5" dependencies: - split2 "^4.1.0" + "split2" "^4.1.0" -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== +"pirates@^4.0.4": + "integrity" "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz" + "version" "4.0.5" -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" dependencies: - find-up "^4.0.0" + "find-up" "^4.0.0" -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== +"postgres-array@~2.0.0": + "integrity" "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + "resolved" "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz" + "version" "2.0.0" -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== +"postgres-bytea@~1.0.0": + "integrity" "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + "resolved" "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz" + "version" "1.0.0" -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== +"postgres-date@~1.0.4": + "integrity" "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + "resolved" "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz" + "version" "1.0.7" -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== +"postgres-interval@^1.1.0": + "integrity" "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==" + "resolved" "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz" + "version" "1.2.0" dependencies: - xtend "^4.0.0" + "xtend" "^4.0.0" -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== +"prelude-ls@~1.1.2": + "integrity" "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + "version" "1.1.2" -pretty-format@^28.1.3: - version "28.1.3" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" - integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== +"pretty-format@^28.1.3": + "integrity" "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz" + "version" "28.1.3" dependencies: "@jest/schemas" "^28.1.3" - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^18.0.0" + "ansi-regex" "^5.0.1" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" dependencies: - err-code "^2.0.2" - retry "^0.12.0" + "err-code" "^2.0.2" + "retry" "^0.12.0" -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== +"prompts@^2.0.1": + "integrity" "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" + "version" "2.4.2" dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== +"proxy-addr@~2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" + "forwarded" "0.2.0" + "ipaddr.js" "1.9.1" -proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz" - integrity sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g== +"proxy-agent@^5.0.0": + "integrity" "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==" + "resolved" "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz" + "version" "5.0.0" dependencies: - agent-base "^6.0.0" - debug "4" - http-proxy-agent "^4.0.0" - https-proxy-agent "^5.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^5.0.0" - proxy-from-env "^1.0.0" - socks-proxy-agent "^5.0.0" + "agent-base" "^6.0.0" + "debug" "4" + "http-proxy-agent" "^4.0.0" + "https-proxy-agent" "^5.0.0" + "lru-cache" "^5.1.1" + "pac-proxy-agent" "^5.0.0" + "proxy-from-env" "^1.0.0" + "socks-proxy-agent" "^5.0.0" -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +"proxy-from-env@^1.0.0": + "integrity" "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "resolved" "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + "version" "1.1.0" -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== +"pseudomap@^1.0.2": + "integrity" "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + "version" "1.0.2" -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +"punycode@^2.1.0": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" -qs@6.10.3, qs@^6.10.3: - version "6.10.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +"qs@^6.10.3", "qs@6.10.3": + "integrity" "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" + "version" "6.10.3" dependencies: - side-channel "^1.0.4" + "side-channel" "^1.0.4" -qs@6.9.3: - version "6.9.3" - resolved "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz" - integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== +"qs@6.9.3": + "integrity" "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz" + "version" "6.9.3" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +"querystringify@^2.1.1": + "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + "version" "2.2.0" -queue@6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== +"queue@6.0.2": + "integrity" "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==" + "resolved" "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" + "version" "6.0.2" dependencies: - inherits "~2.0.3" + "inherits" "~2.0.3" -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== +"range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" -raw-body@2.5.1, raw-body@^2.2.0: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +"raw-body@^2.2.0", "raw-body@2.5.1": + "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + "version" "2.5.1" dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + "bytes" "3.1.2" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +"react-is@^18.0.0": + "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + "version" "18.2.0" -readable-stream@1.1.x, "readable-stream@1.x >=1.1.9": - version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== +"readable-stream@^2.2.2": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" -readable-stream@^2.2.2: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +"readable-stream@^2.3.5": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +"readable-stream@^3.6.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" -readable-web-to-node-stream@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== +"readable-stream@1.1.x", "readable-stream@1.x >=1.1.9": + "integrity" "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + "version" "1.1.14" dependencies: - readable-stream "^3.6.0" + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== +"readable-web-to-node-stream@^3.0.0": + "integrity" "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==" + "resolved" "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" + "version" "3.0.2" dependencies: - picomatch "^2.2.1" + "readable-stream" "^3.6.0" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" dependencies: - resolve "^1.1.6" + "picomatch" "^2.2.1" -reflect-metadata@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +"rechoir@^0.6.2": + "integrity" "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==" + "resolved" "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" + "version" "0.6.2" dependencies: - regenerate "^1.4.2" + "resolve" "^1.1.6" -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +"reflect-metadata@^0.1.13": + "integrity" "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "resolved" "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + "version" "0.1.13" -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +"regenerate-unicode-properties@^10.0.1": + "integrity" "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==" + "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" + "version" "10.0.1" + dependencies: + "regenerate" "^1.4.2" -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== +"regenerate@^1.4.2": + "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + "version" "1.4.2" + +"regenerator-runtime@^0.13.4": + "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + "version" "0.13.9" + +"regenerator-transform@^0.15.0": + "integrity" "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" + "version" "0.15.0" dependencies: "@babel/runtime" "^7.8.4" -regexpu-core@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz" - integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== +"regexpu-core@^5.1.0": + "integrity" "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==" + "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz" + "version" "5.1.0" dependencies: - regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" + "regenerate" "^1.4.2" + "regenerate-unicode-properties" "^10.0.1" + "regjsgen" "^0.6.0" + "regjsparser" "^0.8.2" + "unicode-match-property-ecmascript" "^2.0.0" + "unicode-match-property-value-ecmascript" "^2.0.0" -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== +"regjsgen@^0.6.0": + "integrity" "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" + "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" + "version" "0.6.0" -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== +"regjsparser@^0.8.2": + "integrity" "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==" + "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" + "version" "0.8.4" dependencies: - jsesc "~0.5.0" + "jsesc" "~0.5.0" -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +"require-at@^1.0.6": + "integrity" "sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==" + "resolved" "https://registry.npmjs.org/require-at/-/require-at-1.0.6.tgz" + "version" "1.0.6" -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +"require-directory@^2.1.1": + "integrity" "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== +"requires-port@^1.0.0": + "integrity" "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + "version" "1.0.0" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" dependencies: - resolve-from "^5.0.0" + "resolve-from" "^5.0.0" -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== +"resolve.exports@^1.1.0": + "integrity" "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==" + "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz" + "version" "1.1.0" -resolve@^1.0.0, resolve@^1.1.6, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.1" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== +"resolve@^1.0.0", "resolve@^1.1.6", "resolve@^1.12.0", "resolve@^1.14.2", "resolve@^1.20.0", "resolve@^1.22.1": + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" dependencies: - is-core-module "^2.9.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" -rimraf@^2.6.1, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== +"rimraf@^2.6.1": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" dependencies: - glob "^7.1.3" + "glob" "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== +"rimraf@^2.6.3": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" dependencies: - glob "^7.1.3" + "glob" "^7.1.3" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +"rimraf@^3.0.0", "rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +"safe-buffer@^5.0.1", "safe-buffer@^5.1.2", "safe-buffer@~5.2.0", "safe-buffer@5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" -safe-stable-stringify@^2.2.0: - version "2.3.1" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz" - integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== +"safe-buffer@^5.1.1", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@~5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-stable-stringify@^2.2.0": + "integrity" "sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==" + "resolved" "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz" + "version" "2.3.1" "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^5.5.0, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.5, semver@^7.3.7: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== +"saslprep@^1.0.0": + "integrity" "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==" + "resolved" "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz" + "version" "1.0.3" dependencies: - lru-cache "^6.0.0" + "sparse-bitfield" "^3.0.3" -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +"sax@>=0.6.0": + "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" + +"semver@^5.5.0", "semver@^5.6.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^6.0.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.3.5": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" + "lru-cache" "^6.0.0" -seq-queue@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" - integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +"semver@^7.3.7": + "integrity" "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" + "version" "7.3.7" dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" + "lru-cache" "^6.0.0" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +"semver@7.0.0": + "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + "version" "7.0.0" -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.11: - version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== +"send@0.18.0": + "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + "version" "0.18.0" dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "mime" "1.6.0" + "ms" "2.1.3" + "on-finished" "2.4.1" + "range-parser" "~1.2.1" + "statuses" "2.0.1" -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== +"seq-queue@^0.0.5": + "integrity" "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + "resolved" "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz" + "version" "0.0.5" + +"serve-static@1.15.0": + "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" dependencies: - shebang-regex "^1.0.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.18.0" -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== +"set-blocking@^2.0.0": + "integrity" "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" + +"sha.js@^2.4.11": + "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" + "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" + "version" "2.4.11" dependencies: - shebang-regex "^3.0.0" + "inherits" "^2.0.1" + "safe-buffer" "^5.0.1" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== +"shebang-command@^1.2.0": + "integrity" "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" + "shebang-regex" "^1.0.0" -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + "shebang-regex" "^3.0.0" -signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +"shebang-regex@^1.0.0": + "integrity" "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" -simple-get@^3.0.3: - version "3.1.1" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" - integrity sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA== +"shelljs@^0.8.5": + "integrity" "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==" + "resolved" "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" + "version" "0.8.5" dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" + "glob" "^7.0.0" + "interpret" "^1.0.0" + "rechoir" "^0.6.2" -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@5, socks-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz" - integrity sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ== +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" dependencies: - agent-base "^6.0.2" - debug "4" - socks "^2.3.3" + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== +"signal-exit@^3.0.0", "signal-exit@^3.0.3", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"simple-concat@^1.0.0": + "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + "version" "1.0.1" + +"simple-get@^3.0.3": + "integrity" "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz" + "version" "3.1.1" dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" + "decompress-response" "^4.2.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" -socks@^2.3.3: - version "2.6.2" - resolved "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz" - integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^2.0.0": + "integrity" "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" + "resolved" "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" + "version" "2.0.0" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"socks-proxy-agent@^5.0.0", "socks-proxy-agent@5": + "integrity" "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz" + "version" "5.0.1" dependencies: - ip "^1.1.5" - smart-buffer "^4.2.0" + "agent-base" "^6.0.2" + "debug" "4" + "socks" "^2.3.3" -socks@^2.6.2: - version "2.7.0" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.0.tgz#f9225acdb841e874dca25f870e9130990f3913d0" - integrity sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA== +"socks-proxy-agent@^6.0.0": + "integrity" "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz" + "version" "6.2.1" dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== +"socks@^2.3.3", "socks@^2.6.2": + "integrity" "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz" + "version" "2.6.2" dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" + "ip" "^1.1.5" + "smart-buffer" "^4.2.0" -source-map-support@^0.5.12: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +"source-map-support@^0.5.12": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +"source-map-support@0.5.13": + "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + "version" "0.5.13" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" -split2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" - integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== +"source-map@^0.6.0", "source-map@^0.6.1", "source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== +"sparse-bitfield@^3.0.3": + "integrity" "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==" + "resolved" "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "memory-pager" "^1.0.2" -sqlite3@^5.0.11: - version "5.0.11" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.0.11.tgz#102c835d70be66da9d95a383fd6ea084a082ef7f" - integrity sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA== +"split2@^4.1.0": + "integrity" "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + "resolved" "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz" + "version" "4.1.0" + +"sprintf-js@~1.0.2": + "integrity" "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"sqlite3@^5.0.11", "sqlite3@^5.0.3": + "integrity" "sha512-4akFOr7u9lJEeAWLJxmwiV43DJcGV7w3ab7SjQFAFaTVyknY3rZjvXTKIVtWqUoY4xwhjwoHKYs2HDW2SoHVsA==" + "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.11.tgz" + "version" "5.0.11" dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^4.2.0" - tar "^6.1.11" + "node-addon-api" "^4.2.0" + "tar" "^6.1.11" optionalDependencies: - node-gyp "8.x" + "node-gyp" "8.x" -sqlstring@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" - integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== +"sqlstring@^2.3.2": + "integrity" "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + "resolved" "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz" + "version" "2.3.3" -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== +"ssri@^8.0.0", "ssri@^8.0.1": + "integrity" "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz" + "version" "8.0.1" dependencies: - minipass "^3.1.1" + "minipass" "^3.1.1" -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== +"stack-utils@^2.0.3": + "integrity" "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" + "version" "2.0.5" dependencies: - escape-string-regexp "^2.0.0" + "escape-string-regexp" "^2.0.0" -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@2.0.1": + "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + "version" "2.0.1" -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +"streamsearch@^1.1.0": + "integrity" "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==" + "resolved" "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + "version" "1.1.0" -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" + "safe-buffer" "~5.2.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== +"string_decoder@~0.10.x": + "integrity" "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "version" "0.10.31" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" + "safe-buffer" "~5.1.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== +"string-length@^4.0.1": + "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + "version" "4.0.2" dependencies: - safe-buffer "~5.2.0" + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" dependencies: - safe-buffer "~5.1.0" + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" dependencies: - ansi-regex "^5.0.1" + "ansi-regex" "^5.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== +"strip-bom@^3.0.0": + "integrity" "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" -strip-json-comments@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +"strip-json-comments@^2.0.0": + "integrity" "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +"strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" -strtok3@^6.2.4: - version "6.3.0" - resolved "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz" - integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== +"strtok3@^6.2.4": + "integrity" "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==" + "resolved" "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz" + "version" "6.3.0" dependencies: "@tokenizer/token" "^0.3.0" - peek-readable "^4.1.0" + "peek-readable" "^4.1.0" -superagent@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz" - integrity sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg== +"superagent@^8.0.0": + "integrity" "sha512-iudipXEel+SzlP9y29UBWGDjB+Zzag+eeA1iLosaR2YHBRr1Q1kC29iBrF2zIVD9fqVbpZnXkN/VJmwFMVyNWg==" + "resolved" "https://registry.npmjs.org/superagent/-/superagent-8.0.0.tgz" + "version" "8.0.0" dependencies: - component-emitter "^1.3.0" - cookiejar "^2.1.3" - debug "^4.3.4" - fast-safe-stringify "^2.1.1" - form-data "^4.0.0" - formidable "^2.0.1" - methods "^1.1.2" - mime "2.6.0" - qs "^6.10.3" - readable-stream "^3.6.0" - semver "^7.3.7" + "component-emitter" "^1.3.0" + "cookiejar" "^2.1.3" + "debug" "^4.3.4" + "fast-safe-stringify" "^2.1.1" + "form-data" "^4.0.0" + "formidable" "^2.0.1" + "methods" "^1.1.2" + "mime" "2.6.0" + "qs" "^6.10.3" + "readable-stream" "^3.6.0" + "semver" "^7.3.7" -supertest@^6.1.6: - version "6.2.4" - resolved "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz" - integrity sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA== +"supertest@^6.1.6": + "integrity" "sha512-M8xVnCNv+q2T2WXVzxDECvL2695Uv2uUj2O0utxsld/HRyJvOU8W9f1gvsYxSNU4wmIe0/L/ItnpU4iKq0emDA==" + "resolved" "https://registry.npmjs.org/supertest/-/supertest-6.2.4.tgz" + "version" "6.2.4" dependencies: - methods "^1.1.2" - superagent "^8.0.0" + "methods" "^1.1.2" + "superagent" "^8.0.0" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" dependencies: - has-flag "^3.0.0" + "has-flag" "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== +"supports-color@^7.0.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" dependencies: - has-flag "^4.0.0" + "has-flag" "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" dependencies: - has-flag "^4.0.0" + "has-flag" "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" + "has-flag" "^4.0.0" -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== +"supports-hyperlinks@^2.0.0": + "integrity" "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" + "version" "2.2.0" dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"tar@^6.0.2", "tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + "version" "6.1.11" dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" + "glob" "^7.1.4" + "minimatch" "^3.0.4" -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== +"thenify-all@^1.0.0": + "integrity" "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==" + "resolved" "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" + "version" "1.6.0" dependencies: - thenify ">= 3.1.0 < 4" + "thenify" ">= 3.1.0 < 4" "thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + "integrity" "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==" + "resolved" "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" + "version" "3.3.1" dependencies: - any-promise "^1.0.0" + "any-promise" "^1.0.0" -thirty-two@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" - integrity sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA== +"thirty-two@1.0.2": + "integrity" "sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==" + "resolved" "https://registry.npmjs.org/thirty-two/-/thirty-two-1.0.2.tgz" + "version" "1.0.2" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" dependencies: - os-tmpdir "~1.0.2" + "os-tmpdir" "~1.0.2" -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +"tmpl@1.0.5": + "integrity" "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" + "version" "1.0.5" -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" dependencies: - is-number "^7.0.0" + "is-number" "^7.0.0" -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +"toidentifier@1.0.1": + "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + "version" "1.0.1" -token-types@^4.1.1: - version "4.2.1" - resolved "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz" - integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== +"token-types@^4.1.1": + "integrity" "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==" + "resolved" "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz" + "version" "4.2.1" dependencies: "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" + "ieee754" "^1.2.1" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +"tr46@~0.0.3": + "integrity" "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== +"tree-kill@^1.2.2": + "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + "version" "1.2.2" -ts-node-dev@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz" - integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== +"ts-node-dev@^2.0.0": + "integrity" "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==" + "resolved" "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz" + "version" "2.0.0" dependencies: - chokidar "^3.5.1" - dynamic-dedupe "^0.3.0" - minimist "^1.2.6" - mkdirp "^1.0.4" - resolve "^1.0.0" - rimraf "^2.6.1" - source-map-support "^0.5.12" - tree-kill "^1.2.2" - ts-node "^10.4.0" - tsconfig "^7.0.0" + "chokidar" "^3.5.1" + "dynamic-dedupe" "^0.3.0" + "minimist" "^1.2.6" + "mkdirp" "^1.0.4" + "resolve" "^1.0.0" + "rimraf" "^2.6.1" + "source-map-support" "^0.5.12" + "tree-kill" "^1.2.2" + "ts-node" "^10.4.0" + "tsconfig" "^7.0.0" -ts-node@^10.2.1, ts-node@^10.4.0: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== +"ts-node@^10.2.1", "ts-node@^10.4.0", "ts-node@^10.7.0", "ts-node@>=9.0.0": + "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + "version" "10.9.1" dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" + "acorn" "^8.4.1" + "acorn-walk" "^8.1.1" + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "v8-compile-cache-lib" "^3.0.1" + "yn" "3.1.1" -ts-patch@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ts-patch/-/ts-patch-2.0.2.tgz#be9dc294ced6f53d6a8912f1f6ac98af23a715cd" - integrity sha512-NbgdS/J/ylaARJVaF1w4cPw378yvw6C1026fU5NKC2GO4jCwRlkuE/G7gwknNMHwkAOhwamKjuzkuLw/u4KlBg== +"ts-patch@^2.0.1", "ts-patch@^2.0.2": + "integrity" "sha512-NbgdS/J/ylaARJVaF1w4cPw378yvw6C1026fU5NKC2GO4jCwRlkuE/G7gwknNMHwkAOhwamKjuzkuLw/u4KlBg==" + "resolved" "https://registry.npmjs.org/ts-patch/-/ts-patch-2.0.2.tgz" + "version" "2.0.2" dependencies: - chalk "^4.1.2" - glob "^8.0.3" - global-prefix "^3.0.0" - minimist "^1.2.6" - resolve "^1.22.1" - shelljs "^0.8.5" - strip-ansi "^6.0.1" + "chalk" "^4.1.2" + "glob" "^8.0.3" + "global-prefix" "^3.0.0" + "minimist" "^1.2.6" + "resolve" "^1.22.1" + "shelljs" "^0.8.5" + "strip-ansi" "^6.0.1" -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" - integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== +"tsconfig@^7.0.0": + "integrity" "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==" + "resolved" "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" + "version" "7.0.0" dependencies: "@types/strip-bom" "^3.0.0" "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" + "strip-bom" "^3.0.0" + "strip-json-comments" "^2.0.0" -tslib@^1.11.1, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +"tslib@^1.11.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" -tslib@^2.0.1, tslib@^2.1.0, tslib@^2.3.1: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +"tslib@^1.9.3": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== +"tslib@^2.0.1", "tslib@^2.1.0", "tslib@^2.3.1": + "integrity" "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" + "version" "2.4.0" + +"type-check@~0.3.2": + "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + "version" "0.3.2" dependencies: - prelude-ls "~1.1.2" + "prelude-ls" "~1.1.2" -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +"type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" -type-is@^1.6.4, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== +"type-is@^1.6.4", "type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" + "media-typer" "0.3.0" + "mime-types" "~2.1.24" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== +"typedarray@^0.0.6": + "integrity" "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" -typeorm@^0.3.7: - version "0.3.7" - resolved "https://registry.npmjs.org/typeorm/-/typeorm-0.3.7.tgz" - integrity sha512-MsPJeP6Zuwfe64c++l80+VRqpGEGxf0CkztIEnehQ+CMmQPSHjOnFbFxwBuZ2jiLqZTjLk2ZqQdVF0RmvxNF3Q== +"typeorm@^0.3.7": + "integrity" "sha512-MsPJeP6Zuwfe64c++l80+VRqpGEGxf0CkztIEnehQ+CMmQPSHjOnFbFxwBuZ2jiLqZTjLk2ZqQdVF0RmvxNF3Q==" + "resolved" "https://registry.npmjs.org/typeorm/-/typeorm-0.3.7.tgz" + "version" "0.3.7" dependencies: "@sqltools/formatter" "^1.2.2" - app-root-path "^3.0.0" - buffer "^6.0.3" - chalk "^4.1.0" - cli-highlight "^2.1.11" - date-fns "^2.28.0" - debug "^4.3.3" - dotenv "^16.0.0" - glob "^7.2.0" - js-yaml "^4.1.0" - mkdirp "^1.0.4" - reflect-metadata "^0.1.13" - sha.js "^2.4.11" - tslib "^2.3.1" - uuid "^8.3.2" - xml2js "^0.4.23" - yargs "^17.3.1" + "app-root-path" "^3.0.0" + "buffer" "^6.0.3" + "chalk" "^4.1.0" + "cli-highlight" "^2.1.11" + "date-fns" "^2.28.0" + "debug" "^4.3.3" + "dotenv" "^16.0.0" + "glob" "^7.2.0" + "js-yaml" "^4.1.0" + "mkdirp" "^1.0.4" + "reflect-metadata" "^0.1.13" + "sha.js" "^2.4.11" + "tslib" "^2.3.1" + "uuid" "^8.3.2" + "xml2js" "^0.4.23" + "yargs" "^17.3.1" -typescript-json-schema@^0.54.0: - version "0.54.0" - resolved "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.54.0.tgz" - integrity sha512-/MNhm1pjdxXiVspjjyRCrQAA1B768cRzHU83aIqN5vQqQEW2NgyyKOfcguiRIMM64lseIZIelegnHOHEu7YDCg== +"typescript-json-schema@^0.54.0": + "integrity" "sha512-/MNhm1pjdxXiVspjjyRCrQAA1B768cRzHU83aIqN5vQqQEW2NgyyKOfcguiRIMM64lseIZIelegnHOHEu7YDCg==" + "resolved" "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.54.0.tgz" + "version" "0.54.0" dependencies: "@types/json-schema" "^7.0.9" "@types/node" "^16.9.2" - glob "^7.1.7" - path-equal "^1.1.2" - safe-stable-stringify "^2.2.0" - ts-node "^10.2.1" - typescript "~4.6.0" - yargs "^17.1.1" + "glob" "^7.1.7" + "path-equal" "^1.1.2" + "safe-stable-stringify" "^2.2.0" + "ts-node" "^10.2.1" + "typescript" "~4.6.0" + "yargs" "^17.1.1" -typescript@^4.1.2: - version "4.7.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== +"typescript@*", "typescript@^4.1.2", "typescript@^4.2.3", "typescript@^4.4.2", "typescript@^4.7.4", "typescript@>=2.7", "typescript@>=3.7.2", "typescript@>=4.0.0": + "integrity" "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" + "version" "4.7.4" -typescript@~4.6.0: - version "4.6.4" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz" - integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== +"typescript@~4.6.0": + "integrity" "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz" + "version" "4.6.4" -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +"unicode-canonical-property-names-ecmascript@^2.0.0": + "integrity" "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + "version" "2.0.0" -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== +"unicode-match-property-ecmascript@^2.0.0": + "integrity" "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" + "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + "version" "2.0.0" dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" + "unicode-canonical-property-names-ecmascript" "^2.0.0" + "unicode-property-aliases-ecmascript" "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +"unicode-match-property-value-ecmascript@^2.0.0": + "integrity" "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" + "version" "2.0.0" -unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +"unicode-property-aliases-ecmascript@^2.0.0": + "integrity" "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" + "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" + "version" "2.0.0" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== +"unique-filename@^1.1.1": + "integrity" "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" + "version" "1.1.1" dependencies: - unique-slug "^2.0.0" + "unique-slug" "^2.0.0" -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== +"unique-slug@^2.0.0": + "integrity" "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" + "version" "2.0.2" dependencies: - imurmurhash "^0.1.4" + "imurmurhash" "^0.1.4" -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +"universalify@^0.1.0": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" -update-browserslist-db@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz" - integrity sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA== +"update-browserslist-db@^1.0.4": + "integrity" "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz" + "version" "1.0.4" dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + "escalade" "^3.1.1" + "picocolors" "^1.0.0" -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" dependencies: - punycode "^2.1.0" + "punycode" "^2.1.0" -url-parse@~1.5.10: - version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== +"url-parse@~1.5.10": + "integrity" "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==" + "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" + "version" "1.5.10" dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" + "querystringify" "^2.1.1" + "requires-port" "^1.0.0" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": + "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +"utils-merge@1.0.1": + "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +"v8-compile-cache-lib@^3.0.1": + "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + "version" "3.0.1" -v8-to-istanbul@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" - integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== +"v8-to-istanbul@^9.0.1": + "integrity" "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz" + "version" "9.0.1" dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + "convert-source-map" "^1.6.0" -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== +"vary@~1.1.2": + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" -vm2@^3.9.8: - version "3.9.10" - resolved "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz" - integrity sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ== +"vm2@^3.9.8": + "integrity" "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==" + "resolved" "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz" + "version" "3.9.10" dependencies: - acorn "^8.7.0" - acorn-walk "^8.2.0" + "acorn" "^8.7.0" + "acorn-walk" "^8.2.0" -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== +"walker@^1.0.8": + "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" + "version" "1.0.8" dependencies: - makeerror "1.0.12" + "makeerror" "1.0.12" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +"webidl-conversions@^3.0.0": + "integrity" "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== +"whatwg-url@^5.0.0": + "integrity" "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" -which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== +"which@^1.2.9": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" dependencies: - isexe "^2.0.0" + "isexe" "^2.0.0" -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== +"which@^1.3.1": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" dependencies: - isexe "^2.0.0" + "isexe" "^2.0.0" -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== +"which@^2.0.1", "which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" dependencies: - string-width "^1.0.2 || 2 || 3 || 4" + "isexe" "^2.0.0" -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +"wide-align@^1.1.2", "wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" + "string-width" "^1.0.2 || 2 || 3 || 4" -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +"word-wrap@~1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" -write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" -ws@^8.8.1: - version "8.8.1" - resolved "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== +"wrappy@1": + "integrity" "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" -xml2js@^0.4.23: - version "0.4.23" - resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== +"write-file-atomic@^4.0.1": + "integrity" "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz" + "version" "4.0.1" dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.7" -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +"ws@^8.8.1": + "integrity" "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz" + "version" "8.8.1" -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz" - integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +"xml2js@^0.4.23": + "integrity" "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==" + "resolved" "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" + "version" "0.4.23" dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" + "sax" ">=0.6.0" + "xmlbuilder" "~11.0.0" -yargs@^17.1.1, yargs@^17.3.1: - version "17.5.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== +"xmlbuilder@~11.0.0": + "integrity" "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + "resolved" "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" + "version" "11.0.1" + +"xregexp@2.0.0": + "integrity" "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==" + "resolved" "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz" + "version" "2.0.0" + +"xtend@^4.0.0": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yallist@^2.1.2": + "integrity" "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + "version" "2.1.2" + +"yallist@^3.0.2": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yargs-parser@^20.2.2": + "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + "version" "20.2.9" + +"yargs-parser@^21.0.0": + "integrity" "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" + "version" "21.0.1" + +"yargs@^16.0.0": + "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + "version" "16.2.0" dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.0" + "y18n" "^5.0.5" + "yargs-parser" "^20.2.2" -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +"yargs@^17.1.1": + "integrity" "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" + "version" "17.5.1" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.3" + "y18n" "^5.0.5" + "yargs-parser" "^21.0.0" -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +"yargs@^17.3.1": + "integrity" "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz" + "version" "17.5.1" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.3" + "y18n" "^5.0.5" + "yargs-parser" "^21.0.0" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"yocto-queue@^0.1.0": + "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + "version" "0.1.0" From 95108eedf08b544cd5295889949fae140beb39ce Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 15 Aug 2022 07:54:00 +0200 Subject: [PATCH 21/23] oops.. move migrations to right folder --- .../migrations/mariadb/1660540527213-sync_migrations.ts | 0 src/{ => util}/migrations/sqlite/1660538628956-sync_migrations.ts | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/{ => util}/migrations/mariadb/1660540527213-sync_migrations.ts (100%) rename src/{ => util}/migrations/sqlite/1660538628956-sync_migrations.ts (100%) diff --git a/src/migrations/mariadb/1660540527213-sync_migrations.ts b/src/util/migrations/mariadb/1660540527213-sync_migrations.ts similarity index 100% rename from src/migrations/mariadb/1660540527213-sync_migrations.ts rename to src/util/migrations/mariadb/1660540527213-sync_migrations.ts diff --git a/src/migrations/sqlite/1660538628956-sync_migrations.ts b/src/util/migrations/sqlite/1660538628956-sync_migrations.ts similarity index 100% rename from src/migrations/sqlite/1660538628956-sync_migrations.ts rename to src/util/migrations/sqlite/1660538628956-sync_migrations.ts From 6d9ea1a7bc9d44a547fe1566393e122ae252eb8c Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 15 Aug 2022 09:47:49 +0200 Subject: [PATCH 22/23] Fix nullables, fix user settings hanging stuff --- scripts/db_migrations.sh | 6 +- src/gateway/opcodes/Identify.ts | 2 +- src/util/entities/User.ts | 6 +- .../mariadb/1660549252130-fix_nullables.ts | 30 +++ .../postgres/1660549242936-fix_nullables.ts | 30 +++ .../sqlite/1660549233583-fix_nullables.ts | 240 ++++++++++++++++++ 6 files changed, 307 insertions(+), 7 deletions(-) create mode 100644 src/util/migrations/mariadb/1660549252130-fix_nullables.ts create mode 100644 src/util/migrations/postgres/1660549242936-fix_nullables.ts create mode 100644 src/util/migrations/sqlite/1660549233583-fix_nullables.ts diff --git a/scripts/db_migrations.sh b/scripts/db_migrations.sh index 894048782..9ec8230a5 100755 --- a/scripts/db_migrations.sh +++ b/scripts/db_migrations.sh @@ -19,9 +19,9 @@ make_migration() { mkdir "src/util/migrations/$2" 2>/dev/null # npm run build clean logerrors pretty-errors THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle - THREADS=1 DATABASE="$1" DB_MIGRATE=a npx typeorm-ts-node-commonjs migration:generate "src/migrations/$2/$FILENAME" -d src/util/util/Database.ts -p - npm run build clean logerrors pretty-errors - THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle + THREADS=1 DATABASE="$1" DB_MIGRATE=a npx typeorm-ts-node-commonjs migration:generate "src/util/migrations/$2/$FILENAME" -d src/util/util/Database.ts -p + #npm run build clean logerrors pretty-errors + #THREADS=1 DATABASE="$1" DB_MIGRATE=a npm run start:bundle } npm i sqlite3 diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index d5dae7b04..44db598c4 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -105,7 +105,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { if (!user.settings) { //settings may not exist after updating... user.settings = new UserSettings(); user.settings.id = user.id; - await user.settings.save(); + //await (user.settings as UserSettings).save(); } if (!identify.intents) identify.intents = "30064771071"; diff --git a/src/util/entities/User.ts b/src/util/entities/User.ts index 61343e818..5432f2989 100644 --- a/src/util/entities/User.ts +++ b/src/util/entities/User.ts @@ -97,7 +97,7 @@ export class User extends BaseClass { @Column() bot: boolean = false; // if user is bot - @Column() + @Column({ nullable: true }) bio: string; // short description of the user (max 190 chars -> should be configurable) @Column() @@ -106,7 +106,7 @@ export class User extends BaseClass { @Column({ select: false }) nsfw_allowed: boolean = true; // if the user can do age-restricted actions (NSFW channels/guilds/commands) // TODO: depending on age - @Column({ select: false }) + @Column({ select: false, nullable: true }) mfa_enabled: boolean; // if multi factor authentication is enabled @Column({ select: false, nullable: true }) @@ -281,8 +281,8 @@ export class User extends BaseClass { settings: { ...new UserSettings(), locale: language } }); + //await (user.settings as UserSettings).save(); await user.save(); - await user.settings.save(); setImmediate(async () => { if (Config.get().guild.autoJoin.enabled) { diff --git a/src/util/migrations/mariadb/1660549252130-fix_nullables.ts b/src/util/migrations/mariadb/1660549252130-fix_nullables.ts new file mode 100644 index 000000000..c9456b546 --- /dev/null +++ b/src/util/migrations/mariadb/1660549252130-fix_nullables.ts @@ -0,0 +1,30 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class fixNullables1660549252130 implements MigrationInterface { + name = 'fixNullables1660549252130' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + DROP INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` + `); + await queryRunner.query(` + ALTER TABLE \`users\` CHANGE \`bio\` \`bio\` varchar(255) NULL + `); + await queryRunner.query(` + ALTER TABLE \`users\` CHANGE \`mfa_enabled\` \`mfa_enabled\` tinyint NULL + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE \`users\` CHANGE \`mfa_enabled\` \`mfa_enabled\` tinyint NOT NULL + `); + await queryRunner.query(` + ALTER TABLE \`users\` CHANGE \`bio\` \`bio\` varchar(255) NOT NULL + `); + await queryRunner.query(` + CREATE UNIQUE INDEX \`IDX_76ba283779c8441fd5ff819c8c\` ON \`users\` (\`settingsId\`) + `); + } + +} diff --git a/src/util/migrations/postgres/1660549242936-fix_nullables.ts b/src/util/migrations/postgres/1660549242936-fix_nullables.ts new file mode 100644 index 000000000..b9a0194d5 --- /dev/null +++ b/src/util/migrations/postgres/1660549242936-fix_nullables.ts @@ -0,0 +1,30 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class fixNullables1660549242936 implements MigrationInterface { + name = 'fixNullables1660549242936' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + ALTER COLUMN "bio" DROP NOT NULL + `); + await queryRunner.query(` + ALTER TABLE "users" + ALTER COLUMN "mfa_enabled" DROP NOT NULL + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + ALTER COLUMN "mfa_enabled" + SET NOT NULL + `); + await queryRunner.query(` + ALTER TABLE "users" + ALTER COLUMN "bio" + SET NOT NULL + `); + } + +} diff --git a/src/util/migrations/sqlite/1660549233583-fix_nullables.ts b/src/util/migrations/sqlite/1660549233583-fix_nullables.ts new file mode 100644 index 000000000..68f650c76 --- /dev/null +++ b/src/util/migrations/sqlite/1660549233583-fix_nullables.ts @@ -0,0 +1,240 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class fixNullables1660549233583 implements MigrationInterface { + name = 'fixNullables1660549233583' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + CREATE TABLE "temporary_users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId"), + CONSTRAINT "FK_76ba283779c8441fd5ff819c8cf" FOREIGN KEY ("settingsId") REFERENCES "user_settings" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "temporary_users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + FROM "users" + `); + await queryRunner.query(` + DROP TABLE "users" + `); + await queryRunner.query(` + ALTER TABLE "temporary_users" + RENAME TO "users" + `); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(` + ALTER TABLE "users" + RENAME TO "temporary_users" + `); + await queryRunner.query(` + CREATE TABLE "users" ( + "id" varchar PRIMARY KEY NOT NULL, + "username" varchar NOT NULL, + "discriminator" varchar NOT NULL, + "avatar" varchar, + "accent_color" integer, + "banner" varchar, + "phone" varchar, + "desktop" boolean NOT NULL, + "mobile" boolean NOT NULL, + "premium" boolean NOT NULL, + "premium_type" integer NOT NULL, + "bot" boolean NOT NULL, + "bio" varchar NOT NULL, + "system" boolean NOT NULL, + "nsfw_allowed" boolean NOT NULL, + "mfa_enabled" boolean NOT NULL, + "totp_secret" varchar, + "totp_last_ticket" varchar, + "created_at" datetime NOT NULL, + "premium_since" datetime, + "verified" boolean NOT NULL, + "disabled" boolean NOT NULL, + "deleted" boolean NOT NULL, + "email" varchar, + "flags" varchar NOT NULL, + "public_flags" integer NOT NULL, + "rights" bigint NOT NULL, + "data" text NOT NULL, + "fingerprints" text NOT NULL, + "extended_settings" text NOT NULL, + "notes" text NOT NULL, + "settingsId" varchar, + CONSTRAINT "UQ_b1dd13b6ed980004a795ca184a6" UNIQUE ("settingsId"), + CONSTRAINT "FK_76ba283779c8441fd5ff819c8cf" FOREIGN KEY ("settingsId") REFERENCES "user_settings" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION + ) + `); + await queryRunner.query(` + INSERT INTO "users"( + "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + ) + SELECT "id", + "username", + "discriminator", + "avatar", + "accent_color", + "banner", + "phone", + "desktop", + "mobile", + "premium", + "premium_type", + "bot", + "bio", + "system", + "nsfw_allowed", + "mfa_enabled", + "totp_secret", + "totp_last_ticket", + "created_at", + "premium_since", + "verified", + "disabled", + "deleted", + "email", + "flags", + "public_flags", + "rights", + "data", + "fingerprints", + "extended_settings", + "notes", + "settingsId" + FROM "temporary_users" + `); + await queryRunner.query(` + DROP TABLE "temporary_users" + `); + } + +} From 15b1dee513a96107363e9a76a132324f6f338b1e Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Mon, 15 Aug 2022 10:02:26 +0200 Subject: [PATCH 23/23] change dev panel path, we missed this one... --- src/api/middlewares/TestClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/middlewares/TestClient.ts b/src/api/middlewares/TestClient.ts index a47ff396e..c8ea57f62 100644 --- a/src/api/middlewares/TestClient.ts +++ b/src/api/middlewares/TestClient.ts @@ -79,7 +79,7 @@ export default function TestClient(app: Application) { if(!useTestClient) return res.send("Test client is disabled on this instance. Use a stand-alone client to connect this instance.") - res.send(fs.readFileSync(path.join(__dirname, "..", "..", "client_test", "developers.html"), { encoding: "utf8" })); + res.send(fs.readFileSync(path.join(__dirname, "..", "..", "..", "assets", "developers.html"), { encoding: "utf8" })); }); app.get("*", (req: Request, res: Response) => { const { useTestClient } = Config.get().client;

7zI)bM*AClsUpcc0|38}y$_@eS~5d@ZNu117&BNbYXS6> zJxyVw^ZsR#tZ!x1GG1qovNQg!OjcHBK2etA0X1rP?GB@D z!?k0LEggq^bvmnzm#o*MopoEONo>#I4-~r}b%RA?F3)w_=cSJ=63th9ef~pb6bn|3>_;Es*-^XVb>jW1 zKj0fJrE(l>l;u)lr3fs9kwt9W`J~h0lfdo?Tpa-FN>xQB*3CV!aiqA{!%d^_YTb_is7VL3Ae$~v_%Uy=Eue&-D`(fYY5EDrBdkO8B3Pb z76g}6Uw7;PXB_`|gaeJ!{#qAh)bjNsy0Bz)n-wp)cj)c$ZD$qNtE^wzG&rwAsf}6~ zv}dcTx~=&uXC*PVFVCjfEbcoCCZO=6R-L+lY{h8e%E3>kgiGNX zkN3(^ty)#^Rl8v*6ISX5swa`yd{KSZRtMK!q6S9Z@q-#CPRj1DzX6mR_=2E?K-ZK1 zT=}Mi;jBttXyXuJEIpialN}${ zv~^mU8e3wDaf{=g*$nBLy)BK0j@%&u4!<%!$V98Fh;3{p3lpj)tdpye{$Wb+SvNnN z-Lo}uDrG?#Lx`sp`aQ9mqPbMhqy|+?e0w{b$YmVODZ>GMAJLl+!{NqQVjJ4Au@q-S zsVOU3AmE%&EmkVgmLp>~ZY`*}Nqg(I%vVB{Z?`-0-mhT2QOysgdvkBhl~i*#l)mTs z5bL@on+mj8VUlF`)FEWx#C{2#zeD|3QvmW?(DIZWu>; z+nKfEad)V$s`G=*asy&$O*hqkylOh8)DsP(q$d#6i~MCp1z>Q$z7%#dz9FUI#O_?L zhXP()+RVPTQ!a%s_GYaHT9L#7Qf!6?{cw0u-s#KxH=~6(i)dz9r+0U+)l_CNwkx#^ zK@sL9Ch%}us%=LQA3H`1dciikmTdPYn{^CbS|Zi%F2jhDq=pX@8C+v;&GFJ?Eoeh` zHIaK#w1V5>#s+-uN8Yvq{u{dbPSp<2bvWF{FaRx!^gg{ikyrQSvAiV-?7Dpl>Kz@> zVvD62til841v@WYxehE}QkxA%rz%VvYmTdfxpx3F4B(LcVc&7Y_Rvd@OR=Qu)xEi^ z*McO#sq`?QYf}Rk$2P65`pHf8R)I)@lUaB|12y^4JmUgFeOtHt2L|1lT*joF@<%4! zQ0`WRNn0i>vz8g*m5RGsGp#+hJXW<`?36neTjd!(64e}Zn5iIepWJ_M^-bR?`^2#T~;yBpWQ4-=DtJ$4Ro|8dM2*#%GT17Ca!kU zrZlJ-hmO|SdQc6&-tNOHw=$~MWMGeKZMU{wx>!vFYcrBg)IGn197cVm z>-u)BEBiD_2MhV8Z}G!BI;*wYd!cczF@y)LOrns&mumSOlR!ImBK?!od820% zN(|F@+hM3y+qKo@5_gB@N*)X=OwX%S&pFF;MMZj8J_@ye>8Sjonls^c)+}fg1ioIZavR#( zixY%sO9W`IGzzhi0u}0#EWbTp!jZq|;MV|+bh2XeW-R}cAdc>IRj!}9oU=AgZ^@J!j17+ohDy3}c`+d_m_ zO|4t+bTDx>lGZV#@f2L_sFJd1n0jl~YSfo72XqpvwG@z_kNP$lmQ~BGOplXwg&vdU zVIjUdI2Wc}7hN0Hdigrzv}2I!b;&wA=PAPeN{vzk%M&SmxpiY|(QBgmiisMeYG zVy`nb>SZsT88epX?kMpGxDwyo_v5&#hRs1wb<(s=t+fiDx};zn-PMoc+Wk~H!= zja^h5kSn=8cKhmp**Sh=OftGembcrDrXFnu^NArE6;@>W++ealSwH;b@3N3rkoRo$ zXX>zawEEY!4*AoinjyAHon#^L{c33t(^HY7d6Mm48o_QX?pGFUHbg4#8F{iCqmQX+Uy_G5wGi9M%5VDhO1)7b zyZbU;o-A4ur>w&eKDAZiNQK{#?TMuemc^8ts&4?g*9Wyah5aw*CBY0hfU5Gc68HyJ z{Xxv{f$j~*F5mSw3P}EJ#8EV_bbGr46scLg297OD+nwr^h}H*72la{U&P;>8k`bub zgb_VY~dF&2iU6v|zbF{`? z2!{(}W!e|xh{F8AeiW`ELoFK=vj`S?Krn2w(VSyngk{YOtwd&`3;{y{MRhT_e>0R4|b``}%v zbE>OhLA&lZai;E%c2VUZO#L2)9SG>e>QR0#n1c3k!&@2ToRUz zdD>v6#DpOGgVLl=1&!;ueZDp4pL_ukyUDn}jlL9?qyD1&z~7rPf-hx0Lp-}-F#7G_ z%Dfl;-2&POWvXoO^lqzG+GW-t)af=QdYD#Tjwf8D)2mp#yQx7OW*b`dawXVzYlI9y zU<1(`J58FH%hs;HuWtCIYHh^BLb=-J1t!5Kocd>|T=jzI$>Ho8`}PXS)WVtSm0#yq z-rkKUb=f9uOgS9<@?0u)CcIK{7@{+53%FA?%ST2nA5vA5n_Jf3OLSDCjcR>bqO8`Y z%?svC5tfSGrz#0EQW$pY4vDCFY)99~VgbwEnNZOh%IaX;`*Vh&;On>3R-s(zLNjC6 z^=TG`eLGK;mG=#MLLZu1awH~c-fx3L9?Y_0m zGh&EQ*@KU~MGcVQfqCVo+UfYDs7EJOE&5ZHEzATepa@ZP2Bkh3&!AGr{{gR^2{7Gx#!p5 zoj?sjLC)H#wir&Amn&?G_vP zX^*P%2T>nr&?5&By2Iv{(6wZz4+3ivy{?VAnS}eWdgR1?38{A`m#sX^X6$C})4SGq zyt}~VMpxTXqj*7wBfZ~C))PLQQa;Nn?pDKhC3iFpqaB_Oj*E7`iC2$ns^V9mKsvNb z9e0q7_6jelD_*RHwPfUZSw&cGPMv`e;K09&KZJR^jb=qx6k%kQ-l?#H8?-QU8LEfp z_2$Ts`daG%t&Gp`H?zdvX&Sl%ZMtJSGta%%wr)L>kU+B3!ANg>?LFm}86&%pYSOsS25Z=y#!QqWdk^7NVmEW&_-+(Y7`jBY5Nig3Qeq`^WMEp&rO^xCl#}Or_K@WX+Jl}T$ zgh){CvTUy>zI=JjI2Y)AluIu@sEl9((&4zHh^02A;=O6TYMYJq=D4H1!>XC8^+_dN z%=daH+L$x0@-BBNp=8;gE4aYXJeqSB6U~fWlS%q1J z!0v}52a@-7$#DpSG|x1%qj!CZ{K@y#$Jn^rt5&MQVbT!eI&q{NbMLK2u3PEOCGf)0 z*m85&ZL6xd=l0{oZ8f%%g$=~L9Fej9{=JO+%fdK!( z>B%nO>!G`}>BC5nQ(47HZGCo+d?Kg-mF1WQKybf^6ruv@Tn(QBESVNLPx^*508~^5 z=|2Mk<0i~4P=u0oBAM;j^=W1g6^(Wwf22Xmw$gHwS8gsW@ zfB^yH7c?lY%Svd}Y?SQ7kwm}wTSnYdMVz>Q1#JEIp|LG=T~kNJUqprz^vE5*34%GU zkin4LiX4ByR$E^p#j*)QLFZxO=nZl`p4DcH$V+G{<+aQJtQ z`T2)t$t!droCXMgcA5%fYQIT8aQY9zyLU8i_?-Rxk3zgGh8Y3?A{R>eb-73|_sx53e4eL9z=d$C~q13G? zy~@V0Ds-h(vB_4O)0J>H;=-NZPWxL+r$+59Mq(9ik_0ILt#+6>uTHUvQee!$U>iUb z1O%6-t(@pMf0<)NqjF9ZvxQ%tWk>m4mNn$<@~$iR)~Q<5CMq$}-ZEf(x) zPn&k7jY(}yPwK*45o&UrX?l4cI1P!)=McQU%dmXVeOelvs+}xytqSe8>JpM z99I9WS#TkkE&kkw_0}Xn4yV=;MSDm>yNsT?E@jXQho1w;&BlguRjNCz@xxxT)8?iv z28sbH!o*6)La$A<_GW)16Pi9>O?i2!FU4Jz@Hgsi;xDHKfgxMXyp@M#|A`Jqw9tyt z-;Z?msxlzg;6ab(lW5xI{SB-bn@qo}kI zQXvYq2TVE=Qxb{_s^xB4HTW*T%wBxPg0o+&v(Gc>9=L-1#&4qz8L^BlmTnrE5EMln z03jNNPDmutNDc-oj#O+{4|$9?EtYsWlp*xu003#740iG1S0nBD?XSKNM8Ev#n!8)p5)&wmQ9-PsU|NAS@~7M&f)2qMFFGam3ezY;PFTZSOWm zQqgvlP0yf5#to)gGV9N}Fm**Jv)5#6!LGvQpt~hg|1Zw^bt&iY@e}VYbKU=#V?QU# z_nbSu2poj_;~fj*T60qBl=NfR0;g4)bKKGhL~nmEMs;s2@+zI)7fdOfd3BY6%$P(XRm|vz0PBNTA{Fyx zMBrE07IFCgdos0C6e}Qqa3XMMPXPlv-iDYt+8w(DQEng8^#zmpi$JntI#6!|6&9;3 zPMKF&oJ^G$BIrYx2K6jxfTn?dn}^7VWqd$XVfiTdTI`xtdgJxRUn$TcJKnba<5*!E zvB}Y+a%BK$eQRaBW5i)Q>1!IZaXUg!tg!=!ElugBnT&^hIX&=1ovIvmj@n|NYdM-? z>+AWv@mX_c`gz>ovFP;9MJeLleYok7&=X0!MAkmF*?v(44*z-uSPewqu=+pevKQ%M zB)cl~pFKMZ$gTdeJ0m>PJ0Ax`8}uy@D%d7a2!4g3ZM`HO`v<Uk4cUTs}jJ;HFD zT!e3A`jub?;L0qakLTH9{v^fbp9yBGIX}tFhhqI!>#HM;T6i#BQZ0*4{^I*&=an{ z{BwnLiuFT?57N(9v^xYZe=#a@X(+Hj-lVf2UVI9}Kj^4DD*s*h@kB1?a7G#A10@+> zUjXEfus&3RnnBH$)S|H*l=S6J>DPwkg$MHSc7gA@HuDyOpYzE0C(Hcaf`%#s)yYX_ zOT9jQYfU3*s#;d)3A+KY*F;@e4dex>8#2{mnU$?htN2ij7sIkxj@CV4wH@z*3ScRY zy>e$UXNb0qg)Lj|HJgSwN<4zB?loyLnqIw(_qrkb{h_G_&u1C}L%zQDZ%AHPl79mz zJQSZTl7Lk!Hh5d(+DEGDFw4A| z_;`}!BJU1GKyKSa&I+k(gI9w)I!{@nLxhWJvmUGqtS8O@o zukwH8zQ?^stcHyN;b&pcn;%#8AYDgR*bo07mO*Dg~ocpRNHnM3oQ-b z<0IlmzdRQ!RBdsCDuyhKOR^a)$^W?^{~$B<(|qr{`zyN}6U%tc{+nO%shxdde@61k z{p@L`+>13?W3gY(%13>oN-muMh}&vug&pTmt6b(P-KghWwY}gc8h7Y>V8rE}Cb=Vb z2}T20^D?&W{C6R}mj7FHqW^(beffvKc%O&SG9&l{#rigSk=rIYv+fi_2AFov^*rc> zKWP295`-bLczIDB4;(|9bw~Naw7XY7O6S)Cf4}Ti8zn>E1E#uNI!t5dxREx> zfR0*Z*qF4WpfvHeAu*rWWg4;-f~`i=ow=;|!M3~syxaARnJFu*q-`sul<_;8t5g=S zuej(mlZW3pA`g;=*!M?A_>S_0eRr>B>?>A-vd~oq@wSyXHphoOuzM0uYo;rIb#XoZ z!!L)(+m@b1Wl*#8m*~%Mp&)Ac^3fwerb6v7#eRp_=UTcTR76MM_d6qQg+BCO)Q@#- zcQjWi%q0#-siSvSmLi$;WzegPyd;`<7KdqcWu|nio7Qov05Y@?RaneV-C?P9J#f#j ziGPKkXS&wW4Djqxc3D8c{c5TJqqnzk_<#Qcsi99>)z6k6WCm2+ZAtaf5JB#VQ2-8Z+j&HBbzg65==IGcMw-G zS7|X8-fq{7xkj5isOoPF5;>LqU602`qwug~#vuK*#&)u4ji$q18K3rj^PN)(NI^bK zYXoD}ggIYOLXqw69paGgd0WfesQFtrEe@y>R*SRBRoL*0BmURl*{Hb8!_19xYk3`| zbqdA8KLW((A484Q>>G3QHWPvTEh~fnIQ^PSHsi0q9q9k^3=~~N_VOj(0dJg&Um?m? zK35t1^>>EO_xC>#rrrg`>R0^z^!;E*?k22aJ}e?vDCBtr5$U@o5pTJ@h03{tU2 zevyd#%)^wd99=NPZyP>AHC0QNq z>-^f=xQx)S!DjLkiJI0&eAKWS(JtV4Av!LEzHwwqo!a(b>MXyAbqWymZ$_m&*DBYt zP2k4;wpfc0^5N9ssr!r6sYw~KZPO9Nyn^3L) zmkJ({f*s1%kbV5k*_w>xZP#p!OJvaRTF}>0>$RGS)Dc&ENyj_E##>h1n%$40C9Q6T z`<*qcaswz_)An=l@FETtAmHcVo=C(M$C`f~3JruX{0h?~RkyB;5bBgtw7~5#2{T3glsx*@cc`T)~$mxu_godfcWZc+m0MFY{n-nsDzFYg_4e}sc z|A}*ysn)-93*a1Gzg*iV&jDIJAy@bVR|FJk=H>Kx80=Hy@y`^(<${0MHgw;Ao1y&G z4VIC3qZVY(6x%Swy(yJz<36s!j1~qOPWGmUS6O8mE`m{&X>)E`akWy7oCf|j?qSDD zzd|DlDN|)7Y^NY zjQwi2F0h2oCVj!F0$9?QM)$WhqR6U3^v*UndYqZu@9IN|b+x__du^`Y9Im+fur)T7 zzM*a6fbDhSUPw5#&2(+}fULNN-k#E+rS*@UevclGCx8W?Qmsm0#jREelLM;GrpG8~ zwXWLv`8K??V6U1sJ0_XWaBJ}tF#KjSU-CS|t+=;`Zjo@IvG3c<5Pt9t(VY7?FZ^UA z-<*V^_cll7n8sh#i%5pdOcB?jw%C zdD*4>UB4E#4c_urb8%R~`uk+~&ZS+e5QVq%rn}5ny|XL}_*@)!IG?{STI8JG-MQ^y8v#a3yiN6+yU3}Q?jVq)2WZ3R(l4XBI zlWTJrtzrP`Kk91DUR96MdY}@GY0sA%urYBhQMeH|Q|oVmh@Y_hd{)owGU)wsP#im7X z!|7xZ!6dlqgrWkfC+W*hTc1Ng(R$0zCM67j#rxqz!>WVIV7)vp>tm{q)qArsJ$`M! zKv5L%^Wl<1nuYu_b_b+jz3|^mv64l>Ib^7*E-op9<6yE?>f6|>R+;j;TcPH}B+!_t zKU`M@+vbl)XqcfKou@SaQpYyG7!+KX{;@LayWZYVX@KPrb|&&Rb0 zOC2k%;I5y{Q?(*B0e`-Yi*uo6O|}d1t?`&;v+~Ne{LG*(;)@l3(c#yt=;mM{PasEr z`TPCdnxBn_Fz^S1977nzhjL!QIxa-?$;?CZpxg2DnI^e0mH&J zyYgC1oW>*Fir3S{6S1B3~frjv(aA##7M0J&+l zBhPvS#adk}n+}?7GSZQ!7Pz;Ht?;&v)`9nY2q5C&w-;7M3~fgCAlrs_w-x}PTVku- z$MU{QaQw0y9s@j7jPBIzgTreq zM&a%_XKD*guVDq(Ger8IX%(cizjQ()AcfWne=>djt}wQ=B;tOfI!IbOF$Q(pogSeI zb~(idJy*wDe%$VfT!{@jv3{(oooO=!ToPrlDYu~8)25qYX}i_dNvBfP*k%wq@dg_? z1uOM_vZMeseMjes6Ym>%eHsSjWPf2PR4-qSw$cO01`@S?{(j5vKX_^-*uj zh3~=;Pyyw}j&@2leP!x{k(S*h&wbp;vmh4`!MwIt#iHLUksFd3i?8319kX`|#RF_A zS!!%oINuudoMyQ+CGgk`IsvF~)7VbdTqO4PsyX+Uew=J1)3rz50jK(SZEP!(s9|Dl zkqzm^x^ZL(PPVJf;nfT-xJ^-~Z6U89r+bOQKUj@7>AcTR;)PD2h#aUG>|OM4#~+x5@VfqcvNMlHQQw znq+zHCr-K1!lvZdG~V{9z0Yi0rfITtIlJcIR{Y-~ryY6mY7Jo?l(c=OYH~N^JL~3# zWVW~0Z}_NAC~6u}!ynYUfle+uL08?)=lX`J9@YyBKfqXc#!+GtYk;HcV!QQZ$tB%^ zC$!Q^ZyxWc(y^LEdX0$i?xtE7ha~6g!?zhK7)yBCHppgQ95Vkp%MQ7HH%aT*wE!V3 zRPA%NI=6#9vt8euwJX2w-L_xf`EU$xOtDXo;VntntJ|k<3;L0B5!Bjdi>}YBwv&?n z6k|wsR;#p`(uA4o>ap1rs3m1+ZR=2;AN`3y3`ZqJ+Yo}->O&+?g$7cX-&N}`)M|Y| zCK#a}C);aCv_ND1(~X1tLcs@R=9x&Nef%dM;%WcAIm+X1hF)$x+k^+TIfm5<9ubzcCt5a?HWAacILV{h{}Mf%GgtR%-Jq) z%f86_8468)5T6_9PlWX|aV)m70~HDSQ{{lldQRwPp9)-bBA0P9rwoDyWD0B#@<*S? za%*+0#-*r1S0|Ii3S)~sBvfa6wzeL8{+F`ze-++zA@tNn&l_gIrTN;>K9NJqJv{_V z0LT<97o97(o$S_n%*8#28aJ`!mJ@~~KO3dJmQrq%8MQtSCJT&lR>#EZyTNYROtexc zh;ypc8)6~8kJjn%a0pvUy4@|s_O!DPujlHsVHw$|=u9i3JNXjvx^wa_1v=~x zv@*GYzo2!1z#E}q*@l+Nvfn*o!cZ8-5Hy`Z>U%YriDqTe7b%6Jd%Jo9P~O9Je@R=C z7#~L_EmH|;L#v~(9j0X;lk4$x+a8JAsX z?~&iKB^YJ|voX#hb(=y%7uc603vVc%S(MYy46AoT42flcJFO;Z*nRB4j%~f0Vp@ye zNphIrED=ppvpHiqcI6E=YiFk_CP~CeC*H)GRM}NJD@L%^9w|*EXze8wcFV44{Hj!5 zD%}72FU9^Y+Uezs1TVA~U7#q>s^T3yUdAOv@XRCh7^DbMdUJ##A~@D|9P5;pQ{9N0 z{6ttwFh6IGRZNeW4K~VtNs|o~?-BzR8<*H}+b2~3!?yRi}xGjX>-KyooyRop-B5OeZ zo%(dDEDHF3S;TN9c;b6b9fTYqq`Xe(!YC~_XpT4Qt=J3=c>=Q>c4q&eTYRkqvyomH z(wAS4ruXG=EzcAhx}m-eL_Q&XzoN@GLdFy|nZI5evYU=Z%+0&K25g zW6@tnM`6mUgSHVvI3-<#7n;(1)9nBt$d#2GKvxHVNyx9mQ!Yi!l!^y$zwM7?bss6Shsd zTVHw;a^6)Bb8qjbGuquj9$en-2!)p`N@^2j?;1=kxQroN3|it1zfO~zA4C%+8@_a& z^D)pFj}X-?5?bUylRsfl=`(^L1&&}xEukzKEv>U3DK!|GoQq6RW)K->MJ`_K9xWg8 z3eN-qxf$e_NAFB8TVYNb^f03H=G<|C5H;9_Oow4V5&a%zMC73CZfv4Qt|#+03(?>s zVVe_bJv4SOf-g{M_E=uXHG8^q%ETTb@Qmk4N~3xxbIa~{UpZv6iE|s`!6SaIy)2xK!nJjN=j07tgbCf z+F%oH7-kWAjz-4|uui}0u?YO61PTnU=VJa)ZvL>vNca46>C4c~Jz3b}`xoGL$cPr6?M2+;_YHy4 z#KcRNX`@@Cf~L?N!1%@|oBZNz2lmefuqB?~bQiVxsq8{gO-2qDbbgpQ97S;{@~5ed zB(mNa59&jI2X#a?TMFo9@L3E$Z%DGUZbob{Y=IUb^&? zlG}9`doX<^slA$rD&GZgg%?|bz|MXgGgv*1sH0_kDQxIhpD3QzaC(+4pm=XwdV1i= zx~0%Vw$n{UL!w!$dIOg}T(oDAA(?k_6`i`+LKecqZgJlS2V)?G)(3xnvX2*>9%Nr* zJ#cCUW_Oli;!Nl_oXWv^bB~p9`vsy!Uhy+KpnOt;j5K7O zpw}9)6*8}vQ-N+J7v73~ej&r6pwq=l{Pi9}V*GT%7HDReyjbWR-ShQ6M|=0p4|1RX zklZ}~a96JcVMnh|K=Go^q2k@FZ|fTdPzXyS%&qK#g;g8R=~Ws=cBAJGXY@ufd!43l zGHPsMqoApa^mLKLoAs;`mW@S;bQ)rKsPRE_$apQLvK-Gt^)nx{&;#4&F2w_T^6>jt z>_McEsKX!7cPO#+nkD2<%XgEGSc&&NGw;6Zqo_?eI`V`gaMsA`TD`DD)T~aw)bN)g z0Ai1+?r4sSn8zwJ~r&f}ER~;dM&=yJzIF?ZKD%gI`n;kC}!t-0VZ@+!PE2;52I%C+aG+Cq{9woWz` z45s!$5W6rAby^roQz3il83S)7^L^^m{i1qh;Q4#9%7b@e*Da^rBw(DXJ2;%1}@ED9t%tE#uzX}D7va4OxJR+vU< z*=%=NqI#@vS5Y~hFXmLAZ8&k-cRRt`V8^~ zz63+M&_kR$(*_Yldi6D*G7&uDFk>&VqTXntRt8a4ZY z7IG8T-peEAuw)x;sVflijFj4Sn`p8Gxhg4Q9AZw~p!Zi1EMU_ITmlB2QF$Mfjids%R9CVz?#@&z;R-TpiD&ZkWNQVU)Q0++8(GBy|K!~X?1xEC3?XUW|* zJg@{6hknVDD?wn%^~qb*EAr=m6A)a)NdIYt5R&h2LkAhL(-HMia0EycXfg698VxF& zBU{^T=7-*PA?&Nfpci+g$bT8lP69Are;~bU0(!OQJfBI7w)$H|{F`pJj$hxEZTvgM zT-`VIRG|S;cDXBA-YDG!wQaMK&dLs3O}89g>83c(S3FlTW4uycCP5bh7fzoVRNF$; zc3r-QDf|diHq{{=t0XQ%*W+c>+jIS7IdK602M~*FA~ztOU9N2yJ^7+q=w!j&j4;ep z8{*z+>+^c#Q>E9XF6#8JP>#FEuz2dNvQQoLW#w6dD*ciW&|2W51@eS$MMmtb>N}4D z=$k4PZ0bG1J`6^TVsAuT_mrhF*KONqaY79z#ZtZADlv+|9a5?p2-9la;-cl2o(HSW zps~edV(cC(6a5-ZF1Qs@hTzV$eO=?7*DIhbO2$c4m3vZ52ySZm!=1w}xwVHHCGSdv ze^b6k7QCaLX~9>hf~Wm|_{zc$73}!asL@kB{AIl2kuXTa(3~|1&#cHVr#LjxV$8BHDXxj z6Rs@u3?6(yMZ(%~JHbM>bL0RGsKt(2@uUQWK<&_;MC;JPfHjjvKaquG#?DxI*cmP- zl7E2O520SLYN(ibnubHN{^hlDK(x?$(ci4woV6jj2>B$+dEw>gs!J z+qRWr2q%0F4-faWwcH!!j-SMt9`sx#72LkM-OcAPL|RF-%P9~dz}t{Z?&V|=k1c8{ zfm+|w*jKS*#1f;M27aLgzDVpT5&Y@Scva@-n^>ua0!XR;0c>Bfz-tBo>(L2sPdtNy zc}*i$2XC&gGDJSi38CaNmtG)+Gmlq-xRR!mVw{+5V-jWzxz2hZ1u$L|DYCY}CbAv+ zhn?rfogpgRaB`RZ@qC$iD>U;#A)JoYoxJacTU6)KDg>Mg*fcukiRS9qRK+p`yNWQ5 z@r%*6!v@TDL!h|@4irxJOCxpL_D0Dd4B2{Z5YdIzQd#e@ROA<$mCv(7cNAx`>Trt| zC5)7$R~d)Tru<3AH&F4m+VA`3jKN^_e5+P(rx9L|9C;(^Q(7%e-6w&%5jJqhXZy{T zEXD7xeH5?};3!gkAn$Q!)G^c3iKsi5t17!(zjF#HRJ$4j`e)EXo{g_u8oj|;S z<7HsH7o@5*7D&nU#v_NFaxIcY#jKz7xVh6>qXxV7*}jCVkJ`~NobD!QBZnC@<=A~s zM9cnY&l~A(K!TD+p57Yrumtidm4L{%tENHpFOl_rk#)}vA4IuY+kbP7bsY~N?)rCw zMW;T1_lV~jX=|_eWEuBX@c?Al>wDw#HX|=J_xsS#|5q0T0-Ss+;0(B~n($x$DFJ6x ziOL}HAth4KDx35PCcd4u{9)V*Bh~l-8(^?6ScuI=2&nP6OSO_`(uoSTP(j@`k<;R- zr}pP`YYwp#MeDX*Y*@pj3#MygVi*$K(jQrb130q^bTHie1NDEUF zXy?mZ-=pE`%hq3d5%qdPv1-@HbgDNi@vH*CXU8)+pIxjqM8!C@*q+ql6T}15U*4$E z4St{Z#j2sf`?r+f>lx2FNybQ$ApQ>s z+c|II53tdD0Dz6&UueWek-#%+d_XZ$xExJp(PEN1P`jhp`$>1q&JuO81wl3^94`xa zjT9BaQWUp>V{8cI6&rmn2esz9ldSi;?>x7$Rr^!euAdsRmd1Y45-9`Y?zC;CD=MN%#1- zvi>z?ea{y^?H*jmzR8vqHxesO6k0ARV6+>>o&8uh6PFJ8qcp;MsIE-KVcNkISppdu zk{e4bvqFZ0smt{#ESQoCI+|E(KDEjbZkdPHiXtT~@0+*16=2UxbfrFMtnKedLVZVoJk~m)In@+-w;Nrt> zNK!N3B*E%-d)$_kIY~edH=0=wXGn;3LlB-iPKEYeJ>HLe`ERe`o6hIi9zA8FZ?5_7 z?P4`7;G5c9RW|m{{eJ3v&t@(~<(cflxU*a2K#_IU%;JEz9Ad4JI4Dyy?-Wr|c!_Wn zcybKN)PVMr(-`gbKmmn`J0)X2F~;kb7!MacvYk%Qa&QY|ePooYMXhtj&qnla6?45` zPvPH2^k-H)l~*FkKFGQUNoz^uJI?cTQE+7O>d<^^#q$gR;KN6lAk_}q#QM--)(O^E=h7?t*TorIt=w`&(k#lr@5{v z+QY1q7UScD)hC$6_V(FoxI}{OQel?E0^iJ9teeCtXjC1)S{K|5#dlE&Qm7M9vk$0@ z4@&bi)$fIXUs3H0>J!ACzM~m_jXooU-BC7-0=c)H`)X_M=PebLHZ;WzgbgC$V_Y&o z;kdPi5}?gdd+U~&XJU2&5d+qoXM*bMZ3tS0=wJa&cU<4=H)7>lf65@v+{NyfA@`_i z&e)Dw^$d*B=g7ydQRnZo^JU};*O$L5Em3V_yk^}jL-P*kEFgL;w9ris-cHFZJ7%3N zp-sAo7RkBWrGh!x-}jucst{ejN424W6JwZOF83HB<-&9$&i&O`Bm#kqs7?13>((4| zj#QqP47Wx9U(HsuAD^l;=Vj(e9o7T0uawMrrFi30-_yZS|MQ+s6>b0Py_UK?8EJK8 z+`62bpMfH_(OY%+{rt)^YpZ2|z#y6jTDZM|;~Su&*4@-T0rT-4U|br0;>UOIKJaRS z&Y^({MY;xx`n^@L$2UXr)RX=C3;|W*#z_l*J&XF;FM!w2oU!x8qo!9M@~C=TfeluW zEnkN^Kf$1@cHT~rj?W%2RWQ|Dia>r&5IE(V?5pLe#9Exz&Gx>2QBD#IM&@VpZDduiiunHNo8Gv2e|P%r^k^mBCy{%v zf1AD11jLQ1?;+g${>P8Hd*cS+#p4fg&-V_;d(_m+yW60j&oY-l?%*p0QKc`*sp(wR z$o*JVmH2ZL0$`?r3BK6Yx=BIx>OI|&{_TOL-s;(NiG9F-PrTEcUif7PDfaI?q}Z=q zB*5ffxJbn?Q_5bRp>uU&FoDz2MY<)ZzyX~M+?W*eB{fAvbq1RJj+vG?KRBH^w>Oam zY3kj~5?4sDOUDj|`9nrLA_N&SN49Br@`qid#;(QpJ%t+wK4t6gne^YYp}$}b|BO|u ze83k<_ulyY+oXJIE&gp%9#=87o%`=GDc@A)^N;0G10e5iLWPzNozRT@Gc}QI!d~e?U}jg ziW@f2Y&bh6TsCUC^me_2kBG)g|F=UsS=Zt?sUp9++Hrn z9kmRzNFMpwmnN#xa`maJBn5G@tZv`*$r}I57(kWg^JO@rsUz{kc4=Pr$rAB5i1!>$ zMa1WKnh`SuwTtz3Rv1Uo-j)X|Z%?u9NT3#Nbtx8wkTKZWvBR~W&IKG{xFUwEZr?X) z(ppLJ`ZzvzEJ+mSQ@j`vQyq*EAx zdqRl{&?iKyZZ)G4TS7S}wLtkCl8RPvml!*pEkbGwQy(T>TmV&d_?>5Oye^Dxd2E;! zg9FF(cuE^iI$-bVXbwp;EOeK1u+ow}Wwp|_x6&ssHt?%e^VhO+4fy;3QLkgY3f27% z<-O|k#WT%%jVJyL;XU&+x_f3t_OBy5eViPRCWjs?cPGWXBTiMBP)sWuqSIiZ!KxZ- zNU_wQsbhd6!9AGTLW}l}4kBjNU5RWMZS{e!o69KES!1_NcM|K|mCSfS_D^)mi&(+4 zH_k%#nS1l>mAHUTI31hs%9gL>QM>D092-*ztU zLylKg{X{=q@7L?$+sB_b0PlzT4Te4kw*EXvSAafY=~_)R;^_{x@3wM!b|{BrEE8(W zUAPcPm}G}`ITaYtvsNkOsLPpXu*7!Jl2WyWO02qV4OEZ8)A-QC`9n+TW)k6#GH8h& z?JeABul$DptH}ZTWtFA=4uk#zPXj(W18K_BfLW`ueBb=Ef6LD6Y?CL}`G)9c;`6iK z+8Nd-5_G=X%pVA2i6)0yyl;=CcqktOjUmt;awyV+33q1uB0)!U-&@E#-5$>e^PcUx zi|**Km=B3wrIMQf7h`Rj_5|`YbOtokh#1LF+KCb=ZbW z$EL+`&TzAGXDZWJ94jG&F?5%-BBqhke#v2ZX{G<)<&g(p>8=-eY25SS z(u9{RHC|Kev9OIOrrn5rzQY-x_*4xYrTf$)7u1q4z?t{Y5;br8f!`MJ=U@P(p5JJu z-H(&8VgSXB4*E-+Vdk4)P-@%G0fCT?u!dXf^&~IWo5Y34RWctCQv&SrZq^b>4;E=Z zT`!ZtU~YA0@o=YDW@L=DZ8rUqJ`bmJpQO4~A(&67^4`-mwBo*mC~&WS!PULT;A67d zGr{|HWBnD7Muz%+Qtt%dGiUeyh0{#0-LhWz zp`Y->FG%SL=0ijhK>pLTet`It<`2&_qy6|WHfMu)jX>K08*G+PPO8*^T>79Lg`AaG zSEf08f}|Fy2KbI$D4msmJkr6Wg><+!D3Yo4@u?zoHnq4Fq9q(i(qpVJBkwIvv#O)0?BY>sUnS5m-k=&KS=#SB2QOi{UUCwH7I{G_-&f*0_Q>yFI*K8-h$P z_d15J=R;(SQ5-tsr&fQaulipmhF2!=+m!x2aeTVd{j;R{2m(;(}N;_qi9`7Y$sC5%moa}ZxA0_0>n1hpxV~z@eAJbw?xYh5> z!@bK+q+T29PaCN{;9WM#B@I(80_`>G!a48K32%b>`Pe&`6svy}FqCG`gg zfYKkXH6yeGY5)ci$Ia)HR<8|n(Yo8~@mavm6xu&*RN;)!qkz z-z%m>vLE}~mLEC`cZe-Wd7>KBMxi@pBME$R5bETj+`E}q0zG;9cFO3%H@&{}3Dq0= zH8n>6h}FD~e4$%&+gLI@KgT;mbv(2a)mtb0VW~>o+%&N~Sz04whPY8yw28jAq-ben z6xnEFbKG<{-|n5+M(T^H#pE4p&lI@Y-gFRXZhg6|XuN1Rccj#T>i9^^@8JFY5sp6~ zK6d~vRJgm;On9&|+vLn}ITk=i$S_J;dReMmXPI;PYUP){77l%0UHJW?*U2_Q4;ivZ zu-qj0YRLEkB<6d0s*Vz@#q|m}UL@_b?C%>1&+l>e(=^$i#qmcF0LvdQHp8=2O!vt! zCkMk}I64qBGvEh9Zt3sB$oe*6l<@2>##R>ObcZ}SU_ zfTS*wjy*C{X5u1VvSr&UsCF70#zshzwm+R67S8d=PqwC!MhH4r+*P)Rj*0|c+F0;5 zo9}sZHgT|Q=UI-o`wa;I{nd%1y@LN968o<2rX@EtH3a8gF~U2 zE^!&u+qPg#80Dj05~Pro6#HU1@obb_&chI*+UC*_aCErwLtiLcLg+~pHaJE|`a7b2 zHFBpk-Jdzi(UdT^%=zbM-F}#0FTquWeEC2#0w3rtc9u&@0ECkM!|M6IKQh$B^A)k=ZzF*;`PW5`{PUj?Y#8 zFoGJ1>~GTPO7B{xJ?$$S_+=NpiAb|eK;lA&SH;9?NKV15Z{=XhRx}*Pl zNbkx2{$4YAj!T)C$#~YALRq$e@eSHyrw~6R4*f$ZuUWATj!=_rj0munMKDKfJzyuZ z)p9QFoRLO3%bgNpk=2FLHs0@PvM}lT!H=$Be@se0p62~yRC)mQo=guno6(69x)}?n zNRSN0wmh(qatuvNyE_pFyylJzAg1O zZ9$CkgoyTdxxVY1_(JdAG2iJ_GdKyZOR4kfkn(Rz_V)$w!2s2xO!VO~_lI);==oBhFN#}av;OKan+WmPq0Sh3FklJllEleuKHt>#f=0xVV zbuBEYhz2FM4Z|2{#Jbty=wDBycPHcj9EEOR9>{aM(Tp~r<&v`L%_wHE>_H$Sb%_iQ zgxZ~xl%S}EkRq!dVN9_OGIlsR6{L=i_m4&|fDZ|}-H=_^_of|(KLm^3CRL50i|cIk zuP}|@7og`w2>uw2o`8E#t0xaMqgkJqxRnqO*W66r&nEqDOsg3-nFy$bM3O6cEk`Jp zDb{J@L>|D5y5DKrcnm6_(=F25tQ=4TU#D}-?QZAlUYHcB6&sBV+K(A3$3LHd{e$SQ zAUtBcy4DQI2-tFf`9r64xy{^91J_VpogLU4M#<2jXmwy*It1moEf78|$qXYeo#_gj zImrR$hS{TZ7(=3EXMmBFAF1S&x>vNbW6^ zGGjK&_1z)R*9S*X!)Vauf~ij~aouhQuGyI%chGF8fi}1X-~_Ad=AJQIK;Te{AN;6M z`N^Y4ua;$xG_T9Me=I`xNZn75G5^Q{t0rZAocSZ%W}?d~kxXV5va%(a5=~k;vS_KT z#3UWLZJn6r;AoMzE*A>bp6^>hw>`-^f<4EUD@HHS1p&d%(PDNCvZ0-J(K{SD3`1YV z37^Wrm(_NFoHx#HZLAXjROy!wt^EQ&oQpdAF(qCn>O9DLT}%v!`qvp6DYMr_%OU(h z*)3LK0IQfS;pm>GNz-yhdEgWfh0Ma((Rx%RVavvNd z*Bb=XBEWjTvkUbL7{2n+pTqG9!~>R37n@1kCY*P?m8`oG98SGuW+ee<4+YQx+orZ% zQ0<)oUdbM;n`C~52`N(?=4QGBn{S3Y*!iVJNe6hw^cK6lufn}a3mQtf-&Cdk&ljRo zt*t*tUoidyalw^llokC=Ac>$K^&0fJY0>4#=wSq#GaJ;S#=5fV(kXBvLDa+NOpDxT zOV3Cga#OTXMH!?B=q5q$V%qL5jkzVXL{_I`YxFOcp!1pkKZoB6zypG-OU*EB$Yp<$ zjkY^sRs<@s;9K3H*Is~@2^}k0a%nUkKrIVh?wM?=421zED_j1+Z8H8Schb*}Gir-O(caF2-79PLeI0Zwt^)kZKZeE|l=ry2U2ld^^+>k$V(&?wmQXXq7Y?R_ zt2#=fU3r6)3dE31AglVCHg`5cMZ8J!;iMByXa+x$nU~K93m;FYJfOyEUuv&YS!*|1 zfHt+#zqf{}lQ7Onq5$G0hW@j3c?JZK<=N$CR3Tj7whp`Dh#cd7>@Rh76R+r83#Y9G z5_p&_jO~ueF5II$Fkv6_6L^PEDvxhK#panP=36X5SYAP699j)I+jCdNypbaLj-T~Y zr-&NLSdGqy;)Q>Jj`t8QM7+P&jDn%1O5Lek3=LU`aC+iK%QTwXvUOPOY@J(@Mo#~0Ro`%hilEKyeu%s-WpacZ1R0SwI&1-C|;V%(SD8DR0kUJds^R_ ze7c=75WMiM014TJp_Ky{%Z~PJ>J**SErDl{ZHS#cnrvz8l{vaDo_gOtahL`@VLw~{3lRHUQhpY_PhbEfKe^fr)d!}H`DWnJQZd^M z_(9Jx7P{2$X4563;)i582xqLNIjps9YY3=GDF{fLq~~*XpG)8X4L;W3HYoQk5@SeU z8HpbUS*ww)`GkkBJbp@oiOe@GR;1uu4)K1cyrD|DN6od;=%1s>3B&_QP8XX|gcql! zG+$3mkyv(*nnMnhcrh`!A+wNlv&T;v6}8IlwsgldE?E{j33oFnQ`enwce-V51ZSe~ z5Go`y?fW!Hk@KR#UEA*$(bP{U(h$#I#8`h8|or0tK zNWGo*F=qIwBlQGjH~#;2X5n)%6|$aI)c|N}kZ0J+HiNCBOBlZC&lkO6uuf1lPCHPm zBPG`6;FHs>?CgDXy9lhPz>r|BSaVPFdlHhu(hA{~wm)vO`m_w$y_hn5?B2Df{>ZFN znelya?+GSv0srq~@^0`7e|JBdG1nRy)8cGHZqa=^j5o!J9@YfqBVMwh&@ip$)ZO0f%j`Q`CJ=rojj-PQaYFi_84?~k(Q@ZY$YTtIYhD%ODNoEb2F=V zEy}-K5i}?HQ%m{TvDAB1y;x+_R{W>fJRg;zS7b;}8 zpz;JAlkisKj-Az##Au_%E{^S~udTf($0oQM6PQ5zo~Kw^qB?6pD&4i z4nnAd$mgADJKDLuqKoxGQV_tXud1mIDmUx;NTZJsk}rED>%Od=`5jI?PpArKK6hV! zmlf{-JRq?Sp*CVhWVb4u5*e?ev6wj1eI|plR#PJNRE#MDT%pXqrx6&+YBWJ+5pda4 z$Q#2*Fq9eJhex!}ZMj)Q6Wl-x=c6FBChc*fP0ACyrMeE%yMF7);c1|!EnWTu^L_+$ zMgGTI&Dc009T$|L5Hu&;vlv4f@<_6xbYu3( z$svRcZHf0ctug4GWkGxtBOd4i?SkA(8mDJbW({35ZYengIbpbE_I(orvIa6w}i z^0@P;A4BLnp8pdpdINAp?r%m%bVtc((3?{$ ztsnY<%F9qWK-wEtkt3dyvE10D1!iI{)17Zj3l?dM5+mSMt!~SjkIVh*67tJc%y*dg zPwxoUy5|AN1?LZ!0p1%V=g^iojtI;RjUehCY>p&$xt4;8!(v}WGpgigWRf~0JfP%Y zPIz-t2i2#y^G=t}cM@$7qa|r?(?Mo!sG}|GY-_^c@=tN@t$ybxm79OpqTKxtLd1-hgyTamaAOV6jn0q*39Lhz>35d;REEXI?*VYoCcJ0y`;@v{MNaGlx>!aMW?q9(1RKI-Qnj8ngIO+u^U) zx!*z`*sS=_X5$GOex{eHpmSf=D>^@X0YGa5t3-DDF*|K{Wv)F6A{OK=vV7X- zS3P^!-=~;Nm@onnsqOJl$kDuIZSn2sfbtvJBIW|*GApso8acL2tUz@3qWMa? zuR8UUh=A+Ojv^F2+nT&2q+`w=KNf zt_a2*G$KR&jSmjZ$*|q! zG{yUNv`?`A8ytQ&Ho*SfuV%c>>9CH8>(+GOLrxzo&RB+DgyEX$%h1Bnr8X1!U zKROecolIT4uO$gs@Qq6rN~E!LAQ8SLYV5r4N_@9;N6g^m2G1ADRR;RS0qv$hGZ`J6 zIDHzD?EQ^&FHLzHbL->409iLEZ>J%@DE2X>uo1HyaV=RFa>k{L@p0=}oA$_E`)W@| zc03b^OVj~D1s_|}`O!*dL<&`>U?(9g34=@xm+5*WAld=;!hK&{F`Jim?ex)xc`zLC z|7oA`Jo|_9UYF^)ft0+dQX)NDKh&>cr#;GVBknqKjk)Wu6Y8)pP>1-C<@bgyo9v6$ zgzsdn(IiqW2L;9BmeFF%u;Z9fC$rXkflo+jH1BFg#4XyJZP%X+#h|t56$>+3L@Rfl zjJ!jy+n+&|3cc-ZT`&-R&NH1~oO)DuGx0$?u^NM&FD9Gs6wPxM$8^6G`(lD`;kirY zV`tJ`&o>5|#V!QSvlA#eu}zl1Izl=|czXiM8g85(I-*wmFo4vK%`rO|Dtkpc?=r7T ziCyM?CpCZl^UNsc!=V3pdgh>cS|la@$tgWe=dx*ie#Foma4ZM(a&iOHkrLDQ-V!M~ zXs7;w+<7LC10g5%Ot&d-AltO#zGW6cE+>+4-`TK5X&;S1ouJK$a| z`=>k$RSPsv)jY+lCsNy%fBbd%w$sml-1jZRz~~q1{iCT8sK*0xU;q174{?(L&|cI8 z6?_hndFrbK;!7Q*{RSP2ywl1Igw;V+ytUVpI$kU*v-wKeX5`TDEw4+BoPL%D`MeE! zj)N+^<|qjxd%CzGRb?! zYCOr)fMBAhKi=v=zMQO#g3U{b-RfMo97IyE!}~!;pKJE0?Lu_!4Sj{-qI6Ad5h&A^ z2lbe)6pvY=*s@FJ#U8gNkW-ALPBid`+AdE!lL=epjl7@iy?8#Ea3w95l$_=hz7ASV z`ugLo9_;1BkvH?esEZ9@z$UEuyOL-#!Px9BvK5|RKE0Yi#gjEhUX+vZ{(s*Zv?9E zHPnyq-uj=+I4^DWb51%d|8H{A=YRlfeSY)AYv@gEo|=km4!XXs32+Lf*rJ`;j$x7( z+*1}xm$sp{V=bnW+zs0hz3dvQ>F=a)#D~zf;spdKhwx+}?>jTr?a2iA7h zfY&M)=jJYd;xU~kmr0HZ{AxdX^MlGKs@V;QCieH$sW?Y5W5GaY`7v7Z3CG4_+2 z&6FrJT$f4*gfv`n??RjQzNa4z$z^OrEAhkjkoukNIHTaBGCSrS|f@pI>jE$@mV$4X^JmpD_AW z!OekaVD8993bSos6Uy4}_|2N{5TgQ%GD$2Z2dU^E6iZ#~RT~_H>n-O=CxHFLiVq#n z=kr!DXerK;wDOiT;sj#2wEUORqWk5_8(0OsUB6noc)Sm$>TG-)EKnYoAFs&t6!ddR zIIkXlO%guBxe@H+y=GJ+wq%&nN|}=gZ3_l;?2(56%~1q&>XdxT5~dD)z&LGYPVBH; zVZ?EoMOaw$0%0g)P>c&o4EAe7W?LM<5t!W(v4htU)L)PT!v}i%Edx}QWaqY;`rwNF z7Iq(i+)(>)qZwWiLUaP@Xze!eXf3WYG(K!-ec5+M+f9OX!~Mk7*L9Z`N| zfVxPIJc<^boxco7!`LczCnsi;#BeM`76Qd>APwKrFXx~D*i!eS=jDg)BNe~KwC`cu zu=@UbGo;$~q!;gx^Hm6g_LvjIYaI+3D@Mx|Zo|7C&!M(GXo=&p+qZ{yyWCQHBwU$r zH@4hkhz8%CH*^%p%-;7a2UA@yCP<+(EWEwlI`pz{H>w=Xzh_p9I-X=lsg zz+qxpn*PY4awXk+LsFrq8aQ!flWu=d@S@p6Hygx1hE5>+VJwe#;6yU3I|nhLWO;^U zospZlEyuQ&pi<4^8WsTD6Q*W#lir7TQ`N`!i9_*8i0N#--ZRm~@w?eG|5&bzfp(!kuC#2re zW*ViztOkkHI2^DTWAR3mX9SGJV_h1JV~$m0%a4yCEU+uAzajg(xz;)0Dc#=W&tlUT zia+qjbFuv`EAx&8Z@77PxtTKbk;odb&>;wja2^Z#PSq!2XJf;tvs_2^YBENc{c*An z76*>sOt6W!T=qvvpXAhOnA_yq@nvs38O@gQVZVZ`5$H~6zB~Z*3zqwZ4E+h@ej>4V zc>d&xW+;b+<#H3GLy8`=6MAEs;fzQ6V~geqYyyvPaAwbx6-D0`66qgg(8<^B>}ja& zt!WDuymda_gWwC?1uNloJM;{+1qaekqx=)?^9~CLs4In(j)-|5+yVyEGd4{ReoeE0;*cVu0czoE= zG#=w~CGxpF)}fb~FG$mrnzqL4fB?A;W3$CWJ4hMsrkj{Ud*NEA`f!JWjfCBho6&kY zz~9lK$8=|$- zxF3f&r1i0VQ82-3Ui7IALOCUwFx-%4)-BvioRBKajnaxb;WZlj$;O@HJ0P@r-gm8W zSe>Un;qY-2??Qr_Z{H)V{Wo^qQ*Df}dOU!t`d_e{2Zs0(Nz24+>3t`d(MnEX$)3X@ zCSuuyLJlIhgHxeX5-Qj|0_$&T4^oz>c8flc6HuMWCgs+Y8Z5%ToQnAfDHMCX!vbxa zUY9YSAnA^lHHzM`$3Ol$)ujOpRX41Rv;$aGoKXq(MJ_b|$6s*@nk#~(I6yZ*di_MF z-gB<}`47l`Aj}h_SCsnpmhwA-SIEDI^HvY}B@xy-u}joeMyW(XtrZd{$x=uVUDy}f zkTBchD$z&!FEDoAR9HD7C921L}=H&5JV|+q{ z(}$j8rGFtnpwQE<kv4>k(HLmd`gtYa$zLvhlzovm~XlxRcRYfCIiwgu89|oDRLPSOyKe-(6eBmFFra^ zH#?LZi;+3oyE;AA9e;xN94^h^hmZasu1`L_Q|E?!E1BCM4Q(mAy;b7kHyy|l_1Y{&7Qt>8LnMq&|L~^40Q3{ z&JLUT5qN<^XUa2%++Ixf{vsGsJ$5uH9j*hqXOuSIofC%%IAKFKSR0>x#QWe<&3e^0 zpB=r|sFzI;4XbvApYR@N&+u!kcM7qciF<eX*+nIXksyw?Lda1*3p-G{W zL)7V4y3w#Tq z?zZ@00k>9>fpS}Iv?fueCE9+ed^HjMBlT+aE0p(P?e`@y3X#F)eU&9Gt`>_Bf}@EF>Nx3aI)a zZJJWC_K4)bkz&`%Pjc z4>uDC70;!u;RMvs^wynal8tx$VhH+H&L>!}MNz(|m2Fv~rv5VOciP6BSp>*r)8pc! zFJ_<=2!ypZoA^izy&=+*B{$PbCk z2WU?S@$fy(grh&{3aV}^b0}pz&>W=)NkqE{juLUO*B;s{kNe$nGw(6diU~p5?-pr! z@T6lDY#-Fd=#S#9wc6ubu3XM?VUz4*ltx5tTTd?R3L|!}K|g z()4O=X$H|AL4Abc(2cd&`y6|4_R5xf-KXm-=c%DOx)H;WOz&SthcmDjBsf3O2>Ww? z-XBF1WI1riRl&g=LEHSk4XHVnIr4ZIQHLWgySsQW7Hn#x$eVm=bd~8WmDN>b7n?jC zs|jht8I*(5CGz?(u?x5Me1`SzWsl(ZuwLb~ z)?hv&{CcaxH30X;0u53zQ07cTxKPGiu~V>GfU3hej^kEuFkV9DJRG>5I*@#UpjOUm z9*uWh80Wabu`|<3LhcIdp|weo-8{7L?#{^f+~N0dUE$~{uJ3kkpE)-y2ab`+=7P!Lx$-mHfzS zLi}Y@>}A5^L!$HTi>_y0-<=Q!F6(y_Bp>%8rCIW_y&Ki{9|1u1NjbK2Mk zHGHbGzO@QCY3zR=z`e#mz~1ryj}PEJHw)(z9?vz@ujP2w>|3d)YV2m#U^P1&ARFDP zi+C)fhGE83mVnYKog_vO)OMm^kxo|$Ih*cUgFze9!?5e<_+}r@XCvzv@|!*}njq0s z?(o3hA54Iwzi#d?-csLQrq(3>n=XMx>bpRGRXOXjy?1|ZR`E3`!$HIcq{~Q$r!^m7 zkjL@uFzCa$0MB<&z#(8Tk;fuoy|vMAE6>WxAB_xiIXHZ1S(dp6)_CKProv12ITxy+E zI{UVJ|Ca@V9jBo{#fHDnJG)hu)|07R=j%wWTvvSn&DpPW0UI~hFL6x}0S2)}(5BhU zv^S9RbuoQs>rmxa;g`8RpybSn|M;seQg%Pt?looUFK`?cL?R$E3D;0}QO z=v-Hw4in#ZY%_rX55~S?gA;fl!%34W*dNp?@Ut%yY`ltj1p|oxBUn%Y0l@e|2aHJE z1q~RCV9d9DThA7f9Y$`6Ei{-b>G`H7gX*CfC2pXBPBB=N8W68&gN!#wYGRkRVt7=M zGFxYpQ)WnSc_&xy>XkQXw{jBRyylAkb>T@h1xHf~Q!i_rqm`UpZke6|;ELd%kb~zkN!J5{6wJuOVLYSjS=ejpl zX5W=mItV?!rKhC8_dYI=s!2X8Tw(TF9si#v zE%V?H-Qo2r^&iByg7{sF{b680rxOHVt>0zEJzXe^{6@emI^zyoZjBEY=z>)wTOtxZ zXSrQ5!Vx2O;&Rv~5})5gIp@m=Jh7P>!b1V!C{s|?sxA29{LoQ-d<^B?jZhc0zcFoP zj6i;)2hjA?PigmVIT1hFiU|;Et|2%)^g-?MNzhg{5ruu%Q zRk_0;Mg4~L+xohGBB^i>lmhSwZ_iwPsM9FdQ=_*h9!EK^oIZTTC(KgkMxRnhPoGw0 zabI=RC#JRaa zr(YbU9!M$tbfnZv%({}})0bmU3Sz^*ntYz;j5!T8mb z{%-1JMJwoTV4z~|ew{SUSBX$z%QKfnPnjJOC;@#R)#HLOusuG~A)G7cJ0T)>yiyh1p>~v*Ckg1 zo%O^wwLs0fE?6bhq&VxZXS8?^{5dVo-|{_^d^a$l#oe!Frdfyh;OKRPwcU}_Bpe*F z9O1e$h0_IU2rx6GAx(#RbK+lswKq1 z#Mc!aYFd11n!$S4_kg#3H<22(V88FCT|YD6Cu%gX)Q=Q9OIH2)#DsB#?kN#z5Nqkq2!NM}FB}$R3HB237 z^3a&|HZIT*w;v}J@m2JN zPOPGD9art{ATwmQj~*dnuB@(v z_XaTILFQ%{Y3p>|O|*V+c%_X&qOb$%)SaFGcTD(l^>CZm9TA_Q`Tg?hIi7#XbGaKB zAo}iCGtb42S~3|$Qs2_qLowkeQhS&CYpclCHcGhNwHy%UtW!W8c(KPFhY_M;y0Ak5 zcErsdGE$u4wb)BlIds}xv^CoIP5NcVL9I!@)U>ZX$O~_O)JCUmr?XtXR*|2QDF#Pg zKyBt)n4eSXmrQ0&o9oyYVqGsZGoD^2_op6&WG#wq^$pJ~-N}mB5dAa|cCK!ARyoKm z=5n4KI&+NbKx13e;(mr_sx?-L>8!n6O%@YhH6?2ih@#}}kE2(TarQx8TE3Se(ope! zTy8$4&!tBBr^@QrNOKvsqRQp(W&~NKOD$>d9MIr&e9V>Zq9uv$2A%fE(I5b2N*EXo zb{OomH?+{!sTtBo(8T0LYgykYbwc@(lf%(T@pE?|$lvfAK@XK~Yy%T&sV{+MD0G8~sb@5I*e}ZeO z)ABFlC7)RASAhg@A`uj*zd0FKv)kN|Uth_=-VBJbgRs&YNTLT&YiytF%TxY7>%He{ z=hqBGHDtxt)xXV*f`xX<92_`cSAiJsd}d&#lVgM&Spn?cAPP4f!ICwylxW7#MG@IP zG~JBnHeaBA4AZfRO;WVg;apIFS`RyWV+?`5d@m!-r|{r~CBIPX=Y{L_=|`XM%8j3` zaL?CE&>!JM=BhKvjfo%m|AA1K#Wkoy?1JrqXPO8B8}i@X5qTIEQ0xo<>{o%&zKA;) zHmxiO56VS}N3hMx0iAu7xv328{urfjx9#oFMQ>-jo#WuZ<|Yg0u}=|`qCX2eU42F% zN2r(1#|a5CFS{|bBSHD*S9YPI7^r-goR^?gC=P#gFfUVjABOnA+b8F=w%Lt+%qK$w zjNJixt4I9;YYefP?ZCk_ZAu#k#1hU9^fOwsaR;R>(9HX&suJgnVra|fhr}Er$-dn_ z5(8+DJKRe~zkK(NdB7fh-Js%u%j(1p^QcA8C57Vy z-eABL-}TKOhOP8MRR9NUx>ZW)TCw5jrW=!4RO{G57O0=WOiAouH9f{cnlUi4n)C`R z=?-T_>yS#u0mMrtwlP!3z1UxC?3P;WX;cH}nMzX@F%fs#qjaCoXteSb!PL(?#UN`S z0j@Ym)zBaxxM0tP>$+%d%r1}Pf_YcN*IU7NWn-RBdm|rbnL{7lP1sRT2JY|7KudYg z#}WdeMqSfptU{c_Nm_6jiXm;Mi#eSH*>?g9YeloLpMg>eke!Ze z*$Aj7`1!88T#czjnq{M5p?K6jD&ly{+Efc9sO`~XxgKT*Zb~lJ8mM(w+%-*7wG2=e z1P8Q>)PFc+enN@tq?&9-_5S~Lhw+12e-xd1;)o#^t*=UydM!rXqo4)I(!>6uVAzS7 zNdg;2XwT~}Y;V8cuv7aOPTD)u*>=`crb~VJ<&vxZMCg5j?L~83>!8*MuicX>`RdVz zo@eINOI@Pc_&34i>vJ@wk__l#Z>1gz6!Ca&9O^cauU1Rj#K(TQkim ztB{12u4H?}18F^;fvWLNk8E`f zh9yO1={TTMd^uVN2U(c5orxN6v0anX{NI#?m*~Cm@)Pue%*pS1?eF;ia+=`|zjx;w z-qk#NYP{y{T;f%JV75`X&F@rYqHGY0)OPSWD`RN8>ZWQ78yxv3^Lnh61HaK z!CKUfrCOL|z@a4LbZ9-q(mAWKUXvyr_Y7KjDbF!@)9xQoS7o`O-!1NQM%{VX3TNj( zL2;*QxG%VIGN230G3^L`T^Yl1OnY$^ofI3(sryUY=4ardvV=eWqQ6rdtOi9`G%1%`~VOy^v)}dN0V|( zKzhz&AY=6zPOAmWcVk6o_5veTxU5oP>ruYIVa6@;(->=gO!HYgDL|=|0vv z`gqc!mjpja=h2Q>`B5371Y6i0ACnIPog6w6v&4uMcj!$#86~#iP8h?h`3;9p3iO=5 z^DD$8{?oEAz`6caqY6f>5Ci@J-1T+JJwel?I3>4`uNTH~=inSN^vuC5ZpGBPC4i~B zh?sLAp&>4O(B*sff7pAo9@V*JLGbze7gzfgkeTG}TT-c1`gG1_NWv>(#flYkv}#+NNwapopd)upTKw3w&*`4ptusGX zh+4fhtwhb=X09Iyb?3dOg9-D^|JD9GF1kPkdR<?U$PT*I+-k6*0hUx_^HXQPlJrw zDP883i2C6`{y;M`fQ(?I<3EuM*&e?(S_>gr!UTeqFTlV@?!@o)i<3L+cZb`}lqJ0; zy;xGqV6(MB$S+inu_gmfRPkV(&T4k9nwy2CVrSm8l=({8TRE-Ptd_DkLZqX$ANs?g z6ZX_8xxag7e`c{8AwU&=DW4#U4?)M5UZkSv;+od~O9l4=7N~W31)>TplONkz5&CRB zm$f<9>*qe!aq-4%TGMhnI(Wok$#8jO_D0%}kTrhauAS3G)W)}zYtPA}D zua7E(@=4!q6ZAuQe&7?27te3~o$~S}W|ggcT12_It)KLpvz4}!Fi2qQYQsKH z^Q_MrTfyEWbZ6L$rtxt#Z&0U!p!>~k;7-^a-;H5t_c&KqgtJPPIvFj!R7qwq&bzx> zAOC*|k3!1aa*1E>5X563W%#BYeRYsFG0futb@`Rhfu6*-`j}rHq$^k;|MlfZ3GN5c z?ca?$AT5y=rtl`rdv(iQzt#_VbQUEnTj<-|1HuV2*&(kxD!{o)lh>SU< zZy`BTcTemN>tWr)Qs*3~4gZUi^n;}S9EEws%73XQRR9C+D(?`pf;RrW;MV-ne(bH+ zwcNwP4zE%hY)iX)0b5RM^xEpRgf7+F@8_=R8K=Pt^K_Hr{i(ej@N8Q;;z6(?>x*7M zi-~6nGbjx($^Kn%|EF+a~npq=&Xi|rW&yO+;6D44rQk& zhu9v^{75`A@hb=BrzPH!dY))ghQF=~#(M=mrAqta0gsd^AN$zM_oZzdx$Mb) zINGz6wU~_J=ncjE6BdbN zGw0xn&a|;ra+n1^6PwT)l=9U@e>HVRlGEID?H(4>%yGGgi3#hW-Jw5p~D^UYtSu_gu;C=|N-( zpQX9@XcPMu6&OvP<+^K~#T}Jlj&)%U1(`4irs-J2frif;T6cQ(MU!icwu)}*>P)PS zR5hBcr+H<}$DL4*UK)t@+JT8OC!ery!}hlR&aAmWMHDFE!)ZgnexQPCn4!$~wLNn- zRCUnZrK4c2Pm@VL;)E4b=eeGM@sY?zg5mRHqOP?>b+^o6m}$`6=6aCld%NZsn@z_g zYbr+{NA~v#%Xja`D~2$ubf-AQt4l+W@V{1B3uC+m5EUTXmThW?N$9P`}#_in#8wLipAJOAxV@}d1i@?_hS%lPvY2Jx@^b+re zN>ig*(u^wkZg=LnUTHm3z0f}&7dSuAYja3uBA)wo zojMP4VNR0$X2jb>KW6JwtV@%Jc$gkdnb%qkHi0JHvw1p(Sk}gOPYT=4v~=X}S#xaL zb7e27^<3@-MGuO{!&R*5T3`Q!bhWp@FS+Cn_=t(KV2tjAqL#dj_dt9~sHr#yKI)otr^Ivk?T zV$qM2+5J*`n_UnRpHAK9E()baRT!=%-#yfS74-b)PxVLTM-Ovr?$sf0Pg1zS1nS;i zKPn8+Vg~xCTlRJIZoJjd5P~VYr$)(GT_~AJ&JI%;UcVOTV^0W%i?Fd=)M9JmtgYRy z(U;EcDc9brG8XrbZF{Y%;~hUY$!M4vF@sy9_0Vw|QGKi56fk(`1AV_3OHee}hh7DU zz|hg)p3Vk;4|y88<3nj6q-2-f3sAlW%5^DCSNN0S;wpq=0RZY3QS%A38Q|qF{we;y z(gvlJq~P~Sl5+gx3x5CGxX~3VY{&KG<8YjpdtvQ^9d?i=tB~v;cgxOtK-pr4$l3zb z#f<6Z);QC=PIEh(p;K>gs`*+S>+wB(yxiEd%7|1e9BHP2M>3P7v!S4l$owI>qj2LD zM*b7R1Wcp(yJ-9YCAS@7Xz&0KemKs|P-`+o3%coc4+dl(P(9+Xnn%2>49?oNtJSb> zyB4(M{xY^=mF4^vIqY`k@l1%@sx0bjj)s&Dh2IddHeSfuZ@DVpBK;}|-a#RH*vVz#~GsnOp>gpzropdJ{i zuXnQsnJKBwkXhH?XuEuzDxPo8xzL^w@v-lFgra3NVZ99o{gE$i-XclWi3JDe1xZl5 zg1^(Ls<445)we*D0`3oF@%wvr$YB||wtJ?ykLa`kb&^;vD)r^ypws3#bacNUs-Uz^lBFu~SO+kG+8#?GWWW>1re3}wBf*k$y%h2Is6FZt=NNEF(_ zqns-Gx;!046lwW8+b%=GIg5)}%}=_PDEYX>8MZo>0^*={dPX{4lf#aDGL~s0pM$|N zBPPv`qB6NHFJ@AvG(u|Ef_v!bh-)Qn;SM?FC~}x2=Dx=*7E4LGX#;=W@4oW`jjn0K zPh={xi2shI3Yb8u;@^)F&<_%7-dP#lEUDvToj>(~Ay|28@mgcw3k}ZZNy;bN_;AN1 z3z%`ySvN!en06-XgWip6o^Tu~gu0ka6>`*?VgyWi5|;Bh{{{z@OZ?Ft|L|u|!~z5N z*6HDw8hsV?jb`P7K1#4Zkd90k&a-XN5-CN9{l;+|g?^K5rgF5POusjk=ixeVl2w~r zM3i#mM)v1JqHtB+j}s*BLVac$)}a|!*`)KO z5JIWH*WP1qQ{e?{AjADZaK$00KM-NoJ&Uzd&B0G%-8yd6LwcS`Z8y~q@{)_?$%Y8K zk|PV@G#}*kMiM0Qm}z&H!8F4<1MP^Lv!l+@ok7d$$>DOz=f_cYKW;zYaMfB%q%uEe z2~`ojm*qgWwe9~LVm>^hBf>I#D3N)|4o*A$xlh@6@JU#@H%;W%^>moH_p5&?d}X%CYuAt zeU|YPjuOw}engB`2Uij1`g**y*}N6Z z8{wk9*-hCK9oA%eL(8kiw5|5D-cXSeEzP&ht(1#4x54!zX~Goe8$Uc>_n(c@eI&O~*O8(vBo7 z!`Bx1xpwZJ(A8Gq3AC1P8cP3^d^J$Z9Vo#?{UZq2C{r$X2GdU4C_yBH$OPOhhhH zfv+BuU(xeM$A@fUfd9&)pb*21Xw39=XUC?)R>n5)&XB>vF{7_EaCR!6{5R0J%}+k`vPIz&x`@AjX(QYL zB6M%ii&mXK84J_3n2CnVkTqdehhA$o+0Z<@-7-(sdbrM=K{|nvlcRCZo$R9aZg?8! zHEgus>4q6k_X1GZ|IHt37P0t|3bvh)L_h{MkQMt7l$9_Hu*S{@@^!X$}ir+Oa z0KT}WKtHv&EZ_l+ihm(}0zllk;fs?{Kj#@odw zf}!2+F%7d(OX<%B3GL7cIH?Cra$YeK+^Ov`wa+bs9IR5KwF~^>UcLA|VeJnt3s{JU z^s+z2Wm8b;<^U~!RDS=0D&;Tkkl)G)@Q`ikK}jpR+kT`+JlxB9P1y;F*CT{wiwt@g zLoxK2>95z=3|k(op|tEDiB2-F?ez9>U!R_|kt#P})XGUsyzxwE=rzq;%;}>ZH)UF5 zTbDcKSu&Ju#hwlc%GLO#+XZzfL&pRDfyyoT`5n_I3E2D?(Bnldhq#t<&^p$PPGihi zhg>{7(br)m6+8HT9U|!WHhfR(MlAQ+!(9P+UH|0?1qWAl>$D%s* znl6nuC)#%h9Jy1WoAspwH3&1%>&m14nM_5GzUwttz2r~>)xX$W$XS3Q_A80X4uA!y zZ#Ehc=#cVI3^SiChGQ6&+np_zK}X5r6&44YzqJEmEY7?RMmNWlL3d&(T+Bk#nVwJ6 z?zz5R^MWg=$2NJ8B)uD&yell|QIQG!8QmDB;1tF1FPY-E7aU@W65HGf7X^!`KjT;18 zQ+AoK)oNu*Z_I72H9wir->FCCFnGw%236+LXsg&`pimLnDQh@1|8#9h_(UUgUVnXX zN^k{%%9r3#{3POD9vB>k=NgacQ`>Q+9EJG(zmaclYPc+DWB_v(xB#wj}3l(pc4p z;)pypG_4b@I!z*1cWW}@%^toqVYs})%tykZHa)7}QOAc);+hL3%8;9R=~7h5?E2>q zYH@xg4D{0i%3ZF`JA;KtkA(IJmW!^yC+eX<+iy9n0uoWM@)is=0Qb$QYJRZ0X^)sL zvv}6)a_yO9N$q8-s}0#*RgDK|2Ae?>MCegzeVi=B884Uq%RD0O0W4bn!$$=Q-z5?? zKZ0Z=?DO6sj87`h1l|c(L~KYha+bZg0ZM)T=_-f7scYG{E*O=4Ksw8-#^FHO|M(yO z<3AuaisCDeax=0E_uN;6`fZd4`Zg5s3JR4k3(7#V`|p+H0H1;$oQOkgHm)<$zTXpx z>3Qd9`}M4aPsb}JG9a$NA9T~~P-^7&YMbF1Cmj)&^#&0hso~MZ?MZ{eIv_G*cXE1cL-(cA$Hvv5r|nCVyCCWBYBaSf%z{dlX8@_te_vCo z`Qf?UaL){LJTuNCC^qWz+ITGmp<;5?bASfZmvQqa{;!15-_>%jVR*FO3uMrEP=(cZ zOU-d|y=iwEC#(|%`Uzqw=fQe!j%V$Cb*T`8FbWy|v{InO@10yFIJDC86{0CX`DUd> zzQb5Jb$ceojj2Uer{zhiXk>2~uap)wkVmS}kF+%L*Lw{=d-W!k)pychD^X`VS)H7m zKG${ofHll*Hs*#Zc&*cBYkBtqRW!S=&h>x$ZfpW#QJ7qDleu8h=T1;?E~G_(K6G;+ z86N5aTQW5&lD-IONSBCCF!|x~&FA4Bs5KC1S25ffpils_qoDz43|3@X#XrU4ixYCW zF~OcVB;~z}3SF-$7k?71>{?79KEB08FGCJU*oDVwZ&x&)_P&bM+iZ$xf_5JL3k-_r z^25HT34XM)y_0r!yCG#BLIJ~;`7Z76pu)d5vRK6nlno2X*d2?t^Zd}6={;p42FF3K z<0(!9-^&eJtNZoE*_eUbho5Z3yV!YS-!~A92r^JLO(%jn%5qPEdMMZBvo=!{@qeJE zU9Y5dwI|}c1iM27s@>nb*Iuigri=M*soRM(@Mg#QU@3L|^=5##xKqC+t>%oj98S;U z#y&jl&rzTq(tb3+YwlXqHuK}!^~J-QP4G}}2#wA`q1Jxv-;d1m&3Eab1$h)PN@psV zvWoS!S7;^S2f3zhEPJhAD%%&_N|Fj6+U@+5RQRzG*X7T^O8|o&E?aWxOnN_Y+pC)n zNy^*Dm3oT;1$2OJkAG}r^@;{|vYaHwAT~mqYjXO_$tPtd*=@_JLriYNHp`I7^jAej<86zJW`kC4xM`UlDGSA5d)nXJ-}~33FZk+s>>no&Zen z#Wx?tWA1G5g~Q7@XNxo5!lS*!KpUdXXhe9c4HtLM)QB6OqV*)-o!dQXyPGVx`j&}j zdeCImI>i|Az~AsIUhNUdb~?rD^Tn!lh;g-hFW!fTKFJFB>@xJQddzRt(_kcCzrRPz z(U8SkzH{*xSFC|WzSwnyFeKWb2|CZ6(NMnpZ4dtW6I{;9XSb4r`fHVSc~A}w5Wx*@(9S$n$W)y2#o1cszU z>4cdz>qkql&2uUnz9c{?4$;qY6};AUH>Wi`qJn|7$WokTi$wkc=ZB=rPm-tXNf`iD zzr5rwH2vKrcaa8n@Q{D5cxAiA!;J zkg%J##?2Rwzh8f!zb%sz3m~`NODMWjxtc!TkPu!+fud_KOEmWF<#kkEf<_ueC<;*| zb%T+RX!)xhL|Wu8U2zxw`0_FLo&54oN*naf_Ahr-Ajgx2o@+4AdlHDX;~Cd@IUYl{ z4(WF$_MGv8jyh`8F$_}YTe;g`Mk`~Hvyk(&AP*|OI%oC%&Kplht&~4&eUls?58wGU zFB^7Y&5~vxg@N^P>veR!x;pm@qo`%}9g#` z-C#iD4QY_h)7pvJg+edRj(FmRcSG(;!}#;{t@UUJ{3O2$x+A&xZ1A}nv_dpLuD;qQ zq8B##Z}t2t(1PIA4+=^7Qv|3T%&djfm3IOY60D`t63l@mQ7%#x8eoXpm+Wj z>kGUB;md2l6)CVcW$5Lt&>Mx?%4Pjdg3T0NV*96>j@L#b`#8mpQ9S4z^<$(v6F!W| z&1f*+@AiY}MC_pCWx?I4(<5hgY&X9(<-a}%Bfcl=`8N8 ze}mq0<=Uc=H`s_;hR%NR&C}UOGrFEohh*<7jJMTa7oqJ!EFMMUzvp#Aw&JjvH3syu zDdKp;si#AwK0l;}GRAsBJ+$XrW+v7rhi>dN>jS0>36XJ=$_E{#K3O!_z+xrBm`vxr zbmfob(V=N!_icU_qOT(s&=IaAF&IrRMx8zmwY_$ddquFyMAr8SRyH;*$X33DDBsV5 zLKrz?N2zhmUJvgQNjGc86TY+CJF^I{tw&Bn9YxT$!6(cn13}LnmT}(+e{qX zg851`zoGj=1S5ims!Xr&ohsLw+b z(Df8NhBR(UiSlieP5pG~|Bm9WHwQDsfx%;)+$OCS(VUyZ<(l&Y*)LFucI7N^vJ}c0 z{Ov6e{Ldfcg#WOj=%Q?*{@%BzK+x1bf|;Kb77>bn-19b};T+6@1*NkbhznVrHyQQM zpR#!ls)D=39l?6nvJXUUbpBB#*v*Ypx;3;m>S#%*XZFHSZ?~wbQ&TJ1E=(U_$HW~!A!qbk} z_J(6t!^d_QYUH@iZZbO?+iOBx#kHPIqzjKPS`gnk9nFP=ra>V}u6f-h5N+Ev#PBw@ zpTQ!uKYxO_9#P4H0EJyAGY2qQ9MB+@Mg#B zr&A%2R*Y-Xl-sbI9WvbnXE+5m^c-9QUYLMtMSM!NT6>7gvq*uTTqP_Y8I1laH_l(yK@P%b? z?csJG3dA5qA^NN7MNt zFcPUPQiBdN!C6z@HrGp;J%`OG(=>cHH)>O*Tdz%B)#-5~Z#R`EOfA=kLU*)xceuWu zFj_0Fw~N%_uhcd}^PM!dZnC~OZS6**(QI{YA{_ECj3ffV4^dTP3&T&Hw2VoisN=PN z`9FV9W}T~DT>YPJt-@0l0T{4#O4kO;#JOEJC`qSCb1J_pS@7Xhe|-~N;k?bR019o+ z{Z=8 zO{mZxEcQdMx7BA>y9?%^S$F1AZ)3aJch0hcT3{6sSaF`qEQUvNe0^2?GUErekS)jo z`-|>`?=pK({s4VcM8z7y-~l$zoX(igr z=IO{hZRlQnW=1u(9k^#I)i!kF6l@!Vrfnk4`Ft0TV zWcT+*Rd4Z>*Pl+U0PCE((WEVCi?h0Hj}({Eps%@bS~gm&sq7jfvfoxUs=Z6e zO7qrtOvQ@F16}VRDz2)kV_6o7mwaC+D34iO7eqH8gkD|o=r_N;;!DyYh<8Gwcg1P= z>9VJ5%SnHl&2&w3`df&5?1@2U8#O(zQ895$M?A~A_&&(%ls3}0&hmViNZAN8q*m)h zyTh<0^}SuDZ0Bv(%k7gq^!W`E4)@bgt`FR#Rvv6V!oWSD3;#9tzgKWxL%&nv@wvtA z{S#Fz|W8~b@$Uw4DWsH;0cO2OpS z9ep@!=Qiv2<^;@o3XUFK8y;pG@&`{+iAcP4iv0io61}DZ@=lQA2|wyEkiNFuNy1X% z^1YXAaiPB(K#THhI&zxdX2IY6C{HL<+$wM1bp;BA0$aWUe-Jt&UyF$5N4!_?j3gJ$ zL{g&^PrM-VyD$(pA>$YRpbDSHdVs9F7wZOF>tdt6zia7 z&y5XZk;g4|@CQ~R#@0+>gzLJW-7=Z8f7Rz`{r7bq_^U4cZe04Ltz4Qk% z0tyeG6e6~|tuJxe$a4m=s5lIxv#qddwPzHLsd~>guMWxrjps@rlo3(1AAvcvup?#a zYb8&?@gaNKDHGAak8#&X(K1T1qn~}+HgMDxb8-KBC1DV`H5(W1cuI44{OcFgEq>m< zUV?9v_wz!4x}QHlM;#oS4n_IR&p^qfCniJ$|;ov;ah$?p&x7v72dAlW6JLFv< zJ-RXO98V%G8cB{3`D8q4Yx9&Q$ugK&8a5Y@H2Hrv=_U?r6sy;y5^)8YW#A&m$+ssFq`wH9Zgf&vRRF_ z;*(|7R{5l+60_rUFj0s_WJ>1LnKtou#y{-qCsX$cU1WBamT&i$YIxO%E)c&zs8AHH zP=6pn6bK5gG+1$H^PNtNwJe%!#Bp*Ms&zYKd^3nwk+Wx$ZPx9Gcrx~-dCnY!@dO;| z&^}aUTpo-3nh@K|Xi5qLd4+v;tHV&qYb@poeUKKvjWu1tA)GIek0yikL*O9sS7>@%qqp}|Gs>M`w7__^;w6N{~OX6Lizhz16Rdsnzj%$2IO_Z87 zwMUG#?HurUoUT``T1Q=QXE#@sxm^o}*{X>hPHx^D>7z4ic4T6`+V|{6egf&)FOALGTmCJ=-i2J4vb@8t<0IP zoTaV|H{@&oS_mMtBWGT3A31y#DlAby1fDza`5+_a zlx4MKYBZz6ye+j`^iW>u>X4hpoI9L)aeL;GShk{@ybyGzzSO{2z1gZAn>@}H&GqkC z?&1$GFjJU&>{|J2rwb}+{4F~_fJJyed<3kGg3#X+z>pT*G+t+&y1C?*qa@Qhq0o?^ zt|I04xgbK@%Z3q)(}fkW8*743iA8(AU(}g|x42DPXf;|AyIHjs9mC*!YDm`e!2T3P zHC!ikUT^X(U-#{s9l=7VqJLq7k-Gdfe$5ZsUQvtoVXDu(#Q+z@fSidc6X4vu@e3(m zYP27jV_u3ok@&eP%7rE#eju5L)b#&EJa_vpgIwPGS7@~tIrp9QR*27{`uR$=&t?$V zptmQyt)}0B0{QN5ik1Ntt>~rclaT_ESXgVY(rw(?Wz!(?$AY`n(i zir~{d2hi_?EcX7s!8Zf!K@qrDi#_QAm2~sBkHZBVIuVzbj|t~5)!b%!m`fg$5EOS9 zxzV!L?$$LcThw`Fds?dlDEk=Kh%lZ9i!2Afx+?QdmOE?4QyNRt2vqMdjLFbi&-1y? zCq0AhY>VELC0kcmq5R;9bdTk9w*zy_9r(|yo&V=LYo?$us_eMh&R`vXI6+x@S450% zP~5=O;%)JR8yL?57t*QHy!ZwNyd01OTl_VWn77ZPazs7)?9v(QQ&9n0$}P1v4k1tB zIz;^j;aZ+|TSV%g9jL=D)gCl`_&U?-pFe5je(VAV)xG|?0m!zFQR0C_&MlXsX!}dMk+AS-9;}NLI`xc}LuR`;bs)qV!;lPZPu+)%16mc% zLkF+S?}N{;Z1qC^{O{9-rh@!;GV7<#G?nxAf?U-D_%^p(L4usRz65g|d9=P0)reyV zLiVsJ^yEB4JEQcFnybT>aYRb*b1B!|!|02#JYzX`$vURm5xGgCn0x5nY^^bOnWbBO zPS1~RdNCA4w%5yut&{rZE$sQ3W4(P;ciSB@MI_Qcg=H$us8qX;0QFi8H-a;O=>uG&c>b**AtsLMJl;W2uIHd;v znzaz_XBe*Z)#1Dshy9AO2;_yb=p`IWWV-%DS#T=|6773RZ1$}=uh0#(yB>f6?$e!Z zm-V!|BW2li5Sx?0lEYw$6ZH;7oZE6&5wkGlAFv#D|M)y9Y#p=PThTWX;?*;@t!JzevNg7d-e$?I`uX7l#l-DN9#%?rmNH zaKI+;{~&zO?|)%(^6)K8RXQPDPG4$G$- z4}E=Cw&8~_cUp>nKV8Hv=pXC6uvtRM@ z!g^jMhEj-#4Uk>2->Z*wcwGIid`vE?~jFpcS~z1DXPX2?nX-ciHlx>+Am(n{;~C(W$Z(9Vnf7t;0+#`(<(u0N*O_f=^>q*PS%I^(_8L&?h@#jdcBgXR||Uj5;R71GT5x!hx3j<9%zV$4%e~1-OVTng&e{q?`o==$Wj|0 z)YhCA^xGrV+ARqzs6kFvzEx-Q^X79n5d~3z2-m)R#p$ck0J)@oPlG$m68ro6BA8G) zg)i}*PU*fJ??@-D=Q<7p>tQezI}1Zb^y6I}Z%N90I?}PTj0gTQQ<(Ny@w|B;8q#Li zul1*ca5Jhe@D8>S>~?3(_BGla-K;j)%ZDrrm`#Pq;6of4X(9hEFPX=4S^1MEGL^sh z<@vk;2>LX$Dw< z_@_^bWAW3x1!f{*!gQ1J7P}!0N~Z*#S#C$O!J*dL_j(cKdQ<9X92pv?s3yA}Et473 zn+>+6d+wg4RhDl%?!feqQ1D^ZYq((sbdkJ!-M>fnfF6F@>C@ygV3C_Iz9LpU?~6SA zzmkmww30>$?vL^iaR#)j>vzPZD$%=bZ=kQO?gX0Tk9#6MX>a1WJV_{}wxN|B0n;t* zfh{_;LKACo!-i|=u$i=)tHpVvh>PV|qSuFXb)3lZ?FO%2USAQ*wT?yiJ=CZYsC3bd z3RUbvol=W?!|iwl^+G48!hTyPDBuA>i+_vIMdf;Vp%OJeveXK@ZH}K?gemrW2V!)V zrcgDhta>j^NF*~#!=-woLmvho)w@}q1KrwQhG~(__Up^@0dC1EpPvOxgMu1gU!sU< zre+&TtS3}0mYVbIu-?VSBub-@mbr}tjq+E}`W0GM*P}t(lhTAeE~0*K%cpuf>NZkQ zug&NgmC}vLDxkWJmATQ9c=~Y9R4SgHBnk3_{Q8o)0xYn;z5zY=`)jrN(SnFYvt3tr z8xxm&VW90&y9vW;rfqPlRL*h%5@JK;tiq=?m$91bA$ThZ@>2Fy!n`lLd|zCQKW&tt zrkj1$vPo*{9 z#N0$X8yv&0t)sEggGT;3CHacjqbU5Gx{gjVl7q!xBa`BuideL%y_!^TKRo7VmVT0} zjq?Z9QJUARQ`D;K*1o1($?G0l&tPAOiZaGgF7a(q@c){hHCqC)bFT@8rT9o3j zCvrTp=4UJr{k<{fYpyaI6UWeDtR+!5p*aKFIrmj^k;^S84BYN($N7+IVvu3Z?ATe` zwC47H6fBn~Z+SR*4rl&_^YhECfpwz*sBc$uL1A0rzq?tBnzDVs7C^^CXk}Y?Y6|`J zvvvEZFqK8VrW1!j?4W)ruas&cND){}(+ zcJ+dHWNIrH9apO&7i=+T#1o_uR1=rgu`f{XTm{ZA_~ij`Nq~nBfeZlp2X3iJ6LTkH zT^KFT)d`36IX>)lqMnPzN}V_5%>tTg#%<*wWkb$}@$>y-Dz>7O*a&6~bKP+R{BO<9 zV#O~v>-rp~A#4{#dgE6D_kmmfjT#$V*yTIP`1xlqq#}ZImA-FF#R^m)VdWi!@j~wk_RdSg9u*`0THipx3cf)vK(e5$#2daZ z&DeDoG5aB(FQ#pp3zmsgJAtmW5xvPyT1I&=hY8xegt63o!MW5qb`4&JkwEp)ymQ*)?aeav@n%|^ zTE4hCYG%Er7_9+!#)Iwx`ppea-sdq852YMW=%TIqHM;lekOJfT+hU7;LV7)+jxbl( z2zhKcIB5PZg<^De*Uo4O57&cPr%S2&-iVH7zK{7J$`*scTJx4&*JSo#SIb(iM-9gI zUef6vHc&;r%M{aj?;9KiP^%w@TK4k(M}_{s#rX~qp?rS_=K1zeBf849T&D zVpszC-Y#oC;M){*BE2s znDFN3MJqP*E}_)|X#;8W!rraRBfNQ>odTy*k0u>)@2`_Rh8=+gU2oglb^BaznAw&( zy0hZvNW;a8AIGnYj?snoTa^;QLP(>3iyQGLB{FP>#|0TRh12Pv&-XP|7kQYlyBoF? zZ_a5{vk`IK_V}#GkvHH+`}1f86Fu`&?>Jdb>*91k)S*4wQL~o!IT1dF zS`(PF^UBnyH2Hb^Ho1T+u`D3NDfro=(p!%SQq%W~GnXC>_OK_7M%S>;;ZQX4MZUne zz^OOzoZVxCi8bG=-f*=^IGQk$1<|9E+R(@RraPD=QnDkN(aDg>=Iso?>L2a$Vh<4i zLm3}friEcv>^MqZdo^S5`hype0ztTr2zXmHEZ|j`0YKaZ@fYf#-bjY5zOih5EAud} z6yhDg`Tf0P_YR5Bm71-lYZ1CGx%Nq^iKpSI?MM27)DrCjvLtV*QIBDcU%KCJ@Br!C>$ki(OWacDv!zt0crP@$QGc3_7WS-f z_r!*jxsEbwpX8CAaq6NuH#3}?YP;M$3yyi**6eH_bbFgg_ss3^R(NK*%}IL&2jrU5 z@`5=oLut#=K{uaF22GDM8#2Z`3t52|;dygIqT8qV1E5*)9WstCPTSk%{wXo?GeK{? zyWTx(1uR5NOHXYeBx=C*{Z+2_N!o?6(i-o}dJp=S(Lu609v~*xwhR}~9D>@w|M>aB z5Q8ivjAIPv@h-&a2a855^Z#3d~(r1ko4`V^;X?lwETlUlF3H8iW~6uOtt$ zjeg5s;A(-=LjYKi z)7S${gV-+CKGENH_a`P)$nJbNfT}@{JuD7OQ`4v9ggxZvXcf2&R)ely{B|+Kq{Y<6 zi_Fam!Z3LCWhA=+9Y}t?T?kl#Cwc+5A<{*^+a{i0n(0xGwv7Wh*dD|7X*|Oahu06cH_v3WNgmlfPXF@~@ z*s(h?Y>I>m=h3cCs0YDepr0;9tIa22{QZe+pQEj(oswF+N%s$t9fz1>M7)%5s{^pA1Ks|M)?E&WE0Vj-ee7J%XJRkg3oB!29|lUBqTB2z8{pC^^u^}fT%PZrqR=eR3r#@olZ*37JVLje zPIHDWGTv;-{!Hf^`CythQpHZR&kO_sm)A{Z5ZnJ+o)yrFMHa6L*7?p5Yks)cb~)|m zw8`Ur3OW;s_|&0R{NaeA+Lcq9pd=~Z0+rN%$uSjY#`^@V0xecu{h&zF`|gw?4w{e8 zwY+|$mtK8E%4Fs@Y3Lv^&R5}LfX!_oi1QV(=_&le=LJ0tSxWMa{G=|1T`8PvY?r16 zWXf>(cthKe17hIVAVzo49ra5?ohKHmG}w6?V+0E!ivESm20HY7b3&RQ>RRt@qxj6N zPSm)!AGeLZ(U{fZB)irZ!jm7(zlY!?($^8Y=GVw9a0bM&V@r$5dN6e7UB)MV=T5r! zk0~etW*o#!E*)M!ca(XT8vmye(En)!^twe9uxKR;4F~4)2S`l=8>Di(yl^TsKYrZ^ z$aFRvm>UAO7mRLr?HfQ->3*w>e1ck>{_11i8(FkEIFs`}ial09m>$zC#_43WMwN(#IXf3q%duOT3<1W9H(!sfIp6Y_Q$2QcW#Xpzf!#^_O_ztH z>a*?jbDQsCX^S?G14(Ig*;>0bPNs228;jUms3O@4706uk=d-ECDau)y*t5pB$$gon zJ0=WrDRN+uY%98K{byOI2sgr|2=og#+RI2o3)UNyUs>(f4>^# z6Wf~UEKZ+%Tk@tMsb(YxZ8FF7l%6LWJlL4saA?Ju>PSfd&26L(-q@WTc?uai)-d<+ z3FpiYq24Oy`ynDdI@!$tOxEKoo`O^Sd)>Z(R#IWpi-+0AA&wH0$zeR(Rex6 zIp|%}{%o_QVbPPL^$O3zto)@qeT9cGy}tg@K7~Gc`B+QYU9TBpHH)Vi#vAR%9j)6I zUUg~wD%0SF4pAg=J&su}S5{V|J}F3T)V%d?um*THtl>2%f)fWF%vMU<84*g6^^$KZSKP1FmNQ1oU&k1p5(<{$|NG@mT*1LcTwfMe&v!B#6xK<;1@F!XJI*s+F;0QvoYqmU##?BT za$oA}_S;Vk1P+~lwJrr$?<$qAT6-fLUOW=;LGXVN9r`>=_3o-p60{?F8_nUJZEf2- z5xGx_aTlLqqa)W6(~&5hJ9C;ILCe<^!}9dhkXJ%#?u72y+>NHQrVgDM7e{u!Nf)0I zVlSz{U$h#%O|f{J0%c|~Izm^-AU6Qa4~V9N&2h0)qRo)!w-!%r~CDZ(SQCia`z zPFl?7Qe2x`BqJTk-c}@!vu<7wxYKqlJ#JsJvPI{2xbifoxf-anMXG{exqTPYmV$~5+ znTGJh7?rZjw^{izTmd0^dHGnD`NYTw(R~Akl-Y~@c+-&@=MnGpw%&g3^X~k}iNhm# zvInB9TU@-X&mo(DU$f~JCY~*FJ=W;G=hEPX-fW}U+1qmNcItAi;nM$P38CdcChRux zzHCbV%Pge|#0$C?_{GuvE=#HT(Q|hPT$Cr^N)$1J35U>&oSHVwAw;(;S8BQD(oQZ# zEUH<4+Ng?N@tci;<$eNv$Kun+Z-u-U;n^7Xmw~%b4H2dbCyKzXKvmoIqFu~%`wdM5 z2l9Hg!cw)aqz%tG;j2JB>Pj0X^=hedGDNda7v5R)I8KjRjLa@1nhLwiM{Dzle7tt}l(KLvJII zsx9V+&A54Lb6o@5WG!cFCxSc~Q&VSB>5ld6{DUEI5yVytEfKX9xha`2p|d&@7-gDY zBomr*a-X!0804B7_UAI46y~=U01GYR=0>chW}{RS7ceD)f;oxnvX|qX9Cv}68YvDLqnX|bM9Tz#N1I^_fPNel^n^>Eo zyIIu9UU$>B7a7*2+QB3~X4C_^S7v#_74gomC1U}tK(u&O9INjnVsQs3v2j@LF{vLC zo!Po!?rnOcIM9^D*+FmO5v9)gL%RhX2v#V)2F6n~)zduJT(N0Qy&k^qE*ACivO6Fd zb>=DES#OmSpHZG%9y$+1tdP?A4R5mk?i$Qhzb$^$}cN-BeeZM z@%Jykg+6~DQR;u7eBNS36?yj0AE@xWOe6aPzQbFf5e#{hobN&ohf~_|=se$YuwW(7 z-4aF-!e872ZDpd?lhTz3D~m z_}va`vCw~DOLc|Opx)7#PP#o$s<}NdFA)N)ueP!nq5bO>B51`L(Tg&~@ZB4kTd@+EfhKyO z?v$gqAhhD_Q&^Gt;EKFLn&HN13ps|tM^N_Zzj#M*hg14}T zk?2sy(ucW(DZ{fCq2Vl44QJcT!X;aqt+)oqAHjR7E}OmCux9Ymo-QU}BHi!N^$%q{UiaedtF#1HGByH?QtJWA9qE@QW01Q!pBoc*l^tYtr0{%loH!Y42Qgb8 zN8_2?tFhQ34^PM0jM(*YjjiEA07FA+qaJ0?p_x@rPAx1W2v+Ot`ir1D8Gd(PX$A_U z6Od}*`HM94> zxts70}L$$u_3^|tn+s0SuV7GmNu#P$cNwKkJeb%mg} zCPvd#6F;9|(E0&J|4C~qZ0sSOK^&zl7WG!OS$$D&ac$ygj(ZDcwwv&^IpawK|FuN9 zHxJopaH*lDp=dXC7y^JaM&JG-`iANye`$Dr{Q#iV*I$CkhBo)lKBxK>3oP2X#M{Iwx?exB4!R(JSpfS8_DYJ%lM0*l`vO>b6&mZnCSbaa za2QT%+i7Q=9!%VtR?WKNS;Z0maceK9{@t7N1>`FtpPyH3=1&HoS{w03%k;RhD~Il& z&SImk+Z`J{wzrWJ8AgY9uv8f@Cj@;o&hUlZZm(MBCa37`oXE`;j>*fF!qUfDLk$ld zE+EePPhN&%y}9S!1>w_Pf*829pZygX?qIJZxPO99|EFHGFPRw&mzhU}ZrqoT9Y$I; z)v2~;x@2R%6NmoL-#`)R_^@+VM@WZm&Zg~?#GZ0tT3_{-p$s94P-JjBOU=VR;bcsS z)%}tB7*<1b#X=gFVz6 zPplQOA7x%DL{>s=Bd8fx0y83YCL65gOK!gzHtpR}47Hq^Pn5O{wXuXgZ5qvmjO}D; z3A4f%y3Y2*arZa{gZf5-XU_>53XN`cB%&YPv#87X)qr~DB?9$JxsdkF6!05BM42n_ zk7fbshwGt!V%Skb8}1m|9`HMQBsW5}4<}4!1%pzk`EVo%1_cE=~#gz^twJTmUQ@l2Ro(goyDp)ugajOx;tfaq1sUb!hd@OcvK z+r<|I=tmd2{PPDswP1?)&4evWhCh43ffDy=_D^(1uB_j(;0<6&=L__r;{7KEJU|f! zQ!|By*Kdst9iw#R=#Th(F7NtYZ8{At%pRn}=)5139<8`_bGMqMEyy-($y&S760zX0 zpV?g}B6iwXAQ7ft{jtydmfS{-k=LDUA^t~E4&Tp?V5fxL@G;^;TRdHg)`eLP`4wz$( zIr^rg_`l8TOU6TvsM{TYUm-R3wZ;N1eH5|TN)D@e$Zdn+dOsF?u@Q}zoHL@RM!?G* zXDJySTBrN?Toa8sW6$?%auYO0`$adM5mLBJ%`HVuqMlBiYNtqi<yY90~5^Oc~BY7HhM5p4Xs^}TodEXG+yomlgC6o1;tgCX>jlJgT z>Ao#BjP}^{2gzn(HZnz9aU8V~5A*R{Q3AZyb+cB_j>vVNmSb!iSD0BBG_+2XjQz1V zs4*~^jJIEL5!*veux@VPJ113c7lM}%#CXm*kdOEQYo2X;8JLdHWEwnm=!?&2AHNh~ zzfJs~;37nRx`Yk^!2RYFV22vtS*|9di1WjtLiVeHJ3sYi%J>lNyQ@yExvMTM?jS36 zKk@{aqoVZZjL%8nn)1|{T~8!(Iy817lhSogZ?!659NkXAQ=#pJ&Ic-^euj)Q5-&dC zw~~Z*7kD`m3fOt@@H=`U1=6y4%526pj@~Bb+Ur(1B30ajGUM20swO(`C*7k-@GHu! zD>lpem4i+i2`!EKl@q1A4Q#5yFjKM7+_gqW%aXEJ^pqQ-RuLUQZ5Xa12>OD^Pk--R0!Max)1O<}b=+uYQjA4^;v0yx22r2m#!=U7s2Za?y=3ry)5~NGPdeHpGfz`WRSadYZuiUgh7a)kv9t6nU)PslJ|BV;u2JwvA%jAT&{5;V4PG@GrK3`c7 zD|r(oRYk_$biq;dY8w|QHCO{k0|>WX#aK*yL~_z;;KK@R-!A!9A(#czz6}@ z%fmC|_;|w8tNqmP)@z(uKmp|==22+vBYo8mFxgri^|)5^ zy1bY5TBI8L%t(@0eHyp1I@^)t%3v_PX#+*R5lXv@!$i9=x2s|Hbhoe{uRc!~$QPf# z%C`yoZt-F|!8#3CK#dx)J4a#u%i1CE*;#BkagMRYOl6|6@l~xAN`vu_Nc)kIfS|p2H{dlM1)*^k2HJu@AXkWj=i*dqStsQ8n!ofv%TZ{;-nd+{49}7nLVtz$#CZM7+FaA zVU6BlQO+H&LyaT4^OZ2J-T82JDS6()0%?au2<%;zB!>m- z%>U-6`%L{ahLO%toa_JjyKm+ zV@S~l$Y$h?%|ASgMHcwG2QzNdZ0fGqm~$0J zi^#6#3xTayR;0XdolXHs_f~V`q)?lU77V?rU~f)@#+gIK$3{xj-!c`K()sr3&L56) zJrv{%4cfZC`;uaz zL=|M>J==Ov94{pL{+`F+y10QY)?dDqCpf)QV31be?@!4zhQ5x_xK1=r^X{a!3p=YI zj&4m5Y)9zvF=T^wEbMtFWIA}((>Qs!XpH39NKTFeqLU>@ z&Kf&Dsx7Cf9^PWsL=!rDv%4Kb;Mkb$>_rJX;bt08b>fwAw7cofIX5k--)M@!&Ng-9 zR`q!GyqC3|s|tive+R{Ta!5$`zka_|!&74Axr+|6KqVPGNlB@l{b!p2;ScgMA)9Gu z9-bY)v!QXZN#62H-N7vO=z0$bM838h(7}_kzUNN(Re!Xi<^$r;h#gv*DqNbaXU1N& z9M3t{#R}y~iP_$;`bJ;Fu!qdh8#}RI8Q8lZ;1W@9ce7wm34^)|z3;@EMyhJ4Y8z?d zmvw!%wE*A6rZq0S_aA>OF{dK+^g{qrySCAE^fWI*;yzl+Ags_cKLd5 z@4(Foz`j{=V2w?iU2c@QG4a(#!>v)hwa~+8n)N|vI*<_=)qEk0_*J4nm;cR4Y_2L? z8;X5RiM!Kp-!@ulxj+>Di${XZ?o-0{{tj6schOkH1+NOejp5 z+GCvE1YF)74mj-T8bV?)32DXaLoHB6almkOcU&!r&JU?hCjAF$nT|?(L&B z5vm+E-3y`;`@TNz>N}pP#nV-?UG5E?4zZRM2#G`6M0b}$>w4bSmaSmBJbCNEQ0R_? z0ffF7kE(7D%LbX+P^47$N}?ybsmc$Oj>ORq4WAOkVz~wUTvdA|x}gg_BUdDI&n_3t zc%}8JnrLb2p(G}sLHxSA595xJr^ z@<^JIg47UoeY+7w=(^t6-VVp3AS)U^Ul3Ga9a-4-&WQ7p^6F!hX!MlD7Yg9J%1jyL z6=~-?+Vt=@pd#IhX?4*{{l_{#7!;AB}A<0p&941QzAn`SgoE8 zS+kNFn6OJLIOn#crW?u1WXei>+8-F+-X(^l-ANNao7Pu-eh`x;83!SFYvR*p$fzfx zG3!}S`Pv$65~aTPV7BEYn+EGk15d z&wcJ5LI8+7NNeLXd&+c4nQC%4@iFw~_ARf%nsaeZ`VxNRtxhWRiEI#Y6R{JHc&V~9 zsQJWOZ2XpdB1SQ$NsF;WaMC1TnqhxfBRT{Dp`NfE`E{HaaRV9 zj#K#_IdA#S1nuF&;g$%hLVa%-R-{`pDKINt0U(7SXfj zt4i(I)wUts z9VtwC82-kIu7(N9A~X6kY?RH$bxbA$)!)Ogrdy`NgJAiC%5cJ>j2&s)pa|tm9~7a_ zwd|&*L1h{KOx;FO;)foU0vf{68Ezh4{Z64#m1AHG(lyq{346U&RzcsNR)#UX;8yCG zo)gu0o584(GUve$Nfrcx|!BHQ+3VEMrzVI&G2aGdMnNiq`UAjc=AyP zhA+pc{5VVJ1`w_F3jG}D{DvGRvk4ehy&Z#1m2O2yCqgA{>oQ5ejM#l0pB)GDp*|$% zHT$ILE}`@Zsp>c8> zHl+j@&q75#7G_Tm=xOy-lj_W=8-ejxy^IOVSv%x+{n>uoNnV{7 z-_k!IX*xGdk(2uxo`q)VTvlLw13dUSC|HVxJv=b7h<=#5djW@@ zwurLjC*f7vF80C8*q&B*+zk4Wr4w>Wjzj{I^)PvNb)i18wu||ZhkdU5l!cP-=i2;d zTdw2`dRS@6u6$b#6r;%Vm7b@P=YE7&o08jXFttWn<4{ciZj;lI?xzsmUvISWC=Hlt z>;^qGISJ4<(&x57&eoJRw)JU+bbBTbO+P8#8xJ+wUr!Gb4vmPmV=mCLJNNiGeD<(L z6dfz_y5C=;nJ>?TJ-i#Y_Vln$R@Gyouj&Z|a!h)`o7?Vj5OZq9J;Y0Qug&6`q|DW< z)3&CwFijS#W3OF{qXo&3tz$~9bSTT;5{vn|?~o&FIqgjk+PyS~q1BMK{oHMSZlidy zT;Gb7niqKaDht@KRunC{T18LSD(NK7?RxbYj3`aUeYe%?2419OIKO2(mO$2xgE<^G z_C3~FPj+fxN`@dW6PW)+d-FOK2eVH1U~EjUtE^Hzk}+tqUNQo1G1AgO&8JCQ&s$!@ z1OG6DZ@LA%eC@^SZ>1LYL6QN(!<6`1XFngV1Ew;ogtN6*t;(BM;SLjWm(=j9*Nz5bdvp{ zD7XWPR(*E?cn@k$`B zFufL~y?yu|9LQ&q6aD<>=z0eIjJIc>yg~Y)9UmB~J)qq7d^-rCUbM*_hC3MH96cfZ z3n%&<%ykn-2Av$X&&}(HpEurykHMR!g%UIy`Ph9?XAF4xF%gxap0QEB@|M}A2;&}p zWH+-a6=pS3;!j=vq!V)Q*wKT&w@XEcrdfi~-HZ>@$+llfRD02ND4DLUXPRr06FzDu zq&{M)WW;OOI$~!0y$FjwOz(?1fpEZozG?*Ryjt`M_8O7Y*M|lB5PIZ*!7$aH%R$so z)s_ND>0Ey>**)ucf8)}ytNH#uBV$yR`}0RX!#h8GK|4917mtth3>@p5J4+|Dws5q0 zUxkDOZMLF=l<$!%=+YFAQgSh9;aJ6Yx9#pct<`Ecy_n$*ZVL0TrX7WXVsT==6=95) zEmP~w;gB~IDX-N>V-sQ%@{5!tieW}CbVPTM6WE2(lFv|p(Ed|S4=%b_w>e|xdHAe>0oR z+Z=(9VuzhhFzB<|a8K-fIwYse()>)-_aWPI!1fmbLEsT*cxM!xU*}5bcWX6<9(0@+ zY@*@16)TEIR4>*tk)OKU%sbk7$B3A#Lp3%M$1>UM&O5HI8EP!H+qR^QsqmejE3 zbj7ZKMck5;6w={fv@bXqtIBDxX6GC~YbN#T6h^6GHznw0M#!!064Y-?t_-<#wkd=5 z1Nt}krJkJ=R6h0N-FyN&$JLYT;DG?o=K5v&H6M^0jO<4=YZU?m?$&0&lHjqSl508krh)MW6v`{WDH(_suEkJMUC)t#fwA+To(mXZwBM8B*TFI#nx)kvc7- z#SW*-&B15|Qpl+da?xm{BdS^rB(kl|>rK1X+5}tHAFY?rUB6>j7lWph*BXDNI{t?Y z!-?%GGA;lys7R=FOOXAK3rT^d6DfvP^y`Kbb`22zxqRg_)qU&65;okF@9$d`LFZf=Ub-v86a%X`30oVBahpaO1}tI%8icDlLUUZ zB91-q1TEVgzqy-g7Fl`q@Ej??+YpKuXQ9 z=MA)F294xLLP4hwp~^dCh8l8hJ|ow&r|`0+Z!P`_5)bVj;!tmz+CG<4u$Hxfa(KBxBH6F#|(M@J!iluuW`H(qPa$CP$T-jpyrV zCnr&7!Q2?$qi62!@k_kz6O}oVrCpt^B`iU1R^lUUA_Lbhy2PX8xzFkIclU{|o#X#H zQBz`moUie+?0RC5H9z8!VmsVJaym(n3Wpcwa7>79lh_X^U<80ZntR%XY9zIx*nBQ7M%qpy8**+ zwUs>I&4xNRSm|cV7-{Y_a#bp5RJ|J0Q$Zb!4VXLf>JXOm5A%amQqw=3#j7m2FwA?$ z8R{_oOwi;#rhizgh+qK<^QP73-+zO*L}=3HYTlUme%!!t%T)Uo-l8|-g=xdEm8xBL z4w;#pP6ukKO~z@rUG)djgz2uEQ!(9ly%yg;s)|^v;vyOA@{Beo)~z_`QJ9?jd0$nY z@*)9k_aVzOzAoud=YHLaeJ&;{e)x#W4+VMw>(B!Sm4H4a)BLADOgGIjdI$M}=DUmU zHBqm24sCj`S;=Y1dF*~Ll6&S_o|8Q(F+z4(SK^k_7IuA|=p3^cJ67kF<0hkwhTiwx zV97Tudm|2(RhysdX=P$~gSv&i3WL6GqMpxm$Z5Eghy`uyjL?%1WuC_+e2%}JF=B?` zDf%m^_e04+Ua_0MJEQfx5?f7}i&7_x(q6_MEg1a68-^zBWN49NDe7n|kua^%T!dVW z9Zn9`fURncWp$XIsAMW8bHIdx{YTsP`b+jQ^t$Du00RY%AX$WI+`+C2HVZ zT!Wl|%U7Yh(b@R=^Pe@aF|OCI0|h>Jy?=C9Uq(!v_5Sl&)TE+_@_sovW#ko>e@S2c z1U!?FL?b2u*2(7vCa3+i4j`I#(>w!TGEQRgVdk3WYF(O zc64ZRr;QU*$#O5TGlwPH`$JPw%)ATzc~Hb#)Rv!!RI;J*Sy4WGPi>GW z?i8Z{^17C*PJfg_9kEvkDxsF5Z&>a?5DAiyPZV_&X1MUBw{wegctB$L-@JQhDI?+w zvz<{EB+*uwXhpAmY?FGfUEQ55jydjUd{S-820PesaZRgLNx9x`2vfFR8%A|H@YpEq z@L9LnX@-k_x5Ck|DezP4>SrR{}g3RUHBk; zit|H_+t6l^vEqZe?O^3W1py# zA-`3rXirbXNb;NBVs08EBO$2PWW`iF`*Dw09<_8|ic_pFe8CeSh=Kf(T)vd_}&ZIZmg z1k_(&=e*#17v5$?jrVm+f~o=GkP-7}yZ3sB9iK&R?Wn*64o5))_v)C^Jh90Z^Xdj1MJ)Ci_*ZG9GPVW3GiMfpW<`mjViG66xnCa z`x)6stbGmT1Kg666lv0zuA6V;8G!>7qd$4+La8JlQ43@@eXeb(`MV+Hl4=8SGMbFL zjxbxW^+7h;tHWm0+IyWiImIe>=o;gBUrqT+!==XafK_X?u5SdBMYT3Fy7MJZR4ZV~ z$({Cw*%b-4w?loALQm+a5KBKKs2m_#DH3m}_xD}M;)}HoFegpp0acqdcX4%3iPp@g zu!>XDxC673dZ{ocXQ3qS>-CIZEot$vU8Wm-vQef6v8Sl9H5nQse7t2jV}T1(UuiqN ztBDUceRhH`;uJaOZ!<69%V}e51?coU1Fp(ob`c zu+?XCF@N`-mKs-hVKs@_xU%yDu1)o_cC$8*c}{i*OjccbKut4$%4Y z=M&e?r|0sGJU;U!fW(EAtgk-(!gBmhmv>AUM0x8kghbC3JwLTNpPW$@O3>knpP$g* zIJFSK%lSmF-*aIld!-|I$K`flbf!v>as$h%Lc!0DIPsE3>Yc9HJH&Ck7Mq<>wW|c= z#>W(M-Hj)HWxp0vD8lUSsu~;fkuGLr(+Pb1s^UMg;;)WJ{=}CPdA5}D6M0WbFDUKH zEqR7}Pm!UV0y$ltmC&E&-+kPu%0RaEr^evmTG@Wty)pKt>{Lp z-_{~%TCYt!s=}wrkm&D&J#J&IQ@0*q3Y{J56GrAuFOjVV)*4lmy)x3-N^2)XM9r5H z`>NJH*#}jN(Xhz!?9sET`UGEvf9N@`enYDW-~~_U^?S71Y^>_^{3zDjeIZPG4SOw( z<`%(P=6IN#RHon27mYr#Z*RzIx4#Qn_f(1OUM<2}U44lO@nL?NC8J|Hw`Y?|o7-ey zk-oywYk%Gsj6NrZ7lfLB{sm9^2@yYIVpmq`O8zO zyE?6RVY9!SI?e60P979#NY(;7s*5e`L{^DKT{s-VX(y|PM3i=igWg>RZhj=7C;_Ic zIMUOpGG+DrM~v(W^|JQsh4bRS3r2Yp2a}tDVX#rFJ+0&9fHHR?UsK81=HPlgb6`lZ zP#p?}-s>C>!P03C3EOP2X@#puKHYO1c79@d?zXi(h;$E|X#w_1L3)efJlX&y*Z5aV zNpg=jeHID(i~H_RX|mawO~Qv)&8yUn9#|Q;=&qdX@hM6^_lSM6bB8RV%$-ET>M zzux*Kt3)|vJbPWINJ-EXp)zT9$hCkclwnB+AZbq3S|*XmT@i`=xwY}R4~K4W3t z=~07VacXomy(z{~OS<|^o~VdLS|d#HKn}4>YU6`3{f>qk=3DKkBF znBL2r>sQuS;ahpCc>h&90`urm$BM#``wKUu1o*lirEBkP2SYD{#a!)>wSm=}ZT%rM zXYW!QW^EH&--Aw>6H(|c$jNlT45b=P_;If_BU-UvQKA#wvr=B4GR8dS{Q62(PL1t$ z>Q!G+`!xj~OoLr`t}@G~Wq>REs%E^U+B{3mxE`7>cKxLy@=6u>@(>o@#~-DSJW(SG z6Ywu253nh(WC5?=BL{XcU=!$7omf`AHVL^YjDMeEbt8y*OKLgdsK#;00kY6S)r82s zyV=ZmB9l)^bu_RK+r?>bHjnmfv7BkixSBd!D6`#sZ-*hLaLJc<)f*oa)F+tpT_0%! zsJREy3?DFvdf)s;o|NHU5Lvzk^=bh47KVN*OgwvqWAc=zopw)k6FSl|0pADqwq0p} z`(n{u@3+thWv_U=8}63wq93@lH|(rQ&4YszTWQjx zLj8c0vR?HgE9s`EUvP4}awf6w9GIfk_i2Cb29piVdCcCyTp^Bhd4aD-T?0s??u+*oO$O;(fhSW7%-HMrcOIw{n zaF!J-Njz=aZRIc)g-%y&jl0l;ZoTKb2DaQd`{iuAeaUDM8meENtl#j*9Isca_@=2` zZK?bVPYUTB9|OjF_}YH?ioRnA+@VJ2Gc& z7{n2d?fs;E97oB1P^Z=lHW;k?cu20MvZ6-EmRK7eyseCj4jHw6PgnUK-dMtoNUoAO z|HiW<&S!gaiP!ywXE+CW#e4qlJxo{4P=a|{0_d!mXbIASqZXoak$4YXaHdGQm5$^Y&QRt;-)9=3tdggQr$Vndg;Vn*}EgU*}4{Vzgg+#BMH_ zkD`t*UjQVWT$+i!m-&2qw!ifBq5w?k_@cM(o!|a=6J*JRTaUPyRja0|hX?$mPYAOw z6G?B+1=xb`Qe2qT`S#k}4IGcgn7BP(sO_5Pb)Cv~u8vkPCm|lwl-ezsmwHd1HC@a!Edap>05?rjK)vr4JiwQqGQDZ^^`55>#h|El=^N!a!b#o>Uc!TxCqV#b)kHdn0%DRUho|=gRF9cS}iwe2&Q9 zxV2nYh7-{gI;w_O7QQHoy&xKyo5PUmtU6xRt%>W1pnMUx zmoYx0~q5znWdnv0ff>+muo4K`xnmB#_ zMyV9z>Bn}Wo9+k9>yD*Eo)RA^P^@^a5_tB5PpK7;H@x|I%fj+f#qjUibvaJ{>%Trd zMJdm{2-M_JvSJ)lUfXi@Ae}2A;By%I1idE1FmE!6@&nIE$T4|u`aLg?_%i+CIhB_U zpkGFN-!%WwfZ+SmQIn0)9!>F{ zz*MD8)>@9 z>GEXI!MDRJhk%HFymxOE6lG_Q6v*a+6Xqq{#yEe41+lqbuBx`PSV9Z9Ev*8YX1>a07_^h!F`$;Uc zDVD1wX2)s{+Tn8I4NQ-A|H2S&abmx68GTh9_44@pFz4l#(TKvfpNFU9hrHwk`RjJ+ z0`#&|m-p}OmLYB;eyQy%!>GMA7^j&U;wj^2&PrmthsCi%hm}*4K55d(fsXV`f312e zniTOxn>aRg#*!;os;Sqd>xjtrP>|V2t<8S@Bi9PL9|Yxiq$x zYN(|4tdCwDe_yhzZ`o4$5ub1-^vstExwkpf6((%r^)<9KMCF^`)uG3$F&;Gc`{AnD zm(uRCJy=7_+Nv;7wn@B#Y?%NC-6PmxwRIGlrZre7 zE5&Xv_Qb4@&KttSKTy;^|6eKeot;GyAoZ`K;sWM{h>N%H(eQkd(yQaKr>%Db?F96@ zWctiz8!jD-@0(KW?|rA@4wt6d!kH~hjvyp@7H+!<3?PTmzN#Gfgd@M!#*6cuz0i)uXmWszW)5~D!7sgFq5nHs; z&hdxpuCHw5Nh8X0ONMXR$ipw6@DenF^|JYI^OAeOfcyIkA34x(xeDzs$$6de)OdM1 zq*Kmr)s^M2wcwhhIf|&1k5*L8lsZatA&b!K}v>u3oTn5yi>GV^Rgik~peZ-!nxhNgufn-YogST~_3p_-xm)Cj2&TlPo zb+X*q3fWMWr>RLpVOi8qYQ&IDI!kptVQR9rky&Fj$AR_u`UGamDqcSpIMnt7;HzAIimC)ABP(?ZTk?ENSEA|x3zH^)2yMb)H+`6d0Utr8 zmJ>*;$iZWIe&kzyQ(^eUF`>B4))11K(Z&O7yXC6mih43n{L3D$5?H`j{&X>o{z%Xl z@vQx{L6BUdy7}dga@4onz37h;MMc~V4K2L>3NAyLKiCOBMI#y$Fj^J zRZW3?vd@EkAh3!WM_hQ?A3&#eP&7X_z4KEd=6d}Uv}_!NAiL0ntxPo zZS&{cN7IF$-cMKugSiYmAAMb#r+lTP>+PRSnmu>MxIPB-+j%)xA_t1-_6pR^pgT~} za1t?JxHnB!UI`O^|F zguYY_<--W`GSlnRUA;@_!-HerJdycV?j&BO$)<|@0BAfE>fn9ebLjbdTg=x}+zU0Q z_<{qu6-ewBcPSB6@dY5M{IfQi&3!rg`KSQoMZj=`+cp?oEnR9!w^|K>Zc8TD~hxIL{M8HmBG-3rZ(MDrdbQChJ59-U$`73aFi*~ zS2{;HI`BFhDP-5@4{^9?t9;Lvs0?4PT?Y!TZP^>FuexqFYgv6BHex~6PBUVWkt8_5VSrJ* zb=R7=ji=C}jM&BPNISI_ftXC?0O z6OF&LUY4AO~r){b#rh8&*pl9KEiCt`|irh^mKuJ6>!ZqrcQhEE6Ut6~dJ|GB5@qvHs>@vX!)5gUcN z)7_aeYKeTGjnw^iSD z@sK(O$F=H&G_M|l(V;V5dv0~Owv)A~Ny9ENozxRw8Ffboj^%1Ijjl5LS!lpC-rY#c znC|ROzqL$P{qUalp+WMn$fJ6Djb~_Rk>^)H835#)RjLY)C3d9~JKCVr6e@>$yQ zUF|sJTx!gsbRfhhr;#3eB-2{3ew=m(l^Dmx)mmEah2BC5{h>Cr`)#owCd&ohB#c|8 z^OKQ{maQdEYf6yB`RSSwEVN?uHd8y2IjX%grVZi z@<&mU0Qh`hyB92hPWPgK2}Je9*_GFv@7Rj4Az+BbbOs(|pAGGft%UO?zL=;&Pw(v7lVHMnBfY6shxE*Kvy6)c zT!yk(kJ}$-gRD0*_{zy&do`)o&s>+%g%$O(j$HQC<3}lU3MxwHs^;8z*KU3nNE$~` z#q*Ydi41c_E?ZN4@{wy!A6giCMdOxo=EEODvq8(v#Uj{Jw_m?Q9@u9`ovoN?Yo45? zt5fRjvjm{f#=)OAMx)W=kPeA{n;&@iw#C=mq0MdV(IOcve=yqeI#V`B2NKqwW!=SH z|FA-Y(?TPCdxgmLkCur3A`b`L@3o){B2}u4+IvA-O7rTWnV!UYcmj{`BEy9)SH-9M z9!`w2X>&EIjO`UnuHS1_(%UY4bDfTZJ(OOwVeaoPU{5hMZmfDUDvyTTSfZ99bM|3* zNId;~dBy5nnD&iC#@CC(KA6nm1!#TPA7rG(HkR4!K#sNEXv^T24SdvHfb#7GV(4eX z{=eZ=+!zzm^}t;HK=HEH z7((^5scjWCnQ!*eY~URU7)wq097%~(yCwSc)Sd_JSJKS?I6q>3a*?a>;pBSi7jx}% zu37)-KIh#=Eot2vkXo|^N&P}%OM`JT7uaKCam4i*H6gYb(@06o z3ib7N9!6YcHWaAQ>af}?YZkh*%?x?FqBONTN!#l!7N`3rvsCoPWVY>1PBD z^7qFCoi7vtye<~KfdvDomq(gA^_NgXLhQzMb4HI@$&^WK+km ze7*=Y!RcrEz;zJ-^KKpR9+rYEvsc_{**+4zQH{b^dx6|7RA8sI=A@Ypohx^Gy%Z?c ze?DC;zxQt!lS92*PJZQ$1=SKZNvnfxtr@Nc*s(*w)X0>PTARhQQP4N)D&>7VFqx8% z_HAx?frl1xd7WEB-!YhpN2rq;-go$Ya&of?&o}&~COT?$RNL)S!6m`y+1bUK(>A4&#pU_FxVAMijhC^<4;IS`JLjd*#%Umi7s(lodS%=|(* zxPSx1TwcDVBIu2w2Ezqr^UUbZP-!>c~hR(M0soJ-< zF4I`a<3ycooI@nkhVu!nnZ0^tBJj4r3B0^)bI{IyCpD7rk7-_17i+CWU1+2 zwcNOd1KwqXWsvz(-|hgLiqyBS#S>C2wmjbR@vyq}w1BA0XA_^T)V3$5<}ccr5mW3A zTa$&)|j-MG=ic;sY(=Vx+$vuPGn` zK8ja4CQ4e%lUNP*VH##sojP8pr&b{Qs=XPQf|IQmt@wfq_}RVYQiSy3`XdT*!FInG zgp%UQeqRbE~ z&I^3O5``f1A@`vd`D^DS3U~&fHSoxlzWoH@`Oh2Io4?Co?m+{>?=Ju~!BaK9qo++W z9;D>3E>oFz+#N}}R}V)+nydKSQ-lMfDAssu&vVXL0?Co5{GWYN4;oW05`U%^Kfuj- zM+m*gO80uh0*|^uuo4@am|S^7t~II2w$QFxbW$%*um6;H^{{|aQ2O01DucW}`07*`(0iz`B&T1?d>~3&!wo7a_b&{-Y36+{V9;MT8st?1=+TJ+BMsxvQ@$ID2L8+Q(Ka1u?^d) zXS7#X&7zEMPo68ImDS8fFhAfXnjgJlawsW9Rz^8B;LrD2;3!D`d~?CJ`{8K>P&uw3 z><$4%z|(6i9cnAL9f8LPT2x>R!MAi*mN>o59t?awAIYsLKb||JI5k-kUrZU_PR+er znOn}raTYpDv>l~Y+t*216NZZ@j53MS?mQ!T2EbRLo+dDypDz$1N0&81lmqlM#I|0q zvw3WHp^dxVTCcc6-H}twPVmlrfvcXiaEAgL=)KxU4n@4@?Qc`ewm|!V;aj zm{H@XvtFwVgI6l^N-Nk0X)O#6hgCXhtVXO+<&}=J+A17d*;0lzHHB29xkXry<&iaE zs~fkqsky$~*!Cj)m7#vy=RfBi$wh5R{y-jp^09mB=0+>}IUVHS&Zx;>=7{-@5STz_ ztfohDT6fzP*WyvNlg?q5I0(NrL5OFIeuV8Ude94X%;u*>t#AU?YE@ z&U;g?(Q@U9zBy6Q>HiZUK*|Hkg@1OW5oh=@6D;86OD$gKq1^9i;5ZqrIMO%<>})CM zai`aAunVXzTfU-!oCSVB01PFp7rA>#xO{G5UCIi1I4MXJ5kKV#=OmL0g1}z{Tmis*b4Di7 z-nDQ!YiuUL<|M1fo;i^^VWG%7^^1ifaK%E=%iKHl-9p3o*tGntQ$4l$ zbw_m$vJJTynmUe`;6~7CZ8O*|!pt78=Jl4@){hY-pWI2d)b*^sst#AdkRPbxv4+>S zkjsr>gH1QMWw(?pnXl}+Z{2u+sFQ6z%?Lo;;iqnz0$hP81Ucspue2PbG|1gUv}pHM zyFF1Gi0cvANE$V7blTZC)v^qWPoP0!koszCKU|EQmO48y`=y1Eqi%mvH4d{)+c&65 zZDVXkTd%b@?G~rrl!iADRicN2-j_&U-Xh2Jm!Iax5i89Z zd7_zJ-%hQoS8Kg~Ei==O zX*A~>wugx>wj{?`byhjtPU53hT4J@Rf7N3G-Yv!CfkYaR(f-4HqXHU2$~kof_!BCq zeXX6bkyFtd)oipj_C3;yt;0GR(%V#RxSBJrg^e*Aku`Z)!K+o)P3Iz%{TN$?jAT~X zm|~!{*TH%+A$1(YT-aJj8PVF@a;zS)BA*k8QOe}Sr2ivBCL;0^0hXYI`7D9Z_&XQI z@DwoDyordcd{6)5@Xn8spx=WEy^eTFkKXXor z;4mwBRm-b*+YjmF8cg(ABm?AUrS=hJv4_fPPsdJ|px5=5*TsjuAvqiNw_BXY*MUYc z>wZeKW1+H_8>v-Y9Hptq)>vVB6k`|(OxNU!q%H+Al_QKLrBS_bu-x3PPj=wRauK$Q zg9lGrG)>6y_#!RtGiW%1pD%%cymPRBfr`bdzV++$rY>olX_Kn-s=ObyZLv8Ybx&lI z>)Y~>#hQEQT+_sMYd)8gQI`JM&#ROTrYl8x_&Lrx<+XK z@#g?ZfH~*PYtP?^?p<*Cge~KsVqVbkHe1f&0U73hfer!0jSjzHz}3?sYgSSN6Lx6@ z=iC;|myKj)GG!$`?GFrZ?-E1O?xYE%hSyhpeh`x;83$o|FpN)|A)}s%#;j)@G^I7z zBuahnxp!mcKht6^Wgf$3Wfdal-RG7J*N|43z@Fmkri;FhuM5#4oLyc6-jG#s)$hN+ z+wRn0_R73JauzIBrzhT)W_A0}cJMG9vhC1I!4s1T?O{}rJa_B$GfKy5Dj#vtj;)eJ z9nut8f#zwJAlk$(>2P)sUp0KV>6>^%d1v0Pd|XkxqKmSWKm0A;cz4S3jd%!7e{N@2 z#El}O(7HhVL}%;S7X44us4kJ-(r%nJi-KD|GM6XBS>`rx6Xz$$K%$?nfFXJp4*7ym zdn+xsGA zTT{|s?qtP-f(N;pS1Iwf8gm1A5%*_dglh5t+Kp{IRs8o-yW$L|kKUbod$#+5~#EY4zyrFdo} z8mvj3)=s*bKqZt)wd>KSI(6G*EMlubTy>jxce<+^O{>|H-Laev8wT+U=6vTYxoHad zQ-9*h7yk@=_UW7#$_H%OQ?7g2y{DM|TZy>i)_+T=YjPdXS;^_~w}g6jCa((k|2_#- zxYHhlQ^~#dzHCCkaDTXwP&WIk-lu>nYnMlwD0X{xLDR;M%F=XTH-_+ zILGCQv*rD0fAq9zQnOsSyE-wSiamd@=G0m>nO3K4pmN4RW~ELCH{8=+ zA?vGv^9PZ=Yc^Z;hB9TB48=S2rg3#l=c46n%j+w({vOLu&{M|y+vq7l1tgW;As_x5 z_7|nrm)qWCV6E*NO)r^h3{V~ERqEfhr3VpJqNj^zA{n(kBefG7S?a_iG$Vnu7mx);5$-lCfN3RyjhQF%7 z=YVIfX`!I!MH&0!$$K<52htKu{TxfXQ;|Iv9>g^x;~aSa^BO!)7uQi8fb z_U1MoTaAs9x>ekgCsq|pw#j6;OIXs4h?zvDeoA4xnjvUX+cxdcOO767YC-ofQB}xo z8+`hd!*>UE*uN6M7cA?nSHs-fqJ3AH2EGyG&y;HvHN7GahH^p0uX;_y{!esLiF?)i z-p+I-*Mk8|Ut}PIq4nd?<_#k3%IyvK%@M5Io;*F0HMaq1`mlQJgAXB!8>`FFF>^yU@>4lotjCz_ zvrzSXdwxy#VrZC}ch7owblB|+HN5@kSAgiLuWw+#?vBvI1EU-fW4l&b)4En+b#07k zgPvB!YTZ!9HA~)wVL-J>ztWyKJA5)8)aAL}nx}o1fxwTo8#Y_GKjg+OCvocCWiT+I z^--V*3_3u!hqfe&Ss6+z~=mwN?>mV12z(NEMe@X9fsE_b`9*&(@G9U!K6 ztRIJs=Ja%EM#GjhI31F~o;aB!d^nUDzuh`b2iy6feIyT)v0Q61AOh!h+=0oDV;Gse zuyJgqrpjEEpGUILDTPLGh7@Ny>e`pHcT@uP2Fr~@oVbWp08%oQ5IeXU2Jd1FfdgEj zKR^`U1xB$CeIs<{qk81dvyHf&oqT7U3}@~(sC)Uw7AFxc?^&O^Cjz3J!Tq*?cmxiM zc)SSOEx6)t8=te_dr^UXOosEmszG%ymAdJ8YmDe2bh};I{ODW`@&C5>WzDK`OM=f| z{fzTU?8~5nzLkm~;D90yJlqZhRFruXBD#Ki=fZjG9z0P|58WO2i@QaS>B?LybLE_O zDBbVa3sg>9c)Ia_kIEG&LgD)Gxe39`r919arTdz?N=MXmG_u!}*)9DfcO2qYt@5O* z0I2gRLR};74$T*vc8QKv$MzEaKo2)PwBj`gR?+p#*?c^i$VYT?$^9~re*<{o| z=4IKJXOKY;NAaZ$>V`!*qDy814YDl`KP1L*J}Y=A8$zL+gat+K&o28-uvENV<01Uj!|M;?<%Fy`R9xT<^@4vc~J7-J`8C1(8cqfLpRu zbG1WvX+c^~4l7Fb*0{^o7b}0?o#sY9ctkyLKcF?kmx!Z-_3n<}fkbHEJ%U5{=lxdd z%|)p}2W_U@jfBW!w#Ts}D5G|0x3n&vPB?FBt}UUz({|l9t%kv2JZsKKp6O&8b1T<- zQFF`HV|A@7gw4Qk;!SsP)lp&lJ{u`jlEc9|86u~h{=~?E>-Z>){-k{%+xLC)0I(Bb z;035j0ODKbmBtpf(pDn0W~K>~fSv~IVz%ULeXx3?v=!yVqdT?giE}l3po!l{4lOdl zzioXKr!f70-7DySwtBj)LOAd?uq%=l_cAU;&D5ZH5*muVtgS$>-lfnzOhl;rXQ0>j zM~M9BE|aZ9j=GW~Ku_?re_(lb6ioE?^l|~*hih-r@6rVKX_u?kmT!vc3K&{^^#TMP z5_MmT=t{Sw+InKZ@7 zw@`~P1pCcjILFYYCc1iU*YqrAEKuw1=+sLD<@kQ?q6V>C#Ai>qA;->}iUI;vA!VR4 zyq}bV1qhnt24iol0ar<6)uk)UQyv^F984 zn<{7(Hr1=o9>u3+W`o>MJ(tCJ zEp4udxv$c!+tBLSA|iw>PL8B>F_kvVzM<=@s^ijEMPKH9dVC?k!=c!D*WJqgSDrbX)= zxg2D&9ExtUrA`)crlefaTH<46Bzl~sj3u90Cq2SzjvNZ}dN7~o+xbXm{`k;Oy>*aO zKe=sg`tuo)FAe|Z#j^YLSvpY$0N%(151>B-s2>P~35!`sWXPczPF^uGg#n?Y4O* zo9z#bOEEtXyI0x+QUX4Yk@DlJ4cqH3%6}uiF7VJcU0(k}kO{JPv{K0;h^3!dAl7EY zw!3OKxzXVw$bOM@aqedMx-J45&H<;tOho;QJLn7z&^*8T@$NyqisQ|u%Pkb~*mREF zGB?}p&P*Io!(!1PDa;a9%#a;WN;q)a2TM|0;c=QRQl*&f-5RI50d&7gxs7pX3t>;6 z^D28>-|{719K`^7`k%C8bj&_Ww!0pDPj}Z{_Q-FU^aAcglv4x33d|1-I%Qg#h7)=F zDDi2{Uk#nIxi9d;dKZr(1&T#9Mn3ky{Vg^yj&c)jL2V?;7$=<_Y4lfzNxUw(IU`^_ ze=1q@Dj|G{`Hn%)TZXs-B>uB%e4*MCQT{@mtYB3Xft~o3GC8e#a(g~&tKckVYYm(~ z)KYPSGt1R_Vif*Pk<6@p6sF2(yW^a?#gMzX&wHKGq-+@reR&*H0!c`-E>_zQ%`Ee! zoHien$?I^4Cj?QV+nYN72^hjqk7BD)HG}(3Z$x}B-gtO-#+6fkHaq6Q2-2`+xmDXP zm0jPMg;b;AmD80XS~g2VZQp zn3FH^2}zL17n%I)qm6I_a2GV;B}lc0yx*7FOxG@~@sXS1qE?I=E&*-NH_N=PbUPxg z6x)(y1Bb}Ny|ZI`Jl~N?-iy_FZ$JceZRbN6$Jp04{lZ(?t+_ZH&;R@Kj54TH)A zhK%sI>U8sjE7Bm}R6*|`R_H<97GvpK~1GL@25wA=c#VBi&k(RZo3x(kn3V-~uU;3@fF*Q;{U9}%s1@wL`` zoxt>aMg&wVfEQ$|hiYej3W*F@v6Sb%UQeE4MZHZqavD*J<{6qwBHVzP-Z(8CTuf)KAMRS`a4Red4)1MKW|2X zs)Kn2dO`d82I#;5@|!D`{HRf#j@9mLRJ%E+31!kKrZkU-5bA=qTerQktOKn4l&St| z?MRlK!?(ZQu6vkh>G#i-Jh_W}zm%Y@%}_7t(m&>{A{djBRy3xpxK+}im!!l5+v4Le zjOYDjEt2?YGqiTo!K#e8_Ef8{=b4#p4xR+fv{QC{7*Lph%mlBRA=-j@kwrqZRF1ePCum~L`Ttcf5v9bV!Cw+&M+*PnU(n1a2IO?i?eX? zK{Zyd+1@Xhk=mHgXVav?AJ>-F2s^15Vf|vTf+m5V(fzW^$lqwfmsz!EWGmRe(uSQC zIl*OHguq5Q&hWC21X=7a10v`!znQlaoS;>BR&c8W{8Q$RCPZ_&kF^^V zn>XuIVo<|DZ5andT}~&I((}auy*|V{*Phu14$+Td0VAOqzu$0oqSld^k;@(_CR2vd zs<)Jvh7+*TqtrQUKcG9oYnDaY?Zx%+t5FQW2^zxk^a`*<#>3ZMHFWLwr);^_rF|D` zk70hvv8_V8`+9fGTSC^d))?JAu*$?A&64`ESongNrEm zcKwXlyHYwD;g&h}*2BFAWuz<U~scdG?=Z1T%hVi1m3ceKpaxx?kbEpT_5%wWWXl zRG(EN1y2PO_W^9Uv2@5VyX1+XiHpA|UVnsGZ3%>%@3It7#r(xj^XnM-9aPwpyC?9F zKCs%0C^=%bF4#;7rEF&9ELj?xu~YIr%W94>0~@;PmXAhu$5?vl0_uvyKDYoI{gMgu zU2ZkTTU}WR1n}Qs5H6NvTj4Q793OgBFKxs^r-=B?m-j_^%JcE8D0*Sn--((Rl`qvH zeJ+TB3*~#&8_}iar|LME>>$H&J=RG^WU%x&o&~~ewa|IU_igX|X$@;*IBB)wLsVK0 zZ{y~&?5&DyeN5Lqj$U|F0okiF$(BTp^GN-nlo^QO2CpqGG%V+B?yR7lP)2Y8OC)T+ z7A6SG(Q%aFhru@Owwa)|?=}4arT02x@tqEg=;k<+csNj0R+VS<`reFGd|YEf$Fnzf z!a^6jJaS#l@D-^TNLivCgJMp26uxHhQ9bFj+Zw(Vd#0u`(lF9}iNuzx_BHAI1>HcD z=XzwGa#m4F;YCpVf!1Dt!g+=%`LEVR6x}X^7-dmC@feB*ynCI;mD3_d{t7fo`unpr z70hv2_T4`uS(g<$#e$no#E|O3 zq)2k?PmUd48tY{eV!OTYsD7Sm$DdI9i#!cfhK`N_{P|T*#vs=UET}0Qbn++?6Nes8 zNj(p;daG}*x}n*cIz~gAn+IZ!HCJUu@28E9bEwUxt~?;2m0fFglnG&|@gla6IhE>g zyBuj^C!zNX2lcBWV&Iz-0O;j%iX$TbHFyC&g`tAfD^OG7SLXtSt={z+oWWHDJV6F7 zLdwkdCuBK|r+agQ?HjIx6*$dHeOX&a9NrA5)mA4&IWfbTu%eb$!{3QA+lqBo6bEt^ zw6KxV38HysW#&>V*4~~nvgQ~}@Q1{f@TI;^1DCwn^e#k20AUOsN%-myXw8J_p{|Fk z!N?cYwTW#hr)QRp!(bt#v*A?VwwFhTX-R#->9+4$(ug4u+nY*-N~p?zr{T+p6+NO12;% zza77EUxr-8xITxT;O2l<&z1M)Nn5yJxHL={Ub;}bh^Jk+kL3KJz{N0eCgFKTOk8%q1yq+=cj>%qZ?#IxNYi`&hu*|yb*qjW^Cv)g!BM?P-r zYlEiD=FI3U$VRSb>;@c$-K}95hn=CpB+O#6lB?|UU*9cN)EP?1FTGJvPW<&|f#MmY zq(LIsU0C_4`^)v8qdoxvOqhh+8q~kW@*djge8no%OSE+?16b z9duyu#5iIhY0XO2Mr@{?cmfX6I}`ol9KCe`dBPYu(B9N(KS4d=eLu?rSQ<5#`(AeS z);qr`)%U`>-#&Wj(PsQQHIB3`hikKu5o>$en@WZ19(DsRYeqJ09Wpp6wOgbxTmRQchjwlx=$+D~&@wt?RbenwRPh z20D`#%<=w?L$2stiG(a@B$X=(dXns~dwM*7wURWCNACabW&%$Vr{aN|RDsNmhgy$k z-v9SK@58sBxgY+;#SM7&dwuqPK_8r*|Jt`+6`fuE)4y_fouO5Sxq=J9yYDO4pa4Ya z4CbTMAI!~e-7gmAf+5D4Iv&<9BV3@SKLZX#gPu-j>WOrha2?VCDyn==*!xuf|8%XL z^sEc?U*dXeDNrGNdjyRNf@(ipXtT7f$NkAjcZ))#cIy@+q@A9w_SAf~A2^QY_lt{>eClwp!BJgdu^>do)GhqxOI&gH6Kgz)S*_qm~VrA z&~0^lEpnLE@w&PaRJU$G=W|`CHA#&PNl~>8&bH}#Uk}V`gzOW#5bT0#aTw|L>fZSa zU&saPE8IKeukZcn9U(vVypk+i!%=vIoC15)!?8{65bAD?5FWJ1iho|M9aM<7qs`|E zv}(x}U}UfS%wBnK)RB{Vp_JQtvF0WVYBnRw;UqO=snzH!JKO_z9yinGV?IqN7#Ni) z@isB_x=GQiXk|nM&E)&FTaNkWx?ttblCFK1bO(7fmCES)W?JQ&UUKiwdSR93a7h(8 zrEoq=sS|=mj?VGZdH)L+;+c3K0P&81@boK(BB8{12mNsepjGBK)s=U`JEp{I|@9Aq=RY4V^Cj8wSmfNEte(+Q<1~nwpA}_ zy?!k8wcI~2K_)elTElF2=QYX}_9Dw!3ys@o&X{WDw4%|>!J86EzZ8=Pr#gg=ceZzc znMSWsM`5LRM>gEUtPsEbMCD`paVP^LXFW%49Q*6MBvhK;aCFx$H=}qw5)zYO)A4fS zrH;~Ct*3|1LE|mR@ePG+Dh*5Jpw3~KJh6_}^Vu<}51YeqGA*;+) zPv=~Y+pX0=4-8dYdFfCx8CUfJ*V%qk3mQzM=_=Ex+kd zy@LpZxqGSt)jzpYBZ#&51S1)y>q=`r+v=m^L=huq&CeAWjHa}DA<1Duu%7x1fvqf^ zJs$D~Yc@yn2;*6Lz4ulwHHXpH-K86(tIX{#AI?2mQFI%X@FePxF7W0txCeR0`SJ^u z2Jn-WxzhZa)T9)anc9U-^vK>s_V(1MJo*r^S? zNv>oXE9qO7@5G&4@%<{;ezGzywNP-9zcXy&Q~KxHPHvrwkRI^N8^_mqVCedKn=1fT zMK1VT-G4uELSq1>3Nt5e8m;4&-{-YSG|YQ5cLqLm!soVG#3|Y0NK=k8rFKS7@FHoX zQM}gerfESrP}OESjs0#NSfSC_O;-{(HokK`99_rQLC$(5D_)g2T&I9P9iaxe8s8;| z19p7b^_neG`SPHU$}f}&Vh~*vw_CfL`ug;^KRR*db@oY zHvHqZU+7)6RjihoF^DsNuJ^?dj~mCOKtl*brjwGHwvO#_()W}xo-7ltwwTVGbNu}& z_bY~O{b-`L4vmR{a!;HChv@B?TjhmHAu6 z^IF5D1m*;q5oAq=qOS8>52ns*!eDa z`L|3^T}?OMxfUJ4nL7vR&XT8c2Vd>C7!^yqmI;lsUM71W27Pnj*geRK=C@y{?)vZA zmy#dSq+o=ip6lvhNn+u8TN{Q+eV%Q7^+oQ>JsuF!Nqm&a>A%#{5g)$kVgpR>fSz!< zdjqgRZsG5*o?c_XE}2CXG#irbG}b#UtJC}Der&Cwt5-uDx~pMrJLgTl-#l`VN4Hdm zP>JY_*=}_3kHeldvhk%RRaqb#DayMIa z7Av)MB7K#Uc%cRKDrHv;vr4k{h%jCDJDcUQ$Xn9x$x-v^)Spqg{HrH|{e^eu;g|2o zRsF`VJUk4BnH-dF9c#5lE$!%GlVzv%QF`oHNvG^G+GM z76y=Ot;2XD4}|tQb_Qj!uz0%{9$Oa7e9g5XA@%6qpvgOY4sPn!FmjF!JgC*yi&@%Q z@pNV=^9aNV2vYs8W z%A2`zsPF0-VukDVsbZ6#T>mla)Wabc*n5M|DN1eRbWL*EnxToCPRcp+(Rx0V_7-)p zd}#>HFDbQLtd06Ia(inw-x8yxXw(Xb2>3^4jfsnOgE>4}`uEAk&)W(Jzk4NK0ao~4 zQkj3e4w3D$9`L*~B_YezC_Ilc8!MMxLb2-Jfz%ypIPI|0QGXyd=K>9(rxvH$#f%$? zgpgTdMJCq9ayw_`sj=b1HWBRgPz^ToM;qVKD^2+c)4!2|2o^#T{r#2H+qNd;4s5WZ zMvoOG$=7u+>GC|UOR+vz_7l3f=^XuuktR-KqmWs;BAfkMt|YZRS8z#mIAT&s%t;7g zwd=#8ZL&jXv2&kEbDbjigdoyx-Zej~7UUI%Xf|QBh2NQ<&}Rx7JxV0e%a10*D>@c- zV-{mAn;}j;63?R9Pa|l<<5vAMo)(J4&bte}0z`|wK2$;A?-q>CoVwrYkmR>chOLbPKIl`9Grot~nI9s{gFiU(#$j+X&JTcstq_z$zr?G(aRxg^b^Tl{E zgodD8{c%j&-GbsYKyLI`Dt~3V{WabnXULEEpWg&JfLZtxA<|A?tqp2M84FQ~NDy_gEOyuSQNMJv~Y_|`#8dQAD4q{NwG^UqY&4yBM!R(*WPMd`^KNa)wdQI=W z0XO11%*17C^G4swXVbA<99g1EwT_{y3pA9{By((ci`U)xoGzIXpG#?;^Lp;Pkyc^{ zd1FxPb+9_^o68b;6F$!ntH}8OQcBQg0t4<(>{_`^{-?8qs>67m+w^p}kxBMuO6V2d z<$NR9ARYnGH%A;8I%v@i$Efk;_{a{nBVU!}?ZK1v5}L)H&g2~pZ9EO%1VK^qaoxm(a69HyK|l6mLITX08HtUptv!lH+;=wh+4*|PdAqfnKq(c- zfcj(%-8`I6hx6p{yojqR+Wk|G(8XbTqEqENg^fjVl&_^P`N8dut*B#Ciw(8vZ6-Bi z6Kdnmw7&8mHx|U4`*E3q_+q*5Ylq1VWVPhmKwzIXQD)XDW z@g+Z2OO7o)GLXCci3&i2x39}PkXI_4egWhP@|u0Od0QbhS!dl8ORDYC^Kv{s1P9I6 zz2m7(`h_cj(YOE0v{208i<%zr@VM8EN?CN!8sN25_=v+9GAs1-dSBN_q z@O*$!@b)CuE3@LHO;=L-G$JkdxYk{x^1)|`kC^5ox6Ri?yo2{^FIdHgCy+N9R=-e* z(eDLFZoNm+lIZ*r+(xy#bz-dL9ekBO&-P@BMh%|o*!sX-7t^XAflW_ z_3yE{0X-j)6O}7d^e1fe{ce*AYRgf`O_L+Wc8IBBy~fMNYiuqEJ~0n0_eRKS^KVMg z7g_$dbzkJ}eI*Oxu)nyqPPji3q5}29ZMCX3=d#j=!E{{I4LENCGr^Um8>VU2@RwsL z;H??0^HEguYrN5FJ9C{Dp}Chb?t1GZ&ubip6TUAnQY5D;j1^E#weg)Y`H5PmjF`_V zB;uHLH3sTQ9XYk%IkC<;L-l7J@(k}v9)Mkm;_tLbbQ{5}7S+oq7Y@vz((R^U&I~g6L4+L(8V!f?jA_thPS1Y6Tq(_K#tP zmt~+&`;RE`SN!o%V0xv*!@CtF?nK86FP6*=wMlvqa@T3H@dz&3++X*LZLkI9^t3-; zDA|dBsJ&)*NSJ+FO-0a7NT63xm5;J+zgJB8aZ@ljuEo0?n}ud7!~tZ9cFXQMEUj$; zGf-lsaE;;C)+DRDiAF8O&lA*E;ksyTS2og)F{ZSBpiar4=I^v@sE9qhx@6TJd^Qd~|KVfB$+l?_*) zABOA)@3lg8A;b&qqYe<>PNb^f!SSj7!e#Q%p7(_Yg{~94Jmw87gY3*rhSet? zqc^;GZHSVrD_NJ_`FoG%dJbH{K`v4AuEHigyO)GfljV|f#f{C9t_?beqh&DcDmAFR z?^P{OPgHsBpu8opov3uxO76Duvdb@s^H-|b_2dA7uCITgm?0uTGIB>s1`Bnbn~V}p zg{-R$ds%zv^J)N>3l>`wTeJ3iqB|~YQ|Jz{kn3?bt8KN#Vz3uy&=rW!jhJg#lE&LM z5#hV_mBA|Y@{_8MbhxC52S&fXwLmRSoJ22*1 zlLq`YlMH+i?fp&L>p0^i*);V1Gz;x%yE%azvNcE7Vj*-FA$9RgM7s1`(fg?>EV)M{C1t|aJ>Q7)wH@&UxpSxUUoCO znar^Lx|SXAX`xFCnUH5vu}Iv3G9=cRZmP3hwubIaJ-ttzb+(&D^DLoWZ0Y~6nZC)@ z|GsJKpRa%yghzM6*(VRD@oHAG0{z8F*o;Y9XPw(dMAe9NhyQoj-b)`N1l)FRh+T9gD5}V`x zbldDsg_)&|&GkNwn9(2|#f010&v#}39YuDKKwO&$>v1_4j~dgN3hnX=N@zuPDhM@9 zj;JnElu0BASK$sj{fSn8zEnnTYTucLNQ-|dX< zQ?>)DPX(YS0^a?~M+NeB>YhvxbVY_ix1CL$R-B~cer8Fr$MiizoMu^rAVWbnq;len zacqzujTT0PR6c-oCw7x1O#)|Sj|#$ZCl*cC_P0xZ+QP3!z9-u4T`=B|ZTP+RPRGk$Id5P>W8dt!VGGaHV8>5~_*5Lt zT1r=)ii3T=8E+fp&YC9M6j~CNhTd_u?NZuJbfPyO1#%DQn|5-osWcaQ_uF1nFDQ4B zUk?YNI)tc!(Gz70ckMecS;czk7(kf_?^=&Hh=`K6rz)-CCo8fw866r@&T?2MD>1nk zuMe)W+6#?CJXco<^agLM6cte;$=D1;V+ldx-GN=GH4HktjbYj%)}FK`yG^<2&Zsfg z9W7>!*@H_YsqC01UPH#&W%T=RnGHYzitzuHa3a4m?Gaz;9xiEhtX!#QK(NGzpBIculL#DTO~th@`xm zZguAvsLsF(aRq%kV8(TI7|>z9=!1VY@ds+46~N5;=MNt~c`(z^C#7SbsyOdm#(&%c z^cpxdv_>}X#r*kG=#B%)iq(&tTy2$1JgxV&WpxGh;vz<{FIL^JFX9tG*tpY+%Hw}` zEWgnEvUxbyCdH<<7#t~OXA+^)M zVWN|K|NPl)|MIFxJ%V%XsX7@&4Ot9})9wM<4wRjt66mPJ+`~+X&ojgwc~UY z;Ohh{T)Sw&OxAo^=q;%aJ^MtQUvh%29#;HKJ$Z40EC22(W8idDQH{;TxBusyd>4P* zf`0a=5!)WshSt!PRl`b83 z+idQ0mzhtCr8gWg_MCbI~e(d5wIhUPDvZB4MFZA&So)~tz<2PAPQJZ|! zkBlSR_;#e$e*!P+-a3WkdOQYw&pr8Kz(;oTx7_8k!w|Kz-3lhDXG3rIDyDx*`>KCZ zZ<1Z)zi$4HNb#nR^#lyjw1Qeu^Cxi&UEge85QnUj@3)NUK(9QBA4tt!yb7hQynv#_ zbv@sUrYVhbgBdYw;1NxBQ;*9Ck2P~Rx5nVUGFM6*mP@*`S{ohg@hSl)-78i^V(HDC zodiH3^x#h=kbcV2scndK+-pyAA>>n#Cc}9NDLI=tJ{friE(EDK;+r)l8l*~b zJOM_CKfU>5+yG|5aE)L;Ao>S)(KN7j&Gh*LbcM%Pi~3!H)n&TOM^!udYQO%XZu$}E z34v27&Z$DP0{H{G(+!!iOM2NTdJ)XfHMZI0xLyl6qaJG8anUdZGtuf1n^}W!7n!1r z4Q#xBq?1A-M!hvg@!i6+x9$%Jvhb_(ulabr6*X9JCTG1c^`Dd92b=OSzQKnnV zU=yVIUa~w#@sBt)#yc}dQ5R;RyKaz+6nDyDT(#K zc<``rr*4}0aN=`9(Hbq&kgApKJTW>%f)DrYEoNs{2Akjyj?xG`h>S z;}&Ev$7qsSbXp=^Q|YClm;F9RZ76ds+Q<5`3{;MoDm87rCpcahgU3OK>IUdF-5Ia+ zc6UPN7@?Qy;pY4Oq`pOU`qfE8YVg^v`SpbapwJ0}Kb6w^lbS|0gdG#?Hjp~mSi!{Y z4ra5-z}IJGePq_a`nTH|ahNo?k<>4jTXPZ0{tSkkvaIMX4QrCrq1O)W%;j0r@mNO= zcs8hNZZFE_XD`!>GxV7lIyy=(Sr0`-&n**vPmmM1iYTX-a0CF%Hy0ZDVJuTw*uwDP zTGDH@RW-Nc)Mk!3HF!1m77#dPTEe6dXqWanITTIpeOHk>gF|aSzl3WBzW9fQ*fg!AUv~G7rfO{$2_G`jZxUmp$pk`H{LXC z7|mNMRzs$8(t+%D?l3Lt0Va3T`9W0pLpke7^G976+>Re$9~mz#Z^RmJR{Wq~-U%SW z^!iY7*t_M7Q#$QrUSV@gCt+Z>NWFiFOJkLRfE2aUkZ@xh%dD9&=~}_{~<{v*mn+)(PST$ z7hwyi_(Dy|E(HCZ`F{a;K^FmsEk%%iIKl}Lm7TE3xV6pPFw;J(ayto{#V)ay<5QWKYM3#Du|SHKr~Gqz<*XszdP7F=!6)ac?&7D{ST-3VE9?vE?PIc!zB@G3<#+ zQA3({JL*-NYopFl=T{(P5tJYBoE@f8)QZ&^%)o9A%}v@>WM*!cVo^>^A1=tq$)J^m5WEs=lh1jrx3bR=r0m-Meyo zB38Y6Js-pB&}Rp@;>n8vdul=owEnU`D{|?)8QenTIsrV>?(_i11Qp?aE$E$EK`8BgGKLF&j49sX<@e+jV+{kNTRQ>OEgEG!m=tUac=cKO%AcMey~bGMcZ^ zL04{Rrp@JW)MKqclBO_$YP@XE z7WJ8$kS(Rfw1$ME4>rqYRw{u_B}K8HlmKZy;<>HIbx{7o!*dT3P`-cs(W`?F z#;&c!5)>O0Bnc)O+at#1VxKdfH_%*BTg_OgTj+6p%~W^uCU@vJhTV;?lFOlfT>4p1 zEE--2(Gxig35}IoTHz3N|Dk68I(6lRFudwSzun&xunJK$%cb&ad}l+DA92(g(;O#7 zF6SfySC>p-J;)TT17lKdtekqK9f0rc)vh27jeIjQcY#-}^aL8j4ubQ;A#6rm(qnpZ zBaX*8AB-q7At!Zj?+_z$r!GYXJTxWYSSq!fnjthOkMssp)>m@JnTKwj$iTHl`@W?0 z+Q)ixGn{3uV>ONBB(?7%A76>_wY~j7Ey!;r*>KrhwPDDg(yIpAfBx%1z^|PYn(sxY zCUG_3wX5xYu7iiUtJcxqKplotY;5P&{Ox*2m}%fxM=PR`xB%#PE^rtsh05=$50D%o zuU|qTF3Ynb!%wTEQlxRg=NI4kb8-)A@^%%+sHN7er_~kw`DQv%=yj;<4&N7E0Yrcc z$$sq>xPXK+b9o7}9RS^q%nNS-`Ozv!s*82ko7#G^Pxdsuihb87I4rsp$-D}ARmedo z?8Pk23lqTC?nag(y1tFmEAW8dtG6p&{s~uZQr{+|rgam!(G%rjacG9r057}rFK~T6 z3@^6s{&f6$>pnpS3_rb7IXmty>6aU+W#Pcs*46P~bkIA^kkD7n)oLmfX8UDf&S?wL zB0s5O0R7B$P!W5|8a-dX=dYkt$jGWHq0ggjE4I0CRkgZXF+6b0jiu0M@kL8JaogS3 zUTy4^tv(2d_$SX}H_oh${4v+`sPi#?g7;!)k=XcG?IId} zy|<5`VQU}X0I^aosgqq6XZ2-=&dr)+9XNbs=Uq) zp?d6L@sPG*McbEdzq=df*Ln=76Wx{RO5+#k(VE4hvl3b*~=Qf3A(htQJU;-jc=j(C{qQ8B3pj(^SGS<(g&H4Vh zxn;AHR{X?nC;#7xa=*-8MxfB?gFhe*kW2ZB=@Yw=A41^e1HP6FM~dU@;(=G2D#~t8 zjbIAjO&a7i<6{?nfUf(c1bb8V-a&-L-aY*&bt`{FQ*N*sJK9Su!~y#f6E>r!1Kn9> zw1e$^d}Y=8W5;5gmM3)Oma_qQM>RG@E9;wtI9^!!LEy@z(6hI-nJLW}anjg)7mr^@ zehw{!!Hs_!62F5qi;5Pn9TNy2Xoe2oupwv&b#Jd^%wL%6PjJt)d-$zi8SeF@WC@pR z+KN52M{$kl*n@Gc7i@UwUpAwL$`a=>pV5k(g}lMV1UiK$GYu*ux;5}(>7?4;)D3ai z?_gAC)1Z5iEv8kh{&H47>6Cw9i65R0)iD`R1Zv5uJnDxwR9EqwLwMyi$&dtn)3<#B zhUip5t&Z1EzRx7ao4qFV=w%KoB6Ai4D<2=&<t5X*L85hMIzFaC^C7&G@AM?!epJ1& zp<3}3TOsnj=`Q^Q6%pX^cdAo!XMa5jQY4ht4aasHb#W|@TK%NVq*k9>W*t|@BX7f5 zVQd@3P6_r2yPhAXHB*!Z1}1gtbDH1U{5W%%?h2PiyJmD${1z)sB2Voh?7w2Em&1yI zi|%y(Gakr)j&Ax_^tx+W|6BF*6Vw~MF27R+1AjU#!+J5yBie0ylairlYte0yb!;mK z9o*~YnYI>Hs%fY!ZBC&-pwfokV&k!*>K#&Kr{N&c$8$Wh38C9?dN2!T8}0e*F>Z8T z=cyU`)7{zxHQ-%lIUNfCc*7YPKNYBN?pbs^wrzhOu5q_DY3dDO-lBW8OA7h!_6E`1?oOPz*KxU)IuX(uu3K#(pj48Hl69ahMqV-r&0E;|$%_Bu z_~xmdD~eNJQT^u+%AP=S26VftwD{-GGs{>1<|I)*A1eE+Bmf8|T#xIobhLa2uqtB0 zUtlv7jrdw$L3HdNMRTB_xti_s_6Gj-veSbDmDVmX-h)sEoT&$cUt0Zb7sk^Z* zx;v7j@R{cJk4JTrilMwz#x9evg&q@QMfgrQ+cCHm&jfppLFC|>^z)AxZuwW-1={nw zL5Mquh%h(!$XD=f7=rx3#(daM7mge+aBd2-;g*w7Pt3sTuP$=rm3f`}k@=BFuUpO{ z74psa>J=VB-~tN?+?AxYlm0kb z$4!-SGFhRI8>S~pLykxnq$GA7qR$ZIwx;oEjJavAk)5^fQ+O4jdFf;HBoppf;@86P z0uSMOd0jc|z7v4t2PNk%saKoK8#8Pt8qFxKP0P9{*H*9Q8+>&KoV-cbo=Ycn^x~wd z{A5>TPs-LWrcOU}W_e+ZAtGIV;@5t#8&IIr?V%#n9m~Hk#{PfHA>^=p?WesF@{@qN zdN@CcZaAR9%K$l2o8GnIDq!bhA0TTJKzzgB!TSbL9t#?7`R?l>Fer=aU8(dLZngAJzg0CS_(@8&v%XPi4e0f=32U~m6#J-i z=(mbR-DTRvp^3MK1Gz7!Z9aEFG$h95MV@H_ADwwu!PaCOD;xg0& ze5dNUX$1d45n(mS2-3c;*9vl|zYdmHG6S6Dw`jFVew2(SyG_r1EI$ovG7O#Wb=g#i~3%d+-dqTddvVBk4 zyMQ~PTtNo;kNhCtD+QwFv69s65YsN3H|yNUWI-3!Buq@j9E+Jj*@QY{fl-81twEGq zj2$)E#Wn`iP*>wz=JExzVC3mwx>2Rz2w_gH`-mt+fnWN&Q8wM1V)2MzAr#TyDueDj zp@=qeAgxr=ZZE~9x@|ALmO9A{Lx13uqV4;B^FSN#FAsfh z#}P}*YRg+s+Q=EX-b(FNG0)u5fIK=wZFQ5CuhiLF?dsF1{fqL3Gc<(rsV4SUMGdvwgtY6>F}v&B^D7TP=Ns{tNC z$Iz>M_|L%x$4>3*g>`ZML;Rrn&dJ<5m2g~i(La9t;rNDrp7V`tr85;S5#z7)jswyy~=@f=S8Xx2ju=k-NI{6Hq!gvtX#N=xIQaTM-xLvjwBoidJv2+@)%#3$@|i a24k0m4(Uop(9RY4>TLWE!2W;#$NvE^T~iGJ diff --git a/cdn/package.json b/cdn/package.json deleted file mode 100644 index 22d6c8c25..000000000 --- a/cdn/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "@fosscord/cdn", - "version": "1.0.0", - "description": "cdn for fosscord", - "main": "dist/index.js", - "types": "src/index.ts", - "scripts": { - "test": "npm run build && npx jest --coverage ./tests", - "build": "npx tsc -p .", - "start": "node dist/start.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/fosscord/fosscord-server.git" - }, - "keywords": [], - "author": "Fosscord", - "license": "AGPL-3.0-only", - "bugs": { - "url": "https://github.com/fosscord/fosscord-server/issues" - }, - "homepage": "https://github.com/fosscord/fosscord-server#readme", - "devDependencies": { - "@types/body-parser": "^1.19.0", - "@types/dotenv": "^8.2.0", - "@types/express": "^4.17.12", - "@types/multer": "^1.4.7", - "@types/node": "^18.6.3" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.137.0", - "@fosscord/util": "file:../util", - "@types/node-fetch": "^2.6.2", - "body-parser": "^1.19.0", - "dotenv": "^16.0.1", - "exif-be-gone": "^1.3.0", - "express": "^4.17.1", - "file-type": "16.5", - "image-size": "^1.0.0", - "jest": "^28.1.3", - "lambert-server": "^1.2.12", - "multer": "^1.4.5-lts.1", - "node-fetch": "^2.6.7", - "picocolors": "^1.0.0", - "supertest": "^6.1.6", - "typescript": "^4.1.2" - }, - "jest": { - "setupFilesAfterEnv": [ - "/jest/setup.js" - ], - "verbose": true - } -} diff --git a/cdn/tsconfig.json b/cdn/tsconfig.json deleted file mode 100644 index 85b35f557..000000000 --- a/cdn/tsconfig.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "include": ["src/**/*.ts"], - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - "incremental": false /* Enable incremental compilation */, - "target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, - "lib": [ - "ES2021", - "dom" - ] /* Specify library files to be included in the compilation. */, - "allowJs": true /* Allow javascript files to be compiled. */, - "checkJs": true /* Report errors in .js files. */, - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - "declarationMap": false /* Generates a sourcemap for each corresponding '.d.ts' file. */, - "inlineSourceMap": true /* Emit a single file with source maps instead of having a separate file. */, - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist/" /* Redirect output structure to the directory. */, - "rootDir": "./src/" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */, - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - "strictPropertyInitialization": false /* Enable strict checking of property initialization in classes. */, - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - "alwaysStrict": true /* Parse in strict mode and emit "use strict" for each source file. */, - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - "types": [ - "node" - ] /* Type declaration files to be included in compilation. */, - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true /* Skip type checking of declaration files. */, - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, - "baseUrl": ".", - "paths": { - "@fosscord/cdn": ["src/index"], - "@fosscord/cdn/*": ["src/*"] - }, - "plugins": [{ "transform": "@ovos-media/ts-transform-paths" }] - } -} diff --git a/dashboard/README.md b/dashboard/README.md deleted file mode 100644 index df1157a1e..000000000 --- a/dashboard/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Fosscord-dashboard - -A admin dashboard for fosscord-server - -## (planned) Features - -- [ ] Overview usage (registered users, concurrent connections, voice usage, reports) -- [ ] Reports -- [ ] Member managment (edit (disable, delete, premium, username, discriminator)) -- [ ] Configuration ([Config.ts](https://github.com/fosscord/fosscord-server-util/blob/master/src/util/Config.ts)) - -port = 3005 diff --git a/dashboard/package-lock.json b/dashboard/package-lock.json deleted file mode 100644 index 4d56041e1b70d383bdedc5e3a88ec0482a33819d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88 zcmb>CQczIJOUzAGvQkh=Ni5Dt%1 diff --git a/dashboard/package.json b/dashboard/package.json deleted file mode 100644 index 87bc16991..000000000 --- a/dashboard/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@fosscord/dashboard", - "version": "1.0.0", - "description": "Dashboard for Fosscord", - "main": "dist/index.js", - "types": "src/index.ts", - "scripts": { - "test": "npm run build && npx jest --coverage ./tests", - "build": "npx tsc -p .", - "start": "node dist/start.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/fosscord/fosscord-server.git" - }, - "keywords": [], - "author": "Fosscord", - "license": "AGPL-3.0-only", - "bugs": { - "url": "https://github.com/fosscord/fosscord-server/issues" - }, - "homepage": "https://github.com/fosscord/fosscord-server#readme" -} diff --git a/dashboard/src/index.ts b/dashboard/src/index.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/gateway/.env.example b/gateway/.env.example deleted file mode 100644 index 0224de64a..000000000 --- a/gateway/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -MONGO_URL=mongodb://localhost/fosscord -PORT=3002 -PRODUCTION=TRUE -THREADS=# automatically use all available cores, only available if production = true \ No newline at end of file diff --git a/gateway/.gitignore b/gateway/.gitignore deleted file mode 100644 index daf8591a1..000000000 --- a/gateway/.gitignore +++ /dev/null @@ -1,107 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port -.DS_Store - -data \ No newline at end of file diff --git a/gateway/.swcrc b/gateway/.swcrc deleted file mode 100644 index e8cbb8a13..000000000 --- a/gateway/.swcrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "module": { - "type": "commonjs" - }, - "jsc": { - "parser": { - "syntax": "typescript", - "decorators": true - }, - "target": "es5", - "baseUrl": ".", - "paths": { - "@fosscord/gateway": ["src/index"] - } - } -} diff --git a/gateway/.vscode/launch.json b/gateway/.vscode/launch.json deleted file mode 100644 index 29bdde138..000000000 --- a/gateway/.vscode/launch.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "sourceMaps": true, - "type": "node", - "request": "launch", - "name": "Launch Server", - "program": "${workspaceFolder}/dist/start.js", - "preLaunchTask": "tsc: build - tsconfig.json", - "outFiles": ["${workspaceFolder}/dist/**/*.js"] - } - ] -} diff --git a/gateway/Dockerfile b/gateway/Dockerfile deleted file mode 100644 index e07b7d8ff..000000000 --- a/gateway/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM node:lts-alpine -WORKDIR /usr/src/fosscord-gateway -COPY package.json . -COPY package-lock.json . -RUN apk --no-cache --virtual build-dependencies add \ - python \ - make \ - g++ -RUN npm install -RUN apk del build-dependencies -COPY . . -RUN npm run build -EXPOSE 3002 -CMD ["node", "dist/start.js"] diff --git a/gateway/README.md b/gateway/README.md deleted file mode 100644 index 959d0d5be..000000000 --- a/gateway/README.md +++ /dev/null @@ -1,42 +0,0 @@ -