From 1bae5ad55e59d4f991f1cbdfbebf52725f08a287 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Sat, 27 Apr 2024 22:44:32 -0700 Subject: [PATCH 1/8] Initial Stately schema, generated code, and usage in GlobalSettings --- api/routes/platform-info.ts | 41 +- api/stately/client.ts | 6 + api/stately/generated/index.d.ts | 4 + api/stately/generated/index.js | 4 + api/stately/generated/stately_item_types.d.ts | 92 + api/stately/generated/stately_item_types.js | 57 + api/stately/generated/stately_pb.d.ts | 1233 +++++++ api/stately/generated/stately_pb.js | 240 ++ api/stately/init/global-settings.ts | 39 + api/stately/schema/README.md | 22 + api/stately/schema/app.ts | 27 + api/stately/schema/global-settings.ts | 31 + api/stately/schema/index.ts | 9 + api/stately/schema/loadout-share.ts | 25 + api/stately/schema/loadouts.ts | 238 ++ api/stately/schema/search.ts | 54 + api/stately/schema/settings.ts | 245 ++ api/stately/schema/tags.ts | 78 + api/stately/schema/triumphs.ts | 20 + api/stately/schema/types.ts | 26 + kubernetes/dim-api-deployment.yaml | 5 + package.json | 100 +- pnpm-lock.yaml | 3269 ++++++++++------- 23 files changed, 4472 insertions(+), 1393 deletions(-) create mode 100644 api/stately/client.ts create mode 100644 api/stately/generated/index.d.ts create mode 100644 api/stately/generated/index.js create mode 100644 api/stately/generated/stately_item_types.d.ts create mode 100644 api/stately/generated/stately_item_types.js create mode 100644 api/stately/generated/stately_pb.d.ts create mode 100644 api/stately/generated/stately_pb.js create mode 100644 api/stately/init/global-settings.ts create mode 100644 api/stately/schema/README.md create mode 100644 api/stately/schema/app.ts create mode 100644 api/stately/schema/global-settings.ts create mode 100644 api/stately/schema/index.ts create mode 100644 api/stately/schema/loadout-share.ts create mode 100644 api/stately/schema/loadouts.ts create mode 100644 api/stately/schema/search.ts create mode 100644 api/stately/schema/settings.ts create mode 100644 api/stately/schema/tags.ts create mode 100644 api/stately/schema/triumphs.ts create mode 100644 api/stately/schema/types.ts diff --git a/api/routes/platform-info.ts b/api/routes/platform-info.ts index 1f460fc..5d98a58 100644 --- a/api/routes/platform-info.ts +++ b/api/routes/platform-info.ts @@ -1,20 +1,43 @@ +import { keyPath } from '@stately-cloud/client'; import asyncHandler from 'express-async-handler'; import { pool } from '../db/index.js'; import { defaultGlobalSettings, GlobalSettings } from '../shapes/global-settings.js'; +import { client } from '../stately/client.js'; import { camelize } from '../utils.js'; export const platformInfoHandler = asyncHandler(async (req, res) => { const flavor = (req.query.flavor as string) ?? 'app'; - const result = await pool.query({ - name: 'get_global_settings', - text: 'SELECT * FROM global_settings where flavor = $1 LIMIT 1', - values: [flavor], - }); - const settings = - result.rowCount > 0 - ? { ...defaultGlobalSettings, ...camelize(result.rows[0]) } - : defaultGlobalSettings; + let settings: GlobalSettings | undefined = undefined; + try { + // Try StatelyDB first, then fall back to Postgres + const statelySettings = await client.get('GlobalSettings', keyPath`/gs-${flavor}`); + if (statelySettings) { + settings = { + ...statelySettings, + // I have to manually convert these to numbers + destinyProfileMinimumRefreshInterval: Number( + statelySettings.destinyProfileMinimumRefreshInterval, + ), + destinyProfileRefreshInterval: Number(statelySettings.destinyProfileRefreshInterval), + dimProfileMinimumRefreshInterval: Number(statelySettings.dimProfileMinimumRefreshInterval), + }; + } + } catch (e) { + console.error('Error loading global settings from Stately:', flavor, e); + } + + if (!settings) { + const result = await pool.query({ + name: 'get_global_settings', + text: 'SELECT * FROM global_settings where flavor = $1 LIMIT 1', + values: [flavor], + }); + settings = + (result.rowCount ?? 0) > 0 + ? { ...defaultGlobalSettings, ...camelize(result.rows[0]) } + : defaultGlobalSettings; + } // Instruct CF to cache for 15 minutes res.set('Cache-Control', 'public, max-age=900'); diff --git a/api/stately/client.ts b/api/stately/client.ts new file mode 100644 index 0000000..470ddab --- /dev/null +++ b/api/stately/client.ts @@ -0,0 +1,6 @@ +import { createClient } from './generated/stately_item_types.js'; + +/** + * Our StatelyDB client, bound to our types and store. + */ +export const client = createClient(3129210249316993n); diff --git a/api/stately/generated/index.d.ts b/api/stately/generated/index.d.ts new file mode 100644 index 0000000..a38210b --- /dev/null +++ b/api/stately/generated/index.d.ts @@ -0,0 +1,4 @@ +// Code generated by Stately. DO NOT EDIT. + +export * from "./stately_pb.js"; +export * from "./stately_item_types.js"; diff --git a/api/stately/generated/index.js b/api/stately/generated/index.js new file mode 100644 index 0000000..8eb76f2 --- /dev/null +++ b/api/stately/generated/index.js @@ -0,0 +1,4 @@ +// Code generated by Stately. DO NOT EDIT. + +export * from './stately_item_types.js'; +export * from './stately_pb.js'; diff --git a/api/stately/generated/stately_item_types.d.ts b/api/stately/generated/stately_item_types.d.ts new file mode 100644 index 0000000..07625fa --- /dev/null +++ b/api/stately/generated/stately_item_types.d.ts @@ -0,0 +1,92 @@ +// Code generated by Stately. DO NOT EDIT. + +import type { DatabaseClient as GenericDatabaseClient, StoreID, ClientOptions } from "@stately-cloud/client"; +import type { + ApiApp, + GlobalSettings, + ItemAnnotation, + ItemHashTag, + Loadout, + LoadoutShare, + Search, + Settings, + Triumph, + ApiAppSchema, + GlobalSettingsSchema, + ItemAnnotationSchema, + ItemHashTagSchema, + LoadoutSchema, + LoadoutShareSchema, + SearchSchema, + SettingsSchema, + TriumphSchema, + ArtifactUnlocksSchema, + CollapsedSectionSchema, + CustomStatDefSchema, + CustomStatWeightsEntrySchema, + CustomStatsEntrySchema, + InGameLoadoutIdentifiersSchema, + LoadoutItemSchema, + LoadoutParametersSchema, + ModsByBucketEntrySchema, + SocketOverrideSchema, + StatConstraintSchema, + StatConstraintsEntrySchema, +} from "./stately_pb.js"; + +export declare const itemTypeToSchema: { + "ApiApp": typeof ApiAppSchema, + "GlobalSettings": typeof GlobalSettingsSchema, + "ItemAnnotation": typeof ItemAnnotationSchema, + "ItemHashTag": typeof ItemHashTagSchema, + "Loadout": typeof LoadoutSchema, + "LoadoutShare": typeof LoadoutShareSchema, + "Search": typeof SearchSchema, + "Settings": typeof SettingsSchema, + "Triumph": typeof TriumphSchema, + "ArtifactUnlocks": typeof ArtifactUnlocksSchema, + "CollapsedSection": typeof CollapsedSectionSchema, + "CustomStatDef": typeof CustomStatDefSchema, + "CustomStatWeightsEntry": typeof CustomStatWeightsEntrySchema, + "CustomStatsEntry": typeof CustomStatsEntrySchema, + "InGameLoadoutIdentifiers": typeof InGameLoadoutIdentifiersSchema, + "LoadoutItem": typeof LoadoutItemSchema, + "LoadoutParameters": typeof LoadoutParametersSchema, + "ModsByBucketEntry": typeof ModsByBucketEntrySchema, + "SocketOverride": typeof SocketOverrideSchema, + "StatConstraint": typeof StatConstraintSchema, + "StatConstraintsEntry": typeof StatConstraintsEntrySchema, +}; + +// AllItemTypes is a convenience type that represents all item type names in your schema. +export type AllItemTypes = + | "ApiApp" + | "GlobalSettings" + | "ItemAnnotation" + | "ItemHashTag" + | "Loadout" + | "LoadoutShare" + | "Search" + | "Settings" + | "Triumph"; + +// AnyItem is a convenience type that represents any item shape in your schema. +export type AnyItem = + | ApiApp + | GlobalSettings + | ItemAnnotation + | ItemHashTag + | Loadout + | LoadoutShare + | Search + | Settings + | Triumph; + +// DatabaseClient is a database client that has been customized with your schema. +export type DatabaseClient = GenericDatabaseClient; + +// createClient creates a new database client with your schema. +export declare function createClient( + storeId: StoreID, + opts?: ClientOptions, +): DatabaseClient; diff --git a/api/stately/generated/stately_item_types.js b/api/stately/generated/stately_item_types.js new file mode 100644 index 0000000..f3bb4e0 --- /dev/null +++ b/api/stately/generated/stately_item_types.js @@ -0,0 +1,57 @@ +// Code generated by Stately. DO NOT EDIT. + +import { createClient as createGenericClient } from '@stately-cloud/client'; +import { + ApiAppSchema, + ArtifactUnlocksSchema, + CollapsedSectionSchema, + CustomStatDefSchema, + CustomStatWeightsEntrySchema, + CustomStatsEntrySchema, + GlobalSettingsSchema, + InGameLoadoutIdentifiersSchema, + ItemAnnotationSchema, + ItemHashTagSchema, + LoadoutItemSchema, + LoadoutParametersSchema, + LoadoutSchema, + LoadoutShareSchema, + ModsByBucketEntrySchema, + SearchSchema, + SettingsSchema, + SocketOverrideSchema, + StatConstraintSchema, + StatConstraintsEntrySchema, + TriumphSchema, +} from './stately_pb.js'; + +export const typeToSchema = { + // itemTypes + ApiApp: ApiAppSchema, + GlobalSettings: GlobalSettingsSchema, + ItemAnnotation: ItemAnnotationSchema, + ItemHashTag: ItemHashTagSchema, + Loadout: LoadoutSchema, + LoadoutShare: LoadoutShareSchema, + Search: SearchSchema, + Settings: SettingsSchema, + Triumph: TriumphSchema, + + // objectTypes + ArtifactUnlocks: ArtifactUnlocksSchema, + CollapsedSection: CollapsedSectionSchema, + CustomStatDef: CustomStatDefSchema, + CustomStatWeightsEntry: CustomStatWeightsEntrySchema, + CustomStatsEntry: CustomStatsEntrySchema, + InGameLoadoutIdentifiers: InGameLoadoutIdentifiersSchema, + LoadoutItem: LoadoutItemSchema, + LoadoutParameters: LoadoutParametersSchema, + ModsByBucketEntry: ModsByBucketEntrySchema, + SocketOverride: SocketOverrideSchema, + StatConstraint: StatConstraintSchema, + StatConstraintsEntry: StatConstraintsEntrySchema, +}; + +export function createClient(storeId, opts) { + return createGenericClient(storeId, typeToSchema, opts); +} diff --git a/api/stately/generated/stately_pb.d.ts b/api/stately/generated/stately_pb.d.ts new file mode 100644 index 0000000..2beafd2 --- /dev/null +++ b/api/stately/generated/stately_pb.d.ts @@ -0,0 +1,1233 @@ +// @generated by protoc-gen-es v2.0.0 with parameter "target=js+dts,import_extension=.js" +// @generated from file stately.proto (package stately.generated, syntax proto3) +/* eslint-disable */ + +import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; +import type { Message } from "@bufbuild/protobuf"; + +/** + * Describes the file stately.proto. + */ +export declare const file_stately: GenFile; + +/** + * @generated from message stately.generated.ApiApp + */ +export declare type ApiApp = Message<"stately.generated.ApiApp"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string bungieApiKey = 2; + */ + bungieApiKey: string; + + /** + * @generated from field: string dimApiKey = 3; + */ + dimApiKey: string; + + /** + * @generated from field: string origin = 4; + */ + origin: string; +}; + +/** + * Describes the message stately.generated.ApiApp. + * Use `create(ApiAppSchema)` to create a new message. + */ +export declare const ApiAppSchema: GenMessage; + +/** + * @generated from message stately.generated.ArtifactUnlocks + */ +export declare type ArtifactUnlocks = Message<"stately.generated.ArtifactUnlocks"> & { + /** + * @generated from field: repeated uint64 unlockedItemHashes = 1; + */ + unlockedItemHashes: bigint[]; + + /** + * @generated from field: uint64 seasonNumber = 2; + */ + seasonNumber: bigint; +}; + +/** + * Describes the message stately.generated.ArtifactUnlocks. + * Use `create(ArtifactUnlocksSchema)` to create a new message. + */ +export declare const ArtifactUnlocksSchema: GenMessage; + +/** + * @generated from message stately.generated.CollapsedSection + */ +export declare type CollapsedSection = Message<"stately.generated.CollapsedSection"> & { + /** + * @generated from field: string key = 1; + */ + key: string; + + /** + * @generated from field: bool collapsed = 2; + */ + collapsed: boolean; +}; + +/** + * Describes the message stately.generated.CollapsedSection. + * Use `create(CollapsedSectionSchema)` to create a new message. + */ +export declare const CollapsedSectionSchema: GenMessage; + +/** + * @generated from message stately.generated.CustomStatDef + */ +export declare type CustomStatDef = Message<"stately.generated.CustomStatDef"> & { + /** + * @generated from field: uint64 statHash = 1; + */ + statHash: bigint; + + /** + * @generated from field: string label = 2; + */ + label: string; + + /** + * @generated from field: string shortLabel = 3; + */ + shortLabel: string; + + /** + * @generated from field: stately.generated.DestinyClass class = 4; + */ + class: DestinyClass; + + /** + * @generated from field: repeated stately.generated.CustomStatWeightsEntry weights = 5; + */ + weights: CustomStatWeightsEntry[]; +}; + +/** + * Describes the message stately.generated.CustomStatDef. + * Use `create(CustomStatDefSchema)` to create a new message. + */ +export declare const CustomStatDefSchema: GenMessage; + +/** + * @generated from message stately.generated.CustomStatWeightsEntry + */ +export declare type CustomStatWeightsEntry = Message<"stately.generated.CustomStatWeightsEntry"> & { + /** + * @generated from field: uint64 statHash = 1; + */ + statHash: bigint; + + /** + * @generated from field: double weight = 2; + */ + weight: number; +}; + +/** + * Describes the message stately.generated.CustomStatWeightsEntry. + * Use `create(CustomStatWeightsEntrySchema)` to create a new message. + */ +export declare const CustomStatWeightsEntrySchema: GenMessage; + +/** + * @generated from message stately.generated.CustomStatsEntry + */ +export declare type CustomStatsEntry = Message<"stately.generated.CustomStatsEntry"> & { + /** + * @generated from field: stately.generated.DestinyClass classType = 1; + */ + classType: DestinyClass; + + /** + * @generated from field: repeated uint64 customStats = 2; + */ + customStats: bigint[]; +}; + +/** + * Describes the message stately.generated.CustomStatsEntry. + * Use `create(CustomStatsEntrySchema)` to create a new message. + */ +export declare const CustomStatsEntrySchema: GenMessage; + +/** + * @generated from message stately.generated.GlobalSettings + */ +export declare type GlobalSettings = Message<"stately.generated.GlobalSettings"> & { + /** + * @generated from field: string stage = 1; + */ + stage: string; + + /** + * @generated from field: bool dimApiEnabled = 2; + */ + dimApiEnabled: boolean; + + /** + * @generated from field: sint64 destinyProfileMinimumRefreshInterval = 3; + */ + destinyProfileMinimumRefreshInterval: bigint; + + /** + * @generated from field: sint64 destinyProfileRefreshInterval = 4; + */ + destinyProfileRefreshInterval: bigint; + + /** + * @generated from field: bool autoRefresh = 5; + */ + autoRefresh: boolean; + + /** + * @generated from field: bool refreshProfileOnVisible = 6; + */ + refreshProfileOnVisible: boolean; + + /** + * @generated from field: sint64 dimProfileMinimumRefreshInterval = 7; + */ + dimProfileMinimumRefreshInterval: bigint; + + /** + * @generated from field: bool showIssueBanner = 8; + */ + showIssueBanner: boolean; + + /** + * @generated from field: sint64 lastUpdated = 9; + */ + lastUpdated: bigint; +}; + +/** + * Describes the message stately.generated.GlobalSettings. + * Use `create(GlobalSettingsSchema)` to create a new message. + */ +export declare const GlobalSettingsSchema: GenMessage; + +/** + * @generated from message stately.generated.InGameLoadoutIdentifiers + */ +export declare type InGameLoadoutIdentifiers = Message<"stately.generated.InGameLoadoutIdentifiers"> & { + /** + * @generated from field: uint64 colorHash = 1; + */ + colorHash: bigint; + + /** + * @generated from field: uint64 iconHash = 2; + */ + iconHash: bigint; + + /** + * @generated from field: uint64 nameHash = 3; + */ + nameHash: bigint; +}; + +/** + * Describes the message stately.generated.InGameLoadoutIdentifiers. + * Use `create(InGameLoadoutIdentifiersSchema)` to create a new message. + */ +export declare const InGameLoadoutIdentifiersSchema: GenMessage; + +/** + * @generated from message stately.generated.ItemAnnotation + */ +export declare type ItemAnnotation = Message<"stately.generated.ItemAnnotation"> & { + /** + * @generated from field: uint64 hash = 1; + */ + hash: bigint; + + /** + * @generated from field: stately.generated.TagValue tag = 2; + */ + tag: TagValue; + + /** + * @generated from field: string notes = 3; + */ + notes: string; + + /** + * @generated from field: uint64 profileId = 6; + */ + profileId: bigint; + + /** + * @generated from field: uint64 destinyVersion = 7; + */ + destinyVersion: bigint; + + /** + * @generated from field: uint64 id = 4; + */ + id: bigint; + + /** + * @generated from field: sint64 craftedDate = 5; + */ + craftedDate: bigint; +}; + +/** + * Describes the message stately.generated.ItemAnnotation. + * Use `create(ItemAnnotationSchema)` to create a new message. + */ +export declare const ItemAnnotationSchema: GenMessage; + +/** + * @generated from message stately.generated.ItemHashTag + */ +export declare type ItemHashTag = Message<"stately.generated.ItemHashTag"> & { + /** + * @generated from field: uint64 hash = 1; + */ + hash: bigint; + + /** + * @generated from field: stately.generated.TagValue tag = 2; + */ + tag: TagValue; + + /** + * @generated from field: string notes = 3; + */ + notes: string; + + /** + * @generated from field: uint64 profileId = 6; + */ + profileId: bigint; + + /** + * @generated from field: uint64 destinyVersion = 7; + */ + destinyVersion: bigint; +}; + +/** + * Describes the message stately.generated.ItemHashTag. + * Use `create(ItemHashTagSchema)` to create a new message. + */ +export declare const ItemHashTagSchema: GenMessage; + +/** + * @generated from message stately.generated.Loadout + */ +export declare type Loadout = Message<"stately.generated.Loadout"> & { + /** + * @generated from field: bytes id = 1; + */ + id: Uint8Array; + + /** + * @generated from field: string name = 2; + */ + name: string; + + /** + * @generated from field: string notes = 3; + */ + notes: string; + + /** + * @generated from field: stately.generated.DestinyClass classType = 4; + */ + classType: DestinyClass; + + /** + * @generated from field: repeated stately.generated.LoadoutItem equipped = 5; + */ + equipped: LoadoutItem[]; + + /** + * @generated from field: repeated stately.generated.LoadoutItem unequipped = 6; + */ + unequipped: LoadoutItem[]; + + /** + * @generated from field: stately.generated.LoadoutParameters parameters = 7; + */ + parameters?: LoadoutParameters; + + /** + * @generated from field: sint64 createdAt = 8; + */ + createdAt: bigint; + + /** + * @generated from field: sint64 lastUpdatedAt = 9; + */ + lastUpdatedAt: bigint; + + /** + * @generated from field: uint64 destinyVersion = 10; + */ + destinyVersion: bigint; + + /** + * @generated from field: uint64 profileId = 11; + */ + profileId: bigint; +}; + +/** + * Describes the message stately.generated.Loadout. + * Use `create(LoadoutSchema)` to create a new message. + */ +export declare const LoadoutSchema: GenMessage; + +/** + * @generated from message stately.generated.LoadoutItem + */ +export declare type LoadoutItem = Message<"stately.generated.LoadoutItem"> & { + /** + * @generated from field: uint64 id = 1; + */ + id: bigint; + + /** + * @generated from field: uint64 hash = 2; + */ + hash: bigint; + + /** + * @generated from field: uint64 amount = 3; + */ + amount: bigint; + + /** + * @generated from field: repeated stately.generated.SocketOverride socketOverrides = 4; + */ + socketOverrides: SocketOverride[]; + + /** + * @generated from field: sint64 craftedDate = 5; + */ + craftedDate: bigint; +}; + +/** + * Describes the message stately.generated.LoadoutItem. + * Use `create(LoadoutItemSchema)` to create a new message. + */ +export declare const LoadoutItemSchema: GenMessage; + +/** + * @generated from message stately.generated.LoadoutParameters + */ +export declare type LoadoutParameters = Message<"stately.generated.LoadoutParameters"> & { + /** + * @generated from field: repeated stately.generated.StatConstraint statConstraints = 1; + */ + statConstraints: StatConstraint[]; + + /** + * @generated from field: repeated uint64 mods = 2; + */ + mods: bigint[]; + + /** + * @generated from field: bool clearMods = 3; + */ + clearMods: boolean; + + /** + * @generated from field: bool clearWeapons = 4; + */ + clearWeapons: boolean; + + /** + * @generated from field: bool clearArmor = 5; + */ + clearArmor: boolean; + + /** + * @generated from field: stately.generated.ModsByBucketEntry modsByBucket = 6; + */ + modsByBucket?: ModsByBucketEntry; + + /** + * @generated from field: stately.generated.ArtifactUnlocks artifactUnlocks = 7; + */ + artifactUnlocks?: ArtifactUnlocks; + + /** + * @generated from field: bool autoStatMods = 8; + */ + autoStatMods: boolean; + + /** + * @generated from field: string query = 9; + */ + query: string; + + /** + * @generated from field: stately.generated.AssumeArmorMasterwork assumeArmorMasterwork = 10; + */ + assumeArmorMasterwork: AssumeArmorMasterwork; + + /** + * @generated from field: uint64 exoticArmorHash = 11; + */ + exoticArmorHash: bigint; + + /** + * @generated from field: stately.generated.InGameLoadoutIdentifiers inGameIdentifiers = 12; + */ + inGameIdentifiers?: InGameLoadoutIdentifiers; + + /** + * @generated from field: bool includeRuntimeStatBenefits = 13; + */ + includeRuntimeStatBenefits: boolean; +}; + +/** + * Describes the message stately.generated.LoadoutParameters. + * Use `create(LoadoutParametersSchema)` to create a new message. + */ +export declare const LoadoutParametersSchema: GenMessage; + +/** + * @generated from message stately.generated.LoadoutShare + */ +export declare type LoadoutShare = Message<"stately.generated.LoadoutShare"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string name = 2; + */ + name: string; + + /** + * @generated from field: string notes = 3; + */ + notes: string; + + /** + * @generated from field: stately.generated.DestinyClass classType = 4; + */ + classType: DestinyClass; + + /** + * @generated from field: repeated stately.generated.LoadoutItem equipped = 5; + */ + equipped: LoadoutItem[]; + + /** + * @generated from field: repeated stately.generated.LoadoutItem unequipped = 6; + */ + unequipped: LoadoutItem[]; + + /** + * @generated from field: stately.generated.LoadoutParameters parameters = 7; + */ + parameters?: LoadoutParameters; + + /** + * @generated from field: sint64 createdAt = 8; + */ + createdAt: bigint; + + /** + * @generated from field: sint64 lastUpdatedAt = 9; + */ + lastUpdatedAt: bigint; + + /** + * @generated from field: uint64 destinyVersion = 10; + */ + destinyVersion: bigint; + + /** + * @generated from field: uint64 profileId = 11; + */ + profileId: bigint; +}; + +/** + * Describes the message stately.generated.LoadoutShare. + * Use `create(LoadoutShareSchema)` to create a new message. + */ +export declare const LoadoutShareSchema: GenMessage; + +/** + * @generated from message stately.generated.ModsByBucketEntry + */ +export declare type ModsByBucketEntry = Message<"stately.generated.ModsByBucketEntry"> & { + /** + * @generated from field: uint64 bucketHash = 1; + */ + bucketHash: bigint; + + /** + * @generated from field: repeated uint64 modHashes = 2; + */ + modHashes: bigint[]; +}; + +/** + * Describes the message stately.generated.ModsByBucketEntry. + * Use `create(ModsByBucketEntrySchema)` to create a new message. + */ +export declare const ModsByBucketEntrySchema: GenMessage; + +/** + * @generated from message stately.generated.Search + */ +export declare type Search = Message<"stately.generated.Search"> & { + /** + * @generated from field: string query = 1; + */ + query: string; + + /** + * @generated from field: uint64 usageCount = 2; + */ + usageCount: bigint; + + /** + * @generated from field: bool saved = 3; + */ + saved: boolean; + + /** + * @generated from field: sint64 lastUsage = 4; + */ + lastUsage: bigint; + + /** + * @generated from field: stately.generated.SearchType type = 5; + */ + type: SearchType; + + /** + * @generated from field: bytes qhash = 6; + */ + qhash: Uint8Array; + + /** + * @generated from field: uint64 profileId = 7; + */ + profileId: bigint; + + /** + * @generated from field: uint64 destinyVersion = 8; + */ + destinyVersion: bigint; +}; + +/** + * Describes the message stately.generated.Search. + * Use `create(SearchSchema)` to create a new message. + */ +export declare const SearchSchema: GenMessage; + +/** + * @generated from message stately.generated.Settings + */ +export declare type Settings = Message<"stately.generated.Settings"> & { + /** + * @generated from field: string memberId = 1; + */ + memberId: string; + + /** + * @generated from field: bool itemQuality = 2; + */ + itemQuality: boolean; + + /** + * @generated from field: bool showNewItems = 3; + */ + showNewItems: boolean; + + /** + * @generated from field: stately.generated.CharacterOrder characterOrder = 4; + */ + characterOrder: CharacterOrder; + + /** + * @generated from field: repeated string itemSortOrderCustom = 5; + */ + itemSortOrderCustom: string[]; + + /** + * @generated from field: repeated string itemSortReversals = 6; + */ + itemSortReversals: string[]; + + /** + * @generated from field: uint64 charCol = 7; + */ + charCol: bigint; + + /** + * @generated from field: uint64 charColMobile = 8; + */ + charColMobile: bigint; + + /** + * @generated from field: uint64 itemSize = 9; + */ + itemSize: bigint; + + /** + * @generated from field: repeated stately.generated.CollapsedSection collapsedSections = 10; + */ + collapsedSections: CollapsedSection[]; + + /** + * @generated from field: bool completedRecordsHidden = 11; + */ + completedRecordsHidden: boolean; + + /** + * @generated from field: bool redactedRecordsRevealed = 12; + */ + redactedRecordsRevealed: boolean; + + /** + * @generated from field: bool farmingMakeRoomForItems = 13; + */ + farmingMakeRoomForItems: boolean; + + /** + * @generated from field: uint64 inventoryClearSpaces = 14; + */ + inventoryClearSpaces: bigint; + + /** + * @generated from field: bool hideCompletedRecords = 15; + */ + hideCompletedRecords: boolean; + + /** + * @generated from field: repeated string customCharacterSort = 16; + */ + customCharacterSort: string[]; + + /** + * @generated from field: stately.generated.InfuseDirection infusionDirection = 17; + */ + infusionDirection: InfuseDirection; + + /** + * @generated from field: string language = 18; + */ + language: string; + + /** + * @generated from field: repeated string wishListSources = 19; + */ + wishListSources: string[]; + + /** + * @generated from field: stately.generated.LoadoutParameters loParameters = 20; + */ + loParameters?: LoadoutParameters; + + /** + * @generated from field: repeated stately.generated.StatConstraintsEntry loStatConstraintsByClass = 21; + */ + loStatConstraintsByClass: StatConstraintsEntry[]; + + /** + * @generated from field: repeated stately.generated.CustomStatsEntry customTotalStatsByClass = 22; + */ + customTotalStatsByClass: CustomStatsEntry[]; + + /** + * @generated from field: repeated string organizerColumnsWeapons = 23; + */ + organizerColumnsWeapons: string[]; + + /** + * @generated from field: repeated string organizerColumnsArmor = 24; + */ + organizerColumnsArmor: string[]; + + /** + * @generated from field: repeated string organizerColumnsGhost = 25; + */ + organizerColumnsGhost: string[]; + + /** + * @generated from field: bool compareBaseStats = 26; + */ + compareBaseStats: boolean; + + /** + * @generated from field: bool sidecarCollapsed = 27; + */ + sidecarCollapsed: boolean; + + /** + * @generated from field: bool singleCharacter = 28; + */ + singleCharacter: boolean; + + /** + * @generated from field: bool badgePostmaster = 29; + */ + badgePostmaster: boolean; + + /** + * @generated from field: bool perkList = 30; + */ + perkList: boolean; + + /** + * @generated from field: stately.generated.LoadoutSort loadoutSort = 31; + */ + loadoutSort: LoadoutSort; + + /** + * @generated from field: bool itemFeedHideTagged = 32; + */ + itemFeedHideTagged: boolean; + + /** + * @generated from field: bool itemFeedExpanded = 33; + */ + itemFeedExpanded: boolean; + + /** + * @generated from field: bool hidePullFromPostmaster = 34; + */ + hidePullFromPostmaster: boolean; + + /** + * @generated from field: stately.generated.DescriptionOptions descriptionsToDisplay = 35; + */ + descriptionsToDisplay: DescriptionOptions; + + /** + * @generated from field: bool compareWeaponMasterwork = 36; + */ + compareWeaponMasterwork: boolean; + + /** + * @generated from field: uint64 itemFeedWatermark = 37; + */ + itemFeedWatermark: bigint; + + /** + * @generated from field: repeated stately.generated.CustomStatDef customStats = 38; + */ + customStats: CustomStatDef[]; + + /** + * @generated from field: bool autoLockTagged = 39; + */ + autoLockTagged: boolean; + + /** + * @generated from field: string theme = 40; + */ + theme: string; + + /** + * @generated from field: bool sortRecordProgression = 41; + */ + sortRecordProgression: boolean; + + /** + * @generated from field: bool vendorsHideSilverItems = 42; + */ + vendorsHideSilverItems: boolean; + + /** + * @generated from field: string vaultWeaponGrouping = 43; + */ + vaultWeaponGrouping: string; + + /** + * @generated from field: stately.generated.VaultWeaponGroupingStyle vaultWeaponGroupingStyle = 44; + */ + vaultWeaponGroupingStyle: VaultWeaponGroupingStyle; + + /** + * @generated from field: stately.generated.ItemPopupTab itemPopupTab = 45; + */ + itemPopupTab: ItemPopupTab; +}; + +/** + * Describes the message stately.generated.Settings. + * Use `create(SettingsSchema)` to create a new message. + */ +export declare const SettingsSchema: GenMessage; + +/** + * @generated from message stately.generated.SocketOverride + */ +export declare type SocketOverride = Message<"stately.generated.SocketOverride"> & { + /** + * @generated from field: uint64 socketIndex = 1; + */ + socketIndex: bigint; + + /** + * @generated from field: uint64 itemHash = 2; + */ + itemHash: bigint; +}; + +/** + * Describes the message stately.generated.SocketOverride. + * Use `create(SocketOverrideSchema)` to create a new message. + */ +export declare const SocketOverrideSchema: GenMessage; + +/** + * @generated from message stately.generated.StatConstraint + */ +export declare type StatConstraint = Message<"stately.generated.StatConstraint"> & { + /** + * @generated from field: uint64 statHash = 1; + */ + statHash: bigint; + + /** + * @generated from field: uint64 minTier = 2; + */ + minTier: bigint; + + /** + * @generated from field: uint64 maxTier = 3; + */ + maxTier: bigint; +}; + +/** + * Describes the message stately.generated.StatConstraint. + * Use `create(StatConstraintSchema)` to create a new message. + */ +export declare const StatConstraintSchema: GenMessage; + +/** + * @generated from message stately.generated.StatConstraintsEntry + */ +export declare type StatConstraintsEntry = Message<"stately.generated.StatConstraintsEntry"> & { + /** + * @generated from field: stately.generated.DestinyClass classType = 1; + */ + classType: DestinyClass; + + /** + * @generated from field: repeated stately.generated.StatConstraint constraints = 2; + */ + constraints: StatConstraint[]; +}; + +/** + * Describes the message stately.generated.StatConstraintsEntry. + * Use `create(StatConstraintsEntrySchema)` to create a new message. + */ +export declare const StatConstraintsEntrySchema: GenMessage; + +/** + * @generated from message stately.generated.Triumph + */ +export declare type Triumph = Message<"stately.generated.Triumph"> & { + /** + * @generated from field: uint64 recordHash = 1; + */ + recordHash: bigint; + + /** + * @generated from field: uint64 profileId = 2; + */ + profileId: bigint; + + /** + * @generated from field: uint64 destinyVersion = 7; + */ + destinyVersion: bigint; +}; + +/** + * Describes the message stately.generated.Triumph. + * Use `create(TriumphSchema)` to create a new message. + */ +export declare const TriumphSchema: GenMessage; + +/** + * @generated from enum stately.generated.AssumeArmorMasterwork + */ +export enum AssumeArmorMasterwork { + /** + * @generated from enum value: AssumeArmorMasterwork_None = 0; + */ + AssumeArmorMasterwork_None = 0, + + /** + * @generated from enum value: AssumeArmorMasterwork_Legendary = 1; + */ + AssumeArmorMasterwork_Legendary = 1, + + /** + * @generated from enum value: AssumeArmorMasterwork_All = 2; + */ + AssumeArmorMasterwork_All = 2, +} + +/** + * Describes the enum stately.generated.AssumeArmorMasterwork. + */ +export declare const AssumeArmorMasterworkSchema: GenEnum; + +/** + * @generated from enum stately.generated.CharacterOrder + */ +export enum CharacterOrder { + /** + * @generated from enum value: CharacterOrder_mostRecent = 0; + */ + CharacterOrder_mostRecent = 0, + + /** + * @generated from enum value: CharacterOrder_mostRecentReverse = 1; + */ + CharacterOrder_mostRecentReverse = 1, + + /** + * @generated from enum value: CharacterOrder_fixed = 2; + */ + CharacterOrder_fixed = 2, + + /** + * @generated from enum value: CharacterOrder_custom = 3; + */ + CharacterOrder_custom = 3, +} + +/** + * Describes the enum stately.generated.CharacterOrder. + */ +export declare const CharacterOrderSchema: GenEnum; + +/** + * @generated from enum stately.generated.DescriptionOptions + */ +export enum DescriptionOptions { + /** + * @generated from enum value: DescriptionOptions_UNSPECIFIED = 0; + */ + DescriptionOptions_UNSPECIFIED = 0, + + /** + * @generated from enum value: DescriptionOptions_bungie = 1; + */ + DescriptionOptions_bungie = 1, + + /** + * @generated from enum value: DescriptionOptions_community = 2; + */ + DescriptionOptions_community = 2, + + /** + * @generated from enum value: DescriptionOptions_both = 3; + */ + DescriptionOptions_both = 3, +} + +/** + * Describes the enum stately.generated.DescriptionOptions. + */ +export declare const DescriptionOptionsSchema: GenEnum; + +/** + * @generated from enum stately.generated.DestinyClass + */ +export enum DestinyClass { + /** + * @generated from enum value: DestinyClass_Titan = 0; + */ + DestinyClass_Titan = 0, + + /** + * @generated from enum value: DestinyClass_Hunter = 1; + */ + DestinyClass_Hunter = 1, + + /** + * @generated from enum value: DestinyClass_Warlock = 2; + */ + DestinyClass_Warlock = 2, + + /** + * @generated from enum value: DestinyClass_Unknown = 3; + */ + DestinyClass_Unknown = 3, +} + +/** + * Describes the enum stately.generated.DestinyClass. + */ +export declare const DestinyClassSchema: GenEnum; + +/** + * @generated from enum stately.generated.InfuseDirection + */ +export enum InfuseDirection { + /** + * @generated from enum value: InfuseDirection_UNSPECIFIED = 0; + */ + InfuseDirection_UNSPECIFIED = 0, + + /** + * @generated from enum value: InfuseDirection_Infuse = 1; + */ + InfuseDirection_Infuse = 1, + + /** + * @generated from enum value: InfuseDirection_Fuel = 2; + */ + InfuseDirection_Fuel = 2, +} + +/** + * Describes the enum stately.generated.InfuseDirection. + */ +export declare const InfuseDirectionSchema: GenEnum; + +/** + * @generated from enum stately.generated.ItemPopupTab + */ +export enum ItemPopupTab { + /** + * @generated from enum value: ItemPopupTab_Overview = 0; + */ + ItemPopupTab_Overview = 0, + + /** + * @generated from enum value: ItemPopupTab_Triage = 1; + */ + ItemPopupTab_Triage = 1, +} + +/** + * Describes the enum stately.generated.ItemPopupTab. + */ +export declare const ItemPopupTabSchema: GenEnum; + +/** + * @generated from enum stately.generated.LoadoutSort + */ +export enum LoadoutSort { + /** + * @generated from enum value: LoadoutSort_ByEditTime = 0; + */ + LoadoutSort_ByEditTime = 0, + + /** + * @generated from enum value: LoadoutSort_ByName = 1; + */ + LoadoutSort_ByName = 1, +} + +/** + * Describes the enum stately.generated.LoadoutSort. + */ +export declare const LoadoutSortSchema: GenEnum; + +/** + * @generated from enum stately.generated.SearchType + */ +export enum SearchType { + /** + * @generated from enum value: SearchType_Item = 0; + */ + SearchType_Item = 0, + + /** + * @generated from enum value: SearchType_Loadout = 1; + */ + SearchType_Loadout = 1, +} + +/** + * Describes the enum stately.generated.SearchType. + */ +export declare const SearchTypeSchema: GenEnum; + +/** + * @generated from enum stately.generated.TagValue + */ +export enum TagValue { + /** + * @generated from enum value: TagValue_UNSPECIFIED = 0; + */ + TagValue_UNSPECIFIED = 0, + + /** + * @generated from enum value: TagValue_favorite = 1; + */ + TagValue_favorite = 1, + + /** + * @generated from enum value: TagValue_keep = 2; + */ + TagValue_keep = 2, + + /** + * @generated from enum value: TagValue_infuse = 3; + */ + TagValue_infuse = 3, + + /** + * @generated from enum value: TagValue_junk = 4; + */ + TagValue_junk = 4, + + /** + * @generated from enum value: TagValue_archive = 5; + */ + TagValue_archive = 5, +} + +/** + * Describes the enum stately.generated.TagValue. + */ +export declare const TagValueSchema: GenEnum; + +/** + * @generated from enum stately.generated.VaultWeaponGroupingStyle + */ +export enum VaultWeaponGroupingStyle { + /** + * @generated from enum value: VaultWeaponGroupingStyle_Lines = 0; + */ + VaultWeaponGroupingStyle_Lines = 0, + + /** + * @generated from enum value: VaultWeaponGroupingStyle_Inline = 1; + */ + VaultWeaponGroupingStyle_Inline = 1, +} + +/** + * Describes the enum stately.generated.VaultWeaponGroupingStyle. + */ +export declare const VaultWeaponGroupingStyleSchema: GenEnum; + diff --git a/api/stately/generated/stately_pb.js b/api/stately/generated/stately_pb.js new file mode 100644 index 0000000..0bc2311 --- /dev/null +++ b/api/stately/generated/stately_pb.js @@ -0,0 +1,240 @@ +// @generated by protoc-gen-es v2.0.0 with parameter "target=js+dts,import_extension=.js" +// @generated from file stately.proto (package stately.generated, syntax proto3) +/* eslint-disable */ + +import { enumDesc, fileDesc, messageDesc, tsEnum } from '@bufbuild/protobuf/codegenv1'; + +/** + * Describes the file stately.proto. + */ +export const file_stately = + /*@__PURE__*/ + fileDesc( + 'Cg1zdGF0ZWx5LnByb3RvEhFzdGF0ZWx5LmdlbmVyYXRlZCJNCgZBcGlBcHASCgoCaWQYASABKAkSFAoMYnVuZ2llQXBpS2V5GAIgASgJEhEKCWRpbUFwaUtleRgDIAEoCRIOCgZvcmlnaW4YBCABKAkiQwoPQXJ0aWZhY3RVbmxvY2tzEhoKEnVubG9ja2VkSXRlbUhhc2hlcxgBIAMoBBIUCgxzZWFzb25OdW1iZXIYAiABKAQiMgoQQ29sbGFwc2VkU2VjdGlvbhILCgNrZXkYASABKAkSEQoJY29sbGFwc2VkGAIgASgIIrABCg1DdXN0b21TdGF0RGVmEhAKCHN0YXRIYXNoGAEgASgEEg0KBWxhYmVsGAIgASgJEhIKCnNob3J0TGFiZWwYAyABKAkSLgoFY2xhc3MYBCABKA4yHy5zdGF0ZWx5LmdlbmVyYXRlZC5EZXN0aW55Q2xhc3MSOgoHd2VpZ2h0cxgFIAMoCzIpLnN0YXRlbHkuZ2VuZXJhdGVkLkN1c3RvbVN0YXRXZWlnaHRzRW50cnkiOgoWQ3VzdG9tU3RhdFdlaWdodHNFbnRyeRIQCghzdGF0SGFzaBgBIAEoBBIOCgZ3ZWlnaHQYAiABKAEiWwoQQ3VzdG9tU3RhdHNFbnRyeRIyCgljbGFzc1R5cGUYASABKA4yHy5zdGF0ZWx5LmdlbmVyYXRlZC5EZXN0aW55Q2xhc3MSEwoLY3VzdG9tU3RhdHMYAiADKAQimQIKDkdsb2JhbFNldHRpbmdzEg0KBXN0YWdlGAEgASgJEhUKDWRpbUFwaUVuYWJsZWQYAiABKAgSLAokZGVzdGlueVByb2ZpbGVNaW5pbXVtUmVmcmVzaEludGVydmFsGAMgASgSEiUKHWRlc3RpbnlQcm9maWxlUmVmcmVzaEludGVydmFsGAQgASgSEhMKC2F1dG9SZWZyZXNoGAUgASgIEh8KF3JlZnJlc2hQcm9maWxlT25WaXNpYmxlGAYgASgIEigKIGRpbVByb2ZpbGVNaW5pbXVtUmVmcmVzaEludGVydmFsGAcgASgSEhcKD3Nob3dJc3N1ZUJhbm5lchgIIAEoCBITCgtsYXN0VXBkYXRlZBgJIAEoEiJRChhJbkdhbWVMb2Fkb3V0SWRlbnRpZmllcnMSEQoJY29sb3JIYXNoGAEgASgEEhAKCGljb25IYXNoGAIgASgEEhAKCG5hbWVIYXNoGAMgASgEIqMBCg5JdGVtQW5ub3RhdGlvbhIMCgRoYXNoGAEgASgEEigKA3RhZxgCIAEoDjIbLnN0YXRlbHkuZ2VuZXJhdGVkLlRhZ1ZhbHVlEg0KBW5vdGVzGAMgASgJEhEKCXByb2ZpbGVJZBgGIAEoBBIWCg5kZXN0aW55VmVyc2lvbhgHIAEoBBIKCgJpZBgEIAEoBBITCgtjcmFmdGVkRGF0ZRgFIAEoEiJ/CgtJdGVtSGFzaFRhZxIMCgRoYXNoGAEgASgEEigKA3RhZxgCIAEoDjIbLnN0YXRlbHkuZ2VuZXJhdGVkLlRhZ1ZhbHVlEg0KBW5vdGVzGAMgASgJEhEKCXByb2ZpbGVJZBgGIAEoBBIWCg5kZXN0aW55VmVyc2lvbhgHIAEoBCLbAgoHTG9hZG91dBIKCgJpZBgBIAEoDBIMCgRuYW1lGAIgASgJEg0KBW5vdGVzGAMgASgJEjIKCWNsYXNzVHlwZRgEIAEoDjIfLnN0YXRlbHkuZ2VuZXJhdGVkLkRlc3RpbnlDbGFzcxIwCghlcXVpcHBlZBgFIAMoCzIeLnN0YXRlbHkuZ2VuZXJhdGVkLkxvYWRvdXRJdGVtEjIKCnVuZXF1aXBwZWQYBiADKAsyHi5zdGF0ZWx5LmdlbmVyYXRlZC5Mb2Fkb3V0SXRlbRI4CgpwYXJhbWV0ZXJzGAcgASgLMiQuc3RhdGVseS5nZW5lcmF0ZWQuTG9hZG91dFBhcmFtZXRlcnMSEQoJY3JlYXRlZEF0GAggASgSEhUKDWxhc3RVcGRhdGVkQXQYCSABKBISFgoOZGVzdGlueVZlcnNpb24YCiABKAQSEQoJcHJvZmlsZUlkGAsgASgEIogBCgtMb2Fkb3V0SXRlbRIKCgJpZBgBIAEoBBIMCgRoYXNoGAIgASgEEg4KBmFtb3VudBgDIAEoBBI6Cg9zb2NrZXRPdmVycmlkZXMYBCADKAsyIS5zdGF0ZWx5LmdlbmVyYXRlZC5Tb2NrZXRPdmVycmlkZRITCgtjcmFmdGVkRGF0ZRgFIAEoEiKGBAoRTG9hZG91dFBhcmFtZXRlcnMSOgoPc3RhdENvbnN0cmFpbnRzGAEgAygLMiEuc3RhdGVseS5nZW5lcmF0ZWQuU3RhdENvbnN0cmFpbnQSDAoEbW9kcxgCIAMoBBIRCgljbGVhck1vZHMYAyABKAgSFAoMY2xlYXJXZWFwb25zGAQgASgIEhIKCmNsZWFyQXJtb3IYBSABKAgSOgoMbW9kc0J5QnVja2V0GAYgASgLMiQuc3RhdGVseS5nZW5lcmF0ZWQuTW9kc0J5QnVja2V0RW50cnkSOwoPYXJ0aWZhY3RVbmxvY2tzGAcgASgLMiIuc3RhdGVseS5nZW5lcmF0ZWQuQXJ0aWZhY3RVbmxvY2tzEhQKDGF1dG9TdGF0TW9kcxgIIAEoCBINCgVxdWVyeRgJIAEoCRJHChVhc3N1bWVBcm1vck1hc3RlcndvcmsYCiABKA4yKC5zdGF0ZWx5LmdlbmVyYXRlZC5Bc3N1bWVBcm1vck1hc3RlcndvcmsSFwoPZXhvdGljQXJtb3JIYXNoGAsgASgEEkYKEWluR2FtZUlkZW50aWZpZXJzGAwgASgLMisuc3RhdGVseS5nZW5lcmF0ZWQuSW5HYW1lTG9hZG91dElkZW50aWZpZXJzEiIKGmluY2x1ZGVSdW50aW1lU3RhdEJlbmVmaXRzGA0gASgIIuACCgxMb2Fkb3V0U2hhcmUSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRINCgVub3RlcxgDIAEoCRIyCgljbGFzc1R5cGUYBCABKA4yHy5zdGF0ZWx5LmdlbmVyYXRlZC5EZXN0aW55Q2xhc3MSMAoIZXF1aXBwZWQYBSADKAsyHi5zdGF0ZWx5LmdlbmVyYXRlZC5Mb2Fkb3V0SXRlbRIyCgp1bmVxdWlwcGVkGAYgAygLMh4uc3RhdGVseS5nZW5lcmF0ZWQuTG9hZG91dEl0ZW0SOAoKcGFyYW1ldGVycxgHIAEoCzIkLnN0YXRlbHkuZ2VuZXJhdGVkLkxvYWRvdXRQYXJhbWV0ZXJzEhEKCWNyZWF0ZWRBdBgIIAEoEhIVCg1sYXN0VXBkYXRlZEF0GAkgASgSEhYKDmRlc3RpbnlWZXJzaW9uGAogASgEEhEKCXByb2ZpbGVJZBgLIAEoBCI6ChFNb2RzQnlCdWNrZXRFbnRyeRISCgpidWNrZXRIYXNoGAEgASgEEhEKCW1vZEhhc2hlcxgCIAMoBCK0AQoGU2VhcmNoEg0KBXF1ZXJ5GAEgASgJEhIKCnVzYWdlQ291bnQYAiABKAQSDQoFc2F2ZWQYAyABKAgSEQoJbGFzdFVzYWdlGAQgASgSEisKBHR5cGUYBSABKA4yHS5zdGF0ZWx5LmdlbmVyYXRlZC5TZWFyY2hUeXBlEg0KBXFoYXNoGAYgASgMEhEKCXByb2ZpbGVJZBgHIAEoBBIWCg5kZXN0aW55VmVyc2lvbhgIIAEoBCLKDAoIU2V0dGluZ3MSEAoIbWVtYmVySWQYASABKAkSEwoLaXRlbVF1YWxpdHkYAiABKAgSFAoMc2hvd05ld0l0ZW1zGAMgASgIEjkKDmNoYXJhY3Rlck9yZGVyGAQgASgOMiEuc3RhdGVseS5nZW5lcmF0ZWQuQ2hhcmFjdGVyT3JkZXISGwoTaXRlbVNvcnRPcmRlckN1c3RvbRgFIAMoCRIZChFpdGVtU29ydFJldmVyc2FscxgGIAMoCRIPCgdjaGFyQ29sGAcgASgEEhUKDWNoYXJDb2xNb2JpbGUYCCABKAQSEAoIaXRlbVNpemUYCSABKAQSPgoRY29sbGFwc2VkU2VjdGlvbnMYCiADKAsyIy5zdGF0ZWx5LmdlbmVyYXRlZC5Db2xsYXBzZWRTZWN0aW9uEh4KFmNvbXBsZXRlZFJlY29yZHNIaWRkZW4YCyABKAgSHwoXcmVkYWN0ZWRSZWNvcmRzUmV2ZWFsZWQYDCABKAgSHwoXZmFybWluZ01ha2VSb29tRm9ySXRlbXMYDSABKAgSHAoUaW52ZW50b3J5Q2xlYXJTcGFjZXMYDiABKAQSHAoUaGlkZUNvbXBsZXRlZFJlY29yZHMYDyABKAgSGwoTY3VzdG9tQ2hhcmFjdGVyU29ydBgQIAMoCRI9ChFpbmZ1c2lvbkRpcmVjdGlvbhgRIAEoDjIiLnN0YXRlbHkuZ2VuZXJhdGVkLkluZnVzZURpcmVjdGlvbhIQCghsYW5ndWFnZRgSIAEoCRIXCg93aXNoTGlzdFNvdXJjZXMYEyADKAkSOgoMbG9QYXJhbWV0ZXJzGBQgASgLMiQuc3RhdGVseS5nZW5lcmF0ZWQuTG9hZG91dFBhcmFtZXRlcnMSSQoYbG9TdGF0Q29uc3RyYWludHNCeUNsYXNzGBUgAygLMicuc3RhdGVseS5nZW5lcmF0ZWQuU3RhdENvbnN0cmFpbnRzRW50cnkSRAoXY3VzdG9tVG90YWxTdGF0c0J5Q2xhc3MYFiADKAsyIy5zdGF0ZWx5LmdlbmVyYXRlZC5DdXN0b21TdGF0c0VudHJ5Eh8KF29yZ2FuaXplckNvbHVtbnNXZWFwb25zGBcgAygJEh0KFW9yZ2FuaXplckNvbHVtbnNBcm1vchgYIAMoCRIdChVvcmdhbml6ZXJDb2x1bW5zR2hvc3QYGSADKAkSGAoQY29tcGFyZUJhc2VTdGF0cxgaIAEoCBIYChBzaWRlY2FyQ29sbGFwc2VkGBsgASgIEhcKD3NpbmdsZUNoYXJhY3RlchgcIAEoCBIXCg9iYWRnZVBvc3RtYXN0ZXIYHSABKAgSEAoIcGVya0xpc3QYHiABKAgSMwoLbG9hZG91dFNvcnQYHyABKA4yHi5zdGF0ZWx5LmdlbmVyYXRlZC5Mb2Fkb3V0U29ydBIaChJpdGVtRmVlZEhpZGVUYWdnZWQYICABKAgSGAoQaXRlbUZlZWRFeHBhbmRlZBghIAEoCBIeChZoaWRlUHVsbEZyb21Qb3N0bWFzdGVyGCIgASgIEkQKFWRlc2NyaXB0aW9uc1RvRGlzcGxheRgjIAEoDjIlLnN0YXRlbHkuZ2VuZXJhdGVkLkRlc2NyaXB0aW9uT3B0aW9ucxIfChdjb21wYXJlV2VhcG9uTWFzdGVyd29yaxgkIAEoCBIZChFpdGVtRmVlZFdhdGVybWFyaxglIAEoBBI1CgtjdXN0b21TdGF0cxgmIAMoCzIgLnN0YXRlbHkuZ2VuZXJhdGVkLkN1c3RvbVN0YXREZWYSFgoOYXV0b0xvY2tUYWdnZWQYJyABKAgSDQoFdGhlbWUYKCABKAkSHQoVc29ydFJlY29yZFByb2dyZXNzaW9uGCkgASgIEh4KFnZlbmRvcnNIaWRlU2lsdmVySXRlbXMYKiABKAgSGwoTdmF1bHRXZWFwb25Hcm91cGluZxgrIAEoCRJNChh2YXVsdFdlYXBvbkdyb3VwaW5nU3R5bGUYLCABKA4yKy5zdGF0ZWx5LmdlbmVyYXRlZC5WYXVsdFdlYXBvbkdyb3VwaW5nU3R5bGUSNQoMaXRlbVBvcHVwVGFiGC0gASgOMh8uc3RhdGVseS5nZW5lcmF0ZWQuSXRlbVBvcHVwVGFiIjcKDlNvY2tldE92ZXJyaWRlEhMKC3NvY2tldEluZGV4GAEgASgEEhAKCGl0ZW1IYXNoGAIgASgEIkQKDlN0YXRDb25zdHJhaW50EhAKCHN0YXRIYXNoGAEgASgEEg8KB21pblRpZXIYAiABKAQSDwoHbWF4VGllchgDIAEoBCKCAQoUU3RhdENvbnN0cmFpbnRzRW50cnkSMgoJY2xhc3NUeXBlGAEgASgOMh8uc3RhdGVseS5nZW5lcmF0ZWQuRGVzdGlueUNsYXNzEjYKC2NvbnN0cmFpbnRzGAIgAygLMiEuc3RhdGVseS5nZW5lcmF0ZWQuU3RhdENvbnN0cmFpbnQiSAoHVHJpdW1waBISCgpyZWNvcmRIYXNoGAEgASgEEhEKCXByb2ZpbGVJZBgCIAEoBBIWCg5kZXN0aW55VmVyc2lvbhgHIAEoBCp7ChVBc3N1bWVBcm1vck1hc3RlcndvcmsSHgoaQXNzdW1lQXJtb3JNYXN0ZXJ3b3JrX05vbmUQABIjCh9Bc3N1bWVBcm1vck1hc3RlcndvcmtfTGVnZW5kYXJ5EAESHQoZQXNzdW1lQXJtb3JNYXN0ZXJ3b3JrX0FsbBACKooBCg5DaGFyYWN0ZXJPcmRlchIdChlDaGFyYWN0ZXJPcmRlcl9tb3N0UmVjZW50EAASJAogQ2hhcmFjdGVyT3JkZXJfbW9zdFJlY2VudFJldmVyc2UQARIYChRDaGFyYWN0ZXJPcmRlcl9maXhlZBACEhkKFUNoYXJhY3Rlck9yZGVyX2N1c3RvbRADKpYBChJEZXNjcmlwdGlvbk9wdGlvbnMSIgoeRGVzY3JpcHRpb25PcHRpb25zX1VOU1BFQ0lGSUVEEAASHQoZRGVzY3JpcHRpb25PcHRpb25zX2J1bmdpZRABEiAKHERlc2NyaXB0aW9uT3B0aW9uc19jb21tdW5pdHkQAhIbChdEZXNjcmlwdGlvbk9wdGlvbnNfYm90aBADKnMKDERlc3RpbnlDbGFzcxIWChJEZXN0aW55Q2xhc3NfVGl0YW4QABIXChNEZXN0aW55Q2xhc3NfSHVudGVyEAESGAoURGVzdGlueUNsYXNzX1dhcmxvY2sQAhIYChREZXN0aW55Q2xhc3NfVW5rbm93bhADKmgKD0luZnVzZURpcmVjdGlvbhIfChtJbmZ1c2VEaXJlY3Rpb25fVU5TUEVDSUZJRUQQABIaChZJbmZ1c2VEaXJlY3Rpb25fSW5mdXNlEAESGAoUSW5mdXNlRGlyZWN0aW9uX0Z1ZWwQAipCCgxJdGVtUG9wdXBUYWISGQoVSXRlbVBvcHVwVGFiX092ZXJ2aWV3EAASFwoTSXRlbVBvcHVwVGFiX1RyaWFnZRABKkEKC0xvYWRvdXRTb3J0EhoKFkxvYWRvdXRTb3J0X0J5RWRpdFRpbWUQABIWChJMb2Fkb3V0U29ydF9CeU5hbWUQASo5CgpTZWFyY2hUeXBlEhMKD1NlYXJjaFR5cGVfSXRlbRAAEhYKElNlYXJjaFR5cGVfTG9hZG91dBABKowBCghUYWdWYWx1ZRIYChRUYWdWYWx1ZV9VTlNQRUNJRklFRBAAEhUKEVRhZ1ZhbHVlX2Zhdm9yaXRlEAESEQoNVGFnVmFsdWVfa2VlcBACEhMKD1RhZ1ZhbHVlX2luZnVzZRADEhEKDVRhZ1ZhbHVlX2p1bmsQBBIUChBUYWdWYWx1ZV9hcmNoaXZlEAUqYwoYVmF1bHRXZWFwb25Hcm91cGluZ1N0eWxlEiIKHlZhdWx0V2VhcG9uR3JvdXBpbmdTdHlsZV9MaW5lcxAAEiMKH1ZhdWx0V2VhcG9uR3JvdXBpbmdTdHlsZV9JbmxpbmUQAWIGcHJvdG8z', + ); + +/** + * Describes the message stately.generated.ApiApp. + * Use `create(ApiAppSchema)` to create a new message. + */ +export const ApiAppSchema = /*@__PURE__*/ messageDesc(file_stately, 0); + +/** + * Describes the message stately.generated.ArtifactUnlocks. + * Use `create(ArtifactUnlocksSchema)` to create a new message. + */ +export const ArtifactUnlocksSchema = /*@__PURE__*/ messageDesc(file_stately, 1); + +/** + * Describes the message stately.generated.CollapsedSection. + * Use `create(CollapsedSectionSchema)` to create a new message. + */ +export const CollapsedSectionSchema = /*@__PURE__*/ messageDesc(file_stately, 2); + +/** + * Describes the message stately.generated.CustomStatDef. + * Use `create(CustomStatDefSchema)` to create a new message. + */ +export const CustomStatDefSchema = /*@__PURE__*/ messageDesc(file_stately, 3); + +/** + * Describes the message stately.generated.CustomStatWeightsEntry. + * Use `create(CustomStatWeightsEntrySchema)` to create a new message. + */ +export const CustomStatWeightsEntrySchema = /*@__PURE__*/ messageDesc(file_stately, 4); + +/** + * Describes the message stately.generated.CustomStatsEntry. + * Use `create(CustomStatsEntrySchema)` to create a new message. + */ +export const CustomStatsEntrySchema = /*@__PURE__*/ messageDesc(file_stately, 5); + +/** + * Describes the message stately.generated.GlobalSettings. + * Use `create(GlobalSettingsSchema)` to create a new message. + */ +export const GlobalSettingsSchema = /*@__PURE__*/ messageDesc(file_stately, 6); + +/** + * Describes the message stately.generated.InGameLoadoutIdentifiers. + * Use `create(InGameLoadoutIdentifiersSchema)` to create a new message. + */ +export const InGameLoadoutIdentifiersSchema = /*@__PURE__*/ messageDesc(file_stately, 7); + +/** + * Describes the message stately.generated.ItemAnnotation. + * Use `create(ItemAnnotationSchema)` to create a new message. + */ +export const ItemAnnotationSchema = /*@__PURE__*/ messageDesc(file_stately, 8); + +/** + * Describes the message stately.generated.ItemHashTag. + * Use `create(ItemHashTagSchema)` to create a new message. + */ +export const ItemHashTagSchema = /*@__PURE__*/ messageDesc(file_stately, 9); + +/** + * Describes the message stately.generated.Loadout. + * Use `create(LoadoutSchema)` to create a new message. + */ +export const LoadoutSchema = /*@__PURE__*/ messageDesc(file_stately, 10); + +/** + * Describes the message stately.generated.LoadoutItem. + * Use `create(LoadoutItemSchema)` to create a new message. + */ +export const LoadoutItemSchema = /*@__PURE__*/ messageDesc(file_stately, 11); + +/** + * Describes the message stately.generated.LoadoutParameters. + * Use `create(LoadoutParametersSchema)` to create a new message. + */ +export const LoadoutParametersSchema = /*@__PURE__*/ messageDesc(file_stately, 12); + +/** + * Describes the message stately.generated.LoadoutShare. + * Use `create(LoadoutShareSchema)` to create a new message. + */ +export const LoadoutShareSchema = /*@__PURE__*/ messageDesc(file_stately, 13); + +/** + * Describes the message stately.generated.ModsByBucketEntry. + * Use `create(ModsByBucketEntrySchema)` to create a new message. + */ +export const ModsByBucketEntrySchema = /*@__PURE__*/ messageDesc(file_stately, 14); + +/** + * Describes the message stately.generated.Search. + * Use `create(SearchSchema)` to create a new message. + */ +export const SearchSchema = /*@__PURE__*/ messageDesc(file_stately, 15); + +/** + * Describes the message stately.generated.Settings. + * Use `create(SettingsSchema)` to create a new message. + */ +export const SettingsSchema = /*@__PURE__*/ messageDesc(file_stately, 16); + +/** + * Describes the message stately.generated.SocketOverride. + * Use `create(SocketOverrideSchema)` to create a new message. + */ +export const SocketOverrideSchema = /*@__PURE__*/ messageDesc(file_stately, 17); + +/** + * Describes the message stately.generated.StatConstraint. + * Use `create(StatConstraintSchema)` to create a new message. + */ +export const StatConstraintSchema = /*@__PURE__*/ messageDesc(file_stately, 18); + +/** + * Describes the message stately.generated.StatConstraintsEntry. + * Use `create(StatConstraintsEntrySchema)` to create a new message. + */ +export const StatConstraintsEntrySchema = /*@__PURE__*/ messageDesc(file_stately, 19); + +/** + * Describes the message stately.generated.Triumph. + * Use `create(TriumphSchema)` to create a new message. + */ +export const TriumphSchema = /*@__PURE__*/ messageDesc(file_stately, 20); + +/** + * Describes the enum stately.generated.AssumeArmorMasterwork. + */ +export const AssumeArmorMasterworkSchema = /*@__PURE__*/ enumDesc(file_stately, 0); + +/** + * @generated from enum stately.generated.AssumeArmorMasterwork + */ +export const AssumeArmorMasterwork = /*@__PURE__*/ tsEnum(AssumeArmorMasterworkSchema); + +/** + * Describes the enum stately.generated.CharacterOrder. + */ +export const CharacterOrderSchema = /*@__PURE__*/ enumDesc(file_stately, 1); + +/** + * @generated from enum stately.generated.CharacterOrder + */ +export const CharacterOrder = /*@__PURE__*/ tsEnum(CharacterOrderSchema); + +/** + * Describes the enum stately.generated.DescriptionOptions. + */ +export const DescriptionOptionsSchema = /*@__PURE__*/ enumDesc(file_stately, 2); + +/** + * @generated from enum stately.generated.DescriptionOptions + */ +export const DescriptionOptions = /*@__PURE__*/ tsEnum(DescriptionOptionsSchema); + +/** + * Describes the enum stately.generated.DestinyClass. + */ +export const DestinyClassSchema = /*@__PURE__*/ enumDesc(file_stately, 3); + +/** + * @generated from enum stately.generated.DestinyClass + */ +export const DestinyClass = /*@__PURE__*/ tsEnum(DestinyClassSchema); + +/** + * Describes the enum stately.generated.InfuseDirection. + */ +export const InfuseDirectionSchema = /*@__PURE__*/ enumDesc(file_stately, 4); + +/** + * @generated from enum stately.generated.InfuseDirection + */ +export const InfuseDirection = /*@__PURE__*/ tsEnum(InfuseDirectionSchema); + +/** + * Describes the enum stately.generated.ItemPopupTab. + */ +export const ItemPopupTabSchema = /*@__PURE__*/ enumDesc(file_stately, 5); + +/** + * @generated from enum stately.generated.ItemPopupTab + */ +export const ItemPopupTab = /*@__PURE__*/ tsEnum(ItemPopupTabSchema); + +/** + * Describes the enum stately.generated.LoadoutSort. + */ +export const LoadoutSortSchema = /*@__PURE__*/ enumDesc(file_stately, 6); + +/** + * @generated from enum stately.generated.LoadoutSort + */ +export const LoadoutSort = /*@__PURE__*/ tsEnum(LoadoutSortSchema); + +/** + * Describes the enum stately.generated.SearchType. + */ +export const SearchTypeSchema = /*@__PURE__*/ enumDesc(file_stately, 7); + +/** + * @generated from enum stately.generated.SearchType + */ +export const SearchType = /*@__PURE__*/ tsEnum(SearchTypeSchema); + +/** + * Describes the enum stately.generated.TagValue. + */ +export const TagValueSchema = /*@__PURE__*/ enumDesc(file_stately, 8); + +/** + * @generated from enum stately.generated.TagValue + */ +export const TagValue = /*@__PURE__*/ tsEnum(TagValueSchema); + +/** + * Describes the enum stately.generated.VaultWeaponGroupingStyle. + */ +export const VaultWeaponGroupingStyleSchema = /*@__PURE__*/ enumDesc(file_stately, 9); + +/** + * @generated from enum stately.generated.VaultWeaponGroupingStyle + */ +export const VaultWeaponGroupingStyle = /*@__PURE__*/ tsEnum(VaultWeaponGroupingStyleSchema); diff --git a/api/stately/init/global-settings.ts b/api/stately/init/global-settings.ts new file mode 100644 index 0000000..c9488f8 --- /dev/null +++ b/api/stately/init/global-settings.ts @@ -0,0 +1,39 @@ +import { client } from '../client.js'; + +const devSettings = client.create('GlobalSettings', { + stage: 'dev', + dimApiEnabled: true, + destinyProfileMinimumRefreshInterval: 15n, + destinyProfileRefreshInterval: 120n, + autoRefresh: true, + refreshProfileOnVisible: true, + dimProfileMinimumRefreshInterval: 600n, + showIssueBanner: false, +}); + +const betaSettings = client.create('GlobalSettings', { + stage: 'beta', + dimApiEnabled: true, + destinyProfileMinimumRefreshInterval: 15n, + destinyProfileRefreshInterval: 120n, + autoRefresh: true, + refreshProfileOnVisible: true, + dimProfileMinimumRefreshInterval: 600n, + showIssueBanner: false, +}); + +const prodSettings = client.create('GlobalSettings', { + stage: 'app', + dimApiEnabled: true, + destinyProfileMinimumRefreshInterval: 15n, + destinyProfileRefreshInterval: 120n, + autoRefresh: true, + refreshProfileOnVisible: true, + dimProfileMinimumRefreshInterval: 600n, + showIssueBanner: false, +}); + +await client.putBatch(devSettings, betaSettings, prodSettings); + +console.log('Global settings initialized'); +process.exit(0); diff --git a/api/stately/schema/README.md b/api/stately/schema/README.md new file mode 100644 index 0000000..d388731 --- /dev/null +++ b/api/stately/schema/README.md @@ -0,0 +1,22 @@ +# DIM (Destiny Item Manager) Schema + +These are the objects that DIM stores in its own service - most data comes from Bungie's Destiny API, but certain amendments (custom tags, loadouts, etc.) are provided directly by DIM because they're not part of the game. + +Key paths are laid out like this: + +- `/app-:id`: `ApiApp` +- `/gs-:stage`: `GlobalSettings` +- `/loadoutShare-:id`: `LoadoutShare` +- `/member-:memberId/settings`: `Settings` +- `/p-:profileId` + - `/d-:destinyVersion` + - `/ia-:id`: `ItemAnnotation` + - `/iht-:hash`: `ItemHashTag` + - `/loadout-:id`: `Loadout` + - `/search-:qhash`: `Search` + - `/triumph-:recordHash`: `Triumph` + +The goal with this modeling is to allow for syncing all of a user's info in two StatelyDB operations: + +- `List("/p-:profileId/d-:destinyVersion")` - get all saved data for a particular game profile + destiny version (each profile can be associated with Destiny 1 and Destiny 2) +- `List("/member-:memberId")` - get settings for a whole Bungie.net account. It's a List instead of a Get so we can sync it! diff --git a/api/stately/schema/app.ts b/api/stately/schema/app.ts new file mode 100644 index 0000000..08fe9bf --- /dev/null +++ b/api/stately/schema/app.ts @@ -0,0 +1,27 @@ +import { itemType, string, type } from '@stately-cloud/schema'; + +// A UUID stored as a string. This is inefficient, but we always use them as +// strings in this API. +const uuidString = type('uuidString', string, { + // Copied from protovalidate + valid: + "this.matches('^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$')", +}); + +// "apps" aren't exposed to users - they're periodically synced by server instances. +export const ApiApp = itemType('ApiApp', { + keyPath: '/app-:id', + fields: { + /** A short ID that uniquely identifies the app. */ + id: { type: string, fieldNum: 1 }, + /** Apps must share their Bungie.net API key with us. */ + bungieApiKey: { type: string, fieldNum: 2 }, + /** Apps also get a generated API key for accessing DIM APIs that don't involve user data. */ + dimApiKey: { + type: uuidString, + fieldNum: 3 /* initialValue: 'uuid' Sad, I actually wanted this to be a new random UUID on insert */, + }, + /** The origin used to allow CORS for this app. Only requests from this origin are allowed. */ + origin: { type: string, fieldNum: 4 }, + }, +}); diff --git a/api/stately/schema/global-settings.ts b/api/stately/schema/global-settings.ts new file mode 100644 index 0000000..bc80e74 --- /dev/null +++ b/api/stately/schema/global-settings.ts @@ -0,0 +1,31 @@ +import { + bool, + durationSeconds, + itemType, + string, + timestampMilliseconds, +} from '@stately-cloud/schema'; + +// Clients load these settings from the server on startup. They change infrequently and are super cache-able. +export const GlobalSettings = itemType('GlobalSettings', { + keyPath: '/gs-:stage', + fields: { + stage: { type: string, fieldNum: 1 }, + /** Whether the API is enabled or not. */ + dimApiEnabled: { type: bool, fieldNum: 2, required: false }, + /** Don't allow refresh more often than this many seconds. */ + destinyProfileMinimumRefreshInterval: { type: durationSeconds, fieldNum: 3 }, + /** Time in seconds to refresh the profile when autoRefresh is true. */ + destinyProfileRefreshInterval: { type: durationSeconds, fieldNum: 4 }, + /** Whether to refresh profile automatically. */ + autoRefresh: { type: bool, fieldNum: 5, required: false }, + /** Whether to refresh profile when the page becomes visible after being in the background. */ + refreshProfileOnVisible: { type: bool, fieldNum: 6, required: false }, + /** Don't automatically refresh DIM profile info more often than this many seconds. */ + dimProfileMinimumRefreshInterval: { type: durationSeconds, fieldNum: 7 }, + /** Display an issue banner, if there is one. */ + showIssueBanner: { type: bool, fieldNum: 8, required: false }, + + lastUpdated: { type: timestampMilliseconds, fieldNum: 9, fromMetadata: 'lastModifiedAtTime' }, + }, +}); diff --git a/api/stately/schema/index.ts b/api/stately/schema/index.ts new file mode 100644 index 0000000..744f9cb --- /dev/null +++ b/api/stately/schema/index.ts @@ -0,0 +1,9 @@ +export * from './app.js'; +export * from './global-settings.js'; +export * from './loadout-share.js'; +export * from './loadouts.js'; +export * from './search.js'; +export * from './settings.js'; +export * from './tags.js'; +export * from './triumphs.js'; +export * from './types.js'; diff --git a/api/stately/schema/loadout-share.ts b/api/stately/schema/loadout-share.ts new file mode 100644 index 0000000..d727956 --- /dev/null +++ b/api/stately/schema/loadout-share.ts @@ -0,0 +1,25 @@ +import { itemType, string } from '@stately-cloud/schema'; +import { loadoutFields } from './loadouts.js'; + +export const LoadoutShare = itemType('LoadoutShare', { + // We put this under a profile and a destiny version so we can get all + // loadouts for a particular destiny version in one query + keyPath: [ + '/loadoutShare-:id', + // TODO: It'd be neat to store a compact pointer back to this under the + // user's profile, so we could list out shares. Maybe just an ID pointer, + // maybe project in the name as well... + // {path: "/p-:profileId/d-:destinyVersion/loadoutShare-:id", type: 'pointer' }, + ], + fields: { + /** + * A globally unique short random string to be used when sharing the loadout, but which is hard to guess. + * This is essentially 35 random bits encoded via base32 into a 7-character string. It'd be neat if we could + * support that, with a parameterizable string length. + */ + id: { type: string, fieldNum: 1 /*initialValue: 'rand35str'*/ }, + ...loadoutFields, + + // TODO: Where's the view-counter? + }, +}); diff --git a/api/stately/schema/loadouts.ts b/api/stately/schema/loadouts.ts new file mode 100644 index 0000000..b0b2c59 --- /dev/null +++ b/api/stately/schema/loadouts.ts @@ -0,0 +1,238 @@ +import { + Fields, + arrayOf, + bool, + enumType, + itemType, + objectType, + string, + timestampMilliseconds, + timestampSeconds, + uint, + uuid, +} from '@stately-cloud/schema'; +import { DestinyClass, DestinyVersion, HashID, ItemID, ProfileID } from './types.js'; + +export const SocketOverride = objectType('SocketOverride', { + fields: { + /** The index of the socket in the item */ + socketIndex: { type: uint, fieldNum: 1 }, + /** The hash of the item that should be in this socket */ + itemHash: { type: HashID, fieldNum: 2 }, + }, +}); + +export const LoadoutItem = objectType('LoadoutItem', { + fields: { + /** itemInstanceId of the item (if it's instanced). Default to zero for an uninstanced item or unknown ID. */ + id: { type: ItemID, fieldNum: 1, required: false }, + /** DestinyInventoryItemDefinition hash of the item */ + hash: { type: HashID, fieldNum: 2 }, + /** Optional amount (for consumables), default to zero */ + amount: { type: uint, fieldNum: 3, required: false }, + /** + * The socket overrides for the item. These signal what DestinyInventoryItemDefinition + * (by it's hash) is supposed to be socketed into the given socket index. + */ + socketOverrides: { type: arrayOf(SocketOverride), fieldNum: 4, required: false }, + /** + * UTC epoch seconds timestamp of when the item was crafted. Used to + * match up items that have changed instance ID from being reshaped since they + * were added to the loadout. + */ + craftedDate: { type: timestampSeconds, fieldNum: 5, required: false }, + }, +}); + +/** normally found inside DestinyLoadoutComponent, mapped to respective definition tables */ +export const InGameLoadoutIdentifiers = objectType('InGameLoadoutIdentifiers', { + fields: { + colorHash: { type: uint, fieldNum: 1 }, + iconHash: { type: uint, fieldNum: 2 }, + nameHash: { type: uint, fieldNum: 3 }, + }, +}); + +// These are reused in LoadoutShare +export const loadoutFields: Fields = { + /** Name/title for the loadout. */ + name: { type: string, fieldNum: 2 }, + /** Optional longform notes about the loadout. */ + notes: { type: string, fieldNum: 3, required: false }, + /** + * DestinyClass enum value for the class this loadout is restricted + * to. This is optional (set to Unknown for loadouts that can be used anywhere). + */ + classType: { type: DestinyClass, fieldNum: 4, required: false }, + /** List of equipped items in the loadout */ + equipped: { type: arrayOf(LoadoutItem), fieldNum: 5, required: false }, + /** List of unequipped items in the loadout */ + unequipped: { type: arrayOf(LoadoutItem), fieldNum: 6, required: false }, + /** Information about the desired properties of this loadout - used to drive the Loadout Optimizer or apply Mod Loadouts */ + parameters: { type: LoadoutParameters, fieldNum: 7, required: false }, + + /** When was this Loadout initially created? Tracked automatically by the API - when saving a loadout this field is ignored. */ + createdAt: { type: timestampMilliseconds, fieldNum: 8, fromMetadata: 'createdAtTime' }, + /** When was this Loadout last changed? Tracked automatically by the API - when saving a loadout this field is ignored. */ + lastUpdatedAt: { type: timestampMilliseconds, fieldNum: 9, fromMetadata: 'lastModifiedAtTime' }, + + destinyVersion: { type: DestinyVersion, fieldNum: 10 }, + profileId: { type: ProfileID, fieldNum: 11 }, +}; + +export const Loadout = itemType('Loadout', { + // We put this under a profile and a destiny version so we can get all + // loadouts for a particular destiny version in one query + keyPath: '/p-:profileId/d-:destinyVersion/loadout-:id', + fields: { + /** + * A globally unique (UUID) identifier for the loadout. Chosen by the client, not autogenerated by the DB. + */ + id: { type: uuid, fieldNum: 1 }, + ...loadoutFields, + }, +}); + +/** Whether armor of this type will have assumed masterworked stats in the Loadout Optimizer. */ +export function AssumeArmorMasterwork() { + return enumType('AssumeArmorMasterwork', { + /** No armor will have assumed masterworked stats. */ + None: 0, + /** Only legendary armor will have assumed masterworked stats. */ + Legendary: 1, + /** All armor (legendary & exotic) will have assumed masterworked stats. */ + All: 2, + }); +} + +/** How the loadouts menu and page should be sorted */ +export const LoadoutSort = enumType('LoadoutSort', { + ByEditTime: 0, + ByName: 1, +}); + +export function ModsByBucketEntry() { + return objectType('ModsByBucketEntry', { + fields: { + bucketHash: { type: HashID, fieldNum: 1 }, + modHashes: { type: arrayOf(HashID), fieldNum: 2 }, + }, + }); +} + +export function ArtifactUnlocks() { + return objectType('ArtifactUnlocks', { + fields: { + /** The item hashes of the unlocked artifact perk items. */ + unlockedItemHashes: { type: arrayOf(HashID), fieldNum: 1 }, + /** The season this set of artifact unlocks was chosen from. */ + seasonNumber: { type: uint, fieldNum: 2 }, + }, + }); +} + +/** + * Parameters that explain how this loadout was chosen (in Loadout Optimizer) + * and at the same time, how this loadout should be configured when equipped. + * This can be used to re-load a loadout into Loadout Optimizer with its + * settings intact, or to equip the right mods when applying a loadout if AWA is + * ever released. + * + * Originally this was meant to model parameters independent of specific items, + * as a means of sharing Loadout Optimizer settings between users, but now we + * just share whole loadouts, so this can be used for any sort of parameter we + * want to add to loadouts. + * + * All properties are optional, but most have defaults specified in + * defaultLoadoutParameters that should be used if they are undefined. + */ +export function LoadoutParameters() { + return objectType('LoadoutParameters', { + fields: { + /** + * The stats the user cared about for this loadout, in the order they cared about them and + * with optional range by tier. If a stat is "ignored" it should just be missing from this + * list. + */ + statConstraints: { type: arrayOf(StatConstraint), fieldNum: 1, required: false }, + + /** + * The mods that will be used with this loadout. Each entry is an inventory + * item hash representing the mod item. Hashes may appear multiple times. + * These are not associated with any specific item in the loadout - when + * applying the loadout we should automatically determine the minimum of + * changes required to match the desired mods, and apply these mods to the + * equipped items. + */ + mods: { type: arrayOf(HashID), fieldNum: 2, required: false }, + + /** + * If set, after applying the mods above, all other mods will be removed from armor. + */ + clearMods: { type: bool, fieldNum: 3, required: false }, + + /** Whether to clear out other weapons when applying this loadout */ + clearWeapons: { type: bool, fieldNum: 4, required: false }, + + /** Whether to clear out other weapons when applying this loadout */ + clearArmor: { type: bool, fieldNum: 5, required: false }, + + /** + * Mods that must be applied to a specific bucket hash. In general, prefer to + * use the flat mods list above, and rely on the loadout function to assign + * mods automatically. However there are some mods like shaders which can't + * be automatically assigned to the right piece. These only apply to the equipped + * item. + */ + modsByBucket: { type: ModsByBucketEntry, fieldNum: 6, required: false }, + + /** The artifact unlocks relevant to this build. */ + artifactUnlocks: { type: ArtifactUnlocks, fieldNum: 7, required: false }, + + /** Whether to automatically add stat mods. */ + autoStatMods: { type: bool, fieldNum: 8, required: false }, + + /** + * A search filter applied while editing the loadout in Loadout Optimizer, + * which constrains the items that can be in the loadout. + */ + query: { type: string, fieldNum: 9, required: false }, + + /** + * Whether armor of this type will have assumed masterwork stats in the Loadout Optimizer. + */ + assumeArmorMasterwork: { type: AssumeArmorMasterwork, fieldNum: 10 }, + + /** + * The InventoryItemHash of the pinned exotic, if any was chosen. + */ + exoticArmorHash: { type: HashID, fieldNum: 11, required: false }, + + /** + * a user may optionally specify which icon/color/name will be used, + * if this DIM loadout is saved to an in-game slot. + */ + inGameIdentifiers: { type: InGameLoadoutIdentifiers, fieldNum: 12, required: false }, + + /** + * When calculating loadout stats, should "Font of ..." mods be assumed active + * and their runtime bonus stats be included? + */ + includeRuntimeStatBenefits: { type: bool, fieldNum: 13, required: false }, + }, + }); +} + +/** A constraint on the values an armor stat can take */ +export function StatConstraint() { + return objectType('StatConstraint', { + fields: { + /** The stat definition hash of the stat */ + statHash: { type: HashID, fieldNum: 1 }, + /** The minimum tier value for the stat. 0 if unset. */ + minTier: { type: uint, fieldNum: 2, required: false }, + /** The maximum tier value for the stat. 10 if unset. */ + maxTier: { type: uint, fieldNum: 3, required: false }, + }, + }); +} diff --git a/api/stately/schema/search.ts b/api/stately/schema/search.ts new file mode 100644 index 0000000..278b3e7 --- /dev/null +++ b/api/stately/schema/search.ts @@ -0,0 +1,54 @@ +import { + bool, + bytes, + enumType, + itemType, + string, + timestampMilliseconds, + uint, +} from '@stately-cloud/schema'; + +export const SearchType = enumType('SearchType', { Item: 0, Loadout: 1 }); + +/** + * A search query. This can either be from history (recent searches), pinned (saved searches), or suggested. + */ +export const Search = itemType('Search', { + // We put this under a profile and a destiny version so we can get all search + // history for a particular destiny version in one query (along with other + // stuff in the profile). Technically the searches could be shared between + // profiles, but if we did that we'd need more queries. + keyPath: '/p-:profileId/d-:destinyVersion/search-:qhash', + fields: { + /** + * The full search query. These are + */ + query: { type: string, fieldNum: 1, valid: 'this.size() <= 2048' }, + /** A zero usage count means this is a suggested/preloaded search. */ + usageCount: { type: uint, fieldNum: 2, required: false }, + /** Has this search been saved/favorite'd/pinned by the user? */ + saved: { type: bool, fieldNum: 3, required: false }, + /** The last time this was used, as a unix millisecond timestamp. */ + lastUsage: { type: timestampMilliseconds, fieldNum: 4 }, + /** + * Which kind of thing is this search for? Searches of different types are + * stored together and need to be filtered to the specific type. + */ + type: { type: SearchType, fieldNum: 5, required: false }, + + /** + * MD5 hash of the query string. This is used to enforce uniqueness of + * queries without using the whole long query string as a key. + */ + // TODO: in the current postgres schema, queries are stored as a hash of the + // query string which is automatically generated by the DB. We'd have to do + // it manually. + qhash: { type: bytes, fieldNum: 6 /*expression: 'md5(this.query)'*/ }, + + /** The profile ID this search is associated with. */ + profileId: { type: uint, fieldNum: 7 }, + + /** The Destiny version this search is associated with. */ + destinyVersion: { type: uint, fieldNum: 8 }, + }, +}); diff --git a/api/stately/schema/settings.ts b/api/stately/schema/settings.ts new file mode 100644 index 0000000..90dbee6 --- /dev/null +++ b/api/stately/schema/settings.ts @@ -0,0 +1,245 @@ +// Synced with the definitions in DIM/src/app/settings/reducer.ts + +import { + arrayOf, + bool, + double, + enumType, + itemType, + objectType, + string, + type, + uint, +} from '@stately-cloud/schema'; +import { LoadoutParameters, LoadoutSort, StatConstraint } from './loadouts.js'; +import { DestinyClass, HashID, ItemID } from './types.js'; + +export const CharacterOrder = enumType('CharacterOrder', { + mostRecent: 0, + mostRecentReverse: 1, + fixed: 2, + custom: 3, +}); + +export const InfuseDirection = enumType('InfuseDirection', { + /** infuse something into the query (query = target) */ + Infuse: 1, + /** infuse the query into the target (query = source) */ + Fuel: 2, +}); + +export const ItemPopupTab = enumType('ItemPopupTab', { + Overview: 0, + Triage: 1, +}); + +export const VaultWeaponGroupingStyle = enumType('VaultWeaponGroupingStyle', { + Lines: 0, + Inline: 1, +}); + +const Columns = type('columns', uint, { valid: 'this <= 5 && this >= 2' }); + +export const CollapsedSection = objectType('CollapsedSection', { + fields: { + key: { type: string, fieldNum: 1 }, + /** Whether this section is collapsed */ + collapsed: { type: bool, fieldNum: 2, required: false }, + }, +}); + +export const StatConstraintsEntry = objectType('StatConstraintsEntry', { + fields: { + classType: { type: DestinyClass, fieldNum: 1 }, + constraints: { type: arrayOf(StatConstraint), fieldNum: 2 }, + }, +}); +export const CustomStatsEntry = objectType('CustomStatsEntry', { + fields: { + classType: { type: DestinyClass, fieldNum: 1 }, + customStats: { type: arrayOf(HashID), fieldNum: 2 }, + }, +}); + +export const DescriptionOptions = enumType('DescriptionOptions', { + bungie: 1, + community: 2, + both: 3, +}); + +// we go generous here on key options, because sometimes a statHash +// is a string, because it was a dictionary key +/** traditional custom stats use a binary 1 or 0 for all 6 armor stats, but this could support more complex weights */ +export const CustomStatWeightsEntry = objectType('CustomStatWeightsEntry', { + fields: { + statHash: { type: HashID, fieldNum: 1 }, + weight: { type: double, fieldNum: 2 }, + }, +}); + +export const CustomStatDef = objectType('CustomStatDef', { + fields: { + /** a unique-per-user fake statHash used to look this stat up */ + statHash: { type: HashID, fieldNum: 1 }, + /** a unique-per-class name for this stat */ + label: { type: string, fieldNum: 2 }, + /** an abbreviated/crunched form of the stat label, for use in search filters */ + shortLabel: { type: string, fieldNum: 3 }, + /** which guardian class this stat should be used for. DestinyClass.Unknown makes a global (all 3 classes) stat */ + class: { type: DestinyClass, fieldNum: 4 }, + /** info about how to calculate the stat total */ + weights: { type: arrayOf(CustomStatWeightsEntry), fieldNum: 5 }, + }, +}); + +export const Settings = itemType('Settings', { + // Settings are stored per-Bungie-membership, not per-profile or per-destiny-version + keyPath: '/member-:memberId/settings', + fields: { + memberId: { type: string, fieldNum: 1 }, + + /** Show item quality percentages */ + itemQuality: { type: bool, fieldNum: 2, required: false }, + /** Show new items with an overlay */ + showNewItems: { type: bool, fieldNum: 3, required: false }, + /** Sort characters (mostRecent, mostRecentReverse, fixed) */ + characterOrder: { type: CharacterOrder, fieldNum: 4 }, + /** Custom sorting properties, in order of application */ + // TODO: Default should be ["primStat", "name"] but we don't support list defaults + itemSortOrderCustom: { type: arrayOf(string), fieldNum: 5 }, + /** supplements itemSortOrderCustom by allowing each sort to be reversed */ + itemSortReversals: { type: arrayOf(string), fieldNum: 6 }, + /** How many columns to display character buckets */ + charCol: { type: Columns, fieldNum: 7, required: false }, + /** How many columns to display character buckets on Mobile */ + charColMobile: { type: Columns, fieldNum: 8, required: false }, + /** How big in pixels to draw items - start smaller for iPad */ + itemSize: { type: uint, fieldNum: 9, valid: 'this <= 66', required: false }, + /** Which categories or buckets should be collapsed? */ + // TODO: Some support for maps would be great + collapsedSections: { type: arrayOf(CollapsedSection), fieldNum: 10 }, + /** Hide triumphs once they're completed */ + completedRecordsHidden: { type: bool, fieldNum: 11, required: false }, + /** Hide show triumphs the manifest recommends be redacted */ + redactedRecordsRevealed: { type: bool, fieldNum: 12, required: false }, + /** Whether to keep one slot per item type open */ + farmingMakeRoomForItems: { type: bool, fieldNum: 13, required: false }, + /** How many spaces to clear when using Farming Mode (make space). */ + inventoryClearSpaces: { type: uint, fieldNum: 14, required: false, valid: 'this <= 9' }, + + /** Hide completed triumphs/collections */ + hideCompletedRecords: { type: bool, fieldNum: 15, required: false }, + + /** Custom character sort - across all accounts and characters! The values are character IDs. */ + customCharacterSort: { type: arrayOf(string), fieldNum: 16, required: false }, + + /** The last direction the infusion fuel finder was set to. */ + infusionDirection: { type: InfuseDirection, fieldNum: 17, required: false }, + + /** The user's preferred language code. */ + language: { type: string, fieldNum: 18, required: false }, + + /** + * External sources for wish lists. + * Expected to be a valid URL. + * initialState should hold the current location of a reasonably-useful collection of rolls. + * Set to empty string to not use wishListSource. + */ + // TODO: default should be ['https://raw.githubusercontent.com/48klocs/dim-wish-list-sources/master/voltron.txt'] + // TODO: this should be "url" but it's a string for now since interpretAs doesn't yet work + wishListSources: { type: arrayOf(string), fieldNum: 19, required: false }, + + /** + * The last used settings for the Loadout Optimizer. These apply to all classes. + */ + // TODO: originally this was Exclude; + loParameters: { type: LoadoutParameters, fieldNum: 20, required: false }, + + /** + * Stat order, enablement, etc. Stored per class. + */ + // TODO: maps, again + loStatConstraintsByClass: { + type: arrayOf(StatConstraintsEntry), + fieldNum: 21, + required: false, + }, + + /** list of stat hashes of interest, keyed by class enum */ + customTotalStatsByClass: { type: arrayOf(CustomStatsEntry), fieldNum: 22, required: false }, + + /** Selected columns for the Vault Organizer */ + // TODO: Default should be ["icon", "name", "dmg", "power", "locked", "tag", "wishList", "archetype", "perks", "notes"] + organizerColumnsWeapons: { type: arrayOf(string), fieldNum: 23 }, + // TODO: Default should be ["icon", "name", "power", "dmg", "energy", "locked", "tag", "ghost", "modslot", "perks", "stats", "customstat", "notes"] + organizerColumnsArmor: { type: arrayOf(string), fieldNum: 24 }, + // TODO: Default should be ["icon", "name", "locked", "tag", "perks", "notes"] + organizerColumnsGhost: { type: arrayOf(string), fieldNum: 25 }, + + /** Compare base stats or actual stats in Compare */ + compareBaseStats: { type: bool, fieldNum: 26, required: false }, + /** Item popup sidecar collapsed just shows icon and no character locations */ + sidecarCollapsed: { type: bool, fieldNum: 27, required: false }, + + /** In "Single Character Mode" DIM pretends you only have one (active) character and all the other characters' items are in the vault. */ + singleCharacter: { type: bool, fieldNum: 28, required: false }, + + /** Badge the app icon with the number of postmaster items on the current character */ + badgePostmaster: { type: bool, fieldNum: 29, required: false }, + + /** Display perks as a list instead of a grid. */ + perkList: { type: bool, fieldNum: 30, required: false }, + + /** How the loadouts menu and page should be sorted */ + loadoutSort: { type: LoadoutSort, fieldNum: 31 }, + + /** Hide tagged items in the Item Feed */ + itemFeedHideTagged: { type: bool, fieldNum: 32, required: false }, + + /** Show the Item Feed */ + itemFeedExpanded: { type: bool, fieldNum: 33, required: false }, + + /** Pull from postmaster is an irreversible action and some people don't want to accidentally hit it. */ + hidePullFromPostmaster: { type: bool, fieldNum: 34, required: false }, + + /** Select descriptions to display */ + descriptionsToDisplay: { type: DescriptionOptions, fieldNum: 35, required: false }, + + /** Plug the T10 masterwork into D2Y2+ random roll weapons for comparison purposes. */ + compareWeaponMasterwork: { type: bool, fieldNum: 36, required: false }, + + /** + * Cutoff point; the instance ID of the newest item that isn't shown in + * the item feed anymore after the user presses the "clear" button. + */ + itemFeedWatermark: { type: ItemID, fieldNum: 37, required: false }, + + /** + * a set of user-defined custom stat totals. + * this will supersede customTotalStatsByClass. + * it defaults below to empty, which in DIM, initiates fallback to customTotalStatsByClass + */ + customStats: { type: arrayOf(CustomStatDef), fieldNum: 38, required: false }, + + /** Automatically sync lock status with tag */ + autoLockTagged: { type: bool, fieldNum: 39, required: false }, + + /** The currently chosen theme. */ + theme: { type: string, fieldNum: 40, required: false }, + + /** Whether to sort triumphs on the records tab by their progression percentage. */ + sortRecordProgression: { type: bool, fieldNum: 41, required: false }, + + /** Whether to hide items that cost silver from the Vendors screen. */ + vendorsHideSilverItems: { type: bool, fieldNum: 42, required: false }, + + /** An additional layer of grouping for weapons in the vault. */ + vaultWeaponGrouping: { type: string, fieldNum: 43, required: false }, + + /** How grouped weapons in the vault should be displayed. */ + vaultWeaponGroupingStyle: { type: VaultWeaponGroupingStyle, fieldNum: 44, required: false }, + + /** The currently selected item popup tab. */ + itemPopupTab: { type: ItemPopupTab, fieldNum: 45, required: false }, + }, +}); diff --git a/api/stately/schema/tags.ts b/api/stately/schema/tags.ts new file mode 100644 index 0000000..31a845c --- /dev/null +++ b/api/stately/schema/tags.ts @@ -0,0 +1,78 @@ +import { Fields, enumType, itemType, string, timestampMilliseconds } from '@stately-cloud/schema'; +import { DestinyVersion, HashID, ItemID, ProfileID } from './types.js'; + +export const TagValue = enumType('TagValue', { + favorite: 1, + keep: 2, + infuse: 3, + junk: 4, + archive: 5, +}); + +// Both ItemAnnotation and ItemHashTag share these fields. +const sharedFields: Fields = { + /** The inventory item hash for an item */ + hash: { + type: HashID, + fieldNum: 1, + }, + + /** Optional tag for the item. */ + tag: { + type: TagValue, + fieldNum: 2, + }, + + /** Optional text notes on the item. */ + notes: { + type: string, + fieldNum: 3, + }, + + /** The profile ID for a Destiny profile. */ + profileId: { + type: ProfileID, + fieldNum: 6, + }, + + destinyVersion: { + type: DestinyVersion, + fieldNum: 7, + }, +}; + +/** Any extra info added by the user to individual items - tags, notes, etc. */ +export const ItemAnnotation = itemType('ItemAnnotation', { + keyPath: '/p-:profileId/d-:destinyVersion/ia-:id', + fields: { + ...sharedFields, + + /** The item instance ID for an individual item */ + id: { + type: ItemID, + // We still need to make sure these don't collide with the IDs in sharedFields. + fieldNum: 4, + }, + + /** + * UTC epoch seconds timestamp of when the item was crafted. Used to + * match up items that have changed instance ID from being reshaped since they + * were tagged. + */ + craftedDate: { + type: timestampMilliseconds, + // We still need to make sure these don't collide with the IDs in sharedFields. + fieldNum: 5, + }, + }, +}); + +/** Any extra info added by the user to item hashes (shaders and mods) */ +export const ItemHashTag = itemType('ItemHashTag', { + keyPath: '/p-:profileId/d-:destinyVersion/iht-:hash', + fields: { + ...sharedFields, + + // destinyVersion is always "2" + }, +}); diff --git a/api/stately/schema/triumphs.ts b/api/stately/schema/triumphs.ts new file mode 100644 index 0000000..0748209 --- /dev/null +++ b/api/stately/schema/triumphs.ts @@ -0,0 +1,20 @@ +import { itemType } from '@stately-cloud/schema'; +import { DestinyVersion, HashID, ProfileID } from './types.js'; + +/** + * Triumph stores a single record hash for a tracked triumph. Users can have any + * number of tracked triumphs, with one item per triumph. + */ +export const Triumph = itemType('Triumph', { + keyPath: '/p-:profileId/d-:destinyVersion/triumph-:recordHash', + fields: { + recordHash: { type: HashID, fieldNum: 1 }, + profileId: { type: ProfileID, fieldNum: 2 }, + + // This is always "2" + destinyVersion: { + type: DestinyVersion, + fieldNum: 7, + }, + }, +}); diff --git a/api/stately/schema/types.ts b/api/stately/schema/types.ts new file mode 100644 index 0000000..e3b6db1 --- /dev/null +++ b/api/stately/schema/types.ts @@ -0,0 +1,26 @@ +import { enumType, type, uint } from '@stately-cloud/schema'; + +export const ItemID = type('ItemID', uint, { docs: 'The unique ID of an inventory item' }); +export const HashID = type('HashID', uint, { + docs: 'The hash ID of a definition', +}); + +export const MembershipID = type('MembershipID', uint, { + docs: 'The unique ID of a Bungie.net membership', +}); +export const ProfileID = type('ProfileID', uint, { + docs: 'The unique ID of a Destiny profile. These can be moved between diffferent Bungie.net memberships.', +}); + +// This could be an enum, but it's easy enough as a constrained number. +export const DestinyVersion = type('DestinyVersion', uint, { + valid: 'this == uint(1) || this == uint(2)', +}); + +export const DestinyClass = enumType('DestinyClass', { + // Normally we wouldn't have a zero-value default, but we're trying to match the Destiny enum + Titan: 0, + Hunter: 1, + Warlock: 2, + Unknown: 3, +}); diff --git a/kubernetes/dim-api-deployment.yaml b/kubernetes/dim-api-deployment.yaml index 1b9f47c..0a1ad38 100644 --- a/kubernetes/dim-api-deployment.yaml +++ b/kubernetes/dim-api-deployment.yaml @@ -59,6 +59,11 @@ spec: secretKeyRef: name: dim-api-secret key: jwt_secret + - name: STATELY_CLIENT_SECRET + valueFrom: + secretKeyRef: + name: dim-api-secret + key: stately_client_secret envFrom: - configMapRef: name: dim-api-config diff --git a/package.json b/package.json index 0605a25..0c469f3 100644 --- a/package.json +++ b/package.json @@ -22,62 +22,64 @@ "dim-api-types:build": "./build-dim-api-types.sh" }, "devDependencies": { - "@babel/core": "^7.17.8", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/preset-env": "^7.16.11", - "@babel/preset-typescript": "^7.16.7", - "@rollup/plugin-babel": "^6.0.3", - "@rollup/plugin-node-resolve": "^15.2.1", - "@sentry/cli": "^2.2.0", - "@types/cors": "^2.8.6", - "@types/express": "^4.17.1", - "@types/jest": "^29.1.2", - "@types/jsonwebtoken": "^9.0.1", - "@types/lodash": "^4.14.149", - "@types/morgan": "^1.7.37", - "@types/pg": "^8.6.0", - "@types/superagent": "^4.1.3", - "@types/supertest": "^2.0.8", - "@types/uuid": "^9.0.0", - "@types/vhost": "^3.0.4", - "@typescript-eslint/eslint-plugin": "^6.7.2", - "@typescript-eslint/parser": "^6.7.2", - "db-migrate": "^0.11.6", - "db-migrate-pg": "^1.0.0", - "eslint": "^8.8.0", - "eslint-config-prettier": "^9.0.0", - "jest": "^29.0.1", - "prettier": "^3.0.3", - "prettier-plugin-organize-imports": "^3.0.0", - "rollup": "^3.29.2", - "supertest": "^6.0.1", - "ts-jest": "^29.0.3", - "ts-node": "^10.0.0", + "@babel/core": "^7.25.2", + "@babel/plugin-transform-class-properties": "^7.25.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/preset-env": "^7.25.4", + "@babel/preset-typescript": "^7.24.7", + "@rollup/plugin-babel": "^6.0.4", + "@rollup/plugin-node-resolve": "^15.2.3", + "@sentry/cli": "^2.34.1", + "@stately-cloud/schema": "^0.2.0", + "@types/cors": "^2.8.17", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.12", + "@types/jsonwebtoken": "^9.0.6", + "@types/lodash": "^4.17.7", + "@types/morgan": "^1.9.9", + "@types/pg": "^8.11.8", + "@types/supertest": "^2.0.16", + "@types/uuid": "^9.0.8", + "@types/vhost": "^3.0.9", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "db-migrate": "^0.11.14", + "db-migrate-pg": "^1.5.2", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "jest": "^29.7.0", + "prettier": "^3.3.3", + "prettier-plugin-organize-imports": "^3.2.4", + "rollup": "^3.29.4", + "supertest": "^6.3.4", + "ts-jest": "^29.2.5", + "ts-node": "^10.9.2", "ts-node-dev": "^2.0.0", - "typescript": "^5.2.2" + "tsx": "^4.19.0", + "typescript": "^5.5.4" }, "dependencies": { - "@godaddy/terminus": "^4.3.1", - "@sentry/node": "^7.3.0", - "@sentry/tracing": "^7.3.0", - "bungie-api-ts": "^5.0.0", + "@bufbuild/protobuf": "^2.0.0", + "@godaddy/terminus": "^4.12.1", + "@sentry/node": "^7.119.0", + "@sentry/tracing": "^7.114.0", + "@stately-cloud/client": "^0.3.0", + "bungie-api-ts": "^5.1.0", "cors": "^2.8.5", - "dotenv": "^16.0.1", - "ejs": "^3.1.6", - "express": "^4.17.1", - "express-async-handler": "^1.1.4", + "dotenv": "^16.4.5", + "ejs": "^3.1.10", + "express": "^4.19.2", + "express-async-handler": "^1.2.0", "express-hot-shots": "^1.0.2", - "express-jwt": "^8.2.0", + "express-jwt": "^8.4.1", "hi-base32": "^0.5.1", "hot-shots": "^10.0.0", - "jsonwebtoken": "^9.0.0", - "lodash": "^4.17.15", - "morgan": "^1.9.1", - "pg": "^8.0.0", - "slugify": "^1.6.5", - "superagent": "^8.0.6", - "uuid": "^9.0.0", + "jsonwebtoken": "^9.0.2", + "lodash": "^4.17.21", + "morgan": "^1.10.0", + "pg": "^8.12.0", + "slugify": "^1.6.6", + "uuid": "^9.0.1", "vhost": "^3.0.2" }, "packageManager": "pnpm@8.9.0+sha256.8f5264ad1d100da11a6add6bb8a94c6f1e913f9e9261b2a551fabefad2ec0fec" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 187ae10..0dda21e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,38 +5,44 @@ settings: excludeLinksFromLockfile: false dependencies: + '@bufbuild/protobuf': + specifier: ^2.0.0 + version: 2.0.0 '@godaddy/terminus': - specifier: ^4.3.1 + specifier: ^4.12.1 version: 4.12.1 '@sentry/node': - specifier: ^7.3.0 - version: 7.73.0 + specifier: ^7.119.0 + version: 7.119.0 '@sentry/tracing': - specifier: ^7.3.0 - version: 7.73.0 + specifier: ^7.114.0 + version: 7.114.0 + '@stately-cloud/client': + specifier: ^0.3.0 + version: 0.3.0 bungie-api-ts: - specifier: ^5.0.0 - version: 5.0.0 + specifier: ^5.1.0 + version: 5.1.0 cors: specifier: ^2.8.5 version: 2.8.5 dotenv: - specifier: ^16.0.1 - version: 16.3.1 + specifier: ^16.4.5 + version: 16.4.5 ejs: - specifier: ^3.1.6 - version: 3.1.9 + specifier: ^3.1.10 + version: 3.1.10 express: - specifier: ^4.17.1 - version: 4.18.2 + specifier: ^4.19.2 + version: 4.19.2 express-async-handler: - specifier: ^1.1.4 + specifier: ^1.2.0 version: 1.2.0 express-hot-shots: specifier: ^1.0.2 version: 1.0.2 express-jwt: - specifier: ^8.2.0 + specifier: ^8.4.1 version: 8.4.1 hi-base32: specifier: ^0.5.1 @@ -45,25 +51,22 @@ dependencies: specifier: ^10.0.0 version: 10.0.0 jsonwebtoken: - specifier: ^9.0.0 + specifier: ^9.0.2 version: 9.0.2 lodash: - specifier: ^4.17.15 + specifier: ^4.17.21 version: 4.17.21 morgan: - specifier: ^1.9.1 + specifier: ^1.10.0 version: 1.10.0 pg: - specifier: ^8.0.0 - version: 8.11.3 + specifier: ^8.12.0 + version: 8.12.0 slugify: - specifier: ^1.6.5 + specifier: ^1.6.6 version: 1.6.6 - superagent: - specifier: ^8.0.6 - version: 8.1.2 uuid: - specifier: ^9.0.0 + specifier: ^9.0.1 version: 9.0.1 vhost: specifier: ^3.0.2 @@ -71,152 +74,150 @@ dependencies: devDependencies: '@babel/core': - specifier: ^7.17.8 - version: 7.23.0 + specifier: ^7.25.2 + version: 7.25.2 '@babel/plugin-transform-class-properties': - specifier: ^7.22.5 - version: 7.22.5(@babel/core@7.23.0) + specifier: ^7.25.4 + version: 7.25.4(@babel/core@7.25.2) '@babel/plugin-transform-object-rest-spread': - specifier: ^7.22.15 - version: 7.22.15(@babel/core@7.23.0) + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.25.2) '@babel/preset-env': - specifier: ^7.16.11 - version: 7.22.20(@babel/core@7.23.0) + specifier: ^7.25.4 + version: 7.25.4(@babel/core@7.25.2) '@babel/preset-typescript': - specifier: ^7.16.7 - version: 7.23.0(@babel/core@7.23.0) + specifier: ^7.24.7 + version: 7.24.7(@babel/core@7.25.2) '@rollup/plugin-babel': - specifier: ^6.0.3 - version: 6.0.4(@babel/core@7.23.0)(rollup@3.29.4) + specifier: ^6.0.4 + version: 6.0.4(@babel/core@7.25.2)(rollup@3.29.4) '@rollup/plugin-node-resolve': - specifier: ^15.2.1 + specifier: ^15.2.3 version: 15.2.3(rollup@3.29.4) '@sentry/cli': - specifier: ^2.2.0 - version: 2.21.2 + specifier: ^2.34.1 + version: 2.34.1 + '@stately-cloud/schema': + specifier: ^0.2.0 + version: 0.2.0 '@types/cors': - specifier: ^2.8.6 - version: 2.8.14 + specifier: ^2.8.17 + version: 2.8.17 '@types/express': - specifier: ^4.17.1 - version: 4.17.19 + specifier: ^4.17.21 + version: 4.17.21 '@types/jest': - specifier: ^29.1.2 - version: 29.5.5 + specifier: ^29.5.12 + version: 29.5.12 '@types/jsonwebtoken': - specifier: ^9.0.1 - version: 9.0.3 + specifier: ^9.0.6 + version: 9.0.6 '@types/lodash': - specifier: ^4.14.149 - version: 4.14.199 + specifier: ^4.17.7 + version: 4.17.7 '@types/morgan': - specifier: ^1.7.37 - version: 1.9.6 + specifier: ^1.9.9 + version: 1.9.9 '@types/pg': - specifier: ^8.6.0 - version: 8.10.5 - '@types/superagent': - specifier: ^4.1.3 - version: 4.1.19 + specifier: ^8.11.8 + version: 8.11.8 '@types/supertest': - specifier: ^2.0.8 - version: 2.0.14 + specifier: ^2.0.16 + version: 2.0.16 '@types/uuid': - specifier: ^9.0.0 - version: 9.0.5 + specifier: ^9.0.8 + version: 9.0.8 '@types/vhost': - specifier: ^3.0.4 - version: 3.0.5 + specifier: ^3.0.9 + version: 3.0.9 '@typescript-eslint/eslint-plugin': - specifier: ^6.7.2 - version: 6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': - specifier: ^6.7.2 - version: 6.7.5(eslint@8.51.0)(typescript@5.2.2) + specifier: ^6.21.0 + version: 6.21.0(eslint@8.57.0)(typescript@5.5.4) db-migrate: - specifier: ^0.11.6 + specifier: ^0.11.14 version: 0.11.14 db-migrate-pg: - specifier: ^1.0.0 + specifier: ^1.5.2 version: 1.5.2 eslint: - specifier: ^8.8.0 - version: 8.51.0 + specifier: ^8.57.0 + version: 8.57.0 eslint-config-prettier: - specifier: ^9.0.0 - version: 9.0.0(eslint@8.51.0) + specifier: ^9.1.0 + version: 9.1.0(eslint@8.57.0) jest: - specifier: ^29.0.1 - version: 29.7.0(@types/node@20.8.4)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.5.1)(ts-node@10.9.2) prettier: - specifier: ^3.0.3 - version: 3.0.3 + specifier: ^3.3.3 + version: 3.3.3 prettier-plugin-organize-imports: - specifier: ^3.0.0 - version: 3.2.3(prettier@3.0.3)(typescript@5.2.2) + specifier: ^3.2.4 + version: 3.2.4(prettier@3.3.3)(typescript@5.5.4) rollup: - specifier: ^3.29.2 + specifier: ^3.29.4 version: 3.29.4 supertest: - specifier: ^6.0.1 - version: 6.3.3 + specifier: ^6.3.4 + version: 6.3.4 ts-jest: - specifier: ^29.0.3 - version: 29.1.1(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.2.2) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4) ts-node: - specifier: ^10.0.0 - version: 10.9.1(@types/node@20.8.4)(typescript@5.2.2) + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.5.1)(typescript@5.5.4) ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@20.8.4)(typescript@5.2.2) + version: 2.0.0(@types/node@22.5.1)(typescript@5.5.4) + tsx: + specifier: ^4.19.0 + version: 4.19.0 typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.5.4 + version: 5.5.4 packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 dev: true - /@babel/compat-data@7.22.20: - resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.0: - resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) - '@babel/helpers': 7.23.1 - '@babel/parser': 7.23.0 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.0 - '@babel/types': 7.23.0 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.6 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -224,1177 +225,1255 @@ packages: - supports-color dev: true - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + /@babel/generator@7.25.6: + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + /@babel/helper-annotate-as-pure@7.24.7: + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.25.6 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.24.7: + resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.22.20 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.1 + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 lru-cache: 5.1.1 semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + /@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.6 semver: 6.3.1 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + /@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 dev: true - /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.23.0): - resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.6 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 - dev: true - - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + /@babel/helper-member-expression-to-functions@7.24.8: + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + /@babel/helper-optimise-call-expression@7.24.7: + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.25.6 dev: true - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-plugin-utils@7.24.8: + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.0): - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + /@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.22.20 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-wrap-function': 7.25.0 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.0): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + /@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.0 + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-skip-transparent-expression-wrappers@7.24.7: + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-wrap-function@7.22.20: - resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + /@babel/helper-wrap-function@7.25.0: + resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/helpers@7.23.1: - resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==} + /@babel/helpers@7.25.6: + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.0 - '@babel/types': 7.23.0 - transitivePeerDependencies: - - supports-color + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 dev: true - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 + picocolors: 1.0.1 dev: true - /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + /@babel/parser@7.25.6: + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.25.6 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.3(@babel/core@7.25.2): + resolution: {integrity: sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==} + /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.0): + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.25.2 dev: true - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0): + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0): + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.0): + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + /@babel/plugin-syntax-import-assertions@7.25.6(@babel/core@7.25.2): + resolution: {integrity: sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + /@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2): + resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.0): + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0): + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0): + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0): + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.0): + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.0): + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + /@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.0): + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-async-generator-functions@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==} + /@babel/plugin-transform-async-generator-functions@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.0) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + /@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + /@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==} + /@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + /@babel/plugin-transform-class-properties@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==} + /@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==} + /@babel/plugin-transform-classes@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0) - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/traverse': 7.25.6 globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + /@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 dev: true - /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==} + /@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + /@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + /@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true + + /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==} + /@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + /@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==} + /@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==} + /@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + /@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2): + resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==} + /@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + /@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==} + /@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + /@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==} + /@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + /@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==} + /@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + /@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + /@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + /@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==} + /@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==} + /@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==} + /@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.20 - '@babel/core': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + /@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==} + /@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) dev: true - /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==} + /@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==} + /@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + /@babel/plugin-transform-private-methods@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.0): - resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==} + /@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + /@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.0): - resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==} + /@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + /@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + /@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + /@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + /@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + /@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + /@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.0): - resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + /@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.0): - resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==} + /@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + /@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + /@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.0): - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + /@babel/plugin-transform-unicode-sets-regex@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0) - '@babel/helper-plugin-utils': 7.22.5 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 dev: true - /@babel/preset-env@7.22.20(@babel/core@7.23.0): - resolution: {integrity: sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==} + /@babel/preset-env@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.20 - '@babel/core': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.0) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.0) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.0) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-async-generator-functions': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.0) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.0) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.0) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.0) - '@babel/types': 7.23.0 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.23.0) - babel-plugin-polyfill-corejs3: 0.8.4(@babel/core@7.23.0) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.23.0) - core-js-compat: 3.33.0 + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.3(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.25.4(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.0): + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/types': 7.23.0 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.25.6 esutils: 2.0.3 dev: true - /@babel/preset-typescript@7.23.0(@babel/core@7.23.0): - resolution: {integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==} + /@babel/preset-typescript@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0) - '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color dev: true /@babel/regjsgen@0.8.0: resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} dev: true - /@babel/runtime@7.23.1: - resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} + /@babel/runtime@7.25.6: + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 dev: true - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 dev: true - /@babel/traverse@7.23.0: - resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==} + /@babel/traverse@7.25.6: + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - debug: 4.3.4 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.6 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + /@babel/types@7.25.6: + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: true @@ -1402,11 +1481,34 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true + /@bufbuild/protobuf@2.0.0: + resolution: {integrity: sha512-sw2JhwJyvyL0zlhG61aDzOVryEfJg2PDZFSV7i7IdC7nAE41WuXCru3QWLGiP87At0BMzKOoKO/FqEGoKygGZQ==} + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} dev: true + /@connectrpc/connect-node@2.0.0-alpha.1(@bufbuild/protobuf@2.0.0)(@connectrpc/connect@2.0.0-alpha.1): + resolution: {integrity: sha512-8V4iVs0nBU3lQCaKt6KmJeaGRvfjyUqJ4XZbMQDxP45xyvEZOOSsUCzeoJCMMhRAWEKzguPkYZI8B4RmepPREQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@bufbuild/protobuf': ^2.0.0-beta.2 + '@connectrpc/connect': 2.0.0-alpha.1 + dependencies: + '@bufbuild/protobuf': 2.0.0 + '@connectrpc/connect': 2.0.0-alpha.1(@bufbuild/protobuf@2.0.0) + undici: 5.28.4 + dev: false + + /@connectrpc/connect@2.0.0-alpha.1(@bufbuild/protobuf@2.0.0): + resolution: {integrity: sha512-eAjezEy1m+7bDtWt/TeXY2qIayq7R+WW8Jqwq3p8Q7ZTHpFJu0SBQivhRGQbNXSYR+QmqMk+j/FLAVlgB6CfHA==} + peerDependencies: + '@bufbuild/protobuf': ^2.0.0-beta.2 + dependencies: + '@bufbuild/protobuf': 2.0.0 + dev: false + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1414,30 +1516,246 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@esbuild/aix-ppc64@0.23.1: + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.23.1: + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.23.1: + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.23.1: + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.23.1: + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.23.1: + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.23.1: + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.23.1: + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.23.1: + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.23.1: + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.23.1: + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.23.1: + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.23.1: + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.23.1: + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.23.1: + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.23.1: + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.23.1: + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.23.1: + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.23.1: + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.23.1: + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.23.1: + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.23.1: + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.23.1: + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.23.1: + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.9.1: - resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.6 espree: 9.6.1 - globals: 13.23.0 - ignore: 5.2.4 + globals: 13.24.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1446,23 +1764,29 @@ packages: - supports-color dev: true - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + dev: false + /@godaddy/terminus@4.12.1: resolution: {integrity: sha512-Tm+wVu1/V37uZXcT7xOhzdpFoovQReErff8x3y82k6YyWa1gzxWBjTyrx4G2enjEqoXPnUUmJ3MOmwH+TiP6Sw==} dependencies: stoppable: 1.1.0 dev: false - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -1473,8 +1797,9 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead dev: true /@istanbuljs/load-nyc-config@1.1.0: @@ -1498,14 +1823,14 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 dev: true - /@jest/core@29.7.0(ts-node@10.9.1): + /@jest/core@29.7.0(ts-node@10.9.2): resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1519,14 +1844,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.8.4)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@22.5.1)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1538,7 +1863,7 @@ packages: jest-util: 29.7.0 jest-validate: 29.7.0 jest-watcher: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 @@ -1554,7 +1879,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 jest-mock: 29.7.0 dev: true @@ -1581,7 +1906,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.8.4 + '@types/node': 22.5.1 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1613,25 +1938,25 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.19 - '@types/node': 20.8.4 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.5.1 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - v8-to-istanbul: 9.1.3 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color dev: true @@ -1647,7 +1972,7 @@ packages: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 dev: true @@ -1658,7 +1983,7 @@ packages: dependencies: '@jest/console': 29.7.0 '@jest/types': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 collect-v8-coverage: 1.0.2 dev: true @@ -1676,9 +2001,9 @@ packages: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.25.2 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -1687,7 +2012,7 @@ packages: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 @@ -1700,48 +2025,48 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.2 - '@types/node': 20.8.4 - '@types/yargs': 17.0.28 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.5.1 + '@types/yargs': 17.0.33 chalk: 4.1.2 dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} dev: true - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@nodelib/fs.scandir@2.1.5: @@ -1762,10 +2087,10 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 dev: true - /@rollup/plugin-babel@6.0.4(@babel/core@7.23.0)(rollup@3.29.4): + /@rollup/plugin-babel@6.0.4(@babel/core@7.25.2)(rollup@3.29.4): resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1778,10 +2103,12 @@ packages: rollup: optional: true dependencies: - '@babel/core': 7.23.0 - '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) rollup: 3.29.4 + transitivePeerDependencies: + - supports-color dev: true /@rollup/plugin-node-resolve@15.2.3(rollup@3.29.4): @@ -1793,7 +2120,7 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-builtin-module: 3.2.1 @@ -1802,8 +2129,8 @@ packages: rollup: 3.29.4 dev: true - /@rollup/pluginutils@5.0.5(rollup@3.29.4): - resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} + /@rollup/pluginutils@5.1.0(rollup@3.29.4): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1811,24 +2138,94 @@ packages: rollup: optional: true dependencies: - '@types/estree': 1.0.2 + '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 rollup: 3.29.4 dev: true - /@sentry-internal/tracing@7.73.0: - resolution: {integrity: sha512-ig3WL/Nqp8nRQ52P205NaypGKNfIl/G+cIqge9xPW6zfRb5kJdM1YParw9GSJ1SPjEZBkBORGAML0on5H2FILw==} + /@sentry-internal/tracing@7.114.0: + resolution: {integrity: sha512-dOuvfJN7G+3YqLlUY4HIjyWHaRP8vbOgF+OsE5w2l7ZEn1rMAaUbPntAR8AF9GBA6j2zWNoSo8e7GjbJxVofSg==} + engines: {node: '>=8'} + dependencies: + '@sentry/core': 7.114.0 + '@sentry/types': 7.114.0 + '@sentry/utils': 7.114.0 + dev: false + + /@sentry-internal/tracing@7.119.0: + resolution: {integrity: sha512-oKdFJnn+56f0DHUADlL8o9l8jTib3VDLbWQBVkjD9EprxfaCwt2m8L5ACRBdQ8hmpxCEo4I8/6traZ7qAdBUqA==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.73.0 - '@sentry/types': 7.73.0 - '@sentry/utils': 7.73.0 - tslib: 2.6.2 + '@sentry/core': 7.119.0 + '@sentry/types': 7.119.0 + '@sentry/utils': 7.119.0 dev: false - /@sentry/cli@2.21.2: - resolution: {integrity: sha512-X1nye89zl+QV3FSuQDGItfM51tW9PQ7ce0TtV/12DgGgTVEgnVp5uvO3wX5XauHvulQzRPzwUL3ZK+yS5bAwCw==} + /@sentry/cli-darwin@2.34.1: + resolution: {integrity: sha512-SqlCunwhweMDJNKVf3kabiN6FwpvCIffn2cjfaZD0zqZQ3M1tWMJ/kSA0TGfe7lWu9JloNmVm+ArcudGitvX3w==} + engines: {node: '>=10'} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@sentry/cli-linux-arm64@2.34.1: + resolution: {integrity: sha512-iSl/uNWjKbVPb6ll12SmHG9iGcC3oN8jjzdycm/mD3H/d8DLMloEiaz8lHQnsYCaPiNKwap1ThKlPvnKOU4SNg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd] + requiresBuild: true + dev: true + optional: true + + /@sentry/cli-linux-arm@2.34.1: + resolution: {integrity: sha512-CDhtFbUs16CoU10wEbxnn/pEuenFIMosTcxI7v0gWp3Wo0B2h0bOsLEk9dlT0YsqRTAldKUzef9AVX82m5Svwg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd] + requiresBuild: true + dev: true + optional: true + + /@sentry/cli-linux-i686@2.34.1: + resolution: {integrity: sha512-jq5o49pgzJFv/CQtvx4FLVO1xra22gzP76FtmvPwEhZQhJT6QduW9fpnvVDnOaY8YLzC7GAeszUV6sqZ0MZUqg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd] + requiresBuild: true + dev: true + optional: true + + /@sentry/cli-linux-x64@2.34.1: + resolution: {integrity: sha512-O99RAkrcMErWLPRdza6HaG7kmHCx9MYFNDX6FLrAgSP3oz+X3ral1oDTIrMs4hVbPDK287ZGAqCJtk+1iOjEBg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd] + requiresBuild: true + dev: true + optional: true + + /@sentry/cli-win32-i686@2.34.1: + resolution: {integrity: sha512-yEeuneEVmExCbWlnSauhIg8wZDfKxRaou8XRfM6oPlSBu0XO5HUI3uRK5t2xT0zX8Syzh2kCZpdVE1KLavVeKA==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@sentry/cli-win32-x64@2.34.1: + resolution: {integrity: sha512-mU48VpDTwRgt7/Pf3vk/P87m4kM3XEXHHHfq9EvHCTspFF6GtMfL9njZ7+5Z+7ko852JS4kpunjZtsxmoP4/zA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@sentry/cli@2.34.1: + resolution: {integrity: sha512-hAHvu+XH1kn1ee2NUWvuqAZenK/MrxqQzeIrIYATqF2XGjtSOr7irjAKWjd97/vXdLHA6TBnMW1wHwLcuJK2tg==} engines: {node: '>= 10'} hasBin: true requiresBuild: true @@ -1838,62 +2235,93 @@ packages: progress: 2.0.3 proxy-from-env: 1.1.0 which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.34.1 + '@sentry/cli-linux-arm': 2.34.1 + '@sentry/cli-linux-arm64': 2.34.1 + '@sentry/cli-linux-i686': 2.34.1 + '@sentry/cli-linux-x64': 2.34.1 + '@sentry/cli-win32-i686': 2.34.1 + '@sentry/cli-win32-x64': 2.34.1 transitivePeerDependencies: - encoding - supports-color dev: true - /@sentry/core@7.73.0: - resolution: {integrity: sha512-9FEz4Gq848LOgVN2OxJGYuQqxv7cIVw69VlAzWHEm3njt8mjvlTq+7UiFsGRo84+59V2FQuHxzA7vVjl90WfSg==} + /@sentry/core@7.114.0: + resolution: {integrity: sha512-YnanVlmulkjgZiVZ9BfY9k6I082n+C+LbZo52MTvx3FY6RE5iyiPMpaOh67oXEZRWcYQEGm+bKruRxLVP6RlbA==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.73.0 - '@sentry/utils': 7.73.0 - tslib: 2.6.2 + '@sentry/types': 7.114.0 + '@sentry/utils': 7.114.0 dev: false - /@sentry/node@7.73.0: - resolution: {integrity: sha512-i50bRfmgkRRx0XXUbg9jGD/RuznDJxJXc4rBILhoJuhl+BjRIaoXA3ayplfJn8JLZxsNh75uJaCq4IUK70SORw==} + /@sentry/core@7.119.0: + resolution: {integrity: sha512-CS2kUv9rAJJEjiRat6wle3JATHypB0SyD7pt4cpX5y0dN5dZ1JrF57oLHRMnga9fxRivydHz7tMTuBhSSwhzjw==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.73.0 - '@sentry/core': 7.73.0 - '@sentry/types': 7.73.0 - '@sentry/utils': 7.73.0 - cookie: 0.5.0 - https-proxy-agent: 5.0.1 - lru_map: 0.3.3 - tslib: 2.6.2 - transitivePeerDependencies: - - supports-color + '@sentry/types': 7.119.0 + '@sentry/utils': 7.119.0 dev: false - /@sentry/tracing@7.73.0: - resolution: {integrity: sha512-LOQR6Hkc8ZoflCXWtMlxTbCBEwv0MSOr3vesnRsmlFG8TW1YUIneU+wKnVxToWAZ8fq+6ubclnuIUKHfqTk/Tg==} + /@sentry/integrations@7.119.0: + resolution: {integrity: sha512-OHShvtsRW0A+ZL/ZbMnMqDEtJddPasndjq+1aQXw40mN+zeP7At/V1yPZyFaURy86iX7Ucxw5BtmzuNy7hLyTA==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.73.0 + '@sentry/core': 7.119.0 + '@sentry/types': 7.119.0 + '@sentry/utils': 7.119.0 + localforage: 1.10.0 dev: false - /@sentry/types@7.73.0: - resolution: {integrity: sha512-/v8++bly8jW7r4cP2wswYiiVpn7eLLcqwnfPUMeCQze4zj3F3nTRIKc9BGHzU0V+fhHa3RwRC2ksqTGq1oJMDg==} + /@sentry/node@7.119.0: + resolution: {integrity: sha512-9PFzN8xS6U0oZCflpVxS2SSIsHkCaj7qYBlsvHj4CTGWfao9ImwrU6+smy4qoG6oxwPfoVb5pOOMb4WpWOvXcQ==} engines: {node: '>=8'} + dependencies: + '@sentry-internal/tracing': 7.119.0 + '@sentry/core': 7.119.0 + '@sentry/integrations': 7.119.0 + '@sentry/types': 7.119.0 + '@sentry/utils': 7.119.0 dev: false - /@sentry/utils@7.73.0: - resolution: {integrity: sha512-h3ZK/qpf4k76FhJV9uiSbvMz3V/0Ovy94C+5/9UgPMVCJXFmVsdw8n/dwANJ7LupVPfYP23xFGgebDMFlK1/2w==} + /@sentry/tracing@7.114.0: + resolution: {integrity: sha512-eldEYGADReZ4jWdN5u35yxLUSTOvjsiZAYd4KBEpf+Ii65n7g/kYOKAjNl7tHbrEG1EsMW4nDPWStUMk1w+tfg==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.73.0 - tslib: 2.6.2 + '@sentry-internal/tracing': 7.114.0 + dev: false + + /@sentry/types@7.114.0: + resolution: {integrity: sha512-tsqkkyL3eJtptmPtT0m9W/bPLkU7ILY7nvwpi1hahA5jrM7ppoU0IMaQWAgTD+U3rzFH40IdXNBFb8Gnqcva4w==} + engines: {node: '>=8'} + dev: false + + /@sentry/types@7.119.0: + resolution: {integrity: sha512-27qQbutDBPKGbuJHROxhIWc1i0HJaGLA90tjMu11wt0E4UNxXRX+UQl4Twu68v4EV3CPvQcEpQfgsViYcXmq+w==} + engines: {node: '>=8'} + dev: false + + /@sentry/utils@7.114.0: + resolution: {integrity: sha512-319N90McVpupQ6vws4+tfCy/03AdtsU0MurIE4+W5cubHME08HtiEWlfacvAxX+yuKFhvdsO4K4BB/dj54ideg==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.114.0 + dev: false + + /@sentry/utils@7.119.0: + resolution: {integrity: sha512-ZwyXexWn2ZIe2bBoYnXJVPc2esCSbKpdc6+0WJa8eutXfHq3FRKg4ohkfCBpfxljQGEfP1+kfin945lA21Ka+A==} + engines: {node: '>=8'} + dependencies: + '@sentry/types': 7.119.0 dev: false /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: true @@ -1901,11 +2329,30 @@ packages: /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 + dev: true + + /@stately-cloud/client@0.3.0: + resolution: {integrity: sha512-XHQVpgTyCAAKG4JD/qxdShlUPaO7RHC6378NS+leOCGdGKOeVF8Qc+8DAm6U12qLS1pjLwMxRde0XtAQqZpnWA==} + engines: {node: '>=18'} + dependencies: + '@bufbuild/protobuf': 2.0.0 + '@connectrpc/connect': 2.0.0-alpha.1(@bufbuild/protobuf@2.0.0) + '@connectrpc/connect-node': 2.0.0-alpha.1(@bufbuild/protobuf@2.0.0)(@connectrpc/connect@2.0.0-alpha.1) + dev: false + + /@stately-cloud/schema@0.2.0: + resolution: {integrity: sha512-rN3CbTzwgLGkvcDuHcMeScoNAn+iKwZrYejQYWi6AZw4gQ/38jDAzJHVzchp5+fksHevffj8my0fiVYHAHpXkA==} + hasBin: true + dependencies: + '@bufbuild/protobuf': 2.0.0 + fast-equals: 5.0.1 + tsx: 4.19.0 + typescript: 5.5.4 dev: true - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true /@tsconfig/node12@1.0.11: @@ -1920,186 +2367,186 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@types/babel__core@7.20.2: - resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==} + /@types/babel__core@7.20.5: + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 - '@types/babel__generator': 7.6.5 - '@types/babel__template': 7.4.2 - '@types/babel__traverse': 7.20.2 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 dev: true - /@types/babel__generator@7.6.5: - resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==} + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.25.6 dev: true - /@types/babel__template@7.4.2: - resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==} + /@types/babel__template@7.4.4: + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} dependencies: - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 dev: true - /@types/babel__traverse@7.20.2: - resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==} + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.25.6 dev: true - /@types/body-parser@1.19.3: - resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==} + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: - '@types/connect': 3.4.36 - '@types/node': 20.8.4 + '@types/connect': 3.4.38 + '@types/node': 22.5.1 dev: true - /@types/connect@3.4.36: - resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.8.4 + '@types/node': 22.5.1 dev: true - /@types/cookiejar@2.1.2: - resolution: {integrity: sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==} + /@types/cookiejar@2.1.5: + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} dev: true - /@types/cors@2.8.14: - resolution: {integrity: sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==} + /@types/cors@2.8.17: + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} dependencies: - '@types/node': 20.8.4 + '@types/node': 22.5.1 dev: true - /@types/estree@1.0.2: - resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true - /@types/express-serve-static-core@4.17.37: - resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: - '@types/node': 20.8.4 - '@types/qs': 6.9.8 - '@types/range-parser': 1.2.5 - '@types/send': 0.17.2 + '@types/node': 22.5.1 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 dev: true - /@types/express@4.17.19: - resolution: {integrity: sha512-UtOfBtzN9OvpZPPbnnYunfjM7XCI4jyk1NvnFhTVz5krYAnW4o5DCoIekvms+8ApqhB4+9wSge1kBijdfTSmfg==} + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: - '@types/body-parser': 1.19.3 - '@types/express-serve-static-core': 4.17.37 - '@types/qs': 6.9.8 - '@types/serve-static': 1.15.3 + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.5 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 dev: true - /@types/graceful-fs@4.1.7: - resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} + /@types/graceful-fs@4.1.9: + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.8.4 + '@types/node': 22.5.1 dev: true - /@types/http-errors@2.0.2: - resolution: {integrity: sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==} + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} dev: true - /@types/istanbul-lib-coverage@2.0.4: - resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true - /@types/istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==} + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-lib-coverage': 2.0.6 dev: true - /@types/istanbul-reports@3.0.2: - resolution: {integrity: sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==} + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: - '@types/istanbul-lib-report': 3.0.1 + '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest@29.5.5: - resolution: {integrity: sha512-ebylz2hnsWR9mYvmBFbXJXr+33UPc4+ZdxyDXh5w0FlPBTfCVN3wPL+kuOiQt3xvrK419v7XWeAs+AeOksafXg==} + /@types/jest@29.5.12: + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} dependencies: expect: 29.7.0 pretty-format: 29.7.0 dev: true - /@types/json-schema@7.0.13: - resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/jsonwebtoken@9.0.3: - resolution: {integrity: sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA==} + /@types/jsonwebtoken@9.0.6: + resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} dependencies: - '@types/node': 20.8.4 + '@types/node': 22.5.1 - /@types/lodash@4.14.199: - resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} + /@types/lodash@4.17.7: + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} dev: true - /@types/mime@1.3.3: - resolution: {integrity: sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==} + /@types/methods@1.1.4: + resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} dev: true - /@types/mime@3.0.2: - resolution: {integrity: sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ==} + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} dev: true - /@types/morgan@1.9.6: - resolution: {integrity: sha512-xfKogz5WcKww2DAiVT9zxMgrqQt+Shq8tDVeLT+otoj6dJnkRkyJxMF51mHtUc3JCPKGk5x1EBU0buuGpfftlQ==} + /@types/morgan@1.9.9: + resolution: {integrity: sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==} dependencies: - '@types/node': 20.8.4 + '@types/node': 22.5.1 dev: true - /@types/node@20.8.4: - resolution: {integrity: sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==} + /@types/node@22.5.1: + resolution: {integrity: sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==} dependencies: - undici-types: 5.25.3 + undici-types: 6.19.8 - /@types/pg@8.10.5: - resolution: {integrity: sha512-GS3ebGcSJQqKSnq4/WnSH1XQvx0vTDLEmqLENk7onKvTnry9BWPsZiZeUMJlEPw+5bCQDzfxZFhxlUztpNCKgQ==} + /@types/pg@8.11.8: + resolution: {integrity: sha512-IqpCf8/569txXN/HoP5i1LjXfKZWL76Yr2R77xgeIICUbAYHeoaEZFhYHo2uDftecLWrTJUq63JvQu8q3lnDyA==} dependencies: - '@types/node': 20.8.4 - pg-protocol: 1.6.0 - pg-types: 4.0.1 + '@types/node': 22.5.1 + pg-protocol: 1.6.1 + pg-types: 4.0.2 dev: true - /@types/qs@6.9.8: - resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true - /@types/range-parser@1.2.5: - resolution: {integrity: sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==} + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} dev: true /@types/resolve@1.20.2: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: true - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true - /@types/send@0.17.2: - resolution: {integrity: sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==} + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: - '@types/mime': 1.3.3 - '@types/node': 20.8.4 + '@types/mime': 1.3.5 + '@types/node': 22.5.1 dev: true - /@types/serve-static@1.15.3: - resolution: {integrity: sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: - '@types/http-errors': 2.0.2 - '@types/mime': 3.0.2 - '@types/node': 20.8.4 + '@types/http-errors': 2.0.4 + '@types/node': 22.5.1 + '@types/send': 0.17.4 dev: true - /@types/stack-utils@2.0.1: - resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + /@types/stack-utils@2.0.3: + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true /@types/strip-bom@3.0.0: @@ -2110,41 +2557,43 @@ packages: resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} dev: true - /@types/superagent@4.1.19: - resolution: {integrity: sha512-McM1mlc7PBZpCaw0fw/36uFqo0YeA6m8JqoyE4OfqXsZCIg0hPP2xdE6FM7r6fdprDZHlJwDpydUj1R++93hCA==} + /@types/superagent@8.1.9: + resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} dependencies: - '@types/cookiejar': 2.1.2 - '@types/node': 20.8.4 + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 22.5.1 + form-data: 4.0.0 dev: true - /@types/supertest@2.0.14: - resolution: {integrity: sha512-Q900DeeHNFF3ZYYepf/EyJfZDA2JrnWLaSQ0YNV7+2GTo8IlJzauEnDGhya+hauncpBYTYGpVHwGdssJeAQ7eA==} + /@types/supertest@2.0.16: + resolution: {integrity: sha512-6c2ogktZ06tr2ENoZivgm7YnprnhYE4ZoXGMY+oA7IuAf17M8FWvujXZGmxLv8y0PTyts4x5A+erSwVUFA8XSg==} dependencies: - '@types/superagent': 4.1.19 + '@types/superagent': 8.1.9 dev: true - /@types/uuid@9.0.5: - resolution: {integrity: sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ==} + /@types/uuid@9.0.8: + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} dev: true - /@types/vhost@3.0.5: - resolution: {integrity: sha512-4kWsLR9Gq2iagZbTn0XFJEnUn2jjyeBpX4YnfQ4riR+a8LSXQxjXm6tcV+/abCqST0wW3I590NE5IOPf9waxbg==} + /@types/vhost@3.0.9: + resolution: {integrity: sha512-1XtvjHU2Y/ULSFsh7GT3mfTQa7dh8vfN48quUlFJdbh4nSM5BgjK+extSErJvmOueWqtXA30ACDha7aApx7Pvw==} dependencies: - '@types/express': 4.17.19 + '@types/connect': 3.4.38 dev: true - /@types/yargs-parser@21.0.1: - resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true - /@types/yargs@17.0.28: - resolution: {integrity: sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==} + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: - '@types/yargs-parser': 21.0.1 + '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.7.5(@typescript-eslint/parser@6.7.5)(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==} + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -2154,26 +2603,26 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/type-utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.5 - debug: 4.3.4 - eslint: 8.51.0 + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6 + eslint: 8.57.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==} + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2182,27 +2631,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.5 - debug: 4.3.4 - eslint: 8.51.0 - typescript: 5.2.2 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6 + eslint: 8.57.0 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.7.5: - resolution: {integrity: sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==} + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -2211,23 +2660,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.5(eslint@8.51.0)(typescript@5.2.2) - debug: 4.3.4 - eslint: 8.51.0 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.7.5: - resolution: {integrity: sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.7.5(typescript@5.2.2): - resolution: {integrity: sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -2235,45 +2684,50 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/visitor-keys': 6.7.5 - debug: 4.3.4 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.6 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.7.5(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==} + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@types/json-schema': 7.0.13 - '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 6.7.5 - '@typescript-eslint/types': 6.7.5 - '@typescript-eslint/typescript-estree': 6.7.5(typescript@5.2.2) - eslint: 8.51.0 - semver: 7.5.4 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + eslint: 8.57.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.7.5: - resolution: {integrity: sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.5 + '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 dev: true + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -2282,21 +2736,23 @@ packages: negotiator: 0.6.3 dev: false - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.12.1 dev: true - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 dev: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -2305,9 +2761,10 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color + dev: true /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -2381,6 +2838,7 @@ packages: /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} @@ -2398,24 +2856,24 @@ packages: resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} dev: true - /async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: false + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true - /babel-jest@29.7.0(@babel/core@7.23.0): + /babel-jest@29.7.0(@babel/core@7.25.2): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.2 + '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.23.0) + babel-preset-jest: 29.6.3(@babel/core@7.25.2) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -2427,7 +2885,7 @@ packages: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.24.8 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -2440,77 +2898,80 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 - '@types/babel__core': 7.20.2 - '@types/babel__traverse': 7.20.2 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 dev: true - /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.23.0): - resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.22.20 - '@babel/core': 7.23.0 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.0) + '@babel/compat-data': 7.25.4 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.4(@babel/core@7.23.0): - resolution: {integrity: sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==} + /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.0) - core-js-compat: 3.33.0 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.38.1 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.23.0): - resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.0) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color dev: true - /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.0): - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + /babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.2): + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0) - dev: true - - /babel-preset-jest@29.6.3(@babel/core@7.23.0): + '@babel/core': 7.25.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + dev: true + + /babel-preset-jest@29.6.3(@babel/core@7.25.2): resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.25.2 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) dev: true /balanced-match@1.0.2: @@ -2529,8 +2990,8 @@ packages: tweetnacl: 0.14.5 dev: true - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true @@ -2546,8 +3007,8 @@ packages: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: true - /body-parser@1.20.1: - resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 @@ -2559,7 +3020,7 @@ packages: iconv-lite: 0.4.24 on-finished: 2.4.1 qs: 6.11.0 - raw-body: 2.5.1 + raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: @@ -2576,24 +3037,23 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: false - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 dev: true - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001547 - electron-to-chromium: 1.4.549 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) + caniuse-lite: 1.0.30001653 + electron-to-chromium: 1.5.13 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) dev: true /bs-logger@0.2.6: @@ -2617,17 +3077,13 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-writer@2.0.0: - resolution: {integrity: sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==} - engines: {node: '>=4'} - /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true - /bungie-api-ts@5.0.0: - resolution: {integrity: sha512-MpEP37GmYN5klyrcpFtFezFqSK4KNmiXx7yqmCV15eJim37w7d7GpjH3jgKe3XP1uruLCmzGbf56q5pRf3ktaQ==} + /bungie-api-ts@5.1.0: + resolution: {integrity: sha512-q+DCazUsgq34Q54vpHcR3WKifEPAqalTTddW4za8JxdlZF0JaNwvqNBEEa0YMPOUhbGMcJtR09dvcwjtI/ojcw==} engines: {node: '>=13.2.0'} dev: false @@ -2636,11 +3092,15 @@ packages: engines: {node: '>= 0.8'} dev: false - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} @@ -2657,8 +3117,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001547: - resolution: {integrity: sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==} + /caniuse-lite@1.0.30001653: + resolution: {integrity: sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==} dev: true /chalk@2.4.2: @@ -2682,12 +3142,12 @@ packages: engines: {node: '>=10'} dev: true - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -2702,8 +3162,8 @@ packages: engines: {node: '>=8'} dev: true - /cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + /cjs-module-lexer@1.4.0: + resolution: {integrity: sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g==} dev: true /cliui@6.0.0: @@ -2761,9 +3221,11 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 + dev: true - /component-emitter@1.3.0: - resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + /component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + dev: true /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2788,18 +3250,19 @@ packages: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: false - /cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + /cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} dev: false /cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: true - /core-js-compat@3.33.0: - resolution: {integrity: sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==} + /core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} dependencies: - browserslist: 4.22.1 + browserslist: 4.23.3 dev: true /cors@2.8.5: @@ -2815,11 +3278,11 @@ packages: engines: {node: '>=8.0.0'} requiresBuild: true dependencies: - nan: 2.18.0 + nan: 2.20.0 dev: true optional: true - /create-jest@29.7.0(@types/node@20.8.4)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@22.5.1)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -2828,7 +3291,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.8.4)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@22.5.1)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -2867,8 +3330,8 @@ packages: dependencies: bluebird: 3.7.2 db-migrate-base: 2.3.1 - pg: 8.11.3 - semver: 7.5.4 + pg: 8.12.0 + semver: 7.6.3 transitivePeerDependencies: - pg-native dev: true @@ -2911,8 +3374,8 @@ packages: dependencies: ms: 2.0.0 - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2921,14 +3384,15 @@ packages: optional: true dependencies: ms: 2.1.2 + dev: true /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -2950,9 +3414,18 @@ packages: engines: {node: '>=0.10.0'} dev: true + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dev: true /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} @@ -2974,6 +3447,7 @@ packages: dependencies: asap: 2.0.6 wrappy: 1.0.2 + dev: true /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} @@ -2999,8 +3473,8 @@ packages: esutils: 2.0.3 dev: true - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} dev: false @@ -3025,16 +3499,15 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /ejs@3.1.9: - resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true dependencies: - jake: 10.8.7 - dev: false + jake: 10.9.2 - /electron-to-chromium@1.4.549: - resolution: {integrity: sha512-gpXfJslSi4hYDkA0mTLEpYKRv9siAgSUgZ+UWyk+J5Cttpd1ThCVwdclzIwQSclz3hYn049+M2fgrP1WpvF8xg==} + /electron-to-chromium@1.5.13: + resolution: {integrity: sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==} dev: true /emittery@0.13.1: @@ -3057,8 +3530,50 @@ packages: is-arrayish: 0.2.1 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + /esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -3081,13 +3596,13 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-prettier@9.0.0(eslint@8.51.0): - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + /eslint-config-prettier@9.1.0(eslint@8.57.0): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.57.0 dev: true /eslint-scope@7.2.2: @@ -3103,36 +3618,37 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.6 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.23.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3142,7 +3658,7 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: @@ -3153,8 +3669,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 dev: true @@ -3164,8 +3680,8 @@ packages: hasBin: true dev: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -3243,7 +3759,7 @@ packages: resolution: {integrity: sha512-IZoZiDv2yZJAb3QrbaSATVtTCYT11OcqgFGoTN4iKVyN6NBkBkhtVIixww5fmakF0Upt5HfOxJuS6ZmJVeOtTQ==} engines: {node: '>= 8.0.0'} dependencies: - '@types/jsonwebtoken': 9.0.3 + '@types/jsonwebtoken': 9.0.6 express-unless: 2.1.3 jsonwebtoken: 9.0.2 dev: false @@ -3252,16 +3768,16 @@ packages: resolution: {integrity: sha512-wj4tLMyCVYuIIKHGt0FhCtIViBcwzWejX0EjNxveAa6dG+0XBCQhMbx+PnkLkFCxLC69qoFrxds4pIyL88inaQ==} dev: false - /express@4.18.2: - resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + /express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.1 + body-parser: 1.20.2 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.5.0 + cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 @@ -3300,15 +3816,20 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + /fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 dev: true /fast-json-stable-stringify@2.1.0: @@ -3321,9 +3842,10 @@ packages: /fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -3338,7 +3860,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.1 + flat-cache: 3.2.0 dev: true /file-uri-to-path@1.0.0: @@ -3351,10 +3873,9 @@ packages: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} dependencies: minimatch: 5.1.6 - dev: false - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -3398,17 +3919,17 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.1.1: - resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} - engines: {node: '>=12.0.0'} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true /form-data@4.0.0: @@ -3418,6 +3939,7 @@ packages: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: true /formidable@2.1.2: resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} @@ -3425,7 +3947,8 @@ packages: dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - qs: 6.11.2 + qs: 6.13.0 + dev: true /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -3449,8 +3972,8 @@ packages: dev: true optional: true - /function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} @@ -3462,13 +3985,15 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: - function-bind: 1.1.1 - has: 1.0.4 - has-proto: 1.0.1 + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 has-symbols: 1.0.3 + hasown: 2.0.2 /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -3480,6 +4005,12 @@ packages: engines: {node: '>=10'} dev: true + /get-tsconfig@4.8.0: + resolution: {integrity: sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3496,6 +4027,7 @@ packages: /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3510,8 +4042,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -3523,12 +4055,17 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 dev: true + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -3546,21 +4083,29 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 /hexoid@1.0.0: resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} engines: {node: '>=8'} + dev: true /hi-base32@0.5.1: resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} @@ -3598,9 +4143,10 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.6 transitivePeerDependencies: - supports-color + dev: true /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -3614,11 +4160,15 @@ packages: safer-buffer: 2.1.2 dev: false - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} dev: true + /immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + dev: false + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -3627,8 +4177,8 @@ packages: resolve-from: 4.0.0 dev: true - /import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + /import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true dependencies: @@ -3648,6 +4198,7 @@ packages: /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 @@ -3673,7 +4224,7 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 dev: true /is-builtin-module@3.2.1: @@ -3683,10 +4234,11 @@ packages: builtin-modules: 3.3.0 dev: true - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} dependencies: - has: 1.0.4 + hasown: 2.0.2 dev: true /is-extglob@2.1.1: @@ -3738,8 +4290,8 @@ packages: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: true - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: true @@ -3747,24 +4299,24 @@ packages: resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.0 - '@babel/parser': 7.23.0 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-lib-instrument@6.0.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} dependencies: - '@babel/core': 7.23.0 - '@babel/parser': 7.23.0 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 7.5.4 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: true @@ -3773,7 +4325,7 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 dev: true @@ -3782,31 +4334,30 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 - istanbul-lib-coverage: 3.2.0 + debug: 4.3.6 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 dev: true - /jake@10.8.7: - resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} hasBin: true dependencies: - async: 3.2.4 + async: 3.2.6 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 - dev: false /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} @@ -3825,10 +4376,10 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.1 + dedent: 1.5.3 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -3838,7 +4389,7 @@ packages: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.4 + pure-rand: 6.1.0 slash: 3.0.0 stack-utils: 2.0.6 transitivePeerDependencies: @@ -3846,7 +4397,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.8.4)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@22.5.1)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3856,14 +4407,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.8.4)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@22.5.1)(ts-node@10.9.2) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.8.4)(ts-node@10.9.1) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.5.1)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -3874,7 +4425,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.8.4)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@22.5.1)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3886,11 +4437,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 - babel-jest: 29.7.0(@babel/core@7.23.0) + '@types/node': 22.5.1 + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -3904,12 +4455,12 @@ packages: jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 parse-json: 5.2.0 pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.8.4)(typescript@5.2.2) + ts-node: 10.9.2(@types/node@22.5.1)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -3950,7 +4501,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -3965,15 +4516,15 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/graceful-fs': 4.1.7 - '@types/node': 20.8.4 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.5.1 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 @@ -4001,12 +4552,12 @@ packages: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.1 + '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -4017,7 +4568,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 jest-util: 29.7.0 dev: true @@ -4072,7 +4623,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4103,9 +4654,9 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 chalk: 4.1.2 - cjs-module-lexer: 1.2.3 + cjs-module-lexer: 1.4.0 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -4126,15 +4677,15 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.23.0 - '@babel/generator': 7.23.0 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0) - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0) - '@babel/types': 7.23.0 + '@babel/core': 7.25.2 + '@babel/generator': 7.25.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + '@babel/types': 7.25.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -4145,7 +4696,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.3 transitivePeerDependencies: - supports-color dev: true @@ -4155,7 +4706,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -4180,7 +4731,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.4 + '@types/node': 22.5.1 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -4192,13 +4743,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.8.4 + '@types/node': 22.5.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.8.4)(ts-node@10.9.1): + /jest@29.7.0(@types/node@22.5.1)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4208,10 +4759,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.8.4)(ts-node@10.9.1) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.5.1)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -4284,7 +4835,7 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.5.4 + semver: 7.6.3 dev: false /jwa@1.4.1: @@ -4326,10 +4877,22 @@ packages: type-check: 0.4.0 dev: true + /lie@3.1.1: + resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + dependencies: + immediate: 3.0.6 + dev: false + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true + /localforage@1.10.0: + resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} + dependencies: + lie: 3.1.1 + dev: false + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4397,21 +4960,11 @@ packages: yallist: 3.1.1 dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - - /lru_map@0.3.3: - resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} - dev: false - /make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.3 dev: true /make-error@1.3.6: @@ -4446,11 +4999,11 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 dev: true @@ -4474,6 +5027,7 @@ packages: resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} engines: {node: '>=4.0.0'} hasBin: true + dev: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -4490,7 +5044,13 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -4532,6 +5092,7 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -4541,8 +5102,8 @@ packages: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true - /nan@2.18.0: - resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + /nan@2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} requiresBuild: true optional: true @@ -4577,8 +5138,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} dev: true /normalize-path@3.0.0: @@ -4602,8 +5163,9 @@ packages: engines: {node: '>=0.10.0'} dev: false - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} /obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -4632,6 +5194,7 @@ packages: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 + dev: true /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} @@ -4640,16 +5203,16 @@ packages: mimic-fn: 2.1.0 dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 dev: true /p-limit@2.3.0: @@ -4685,9 +5248,6 @@ packages: engines: {node: '>=6'} dev: true - /packet-reader@1.0.0: - resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} - /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4706,7 +5266,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -4750,8 +5310,8 @@ packages: requiresBuild: true optional: true - /pg-connection-string@2.6.2: - resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==} + /pg-connection-string@2.6.4: + resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==} /pg-int8@1.0.1: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} @@ -4762,15 +5322,15 @@ packages: engines: {node: '>=4'} dev: true - /pg-pool@3.6.1(pg@8.11.3): - resolution: {integrity: sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==} + /pg-pool@3.6.2(pg@8.12.0): + resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.11.3 + pg: 8.12.0 - /pg-protocol@1.6.0: - resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} + /pg-protocol@1.6.1: + resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} /pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} @@ -4782,21 +5342,21 @@ packages: postgres-date: 1.0.7 postgres-interval: 1.2.0 - /pg-types@4.0.1: - resolution: {integrity: sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==} + /pg-types@4.0.2: + resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} engines: {node: '>=10'} dependencies: pg-int8: 1.0.1 pg-numeric: 1.0.2 postgres-array: 3.0.2 postgres-bytea: 3.0.0 - postgres-date: 2.0.1 + postgres-date: 2.1.0 postgres-interval: 3.0.0 - postgres-range: 1.1.3 + postgres-range: 1.1.4 dev: true - /pg@8.11.3: - resolution: {integrity: sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==} + /pg@8.12.0: + resolution: {integrity: sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==} engines: {node: '>= 8.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -4804,11 +5364,9 @@ packages: pg-native: optional: true dependencies: - buffer-writer: 2.0.0 - packet-reader: 1.0.0 - pg-connection-string: 2.6.2 - pg-pool: 3.6.1(pg@8.11.3) - pg-protocol: 1.6.0 + pg-connection-string: 2.6.4 + pg-pool: 3.6.2(pg@8.12.0) + pg-protocol: 1.6.1 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: @@ -4819,8 +5377,8 @@ packages: dependencies: split2: 4.2.0 - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + /picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} dev: true /picomatch@2.3.1: @@ -4864,8 +5422,8 @@ packages: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} - /postgres-date@2.0.1: - resolution: {integrity: sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==} + /postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} engines: {node: '>=12'} dev: true @@ -4880,8 +5438,8 @@ packages: engines: {node: '>=12'} dev: true - /postgres-range@1.1.3: - resolution: {integrity: sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==} + /postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} dev: true /prelude-ls@1.2.1: @@ -4889,8 +5447,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-organize-imports@3.2.3(prettier@3.0.3)(typescript@5.2.2): - resolution: {integrity: sha512-KFvk8C/zGyvUaE3RvxN2MhCLwzV6OBbFSkwZ2OamCrs9ZY4i5L77jQ/w4UmUr+lqX8qbaqVq6bZZkApn+IgJSg==} + /prettier-plugin-organize-imports@3.2.4(prettier@3.3.3)(typescript@5.5.4): + resolution: {integrity: sha512-6m8WBhIp0dfwu0SkgfOxJqh+HpdyfqSSLfKKRZSFbDuEQXDDndb8fTpRWkUrX/uBenkex3MgnVk0J3b3Y5byog==} peerDependencies: '@volar/vue-language-plugin-pug': ^1.0.4 '@volar/vue-typescript': ^1.0.4 @@ -4902,12 +5460,12 @@ packages: '@volar/vue-typescript': optional: true dependencies: - prettier: 3.0.3 - typescript: 5.2.2 + prettier: 3.3.3 + typescript: 5.5.4 dev: true - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true dev: true @@ -4918,7 +5476,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 dev: true /progress@2.0.3: @@ -4957,27 +5515,28 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true - /pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} dev: true /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 dev: false - /qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 + dev: true /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4988,8 +5547,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /raw-body@2.5.1: - resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 @@ -5008,8 +5567,8 @@ packages: strip-json-comments: 2.0.1 dev: true - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} dev: true /read@1.0.7: @@ -5037,14 +5596,14 @@ packages: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} dev: true - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true /regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} dependencies: - '@babel/runtime': 7.23.1 + '@babel/runtime': 7.25.6 dev: true /regexpu-core@5.3.2: @@ -5092,6 +5651,10 @@ packages: engines: {node: '>=8'} dev: true + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -5101,7 +5664,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 dev: true @@ -5118,6 +5681,7 @@ packages: /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -5125,6 +5689,7 @@ packages: /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -5165,12 +5730,10 @@ packages: hasBin: true dev: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -5209,6 +5772,17 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false @@ -5225,12 +5799,14 @@ packages: engines: {node: '>=8'} dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -5286,7 +5862,7 @@ packages: bcrypt-pbkdf: 1.0.2 optionalDependencies: cpu-features: 0.0.2 - nan: 2.18.0 + nan: 2.20.0 dev: true /stack-trace@0.0.10: @@ -5362,22 +5938,24 @@ packages: /superagent@8.1.2: resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} engines: {node: '>=6.4.0 <13 || >=14'} + deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net dependencies: - component-emitter: 1.3.0 + component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.4 + debug: 4.3.6 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 methods: 1.1.2 mime: 2.6.0 - qs: 6.11.2 - semver: 7.5.4 + qs: 6.13.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color + dev: true - /supertest@6.3.3: - resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} + /supertest@6.3.4: + resolution: {integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==} engines: {node: '>=6.4.0'} dependencies: methods: 1.1.2 @@ -5454,21 +6032,22 @@ packages: hasBin: true dev: true - /ts-api-utils@1.0.3(typescript@5.2.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + /ts-api-utils@1.3.0(typescript@5.5.4): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.2.2 + typescript: 5.5.4 dev: true - /ts-jest@29.1.1(@babel/core@7.23.0)(jest@29.7.0)(typescript@5.2.2): - resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + /ts-jest@29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 '@jest/types': ^29.0.0 babel-jest: ^29.0.0 esbuild: '*' @@ -5477,6 +6056,8 @@ packages: peerDependenciesMeta: '@babel/core': optional: true + '@jest/transform': + optional: true '@jest/types': optional: true babel-jest: @@ -5484,20 +6065,21 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.23.0 + '@babel/core': 7.25.2 bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.8.4)(ts-node@10.9.1) + jest: 29.7.0(@types/node@22.5.1)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.2.2 + semver: 7.6.3 + typescript: 5.5.4 yargs-parser: 21.1.1 dev: true - /ts-node-dev@2.0.0(@types/node@20.8.4)(typescript@5.2.2): + /ts-node-dev@2.0.0(@types/node@22.5.1)(typescript@5.5.4): resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} engines: {node: '>=0.8.0'} hasBin: true @@ -5508,7 +6090,7 @@ packages: node-notifier: optional: true dependencies: - chokidar: 3.5.3 + chokidar: 3.6.0 dynamic-dedupe: 0.3.0 minimist: 1.2.8 mkdirp: 1.0.4 @@ -5516,17 +6098,17 @@ packages: rimraf: 2.7.1 source-map-support: 0.5.21 tree-kill: 1.2.2 - ts-node: 10.9.1(@types/node@20.8.4)(typescript@5.2.2) + ts-node: 10.9.2(@types/node@22.5.1)(typescript@5.5.4) tsconfig: 7.0.0 - typescript: 5.2.2 + typescript: 5.5.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@types/node' dev: true - /ts-node@10.9.1(@types/node@20.8.4)(typescript@5.2.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@22.5.1)(typescript@5.5.4): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -5540,18 +6122,18 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.8.4 - acorn: 8.10.0 - acorn-walk: 8.2.0 + '@types/node': 22.5.1 + acorn: 8.12.1 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -5565,9 +6147,16 @@ packages: strip-json-comments: 2.0.1 dev: true - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false + /tsx@4.19.0: + resolution: {integrity: sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.8.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true /tunnel-ssh@4.1.6: resolution: {integrity: sha512-y7+x+T3F3rkx2Zov5Tk9DGfeEBVAdWU3A/91E0Dk5rrZ/VFIlpV2uhhRuaISJUdyG0N+Lcp1fXZMXz+ovPt5vA==} @@ -5613,14 +6202,21 @@ packages: mime-types: 2.1.35 dev: false - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true - /undici-types@5.25.3: - resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + /undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.1 + dev: false /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} @@ -5651,7 +6247,7 @@ packages: requiresBuild: true dependencies: bindings: 1.5.0 - nan: 2.18.0 + nan: 2.20.0 dev: false optional: true @@ -5660,21 +6256,21 @@ packages: engines: {node: '>= 0.8'} dev: false - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /utils-merge@1.0.1: @@ -5691,12 +6287,12 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-to-istanbul@9.1.3: - resolution: {integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==} + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.19 - '@types/istanbul-lib-coverage': 2.0.4 + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 dev: true @@ -5755,6 +6351,11 @@ packages: stack-trace: 0.0.10 dev: true + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -5775,6 +6376,7 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} @@ -5801,9 +6403,6 @@ packages: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -5839,7 +6438,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 From e89770d81d314097ad671b13298074876d719a61 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Sun, 1 Sep 2024 20:36:42 -0700 Subject: [PATCH 2/8] Maybe use ESM --- api/routes/auth-token.ts | 4 ++-- jest.config.js | 7 ++++++- package.json | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/api/routes/auth-token.ts b/api/routes/auth-token.ts index bbe019b..30a5ca3 100644 --- a/api/routes/auth-token.ts +++ b/api/routes/auth-token.ts @@ -4,7 +4,7 @@ import asyncHandler from 'express-async-handler'; import util from 'util'; import { AuthTokenRequest, AuthTokenResponse } from '../shapes/auth.js'; -import jwt, { Secret, SignOptions } from 'jsonwebtoken'; +import { Secret, sign, SignOptions } from 'jsonwebtoken'; import _ from 'lodash'; import { metrics } from '../metrics/index.js'; import { ApiApp } from '../shapes/app.js'; @@ -12,7 +12,7 @@ import { badRequest } from '../utils.js'; const TOKEN_EXPIRES_IN = 30 * 24 * 60 * 60; // 30 days -const signJwt = util.promisify(jwt.sign); +const signJwt = util.promisify(sign); export const authTokenHandler = asyncHandler(async (req, res) => { const { bungieAccessToken, membershipId } = req.body as AuthTokenRequest; diff --git a/jest.config.js b/jest.config.js index 8c385d6..49c3f2a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,7 +2,12 @@ import { pathsToModuleNameMapper } from 'ts-jest'; import tsConfig from './tsconfig.json' with { type: 'json' }; export default { transform: { - '\\.ts$': ['ts-jest'], + '\\.ts$': [ + 'ts-jest', + { + useESM: true, + }, + ], }, preset: 'ts-jest', verbose: true, diff --git a/package.json b/package.json index e604c63..58c86ca 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "docker:push": "docker push destinyitemmanager/dim-api:latest", "lint": "eslint --fix api", "lint-check": "eslint api", - "test": "jest --verbose --coverage api --forceExit", + "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --verbose --coverage api --forceExit", "test:watch": "jest --watch", "dim-api-types:build": "./build-dim-api-types.sh" }, From afe811f64c9f8f138fd414acabe44df6b82bacd6 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Sun, 1 Sep 2024 20:39:52 -0700 Subject: [PATCH 3/8] ESM is fun --- api/routes/auth-token.ts | 4 ++-- api/server.test.ts | 4 ++-- api/server.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/routes/auth-token.ts b/api/routes/auth-token.ts index 30a5ca3..74fc2f4 100644 --- a/api/routes/auth-token.ts +++ b/api/routes/auth-token.ts @@ -4,7 +4,7 @@ import asyncHandler from 'express-async-handler'; import util from 'util'; import { AuthTokenRequest, AuthTokenResponse } from '../shapes/auth.js'; -import { Secret, sign, SignOptions } from 'jsonwebtoken'; +import jwt, { type Secret, type SignOptions } from 'jsonwebtoken'; import _ from 'lodash'; import { metrics } from '../metrics/index.js'; import { ApiApp } from '../shapes/app.js'; @@ -12,7 +12,7 @@ import { badRequest } from '../utils.js'; const TOKEN_EXPIRES_IN = 30 * 24 * 60 * 60; // 30 days -const signJwt = util.promisify(sign); +const signJwt = util.promisify(jwt.sign); export const authTokenHandler = asyncHandler(async (req, res) => { const { bungieAccessToken, membershipId } = req.body as AuthTokenRequest; diff --git a/api/server.test.ts b/api/server.test.ts index e67e8c4..0533328 100644 --- a/api/server.test.ts +++ b/api/server.test.ts @@ -1,5 +1,5 @@ import { readFile } from 'fs'; -import { sign } from 'jsonwebtoken'; +import jwt from 'jsonwebtoken'; import { makeFetch } from 'supertest-fetch'; import { promisify } from 'util'; import { v4 as uuid } from 'uuid'; @@ -30,7 +30,7 @@ beforeAll(async () => { expect(testApiKey).toBeDefined(); await refreshApps(); - testUserToken = sign({}, process.env.JWT_SECRET!, { + testUserToken = jwt.sign({}, process.env.JWT_SECRET!, { subject: bungieMembershipId.toString(), issuer: testApiKey, expiresIn: 60 * 60, diff --git a/api/server.ts b/api/server.ts index 1e3f274..bd3a73e 100644 --- a/api/server.ts +++ b/api/server.ts @@ -2,7 +2,7 @@ import * as Sentry from '@sentry/node'; import cors from 'cors'; import express, { ErrorRequestHandler } from 'express'; import { expressjwt as jwt } from 'express-jwt'; -import { JwtPayload } from 'jsonwebtoken'; +import { type JwtPayload } from 'jsonwebtoken'; import { apiKey, isAppOrigin } from './apps/index.js'; import expressStatsd from './metrics/express.js'; import { metrics } from './metrics/index.js'; From d02d0ef3e17da72db0d35ace62c8eadc47bdf44d Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Tue, 3 Sep 2024 11:53:02 -0700 Subject: [PATCH 4/8] Set up test store --- .github/workflows/pr-build.yml | 11 ++++++++--- api/server.test.ts | 16 ++++++++++++++++ api/stately/client.ts | 2 +- kubernetes/dim-api-configmap.yaml | 2 ++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 6874dd9..195d495 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -7,6 +7,7 @@ on: pull_request jobs: build: runs-on: ubuntu-latest + environment: test services: postgres: @@ -52,8 +53,12 @@ jobs: - name: Build API run: pnpm build:api - - name: Test - run: pnpm test - - name: Lint run: pnpm run lint-check + + - name: Test + run: pnpm test + env: + STATELY_STORE_ID: ${{ env.STATELY_STORE_ID}} + STATELY_CLIENT_ID: ${{ env.STATELY_CLIENT_ID }} + STATELY_CLIENT_SECRET: ${{ secrets.STATELY_CLIENT_SECRET }} diff --git a/api/server.test.ts b/api/server.test.ts index 0533328..a5a9db2 100644 --- a/api/server.test.ts +++ b/api/server.test.ts @@ -16,6 +16,7 @@ import { Loadout, LoadoutItem } from './shapes/loadouts.js'; import { ProfileResponse, ProfileUpdateRequest, ProfileUpdateResponse } from './shapes/profile.js'; import { SearchType } from './shapes/search.js'; import { defaultSettings } from './shapes/settings.js'; +import { client } from './stately/client.js'; const fetch = makeFetch(app); @@ -35,6 +36,21 @@ beforeAll(async () => { issuer: testApiKey, expiresIn: 60 * 60, }); + + // Make sure we have global settings + const globalSettings = ['dev', 'beta', 'app'].map((stage) => + client.create('GlobalSettings', { + stage, + dimApiEnabled: true, + destinyProfileMinimumRefreshInterval: 15n, + destinyProfileRefreshInterval: 120n, + autoRefresh: true, + refreshProfileOnVisible: true, + dimProfileMinimumRefreshInterval: 600n, + showIssueBanner: false, + }), + ); + await client.putBatch(...globalSettings); }); afterAll(() => closeDbPool()); diff --git a/api/stately/client.ts b/api/stately/client.ts index 470ddab..287b586 100644 --- a/api/stately/client.ts +++ b/api/stately/client.ts @@ -3,4 +3,4 @@ import { createClient } from './generated/stately_item_types.js'; /** * Our StatelyDB client, bound to our types and store. */ -export const client = createClient(3129210249316993n); +export const client = createClient(BigInt(process.env.STATELY_STORE_ID!)); diff --git a/kubernetes/dim-api-configmap.yaml b/kubernetes/dim-api-configmap.yaml index 99b0e4f..4e45cf2 100644 --- a/kubernetes/dim-api-configmap.yaml +++ b/kubernetes/dim-api-configmap.yaml @@ -11,3 +11,5 @@ data: PGUSER: placeholder PGSSLMODE: require SENTRY_DSN: placeholder + SENTRY_CLIENT_ID: placeholder + SENTRY_STORE_ID: placeholder From 4fc7d92afac32711f0056bb8b5cf8bb6ef8dbb03 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Tue, 3 Sep 2024 12:07:23 -0700 Subject: [PATCH 5/8] Fix lint --- api/stately/schema/loadout-share.ts | 2 +- api/stately/schema/search.ts | 2 +- eslint.config.js | 5 +---- package.json | 1 + 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/api/stately/schema/loadout-share.ts b/api/stately/schema/loadout-share.ts index d727956..493cf81 100644 --- a/api/stately/schema/loadout-share.ts +++ b/api/stately/schema/loadout-share.ts @@ -17,7 +17,7 @@ export const LoadoutShare = itemType('LoadoutShare', { * This is essentially 35 random bits encoded via base32 into a 7-character string. It'd be neat if we could * support that, with a parameterizable string length. */ - id: { type: string, fieldNum: 1 /*initialValue: 'rand35str'*/ }, + id: { type: string, fieldNum: 1 /* initialValue: 'rand35str' */ }, ...loadoutFields, // TODO: Where's the view-counter? diff --git a/api/stately/schema/search.ts b/api/stately/schema/search.ts index 278b3e7..ec639b2 100644 --- a/api/stately/schema/search.ts +++ b/api/stately/schema/search.ts @@ -43,7 +43,7 @@ export const Search = itemType('Search', { // TODO: in the current postgres schema, queries are stored as a hash of the // query string which is automatically generated by the DB. We'd have to do // it manually. - qhash: { type: bytes, fieldNum: 6 /*expression: 'md5(this.query)'*/ }, + qhash: { type: bytes, fieldNum: 6 /* expression: 'md5(this.query)' */ }, /** The profile ID this search is associated with. */ profileId: { type: uint, fieldNum: 7 }, diff --git a/eslint.config.js b/eslint.config.js index 79f6f2e..c2f45b9 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -22,7 +22,7 @@ export default tseslint.config( { name: 'sonarjs/recommended', ...sonarjs.configs.recommended }, { name: 'global ignores', - ignores: ['*.test.ts', '*/migrations/*'], + ignores: ['*.test.ts', 'api/migrations/*', 'api/stately/generated/*.js'], }, { name: 'dim-api-custom', @@ -112,7 +112,6 @@ export default tseslint.config( 'arrow-body-style': ['error', 'as-needed'], curly: ['error', 'all'], eqeqeq: ['error', 'always'], - 'no-return-await': 'off', '@typescript-eslint/return-await': ['error', 'in-try-catch'], 'prefer-regex-literals': 'error', 'prefer-promise-reject-errors': 'error', @@ -144,7 +143,6 @@ export default tseslint.config( '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/method-signature-style': 'error', '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-var-requires': 'off', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-use-before-define': ['error', { functions: false }], '@typescript-eslint/no-parameter-properties': 'off', @@ -162,7 +160,6 @@ export default tseslint.config( '@typescript-eslint/prefer-reduce-type-parameter': 'error', '@typescript-eslint/prefer-includes': 'error', '@typescript-eslint/prefer-string-starts-ends-with': 'error', - '@typescript-eslint/prefer-ts-expect-error': 'error', '@typescript-eslint/prefer-regexp-exec': 'off', '@typescript-eslint/array-type': 'error', '@typescript-eslint/no-non-null-asserted-optional-chain': 'error', diff --git a/package.json b/package.json index 58c86ca..3519d98 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "lint-check": "eslint api", "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --verbose --coverage api --forceExit", "test:watch": "jest --watch", + "eslint-inspect": "pnpm dlx @eslint/config-inspector", "dim-api-types:build": "./build-dim-api-types.sh" }, "devDependencies": { From 2f64bf00c912f33c163dd88458a468c1bb6092a5 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Tue, 3 Sep 2024 12:11:42 -0700 Subject: [PATCH 6/8] Quote environment? --- .github/workflows/pr-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 195d495..d99c41f 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -7,7 +7,7 @@ on: pull_request jobs: build: runs-on: ubuntu-latest - environment: test + environment: 'test' services: postgres: From 969ac321a7afe2c7215f500551a7394140f99f4d Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Tue, 3 Sep 2024 12:21:45 -0700 Subject: [PATCH 7/8] vars not env --- .github/workflows/pr-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index d99c41f..86c0bd3 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -59,6 +59,6 @@ jobs: - name: Test run: pnpm test env: - STATELY_STORE_ID: ${{ env.STATELY_STORE_ID}} - STATELY_CLIENT_ID: ${{ env.STATELY_CLIENT_ID }} + STATELY_STORE_ID: ${{ vars.STATELY_STORE_ID}} + STATELY_CLIENT_ID: ${{ vars.STATELY_CLIENT_ID }} STATELY_CLIENT_SECRET: ${{ secrets.STATELY_CLIENT_SECRET }} From e3c1cc0632d3281bd6a7f70a8638cd26e80e9456 Mon Sep 17 00:00:00 2001 From: Ben Hollis Date: Tue, 3 Sep 2024 12:29:03 -0700 Subject: [PATCH 8/8] Convert bigint --- api/routes/platform-info.ts | 1 + api/shapes/global-settings.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/api/routes/platform-info.ts b/api/routes/platform-info.ts index 7b9c92a..280f6f4 100644 --- a/api/routes/platform-info.ts +++ b/api/routes/platform-info.ts @@ -21,6 +21,7 @@ export const platformInfoHandler = asyncHandler(async (req, res) => { ), destinyProfileRefreshInterval: Number(statelySettings.destinyProfileRefreshInterval), dimProfileMinimumRefreshInterval: Number(statelySettings.dimProfileMinimumRefreshInterval), + lastUpdated: Number(statelySettings.lastUpdated), }; } } catch (e) { diff --git a/api/shapes/global-settings.ts b/api/shapes/global-settings.ts index df8321b..cc14422 100644 --- a/api/shapes/global-settings.ts +++ b/api/shapes/global-settings.ts @@ -13,6 +13,8 @@ export interface GlobalSettings { dimProfileMinimumRefreshInterval: number; /** Display an issue banner, if there is one. */ showIssueBanner: boolean; + /** The unix milliseconds timestamp for when this was last updated. */ + lastUpdated: number; } export const defaultGlobalSettings: GlobalSettings = { @@ -23,6 +25,7 @@ export const defaultGlobalSettings: GlobalSettings = { refreshProfileOnVisible: true, dimProfileMinimumRefreshInterval: 600, showIssueBanner: false, + lastUpdated: 0, }; export interface PlatformInfoResponse {