diff --git a/.gitignore b/.gitignore index ebdbb111..775df5dd 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ Thumbs.db .next .nx/cache .nx/workspace-data +.nyc_output .cursor/rules/nx-rules.mdc .github/instructions/nx.instructions.md diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 00000000..669964ee --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,5 @@ +{ + "report-dir": "coverage", + "temp-dir": ".nyc_output", + "reporter": ["html", "json-summary", "text"] +} diff --git a/apps/node-chess/.env.example b/apps/node-chess/.env.example index 15e710bd..b3d2ac46 100644 --- a/apps/node-chess/.env.example +++ b/apps/node-chess/.env.example @@ -23,6 +23,9 @@ EMAIL_PASS=testpass GOOGLE_OAUTH_CLIENT_SECRET=foo GOOGLE_OAUTH_CLIENT_ID=bar +# LLM Configuration +GEMINI_API_KEY=your_gemini_api_key_here + WEB_APP_URL=http://localhost:4200 APP_PORT=5000 diff --git a/apps/node-chess/src/Server.ts b/apps/node-chess/src/Server.ts index 93dcc8c4..43a204e1 100644 --- a/apps/node-chess/src/Server.ts +++ b/apps/node-chess/src/Server.ts @@ -21,7 +21,7 @@ const start = (app: App, appConfig: AppConfig): ServerType => { }); app.init().catch((err) => { - logger.error('Failed to initialize app:', err); + logger.error(err, 'Failed to initialize app'); process.exit(1); }); diff --git a/apps/node-chess/src/config/model/AppConfig.ts b/apps/node-chess/src/config/model/AppConfig.ts index a9e4773b..c5ce9d8b 100644 --- a/apps/node-chess/src/config/model/AppConfig.ts +++ b/apps/node-chess/src/config/model/AppConfig.ts @@ -1,3 +1,4 @@ +import { LlmConfig } from '@michess/api-service'; import { EmailConfig } from '@michess/infra-email'; export type AppConfig = { @@ -22,4 +23,5 @@ export type AppConfig = { clientSecret: string; }; }; + llm: LlmConfig; }; diff --git a/apps/node-chess/src/config/service/AppConfigService.ts b/apps/node-chess/src/config/service/AppConfigService.ts index 003b3951..1a8f4b3f 100644 --- a/apps/node-chess/src/config/service/AppConfigService.ts +++ b/apps/node-chess/src/config/service/AppConfigService.ts @@ -56,6 +56,9 @@ const getConfig = (): AppConfig => { clientSecret: readEnvStrict('GOOGLE_OAUTH_CLIENT_SECRET'), }, }, + llm: { + geminiApiKey: readEnvStrict('GEMINI_API_KEY'), + }, }; }; diff --git a/apps/node-chess/src/main.ts b/apps/node-chess/src/main.ts index 3df4707e..c0bb4fb8 100644 --- a/apps/node-chess/src/main.ts +++ b/apps/node-chess/src/main.ts @@ -22,7 +22,13 @@ const main = async () => { ); const repos = Repositories.from(pgClient, redis); - const api = Api.from(repos, pgClient, emailClient, appConfig.auth); + const api = Api.from( + repos, + pgClient, + emailClient, + appConfig.auth, + appConfig.llm, + ); const app = App.from(api, redis, { cors: appConfig.cors }); Server.start(app, appConfig); diff --git a/apps/web-chess/project.json b/apps/web-chess/project.json index cf6852db..f853c9fc 100644 --- a/apps/web-chess/project.json +++ b/apps/web-chess/project.json @@ -58,7 +58,7 @@ } }, "test": { - "executor": "@nx/vite:test", + "executor": "@nx/vitest:test", "outputs": ["{options.reportsDirectory}"], "options": { "reportsDirectory": "../../coverage/apps/web-chess" diff --git a/apps/web-chess/src/app/api/Api.ts b/apps/web-chess/src/app/api/Api.ts index b28435a9..ec8d3a0c 100644 --- a/apps/web-chess/src/app/api/Api.ts +++ b/apps/web-chess/src/app/api/Api.ts @@ -2,6 +2,7 @@ import { AuthClient } from './infra/AuthClient'; import { RestClient } from './infra/RestClient'; import { SocketClient } from './infra/SocketClient'; import { AuthService } from './service/AuthService'; +import { BotService } from './service/BotService'; import { GameService } from './service/GameService'; import { MetricsService } from './service/MetricsService'; @@ -9,6 +10,7 @@ export type Api = { games: GameService; auth: AuthService; metrics: MetricsService; + bots: BotService; }; export const Api = { @@ -20,10 +22,12 @@ export const Api = { const auth = new AuthService(authClient, socketClient); const games = new GameService(restClient, socketClient, auth); const metrics = new MetricsService(restClient, socketClient); + const bots = new BotService(restClient); return { games, auth, metrics, + bots, }; }, }; diff --git a/apps/web-chess/src/app/api/service/BotService.ts b/apps/web-chess/src/app/api/service/BotService.ts new file mode 100644 index 00000000..eba868b9 --- /dev/null +++ b/apps/web-chess/src/app/api/service/BotService.ts @@ -0,0 +1,10 @@ +import { BotInfoV1 } from '@michess/api-schema'; +import { RestClient } from '../infra/RestClient'; + +export class BotService { + constructor(private restClient: RestClient) {} + + async listBots(): Promise { + return this.restClient.get('bots').json(); + } +} diff --git a/apps/web-chess/src/app/api/service/GameService.ts b/apps/web-chess/src/app/api/service/GameService.ts index 8fa21a8a..88f752c9 100644 --- a/apps/web-chess/src/app/api/service/GameService.ts +++ b/apps/web-chess/src/app/api/service/GameService.ts @@ -139,6 +139,61 @@ export class GameService { return response; } + async challengeBot(params: { + botId: string; + timeControl: { initialSec: number; incrementSec: number }; + }): Promise { + const response = await this.restClient + .post('games/challenge', { + json: { + opponentId: params.botId, + variant: 'standard', + timeControl: { + type: 'realtime', + initialSec: params.timeControl.initialSec, + incrementSec: params.timeControl.incrementSec, + }, + }, + }) + .json(); + return response; + } + + async joinMatchmakingQueue(params: { + timeControl: { initialSec: number; incrementSec: number }; + }): Promise { + await this.restClient + .post('matchmaking/join', { + json: { + variant: 'standard', + timeControl: { + type: 'realtime', + initialSec: params.timeControl.initialSec, + incrementSec: params.timeControl.incrementSec, + }, + }, + }) + .json(); + } + + async leaveMatchmakingQueue(): Promise { + await this.restClient.delete('matchmaking/leave').json(); + } + + observeMatchFound(): Observable { + return { + subscribe: (callback) => { + const handler = (data: { gameId: string }) => { + callback(data.gameId); + }; + this.socketClient.on('match-found', handler); + return () => { + this.socketClient.off('match-found', handler); + }; + }, + }; + } + async getLobbyGames(page: number) { const queryParams = new URLSearchParams({ page: page.toString(), @@ -166,6 +221,10 @@ export class GameService { gameId: string, side?: 'white' | 'black' | 'spectator', ): Promise { + this.leaveMatchmakingQueue().catch(() => { + // Ignore errors if not in queue + }); + const authState = await this.auth.getSession(); const response = await this.socketClient.emitWithAck('join-game', { gameId, diff --git a/apps/web-chess/src/app/features/game/RemoteGameContainer.tsx b/apps/web-chess/src/app/features/game/RemoteGameContainer.tsx index d36a4f61..ac01fd17 100644 --- a/apps/web-chess/src/app/features/game/RemoteGameContainer.tsx +++ b/apps/web-chess/src/app/features/game/RemoteGameContainer.tsx @@ -38,6 +38,8 @@ export const RemoteGameContainer = ({ gameState; orientation = playerSide !== 'spectator' ? playerSide : orientation; + const isGameInProgress = + gameState.status === 'IN_PROGRESS' || gameState.status === 'READY'; const blackPlayer = { ...players.black, color: Color.Black }; const whitePlayer = { ...players.white, color: Color.White }; const currentOrientation = orientation || Color.White; @@ -67,6 +69,7 @@ export const RemoteGameContainer = ({ color={topPlayer.color} rating={topPlayer?.rating} ratingDiff={topPlayer?.ratingDiff} + isGameInProgress={isGameInProgress} isPlayerTurn={chessboard.position.turn === topPlayer.color} isLoading={isLoadingInitial} /> @@ -95,6 +98,7 @@ export const RemoteGameContainer = ({ color={bottomPlayer.color} rating={bottomPlayer?.rating} ratingDiff={bottomPlayer?.ratingDiff} + isGameInProgress={isGameInProgress} isPlayerTurn={chessboard.position.turn === bottomPlayer.color} isLoading={isLoadingInitial} /> diff --git a/apps/web-chess/src/app/features/game/components/PlayerInfo.tsx b/apps/web-chess/src/app/features/game/components/PlayerInfo.tsx index 64bb198c..6381d2e4 100644 --- a/apps/web-chess/src/app/features/game/components/PlayerInfo.tsx +++ b/apps/web-chess/src/app/features/game/components/PlayerInfo.tsx @@ -15,6 +15,7 @@ type PlayerInfoProps = { isLoading?: boolean; clock?: CountdownClock; rating?: string; + isGameInProgress?: boolean; ratingDiff?: string; }; @@ -27,6 +28,7 @@ export const PlayerInfo: React.FC = ({ isPlayerTurn = false, clock, rating, + isGameInProgress, ratingDiff, isLoading, }) => { @@ -102,13 +104,15 @@ export const PlayerInfo: React.FC = ({ - - {isPlayerTurn ? 'Turn to play' : 'Waiting'} - + {isGameInProgress && ( + + {isPlayerTurn ? 'Turn to play' : 'Waiting'} + + )} diff --git a/apps/web-chess/src/app/features/game/hooks/usePeekBoardState.ts b/apps/web-chess/src/app/features/game/hooks/usePeekBoardState.ts index 72b54f77..bbdf950c 100644 --- a/apps/web-chess/src/app/features/game/hooks/usePeekBoardState.ts +++ b/apps/web-chess/src/app/features/game/hooks/usePeekBoardState.ts @@ -1,4 +1,4 @@ -import { Chessboard } from '@michess/core-game'; +import { Chessboard } from '@michess/core-board'; import { useState } from 'react'; import { PeekActions } from '../model/PeekHandlers'; diff --git a/apps/web-chess/src/app/features/game/hooks/useRemoteGame.ts b/apps/web-chess/src/app/features/game/hooks/useRemoteGame.ts index 8222a6b6..d5eb15b4 100644 --- a/apps/web-chess/src/app/features/game/hooks/useRemoteGame.ts +++ b/apps/web-chess/src/app/features/game/hooks/useRemoteGame.ts @@ -1,7 +1,6 @@ import { GameActionOptionV1 } from '@michess/api-schema'; import { Maybe } from '@michess/common-utils'; -import { ChessPosition, Move } from '@michess/core-board'; -import { Chessboard } from '@michess/core-game'; +import { Chessboard, ChessPosition, Move } from '@michess/core-board'; import { MovePayload } from '@michess/react-chessboard'; import { useMutation } from '@tanstack/react-query'; import { useEffect, useMemo } from 'react'; diff --git a/apps/web-chess/src/app/features/lobby/__tests__/GameLobby.spec.tsx b/apps/web-chess/src/app/features/lobby/__tests__/GameLobby.spec.tsx index 2edc242d..9baba42c 100644 --- a/apps/web-chess/src/app/features/lobby/__tests__/GameLobby.spec.tsx +++ b/apps/web-chess/src/app/features/lobby/__tests__/GameLobby.spec.tsx @@ -62,7 +62,7 @@ describe('GameLobby', () => { items: [ { id: 'game-1', - opponent: { name: 'Alice', id: 'alice-id' }, + opponent: { name: 'Alice', id: 'alice-id', isBot: false }, availableColor: 'white', variant: 'standard', createdAt: new Date().toISOString(), diff --git a/apps/web-chess/src/app/features/lobby/components/CreateGameForm.tsx b/apps/web-chess/src/app/features/lobby/components/CreateGameForm.tsx index 69ad71d9..f43e1185 100644 --- a/apps/web-chess/src/app/features/lobby/components/CreateGameForm.tsx +++ b/apps/web-chess/src/app/features/lobby/components/CreateGameForm.tsx @@ -3,7 +3,7 @@ import { Button, Flex, SegmentedControl, Switch, Text } from '@radix-ui/themes'; import { FC, useState } from 'react'; import { CreateGameInput } from '../../../api/model/CreateGameInput'; import { Alert } from '../../../components/Alert'; -import { TimeControlRadioCards } from './TimeControlRadioGroup'; +import { TimeControlRadioCards } from '../../play/components/TimeControlRadioCards'; type Props = { onSubmit: (formInput: CreateGameInput) => void; diff --git a/apps/web-chess/src/app/features/play/PlayCard.tsx b/apps/web-chess/src/app/features/play/PlayCard.tsx new file mode 100644 index 00000000..f5f23a6e --- /dev/null +++ b/apps/web-chess/src/app/features/play/PlayCard.tsx @@ -0,0 +1,88 @@ +import { Maybe } from '@michess/common-utils'; +import { Button, Card, Flex, Heading } from '@radix-ui/themes'; +import { useState } from 'react'; +import { Alert } from '../../components/Alert'; +import { BotSelector } from './components/BotSelector'; +import { OpponentTypeSelector } from './components/OpponentTypeSelector'; +import { TimeControlSelector } from './components/TimeControlSelector'; + +type TimeControlStr = `${number}|${number}`; +type OpponentType = 'random' | 'bot'; + +type Props = { + onPlay?: (params: { + timeControl: TimeControlStr; + opponentType: OpponentType; + botId?: string; + }) => void; + onCancel?: () => void; + error?: Maybe; + loading?: boolean; + isInQueue?: boolean; +}; + +export const PlayCard = ({ + onPlay, + onCancel, + error, + loading, + isInQueue, +}: Props) => { + const [timeControl, setTimeControl] = useState('3|2'); + const [opponentType, setOpponentType] = useState('random'); + const [botId, setBotId] = useState(undefined); + + const handlePlay = () => { + onPlay?.({ + timeControl, + opponentType, + botId: opponentType === 'bot' ? botId : undefined, + }); + }; + + return ( + + + + Play + + + + + + + + + + + {opponentType === 'bot' && ( + + )} + + + {isInQueue ? ( + + ) : ( + + )} + + + + ); +}; diff --git a/apps/web-chess/src/app/features/play/components/BotSelector.tsx b/apps/web-chess/src/app/features/play/components/BotSelector.tsx new file mode 100644 index 00000000..2e9bb79c --- /dev/null +++ b/apps/web-chess/src/app/features/play/components/BotSelector.tsx @@ -0,0 +1,55 @@ +import { Flex, Select, Skeleton, Text } from '@radix-ui/themes'; +import { use, useEffect } from 'react'; +import { ApiContext } from '../../../api/context/ApiContext'; +import { Alert } from '../../../components/Alert'; +import { useQuery } from '../../../util/useQuery'; + +type BotId = string; + +type Props = { + value?: BotId; + onChange?: (value: BotId) => void; +}; + +export const BotSelector = ({ value, onChange }: Props) => { + const api = use(ApiContext); + + const { + data: bots, + isPending, + error, + } = useQuery({ + queryKey: ['bots'], + queryFn: () => api.bots.listBots(), + }); + + // Set the first bot as default when bots load and no value is set + useEffect(() => { + if (bots && bots.length > 0 && !value && onChange) { + onChange(bots[0].id); + } + }, [bots, value, onChange]); + + const selectedValue = value ?? bots?.[0]?.id; + + return ( + + + Select Bot + + {error && } + + + + + {bots?.map((bot) => ( + + {bot.name} + + ))} + + + + + ); +}; diff --git a/apps/web-chess/src/app/features/play/components/OpponentTypeSelector.tsx b/apps/web-chess/src/app/features/play/components/OpponentTypeSelector.tsx new file mode 100644 index 00000000..4e77fc49 --- /dev/null +++ b/apps/web-chess/src/app/features/play/components/OpponentTypeSelector.tsx @@ -0,0 +1,52 @@ +import { Flex, RadioCards, Text } from '@radix-ui/themes'; +import { Bot, UserRoundSearch } from 'lucide-react'; + +type OpponentType = 'random' | 'bot'; + +type Props = { + value?: OpponentType; + onChange?: (value: OpponentType) => void; +}; + +export const OpponentTypeSelector = ({ value = 'random', onChange }: Props) => { + return ( + + + Opponent + + onChange?.(val as OpponentType)} + columns="2" + gap="2" + > + + + + + + Random + + + + Play vs human + + + + + + + + + Bot + + + + Play vs AI + + + + + + ); +}; diff --git a/apps/web-chess/src/app/features/lobby/components/TimeControlRadioGroup.tsx b/apps/web-chess/src/app/features/play/components/TimeControlRadioCards.tsx similarity index 100% rename from apps/web-chess/src/app/features/lobby/components/TimeControlRadioGroup.tsx rename to apps/web-chess/src/app/features/play/components/TimeControlRadioCards.tsx diff --git a/apps/web-chess/src/app/features/play/components/TimeControlSelector.tsx b/apps/web-chess/src/app/features/play/components/TimeControlSelector.tsx new file mode 100644 index 00000000..1fbaf309 --- /dev/null +++ b/apps/web-chess/src/app/features/play/components/TimeControlSelector.tsx @@ -0,0 +1,52 @@ +import { Button, Flex, Popover, Text } from '@radix-ui/themes'; +import { useState } from 'react'; +import { TimeControlRadioCards } from './TimeControlRadioCards'; + +type TimeControlStr = `${number}|${number}`; + +type Props = { + value?: TimeControlStr; + onChange?: (value: TimeControlStr) => void; +}; + +export const TimeControlSelector = ({ value = '3|2', onChange }: Props) => { + const [open, setOpen] = useState(false); + + const handleTimeControlChange = (newValue: TimeControlStr) => { + onChange?.(newValue); + setOpen(false); + }; + + const formatTimeControl = (tc: TimeControlStr) => { + const [initial, increment] = tc.split('|'); + return `${initial}+${increment}`; + }; + + return ( + + + + + + + + + ); +}; diff --git a/apps/web-chess/src/app/features/play/container/PlayCardContainer.tsx b/apps/web-chess/src/app/features/play/container/PlayCardContainer.tsx new file mode 100644 index 00000000..da5c4311 --- /dev/null +++ b/apps/web-chess/src/app/features/play/container/PlayCardContainer.tsx @@ -0,0 +1,93 @@ +import { useMutation } from '@tanstack/react-query'; +import { useState } from 'react'; +import { useApi } from '../../../api/hooks/useApi'; +import { useObservable } from '../../../util/useObservable'; +import { PlayCard } from '../PlayCard'; + +type Props = { + onPlay?: (gameId: string) => void; +}; + +export const PlayCardContainer = ({ onPlay }: Props) => { + const api = useApi(); + const [isInQueue, setIsInQueue] = useState(false); + + const { + mutateAsync: challengeBotAndJoin, + error: botError, + isPending: isBotPending, + } = useMutation({ + mutationFn: async (params: { + botId: string; + timeControl: { initialSec: number; incrementSec: number }; + }) => { + const gameDetails = await api.games.challengeBot(params); + await api.games.joinGame(gameDetails.id); + return gameDetails; + }, + onSuccess: (data) => { + if (onPlay) { + onPlay(data.id); + } + }, + }); + + const { + mutateAsync: joinQueue, + error: queueError, + isPending: isQueuePending, + } = useMutation({ + mutationFn: async (params: { + timeControl: { initialSec: number; incrementSec: number }; + }) => { + await api.games.joinMatchmakingQueue(params); + setIsInQueue(true); + }, + }); + + useObservable(api.games.observeMatchFound(), async (gameId) => { + setIsInQueue(false); + await api.games.joinGame(gameId); + onPlay?.(gameId); + }); + + const handlePlay = async (params: { + timeControl: `${number}|${number}`; + opponentType: 'random' | 'bot'; + botId?: string; + }) => { + const [initialMin, increment] = params.timeControl.split('|').map(Number); + + if (params.opponentType === 'bot' && params.botId) { + await challengeBotAndJoin({ + botId: params.botId, + timeControl: { + initialSec: initialMin * 60, + incrementSec: increment, + }, + }); + } else if (params.opponentType === 'random') { + await joinQueue({ + timeControl: { + initialSec: initialMin * 60, + incrementSec: increment, + }, + }); + } + }; + + const handleCancel = async () => { + await api.games.leaveMatchmakingQueue(); + setIsInQueue(false); + }; + + return ( + + ); +}; diff --git a/apps/web-chess/src/app/features/welcome/WelcomeCard.tsx b/apps/web-chess/src/app/features/welcome/WelcomeCard.tsx index b5e22563..5abeed78 100644 --- a/apps/web-chess/src/app/features/welcome/WelcomeCard.tsx +++ b/apps/web-chess/src/app/features/welcome/WelcomeCard.tsx @@ -72,9 +72,9 @@ export const WelcomeCard: React.FC = () => { ! - Play chess with friends online or find new opponents to challenge. - Start a game, join an existing match, or spectate ongoing games. - Perfect chess skills and have fun! + Play chess with friends for free online or find new opponents to + challenge. Start a game, join an existing match, or spectate ongoing + games. Perfect your chess skills and have fun! diff --git a/apps/web-chess/src/app/pages/HomePage.tsx b/apps/web-chess/src/app/pages/HomePage.tsx index a6809082..9358887e 100644 --- a/apps/web-chess/src/app/pages/HomePage.tsx +++ b/apps/web-chess/src/app/pages/HomePage.tsx @@ -4,6 +4,7 @@ import React from 'react'; import { GameLobby } from '../features/lobby/GameLobby'; import { StatsContainer } from '../features/metrics/StatsContainer'; import { Footer } from '../features/navigation/Footer'; +import { PlayCardContainer } from '../features/play/container/PlayCardContainer'; import { PlayerGamesOverview } from '../features/player-games-overview/PlayerGamesOverview'; import { WelcomeCard } from '../features/welcome/WelcomeCard'; @@ -18,6 +19,10 @@ export const HomePage: React.FC = () => { await navigate({ to: `/game/${gameId}/` }); }; + const handlePlay = async (gameId: string) => { + await navigate({ to: `/game/${gameId}/` }); + }; + return ( { - + + + + diff --git a/apps/web-chess/src/test/mocks/node-chess.ts b/apps/web-chess/src/test/mocks/node-chess.ts index df6fcd76..72bc2e7a 100644 --- a/apps/web-chess/src/test/mocks/node-chess.ts +++ b/apps/web-chess/src/test/mocks/node-chess.ts @@ -34,13 +34,21 @@ export const mswHandlers = [ { id: 'default-game-1', availableColor: 'white', - opponent: { name: 'Default Player 1', id: 'opponent-1' }, + opponent: { + name: 'Default Player 1', + id: 'opponent-1', + isBot: false, + }, variant: 'standard', createdAt: new Date().toISOString(), }, { id: 'default-game-2', - opponent: { name: 'Default Player 2', id: 'opponent-2' }, + opponent: { + name: 'Default Player 2', + id: 'opponent-2', + isBot: false, + }, availableColor: 'black', variant: 'standard', createdAt: new Date().toISOString(), @@ -69,6 +77,10 @@ export const mswHandlers = [ startedAt: undefined, }); }), + + http.delete('/api/matchmaking/leave', () => { + return HttpResponse.json(null, { status: 200 }); + }), ]; export const server = setupServer(...mswHandlers); diff --git a/apps/web-chess/src/test/utils/setup-tests.ts b/apps/web-chess/src/test/utils/setup-tests.ts index 567d13d4..76e76117 100644 --- a/apps/web-chess/src/test/utils/setup-tests.ts +++ b/apps/web-chess/src/test/utils/setup-tests.ts @@ -3,11 +3,11 @@ import { fetch } from 'cross-fetch'; import { server } from '../mocks/node-chess'; global.fetch = fetch; // Mock the ResizeObserver -const ResizeObserverMock = vi.fn(() => ({ - observe: vi.fn(), - unobserve: vi.fn(), - disconnect: vi.fn(), -})); +const ResizeObserverMock = vi.fn(function (this: any) { + this.observe = vi.fn(); + this.unobserve = vi.fn(); + this.disconnect = vi.fn(); +}); // Stub the global ResizeObserver vi.stubGlobal('ResizeObserver', ResizeObserverMock); diff --git a/apps/web-chess/vite.config.mts b/apps/web-chess/vite.config.mts index ad61fd80..271fe711 100644 --- a/apps/web-chess/vite.config.mts +++ b/apps/web-chess/vite.config.mts @@ -2,7 +2,7 @@ import { nxCopyAssetsPlugin } from '@nx/vite/plugins/nx-copy-assets.plugin'; import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin'; import react from '@vitejs/plugin-react'; -import { defineConfig } from 'vite'; +import { defineConfig } from 'vitest/config'; export default defineConfig({ root: __dirname, @@ -46,7 +46,18 @@ export default defineConfig({ setupFiles: ['./src/test/utils/setup-tests.ts'], coverage: { reportsDirectory: '../../coverage/apps/web-chess', - provider: 'v8' as const, + provider: 'v8', + reporter: ['html', 'json', 'text'], + include: ['src/**/*.{ts,tsx}'], + exclude: [ + '**/*.d.ts', + '**/*.spec.{ts,tsx}', + '**/*.test.{ts,tsx}', + '**/node_modules/**', + '**/__tests__/**', + '**/mocks/**', + '**/test/**', + ], }, }, }); diff --git a/jest.config.ts b/jest.config.mjs similarity index 100% rename from jest.config.ts rename to jest.config.mjs diff --git a/jest.preset.js b/jest.preset.js index ba504ac2..35409922 100644 --- a/jest.preset.js +++ b/jest.preset.js @@ -13,4 +13,15 @@ module.exports = { */ snapshotFormat: { escapeString: true, printBasicPrototype: true }, transformIgnorePatterns: ['/node_modules/(?!.*(better-auth|@noble|jose)/)'], + coverageReporters: ['html', 'json', 'text'], + collectCoverageFrom: [ + 'src/**/*.{js,jsx,ts,tsx}', + '!**/*.d.ts', + '!**/*.spec.{js,jsx,ts,tsx}', + '!**/*.test.{js,jsx,ts,tsx}', + '!**/node_modules/**', + '!**/__tests__/**', + '!**/mocks/**', + '!**/test/**', + ], }; diff --git a/libs/api-router/jest.config.ts b/libs/api-router/jest.config.mjs similarity index 100% rename from libs/api-router/jest.config.ts rename to libs/api-router/jest.config.mjs diff --git a/libs/api-router/project.json b/libs/api-router/project.json index f96f0768..fe16933f 100644 --- a/libs/api-router/project.json +++ b/libs/api-router/project.json @@ -12,7 +12,7 @@ "executor": "@nx/jest:jest", "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "jestConfig": "libs/api-router/jest.config.ts" + "jestConfig": "libs/api-router/jest.config.mjs" } } } diff --git a/libs/api-router/src/lib/App.ts b/libs/api-router/src/lib/App.ts index 315064e2..f182f1bc 100644 --- a/libs/api-router/src/lib/App.ts +++ b/libs/api-router/src/lib/App.ts @@ -25,14 +25,18 @@ const from = ( restRouter, socketRouter, init: async () => { + await api.bots.initialize(); await api.gameJobScheduler.initialize(); await api.usageMetrics.initialize(); + await api.matchmaking.initialize(); }, close: async () => { socketRouter.close(); await api.gameplay.close(); await api.gameJobScheduler.close(); await api.usageMetrics.close(); + await api.bots.close(); + await api.matchmaking.close(); }, }; }; diff --git a/libs/api-router/src/lib/rest/RestRouter.ts b/libs/api-router/src/lib/rest/RestRouter.ts index ad1a3898..b4b6990b 100644 --- a/libs/api-router/src/lib/rest/RestRouter.ts +++ b/libs/api-router/src/lib/rest/RestRouter.ts @@ -8,13 +8,17 @@ import { createMiddleware } from 'hono/factory'; import { requestId } from 'hono/request-id'; import { RestContext } from '../model/RestContext'; import { RouterConfig } from '../model/RouterConfig'; +import { BotsController } from './bots/BotsController'; import { GamesController } from './games/GamesController'; +import { MatchmakingController } from './matchmaking/MatchmakingController'; import { MetricsController } from './metrics/MetricsController'; export const RestRouter = { from: (api: Api, config: RouterConfig) => { const gamesController = GamesController(api.games); const metricsController = MetricsController(api.usageMetrics); + const botsController = BotsController(api.bots); + const matchmakingController = MatchmakingController(api.matchmaking); const honoApp = new Hono().basePath('/api'); honoApp .use(requestId()) @@ -56,6 +60,8 @@ export const RestRouter = { ); honoApp.route('/games', gamesController); + honoApp.route('/bots', botsController); + honoApp.route('/matchmaking', matchmakingController); honoApp.route('/metrics', metricsController); return honoApp; diff --git a/libs/api-router/src/lib/rest/__tests__/RestRouter.spec.ts b/libs/api-router/src/lib/rest/__tests__/RestRouter.spec.ts new file mode 100644 index 00000000..dfbbeed1 --- /dev/null +++ b/libs/api-router/src/lib/rest/__tests__/RestRouter.spec.ts @@ -0,0 +1,293 @@ +import { + CreateGameV1, + GameDetailsV1, + LobbyPageResponseV1, + PlayerGameInfoPageResponseV1, +} from '@michess/api-schema'; +import { + Api, + AuthService, + BotService, + GameplayService, + GamesService, + MatchmakingService, + Session, + UsageMetricsService, +} from '@michess/api-service'; +import { RestRouter } from '../RestRouter'; + +jest.mock('@michess/api-service'); + +const mockSession: Session = { + userId: 'test-user-id', + sessionId: 'test-session-id', + role: 'user', + token: 'test-token', + expiresAt: new Date(), + userAgent: 'test-agent', + username: 'testuser', + name: 'Test User', + ipAddress: '127.0.0.1', + isAnonymous: false, +}; + +const apiMock: Api = { + matchmaking: new MatchmakingService( + {} as never, + {} as never, + {} as never, + {} as never, + {} as never, + ), + games: new GamesService({} as never, {} as never, {} as never), + gameplay: new GameplayService( + {} as never, + {} as never, + {} as never, + {} as never, + {} as never, + {} as never, + ), + bots: new BotService( + {} as never, + {} as never, + {} as never, + {} as never, + {} as never, + ), + auth: new AuthService({} as never, {} as never, {} as never, { + google: { clientId: '', clientSecret: '' }, + }), + usageMetrics: new UsageMetricsService({} as never, {} as never, {} as never), + gameJobScheduler: {} as never, +}; + +describe('RestRouter', () => { + beforeEach(() => { + jest.clearAllMocks(); + // Mock auth.getSession to return a valid session by default + apiMock.auth.getSession = jest.fn().mockResolvedValue(mockSession); + }); + + describe('/games', () => { + describe('POST /api/games', () => { + it('should create a new game', async () => { + const mockGameDetails: GameDetailsV1 = { + id: 'game-123', + status: 'WAITING', + players: { + white: undefined, + black: undefined, + }, + variant: 'standard', + isPrivate: false, + timeControl: { + classification: 'no_clock', + }, + clock: undefined, + actionOptions: [], + moves: [], + }; + + apiMock.games.createGame = jest.fn().mockResolvedValue(mockGameDetails); + + const app = RestRouter.from(apiMock, { + cors: { origins: ['http://localhost:3000'] }, + }); + + const createGamePayload: CreateGameV1 = { + variant: 'standard', + isPrivate: false, + }; + + const response = await app.request('/api/games', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer test-token', + }, + body: JSON.stringify(createGamePayload), + }); + + expect(response.status).toBe(200); + expect(apiMock.games.createGame).toHaveBeenCalledWith( + createGamePayload, + ); + + const data = await response.json(); + expect(data).toEqual(mockGameDetails); + }); + + it('should return 401 when not authenticated', async () => { + apiMock.auth.getSession = jest.fn().mockResolvedValue({ + userId: undefined, + sessionToken: undefined, + }); + + const app = RestRouter.from(apiMock, { + cors: { origins: ['http://localhost:3000'] }, + }); + + const response = await app.request('/api/games', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ variant: 'standard' }), + }); + + expect(response.status).toBe(401); + const data = await response.json(); + expect(data).toEqual({ error: 'Unauthorized' }); + }); + + it('should return validation error for invalid payload', async () => { + const app = RestRouter.from(apiMock, { + cors: { origins: ['http://localhost:3000'] }, + }); + + const response = await app.request('/api/games', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer test-token', + }, + body: JSON.stringify({ variant: 'invalid-variant' }), + }); + + expect(response.status).toBe(400); + }); + }); + + describe('GET /api/games/lobby', () => { + it('should fetch lobby games', async () => { + const mockLobbyResponse: LobbyPageResponseV1 = { + items: [ + { + id: 'game-123', + availableColor: 'white', + opponent: { + id: 'opponent-123', + name: 'Opponent Player', + isBot: false, + }, + variant: 'standard', + createdAt: new Date().toISOString(), + }, + ], + currentPage: 1, + pageSize: 10, + totalPages: 1, + }; + + apiMock.games.queryLobby = jest + .fn() + .mockResolvedValue(mockLobbyResponse); + + const app = RestRouter.from(apiMock, { + cors: { origins: ['http://localhost:3000'] }, + }); + + const response = await app.request('/api/games/lobby?page=1&limit=10', { + method: 'GET', + headers: { + Authorization: 'Bearer test-token', + }, + }); + + expect(response.status).toBe(200); + expect(apiMock.games.queryLobby).toHaveBeenCalledWith({ + page: 1, + limit: 10, + }); + + const data = await response.json(); + expect(data).toEqual(mockLobbyResponse); + }); + + it('should return 401 when not authenticated', async () => { + apiMock.auth.getSession = jest.fn().mockResolvedValue({ + ...mockSession, + userId: '', + }); + + const app = RestRouter.from(apiMock, { + cors: { origins: ['http://localhost:3000'] }, + }); + + const response = await app.request('/api/games/lobby?page=1&limit=10', { + method: 'GET', + }); + + expect(response.status).toBe(401); + }); + }); + + describe('GET /api/games/my', () => { + it('should fetch player games', async () => { + const mockPlayerGamesResponse: PlayerGameInfoPageResponseV1 = { + items: [ + { + id: 'game-123', + opponent: { + id: 'opponent-123', + name: 'Opponent Player', + isBot: false, + }, + ownSide: 'white', + turn: 'white', + variant: 'standard', + }, + ], + currentPage: 1, + pageSize: 10, + totalPages: 1, + }; + + apiMock.games.queryPlayerGames = jest + .fn() + .mockResolvedValue(mockPlayerGamesResponse); + + const app = RestRouter.from(apiMock, { + cors: { origins: ['http://localhost:3000'] }, + }); + + const response = await app.request('/api/games/my?page=1&limit=10', { + method: 'GET', + headers: { + Authorization: 'Bearer test-token', + }, + }); + + expect(response.status).toBe(200); + expect(apiMock.games.queryPlayerGames).toHaveBeenCalledWith( + 'test-user-id', + { + page: 1, + limit: 10, + }, + ); + + const data = await response.json(); + expect(data).toEqual(mockPlayerGamesResponse); + }); + + it('should return 401 when not authenticated', async () => { + apiMock.auth.getSession = jest.fn().mockResolvedValue({ + ...mockSession, + userId: '', + }); + + const app = RestRouter.from(apiMock, { + cors: { origins: ['http://localhost:3000'] }, + }); + + const response = await app.request('/api/games/my?page=1&limit=10', { + method: 'GET', + }); + + expect(response.status).toBe(401); + }); + }); + }); +}); diff --git a/libs/api-router/src/lib/rest/bots/BotsController.ts b/libs/api-router/src/lib/rest/bots/BotsController.ts new file mode 100644 index 00000000..bad2f79b --- /dev/null +++ b/libs/api-router/src/lib/rest/bots/BotsController.ts @@ -0,0 +1,10 @@ +import { BotService } from '@michess/api-service'; +import { Hono } from 'hono'; +import { RestContext } from '../../model/RestContext'; + +export const BotsController = (botService: BotService): Hono => { + return new Hono().get('/', async (c) => { + const bots = await botService.listBots(); + return c.json(bots); + }); +}; diff --git a/libs/api-router/src/lib/rest/games/GamesController.ts b/libs/api-router/src/lib/rest/games/GamesController.ts index eca04baa..272102a2 100644 --- a/libs/api-router/src/lib/rest/games/GamesController.ts +++ b/libs/api-router/src/lib/rest/games/GamesController.ts @@ -1,4 +1,6 @@ import { + CreateChallengeV1, + CreateChallengeV1Schema, CreateGameV1, CreateGameV1Schema, PaginationQueryV1, @@ -20,6 +22,19 @@ export const GamesController = ( const response = await gameService.createGame(body); return c.json(response); }) + .post( + '/challenge', + zValidator('json', CreateChallengeV1Schema), + async (c) => { + const body: CreateChallengeV1 = c.req.valid('json'); + const session = c.get('session'); + const response = await gameService.createChallenge( + { id: session.userId, name: session.name, role: session.role }, + body, + ); + return c.json(response); + }, + ) .get('/lobby', zValidator('query', PaginationQueryV1Schema), async (c) => { const query: PaginationQueryV1 = c.req.valid('query'); const response = await gameService.queryLobby(query); diff --git a/libs/api-router/src/lib/rest/matchmaking/MatchmakingController.ts b/libs/api-router/src/lib/rest/matchmaking/MatchmakingController.ts new file mode 100644 index 00000000..4822df56 --- /dev/null +++ b/libs/api-router/src/lib/rest/matchmaking/MatchmakingController.ts @@ -0,0 +1,43 @@ +import { + JoinMatchmakingQueueV1, + JoinMatchmakingQueueV1Schema, +} from '@michess/api-schema'; +import { MatchmakingService } from '@michess/api-service'; +import { Hono } from 'hono'; +import { RestContext } from '../../model/RestContext'; +import { zValidator } from '../util/zValidator'; + +export const MatchmakingController = ( + matchmakingService: MatchmakingService, +): Hono => { + return new Hono() + .post( + '/join', + zValidator('json', JoinMatchmakingQueueV1Schema), + async (c) => { + const body: JoinMatchmakingQueueV1 = c.req.valid('json'); + const session = c.get('session'); + + await matchmakingService.joinQueue(session.userId, session.name, { + variant: body.variant ?? 'standard', + timeControlClassification: + body.timeControl?.type === 'realtime' ? 'rapid' : 'no_clock', + timeControl: + body.timeControl?.type === 'realtime' + ? { + initialSec: body.timeControl.initialSec, + incrementSec: body.timeControl.incrementSec, + } + : undefined, + }); + + return c.json({ status: 'ok' }); + }, + ) + .delete('/leave', async (c) => { + const session = c.get('session'); + const removed = await matchmakingService.leaveQueue(session.userId); + + return c.json({ removed }); + }); +}; diff --git a/libs/api-router/src/lib/socket/SocketRouter.ts b/libs/api-router/src/lib/socket/SocketRouter.ts index be5afe03..8faceaf3 100644 --- a/libs/api-router/src/lib/socket/SocketRouter.ts +++ b/libs/api-router/src/lib/socket/SocketRouter.ts @@ -94,6 +94,9 @@ const from = (api: Api, redis: Redis, config: RouterConfig) => { 'User connected', ); + // Join a room named after the user's ID for direct user messaging + socket.join(socket.data.session.userId); + socket.on('join-game', async (payload: unknown, callback) => { try { const joinGamePayloadV1 = JoinGamePayloadV1Schema.parse(payload); @@ -107,7 +110,11 @@ const from = (api: Api, redis: Redis, config: RouterConfig) => { `User joining game`, ); const gameState = await api.gameplay.joinGame( - socket.data.session, + { + id: socket.data.session.userId, + name: socket.data.session.name, + role: socket.data.session.role, + }, joinGamePayloadV1, ); if (!socket.rooms.has(joinGamePayloadV1.gameId)) { @@ -147,16 +154,13 @@ const from = (api: Api, redis: Redis, config: RouterConfig) => { { ...makeMovePayloadV1, rooms: Array.from(socket.rooms) }, 'Received make-move event', ); - const { gameDetails, move } = await api.gameplay.makeMove( - socket.data.session, + const { move, gameDetails } = await api.gameplay.makeMove( + socket.data.session.userId, makeMovePayloadV1, ); - socket.to(move.gameId).emit('move-made', move); + // Event handler will broadcast to other players callback(EventResponse.ok(move)); - if (gameDetails) { - io.to(makeMovePayloadV1.gameId).emit('game-updated', gameDetails); - } } catch (error) { logger.error(error); callback(EventResponse.error(ApiErrorMapper.from(error))); @@ -222,8 +226,48 @@ const from = (api: Api, redis: Redis, config: RouterConfig) => { } }); - api.gameplay.subscribe((gameDetails) => { - io.to(gameDetails.id).emit('game-updated', gameDetails); + api.gameplay.subscribe( + (event) => { + if (event.type === 'move_made') { + if (event.data.statusChanged) { + io.to(event.data.gameDetails.id).emit( + 'game-updated', + event.data.gameDetails, + ); + } else { + const playerWhoMoved = + event.data.gameDetails.players[event.data.moveColor]; + if (playerWhoMoved) { + io.to(event.data.moveMade.gameId) + .except(playerWhoMoved.id) + .emit('move-made', event.data.moveMade); + } + } + } else { + io.to(event.data.id).emit('game-updated', event.data); + } + }, + ['move_made', 'flag_timeout', 'game_joined'], + ); + + api.matchmaking.subscribe((event) => { + if (event.type === 'match_found') { + io.to(event.data.player1Id).emit('match-found', { + gameId: event.data.gameId, + }); + io.to(event.data.player2Id).emit('match-found', { + gameId: event.data.gameId, + }); + + logger.info( + { + player1Id: event.data.player1Id, + player2Id: event.data.player2Id, + gameId: event.data.gameId, + }, + 'Match found notification sent', + ); + } }); return io; diff --git a/libs/api-router/src/lib/socket/__tests__/SocketRouter.spec.ts b/libs/api-router/src/lib/socket/__tests__/SocketRouter.spec.ts index 2f7a9062..d09f5338 100644 --- a/libs/api-router/src/lib/socket/__tests__/SocketRouter.spec.ts +++ b/libs/api-router/src/lib/socket/__tests__/SocketRouter.spec.ts @@ -1,6 +1,8 @@ import { + GameDetailsResponseV1, GameDetailsV1, JoinGamePayloadV1, + MakeActionPayloadV1, MakeMovePayloadV1, MakeMoveResponseV1, MoveMadeV1, @@ -8,8 +10,9 @@ import { import { Api, AuthService, - GameplayService, + BotService, GamesService, + MatchmakingService, Session, UsageMetricsService, } from '@michess/api-service'; @@ -21,16 +24,39 @@ import { Socket as ClientSocket, io as ioClient } from 'socket.io-client'; import { SocketRouter } from '../SocketRouter'; jest.mock('@michess/api-service'); +let gameplayEventHandler: ((event: any) => void) | undefined; + +const mockGameplayService = { + subscribe: jest.fn((handler: (event: any) => void) => { + gameplayEventHandler = handler; + return () => { + gameplayEventHandler = undefined; + }; + }), + makeMove: jest.fn(), + joinGame: jest.fn(), + makeAction: jest.fn(), + leaveGame: jest.fn(), + close: jest.fn(), +}; + const apiMock: Api = { - games: new GamesService({} as never), - gameplay: new GameplayService( + matchmaking: new MatchmakingService( + {} as never, + {} as never, {} as never, {} as never, {} as never, + ), + bots: new BotService( + {} as never, + {} as never, {} as never, {} as never, {} as never, ), + games: new GamesService({} as never, {} as never, {} as never), + gameplay: mockGameplayService as any, auth: new AuthService({} as never, {} as never, {} as never, { google: { clientId: '', clientSecret: '' }, }), @@ -78,6 +104,7 @@ describe('SocketRouter', () => { const sessionMock: Session = { userId: 'test-user-id', + role: 'user', sessionId: 'test-session-id', token: 'test-token', name: 'Test User', @@ -132,7 +159,6 @@ describe('SocketRouter', () => { describe('join-game', () => { it('should handle valid join-game event', async () => { - expect.assertions(4); const joinGamePayload: JoinGamePayloadV1 = { gameId: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', side: 'white', @@ -143,7 +169,10 @@ describe('SocketRouter', () => { timeControl: { classification: 'no_clock', }, - players: { white: { name: 'Test User', id: 'u1' }, black: undefined }, + players: { + white: { name: 'Test User', id: 'u1', isBot: false }, + black: undefined, + }, isPrivate: false, moves: [], variant: 'standard', @@ -152,7 +181,7 @@ describe('SocketRouter', () => { }; serverSocket2.join(joinGamePayload.gameId); - apiMock.gameplay.joinGame = jest.fn().mockResolvedValue(mockGameState); + mockGameplayService.joinGame.mockResolvedValue(mockGameState); const gameUpdatedPromise = waitFor(clientSocket2, 'game-updated'); @@ -166,13 +195,12 @@ describe('SocketRouter', () => { expect(response.status).toEqual('ok'); expect(response.status === 'ok' && response.data).toEqual(mockGameState); - expect(apiMock.gameplay.joinGame).toHaveBeenCalled(); + expect(mockGameplayService.joinGame).toHaveBeenCalled(); }); }); describe('make-move', () => { it('should handle valid make-move event', async () => { - expect.assertions(4); const makeMovePayload: MakeMovePayloadV1 = { gameId: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', uci: 'e2e4', @@ -185,7 +213,36 @@ describe('SocketRouter', () => { gameId: makeMovePayload.gameId, clock: { whiteMs: 300000, blackMs: 300000 }, }; - apiMock.gameplay.makeMove = jest.fn().mockResolvedValue({ move: moveV1 }); + const mockGameState: GameDetailsV1 = { + id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', + status: 'IN_PROGRESS', + timeControl: { + classification: 'no_clock', + }, + players: { + white: { name: 'Test User', id: 'u1', isBot: false }, + black: { name: 'Bot', id: 'bot1', isBot: true }, + }, + isPrivate: false, + moves: [{ uci: 'e2e4' }], + variant: 'standard', + actionOptions: [], + clock: undefined, + }; + + mockGameplayService.makeMove.mockImplementation(async () => { + // Trigger the event handler directly + gameplayEventHandler?.({ + type: 'move_made', + data: { + moveMade: moveV1, + gameDetails: mockGameState, + statusChanged: false, + moveColor: 'black', + }, + }); + return { move: moveV1 }; + }); const moveMadePromise = waitFor(clientSocket2, 'move-made'); @@ -198,7 +255,57 @@ describe('SocketRouter', () => { expect(data).toEqual(moveV1); expect(response.status).toEqual('ok'); expect(response.status === 'ok' && response.data).toEqual(moveV1); - expect(apiMock.gameplay.makeMove).toHaveBeenCalled(); + expect(mockGameplayService.makeMove).toHaveBeenCalled(); + }); + }); + + describe('make-action', () => { + it('should handle valid make-action event', async () => { + const makeActionPayload: MakeActionPayloadV1 = { + gameId: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890', + action: { type: 'offer_draw' }, + }; + serverSocket1.join(makeActionPayload.gameId); + serverSocket2.join(makeActionPayload.gameId); + + const mockGameState: GameDetailsV1 = { + id: makeActionPayload.gameId, + status: 'IN_PROGRESS', + timeControl: { + classification: 'no_clock', + }, + players: { + white: { name: 'Test User', id: 'u1', isBot: false }, + black: { name: 'Test User 2', id: 'u2', isBot: false }, + }, + isPrivate: false, + moves: [], + variant: 'standard', + actionOptions: [ + { + type: 'accept_draw', + reason: 'by_agreement', + }, + ], + clock: undefined, + }; + mockGameplayService.makeAction.mockResolvedValue(mockGameState); + + const actionMadePromise = waitFor( + clientSocket2, + 'game-updated', + ); + + const response: GameDetailsResponseV1 = await clientSocket1.emitWithAck( + 'make-action', + makeActionPayload, + ); + + const data = await actionMadePromise; + expect(data).toEqual(mockGameState); + expect(response.status).toEqual('ok'); + expect(response.status === 'ok' && response.data).toEqual(mockGameState); + expect(mockGameplayService.makeAction).toHaveBeenCalled(); }); }); }); diff --git a/libs/api-schema/src/index.ts b/libs/api-schema/src/index.ts index 8ed63dff..b7444cc7 100644 --- a/libs/api-schema/src/index.ts +++ b/libs/api-schema/src/index.ts @@ -1,3 +1,4 @@ +export * from './lib/bot/BotInfoV1'; export * from './lib/ClientToServerEvents'; export * from './lib/common/ApiError'; export * from './lib/common/ApiErrorData'; @@ -6,6 +7,9 @@ export * from './lib/common/PageResponseV1'; export * from './lib/common/PaginationQueryV1'; export * from './lib/common/PaginationQueryV1Schema'; export * from './lib/game/ClockV1'; +export * from './lib/game/ColorV1'; +export * from './lib/game/CreateChallengeV1'; +export * from './lib/game/CreateChallengeV1Schema'; export * from './lib/game/CreateGameV1'; export * from './lib/game/CreateGameV1Schema'; export * from './lib/game/DrawReasonV1'; @@ -31,6 +35,9 @@ export * from './lib/game/MoveMadeV1'; export * from './lib/game/TimeControlV1'; export * from './lib/lobby/LobbyGameItemV1'; export * from './lib/lobby/LobbyPageResponseV1'; +export * from './lib/matchmaking/JoinMatchmakingQueueV1'; +export * from './lib/matchmaking/JoinMatchmakingQueueV1Schema'; +export * from './lib/matchmaking/MatchFoundV1'; export * from './lib/metrics/UsageMetricsV1'; export * from './lib/player/PlayerGameInfoPageResponseV1'; export * from './lib/player/PlayerGameInfoQueryV1'; diff --git a/libs/api-schema/src/lib/ServerToClientEvents.ts b/libs/api-schema/src/lib/ServerToClientEvents.ts index c716649d..8dfd3516 100644 --- a/libs/api-schema/src/lib/ServerToClientEvents.ts +++ b/libs/api-schema/src/lib/ServerToClientEvents.ts @@ -1,7 +1,9 @@ import { GameDetailsV1 } from './game/GameDetailsV1'; import { MoveMadeV1 } from './game/MoveMadeV1'; +import { MatchFoundV1 } from './matchmaking/MatchFoundV1'; export type ServerToClientEvents = { 'move-made': (move: MoveMadeV1) => void; 'game-updated': (gameDetails: GameDetailsV1) => void; + 'match-found': (match: MatchFoundV1) => void; }; diff --git a/libs/api-schema/src/lib/bot/BotInfoV1.ts b/libs/api-schema/src/lib/bot/BotInfoV1.ts new file mode 100644 index 00000000..0861f022 --- /dev/null +++ b/libs/api-schema/src/lib/bot/BotInfoV1.ts @@ -0,0 +1,6 @@ +export type BotInfoV1 = { + id: string; + name: string; + username: string; + description: string; +}; diff --git a/libs/api-schema/src/lib/game/CreateChallengeV1.ts b/libs/api-schema/src/lib/game/CreateChallengeV1.ts new file mode 100644 index 00000000..41ed1842 --- /dev/null +++ b/libs/api-schema/src/lib/game/CreateChallengeV1.ts @@ -0,0 +1,4 @@ +import { z } from 'zod'; +import { CreateChallengeV1Schema } from './CreateChallengeV1Schema'; + +export type CreateChallengeV1 = z.infer; diff --git a/libs/api-schema/src/lib/game/CreateChallengeV1Schema.ts b/libs/api-schema/src/lib/game/CreateChallengeV1Schema.ts new file mode 100644 index 00000000..99a97e34 --- /dev/null +++ b/libs/api-schema/src/lib/game/CreateChallengeV1Schema.ts @@ -0,0 +1,10 @@ +import { z } from 'zod'; +import { GameVariantV1Schema } from './GameVariantV1Schema'; +import { TimeControlInV1Schema } from './TimeControlInSchemaV1'; + +export const CreateChallengeV1Schema = z.object({ + opponentId: z.string(), + playerColor: z.enum(['white', 'black']).optional(), + variant: GameVariantV1Schema.optional().default('standard'), + timeControl: TimeControlInV1Schema.optional(), +}); diff --git a/libs/api-schema/src/lib/matchmaking/JoinMatchmakingQueueV1.ts b/libs/api-schema/src/lib/matchmaking/JoinMatchmakingQueueV1.ts new file mode 100644 index 00000000..3d0eb363 --- /dev/null +++ b/libs/api-schema/src/lib/matchmaking/JoinMatchmakingQueueV1.ts @@ -0,0 +1,6 @@ +import { z } from 'zod'; +import { JoinMatchmakingQueueV1Schema } from './JoinMatchmakingQueueV1Schema'; + +export type JoinMatchmakingQueueV1 = z.infer< + typeof JoinMatchmakingQueueV1Schema +>; diff --git a/libs/api-schema/src/lib/matchmaking/JoinMatchmakingQueueV1Schema.ts b/libs/api-schema/src/lib/matchmaking/JoinMatchmakingQueueV1Schema.ts new file mode 100644 index 00000000..24b71d0e --- /dev/null +++ b/libs/api-schema/src/lib/matchmaking/JoinMatchmakingQueueV1Schema.ts @@ -0,0 +1,7 @@ +import { z } from 'zod'; +import { TimeControlInV1Schema } from '../game/TimeControlInSchemaV1'; + +export const JoinMatchmakingQueueV1Schema = z.object({ + variant: z.literal('standard').optional().default('standard'), + timeControl: TimeControlInV1Schema.optional(), +}); diff --git a/libs/api-schema/src/lib/matchmaking/MatchFoundV1.ts b/libs/api-schema/src/lib/matchmaking/MatchFoundV1.ts new file mode 100644 index 00000000..4e549e4d --- /dev/null +++ b/libs/api-schema/src/lib/matchmaking/MatchFoundV1.ts @@ -0,0 +1,3 @@ +export type MatchFoundV1 = { + gameId: string; +}; diff --git a/libs/api-schema/src/lib/player/PlayerInfoV1Schema.ts b/libs/api-schema/src/lib/player/PlayerInfoV1Schema.ts index eeaff147..d5cf59ee 100644 --- a/libs/api-schema/src/lib/player/PlayerInfoV1Schema.ts +++ b/libs/api-schema/src/lib/player/PlayerInfoV1Schema.ts @@ -5,4 +5,5 @@ export const PlayerInfoV1Schema = z.object({ rating: z.number().min(0).optional(), ratingDiff: z.number().optional(), name: z.string().min(1).max(100), + isBot: z.boolean(), }); diff --git a/libs/api-service/src/index.ts b/libs/api-service/src/index.ts index 33ac6ec4..2c5992c0 100644 --- a/libs/api-service/src/index.ts +++ b/libs/api-service/src/index.ts @@ -1,7 +1,12 @@ export * from './lib/Api'; export * from './lib/auth/model/Session'; export * from './lib/auth/service/AuthService'; +export * from './lib/games/model/GameEvent'; export * from './lib/games/service/GameJobSchedulerService'; export * from './lib/games/service/GameplayService'; export * from './lib/games/service/GamesService'; +export * from './lib/llm/config/LlmConfig'; +export * from './lib/matchmaking/service/MatchmakingService'; export * from './lib/metrics/UsageMetricsService'; +export * from './lib/user/config/BotRegistry'; +export * from './lib/user/service/BotService'; diff --git a/libs/api-service/src/lib/Api.ts b/libs/api-service/src/lib/Api.ts index 6c4b607a..453eb32e 100644 --- a/libs/api-service/src/lib/Api.ts +++ b/libs/api-service/src/lib/Api.ts @@ -7,8 +7,11 @@ import { AuthService } from './auth/service/AuthService'; import { GameJobSchedulerService } from './games/service/GameJobSchedulerService'; import { GameplayService } from './games/service/GameplayService'; import { GamesService } from './games/service/GamesService'; +import { LlmConfig } from './llm/config/LlmConfig'; import { LockService } from './lock/service/LockService'; +import { MatchmakingService } from './matchmaking/service/MatchmakingService'; import { UsageMetricsService } from './metrics/UsageMetricsService'; +import { BotService } from './user/service/BotService'; import { RatingsService } from './user/service/RatingsService'; export type Api = { @@ -17,6 +20,8 @@ export type Api = { auth: AuthService; usageMetrics: UsageMetricsService; gameJobScheduler: GameJobSchedulerService; + bots: BotService; + matchmaking: MatchmakingService; }; const from = ( @@ -24,6 +29,7 @@ const from = ( sql: Sql, emailClient: EmailClient, authConfig: AuthConfig, + llmConfig: LlmConfig, ): Api => { const processId = randomUUID(); const lockService = new LockService(repos.cache.client); @@ -37,7 +43,6 @@ const from = ( repos.game, repos.cache, ); - const gamesService = new GamesService(repos.game); const gameplayService = new GameplayService( repos.game, repos.move, @@ -46,6 +51,11 @@ const from = ( ratingsService, lockService, ); + const gamesService = new GamesService( + repos.game, + repos.user, + gameplayService, + ); const authService = new AuthService( sql, repos.cache, @@ -57,6 +67,20 @@ const from = ( repos.cache, repos.game, ); + const botService = new BotService( + repos.user, + repos.game, + gameplayService, + repos.cache, + llmConfig, + ); + const matchmakingService = new MatchmakingService( + repos.cache.client, + gamesService, + ratingsService, + lockService, + repos.matchmaking, + ); return { games: gamesService, @@ -64,6 +88,8 @@ const from = ( auth: authService, usageMetrics, gameJobScheduler: gameJobSchedulerService, + bots: botService, + matchmaking: matchmakingService, }; }; export const Api = { diff --git a/libs/api-service/src/lib/auth/model/Session.ts b/libs/api-service/src/lib/auth/model/Session.ts index f9fe3851..6e1b9859 100644 --- a/libs/api-service/src/lib/auth/model/Session.ts +++ b/libs/api-service/src/lib/auth/model/Session.ts @@ -7,6 +7,7 @@ export type Session = { expiresAt: Date; userAgent: Maybe; username: Maybe; + role: Maybe; name: Maybe; ipAddress: Maybe; isAnonymous: boolean; diff --git a/libs/api-service/src/lib/auth/service/AuthService.ts b/libs/api-service/src/lib/auth/service/AuthService.ts index 3f9b14e5..37fe893f 100644 --- a/libs/api-service/src/lib/auth/service/AuthService.ts +++ b/libs/api-service/src/lib/auth/service/AuthService.ts @@ -68,6 +68,7 @@ export class AuthService { if (sessionResponse) { const { user, session } = sessionResponse; return { + role: user.role ?? undefined, userId: user.id, sessionId: session.id, token: session.token, diff --git a/libs/api-service/src/lib/games/mapper/GameMapper.ts b/libs/api-service/src/lib/games/mapper/GameMapper.ts index 926bc8de..aa1ba8e8 100644 --- a/libs/api-service/src/lib/games/mapper/GameMapper.ts +++ b/libs/api-service/src/lib/games/mapper/GameMapper.ts @@ -76,10 +76,12 @@ const toGameMeta = (game: SelectGameWithRelations | SelectGame): GameMeta => ({ const toPlayerInfo = (player: { id: string; name: string | null; + role?: string | null; rating: SelectGameWithRelations['whiteRating']; }): PlayerInfo => ({ id: player.id, name: player.name ?? 'Anonymous', + isBot: player.role === 'bot', rating: player.rating ? { deviation: player.rating.deviation, @@ -128,6 +130,7 @@ const toPlayerInfoV1 = (player: PlayerInfo): PlayerInfoV1 => { return { id: player.id, name: player.name, + isBot: player.isBot, rating: player.rating?.value ? Math.round(player.rating.value) : undefined, ratingDiff: player.ratingDiff, }; @@ -207,6 +210,7 @@ export const GameMapper = { : { id: 'anon', name: 'Anonymous', + isBot: false, }, variant: gameState.variant as GameVariantV1, createdAt: gameState.createdAt.toISOString(), @@ -227,14 +231,23 @@ export const GameMapper = { : 'white'; // Should not happen, but fail gracefully const opponent: PlayerInfo = ownSide === 'white' - ? (game.players.black ?? { id: 'anon', name: 'Anonymous' }) - : (game.players.white ?? { id: 'anon', name: 'Anonymous' }); + ? (game.players.black ?? { + id: 'anon', + name: 'Anonymous', + isBot: false, + }) + : (game.players.white ?? { + id: 'anon', + name: 'Anonymous', + isBot: false, + }); const initialTurn = game.initialPosition.turn; return { id: game.id, opponent: { id: opponent.id, name: opponent.name, + isBot: opponent.isBot, }, ownSide, turn: @@ -270,6 +283,7 @@ export const GameMapper = { : undefined, ratingDiff: game.players.white.ratingDiff, name: game.players.white.name, + isBot: game.players.white.isBot, } : undefined, black: game.players.black @@ -280,6 +294,7 @@ export const GameMapper = { : undefined, ratingDiff: game.players.black.ratingDiff, name: game.players.black.name, + isBot: game.players.black.isBot, } : undefined, }, diff --git a/libs/api-service/src/lib/games/model/GameEvent.ts b/libs/api-service/src/lib/games/model/GameEvent.ts new file mode 100644 index 00000000..80c52964 --- /dev/null +++ b/libs/api-service/src/lib/games/model/GameEvent.ts @@ -0,0 +1,20 @@ +import { ColorV1, GameDetailsV1, MoveMadeV1 } from '@michess/api-schema'; + +export type GameEvent = + | { + type: 'move_made'; + data: { + moveMade: MoveMadeV1; + gameDetails: GameDetailsV1; + statusChanged: boolean; + moveColor: ColorV1; + }; + } + | { + type: 'flag_timeout'; + data: GameDetailsV1; + } + | { + type: 'game_joined'; + data: GameDetailsV1; + }; diff --git a/libs/api-service/src/lib/games/model/PlayerInfoIn.ts b/libs/api-service/src/lib/games/model/PlayerInfoIn.ts new file mode 100644 index 00000000..c1a9059e --- /dev/null +++ b/libs/api-service/src/lib/games/model/PlayerInfoIn.ts @@ -0,0 +1,7 @@ +import { Maybe } from '@michess/common-utils'; + +export type PlayerInfoIn = { + id: string; + name: Maybe; + role: Maybe; +}; diff --git a/libs/api-service/src/lib/games/service/GameplayService.ts b/libs/api-service/src/lib/games/service/GameplayService.ts index f672c7b6..c9ce29ba 100644 --- a/libs/api-service/src/lib/games/service/GameplayService.ts +++ b/libs/api-service/src/lib/games/service/GameplayService.ts @@ -7,8 +7,8 @@ import { MoveMadeV1, } from '@michess/api-schema'; import { logger } from '@michess/be-utils'; -import { assertDefined, Maybe } from '@michess/common-utils'; -import { Move, MoveRecord } from '@michess/core-board'; +import { assertDefined, EventEmitter, Maybe } from '@michess/common-utils'; +import { Color, Move, MoveRecord } from '@michess/core-board'; import { ChessGame, GameActionIn } from '@michess/core-game'; import { ActionRepository, @@ -21,18 +21,18 @@ import { Session } from '../../auth/model/Session'; import { LockService } from '../../lock/service/LockService'; import { RatingsService } from '../../user/service/RatingsService'; import { GameMapper } from '../mapper/GameMapper'; +import { GameEvent } from '../model/GameEvent'; +import { PlayerInfoIn } from '../model/PlayerInfoIn'; type TimeControlJobData = { gameId: string; flagTimestamp: number; }; -export class GameplayService { +export class GameplayService extends EventEmitter { private timeControlQueue: Queue; private timeControlWorker: Worker; - private observers: Set<(data: GameDetailsV1) => void> = new Set(); - constructor( private gameRepository: GameRepository, private moveRepository: MoveRepository, @@ -41,6 +41,7 @@ export class GameplayService { private ratingsService: RatingsService, private lockService: LockService, ) { + super(); const connectionOptions = { connection: this.cacheRepo.client }; this.timeControlQueue = new Queue(`time-control`, connectionOptions); @@ -55,7 +56,7 @@ export class GameplayService { logger.info('Closing gameplay service'); await this.timeControlWorker.close(); await this.timeControlQueue.close(); - this.observers.clear(); + this.clearSubscribers(); } private async loadChessGame(gameId: string): Promise<{ @@ -137,19 +138,8 @@ export class GameplayService { } } - subscribe(observer: (data: GameDetailsV1) => void): () => void { - this.observers.add(observer); - return () => { - this.observers.delete(observer); - }; - } - - notifyObservers(data: GameDetailsV1): void { - this.observers.forEach((observer) => observer(data)); - } - async joinGame( - session: Session, + player: PlayerInfoIn, data: JoinGamePayloadV1, ): Promise { const { chessGame } = await this.loadChessGame(data.gameId); @@ -159,16 +149,19 @@ export class GameplayService { } const gameRating = await this.ratingsService.getRatingByPlayerId( - session.userId, + player.id, gameState.variant, gameState.timeControl.classification, ); + const isBot = player.role === 'bot'; + const updatedGame = chessGame.joinGame( { - id: session.userId, - name: session.name ?? 'Anonymous', + id: player.id, + name: player.name ?? 'Anonymous', rating: gameRating, + isBot, }, data.side, ); @@ -177,7 +170,14 @@ export class GameplayService { updatedGame.id, GameMapper.toInsertGame(updatedGame), ); - return GameMapper.toGameDetailsV1(updatedGame); + const gameDetails = GameMapper.toGameDetailsV1(updatedGame); + + this.emit({ + type: 'game_joined', + data: gameDetails, + }); + + return gameDetails; } async leaveGame( @@ -200,7 +200,7 @@ export class GameplayService { } async makeMove( - session: Session, + playerId: string, data: MakeMovePayloadV1, ): Promise<{ gameDetails: Maybe; move: MoveMadeV1 }> { const makeMoveWithLock = async (): Promise<{ @@ -211,7 +211,7 @@ export class GameplayService { await using _ = await this.lockService.acquireLock('game', data.gameId); const { chessGame } = await this.loadChessGame(data.gameId); const moveToPlay = Move.fromUci(data.uci); - const updatedGame = chessGame.play(session.userId, moveToPlay); + const updatedGame = chessGame.play(playerId, moveToPlay); const updatedGameState = updatedGame.getState(); const newMove = updatedGameState.movesRecord.at(-1); assertDefined(newMove, 'No move found after playing move'); @@ -245,10 +245,25 @@ export class GameplayService { clock: clockInstant, }; + const gameDetailsV1 = GameMapper.toGameDetailsV1(updatedGame); + const currentTurn = updatedGame.getPosition().turn; + const moveColor = Color.opposite(currentTurn); + + // Emit move_made event to all subscribers + this.emit({ + type: 'move_made', + data: { + moveMade: moveMadeV1, + gameDetails: gameDetailsV1, + statusChanged: gameStateUpdated, + moveColor, + }, + }); + if (gameStateUpdated) { await this.handleGameEnd(updatedGame); return { - gameDetails: GameMapper.toGameDetailsV1(updatedGame), + gameDetails: gameDetailsV1, move: moveMadeV1, }; } else { @@ -305,7 +320,11 @@ export class GameplayService { const chessGame = await handleFlagTimeoutWithLock(); if (chessGame) { await this.handleGameEnd(chessGame); - this.notifyObservers(GameMapper.toGameDetailsV1(chessGame)); + const gameDetailsV1 = GameMapper.toGameDetailsV1(chessGame); + this.emit({ + type: 'flag_timeout', + data: gameDetailsV1, + }); } } } diff --git a/libs/api-service/src/lib/games/service/GamesService.ts b/libs/api-service/src/lib/games/service/GamesService.ts index 97b6fe05..962f505b 100644 --- a/libs/api-service/src/lib/games/service/GamesService.ts +++ b/libs/api-service/src/lib/games/service/GamesService.ts @@ -1,4 +1,5 @@ import { + CreateChallengeV1, CreateGameV1, GameDetailsV1, LobbyPageResponseV1, @@ -11,12 +12,19 @@ import { GameRepository, InsertGame, TimeControlJsonB, + UserRepository, } from '@michess/infra-db'; import { PageResponseMapper } from '../../mapper/PageResponseMapper'; import { GameMapper } from '../mapper/GameMapper'; +import { PlayerInfoIn } from '../model/PlayerInfoIn'; +import { GameplayService } from './GameplayService'; export class GamesService { - constructor(private gameRepository: GameRepository) {} + constructor( + private gameRepository: GameRepository, + private userRepository: UserRepository, + private gameplayService: GameplayService, + ) {} async createGame(data: CreateGameV1): Promise { const { @@ -103,4 +111,40 @@ export class GamesService { page, }); } + + async createChallenge( + playerInfoIn: PlayerInfoIn, + request: CreateChallengeV1, + ): Promise { + const opponent = await this.userRepository.findUserById(request.opponentId); + if (!opponent) { + throw new Error('Opponent not found'); + } + if (opponent.role !== 'bot') { + throw new Error('Can only challenge bots at this time'); + } + + const gameDetails = await this.createGame({ + variant: request.variant ?? 'standard', + isPrivate: true, + timeControl: request.timeControl, + }); + + await this.gameplayService.joinGame(playerInfoIn, { + gameId: gameDetails.id, + side: request.playerColor, + }); + const updatedGameDetails = await this.gameplayService.joinGame( + { + id: opponent.id, + name: opponent.name, + role: opponent.role, + }, + { + gameId: gameDetails.id, + }, + ); + + return updatedGameDetails; + } } diff --git a/libs/api-service/src/lib/llm/client/GeminiClient.ts b/libs/api-service/src/lib/llm/client/GeminiClient.ts new file mode 100644 index 00000000..2df4aded --- /dev/null +++ b/libs/api-service/src/lib/llm/client/GeminiClient.ts @@ -0,0 +1,58 @@ +import { GoogleGenAI } from '@google/genai'; +import { logger } from '@michess/be-utils'; +import { LlmResponse } from '../model/LlmMessage'; +import { LlmRequest } from '../model/LlmRequest'; +import { LlmClient } from './LlmClient'; + +export class GeminiClient implements LlmClient { + private client: GoogleGenAI; + + constructor( + apiKey: string, + private readonly modelName: string, + ) { + this.client = new GoogleGenAI({ apiKey }); + } + + async generateResponse(request: LlmRequest): Promise { + try { + const result = await this.client.models.generateContent({ + model: this.modelName, + contents: request.userPrompt, + config: { + systemInstruction: request.systemPrompt, + temperature: request.temperature, + }, + }); + + const text = result.text ?? ''; + + logger.debug( + { + modelName: this.modelName, + promptLength: request.userPrompt.length, + responseLength: text.length, + }, + 'Gemini API call successful', + ); + + return { + content: text, + finishReason: 'stop', + }; + } catch (error) { + logger.error( + { + err: error, + modelName: this.modelName, + }, + 'Gemini API call failed', + ); + + return { + content: '', + finishReason: 'error', + }; + } + } +} diff --git a/libs/api-service/src/lib/llm/client/LlmClient.ts b/libs/api-service/src/lib/llm/client/LlmClient.ts new file mode 100644 index 00000000..e2f8d06b --- /dev/null +++ b/libs/api-service/src/lib/llm/client/LlmClient.ts @@ -0,0 +1,6 @@ +import { LlmResponse } from '../model/LlmMessage'; +import { LlmRequest } from '../model/LlmRequest'; + +export interface LlmClient { + generateResponse(request: LlmRequest): Promise; +} diff --git a/libs/api-service/src/lib/llm/config/LlmConfig.ts b/libs/api-service/src/lib/llm/config/LlmConfig.ts new file mode 100644 index 00000000..2c0f6b4c --- /dev/null +++ b/libs/api-service/src/lib/llm/config/LlmConfig.ts @@ -0,0 +1,3 @@ +export type LlmConfig = { + geminiApiKey: string; +}; diff --git a/libs/api-service/src/lib/llm/model/LlmMessage.ts b/libs/api-service/src/lib/llm/model/LlmMessage.ts new file mode 100644 index 00000000..4202227c --- /dev/null +++ b/libs/api-service/src/lib/llm/model/LlmMessage.ts @@ -0,0 +1,4 @@ +export type LlmResponse = { + content: string; + finishReason: 'stop' | 'length' | 'error'; +}; diff --git a/libs/api-service/src/lib/llm/model/LlmProvider.ts b/libs/api-service/src/lib/llm/model/LlmProvider.ts new file mode 100644 index 00000000..4f3153cb --- /dev/null +++ b/libs/api-service/src/lib/llm/model/LlmProvider.ts @@ -0,0 +1 @@ +export type LlmProvider = 'gemini' | 'claude' | 'gpt'; diff --git a/libs/api-service/src/lib/llm/model/LlmRequest.ts b/libs/api-service/src/lib/llm/model/LlmRequest.ts new file mode 100644 index 00000000..6014251b --- /dev/null +++ b/libs/api-service/src/lib/llm/model/LlmRequest.ts @@ -0,0 +1,5 @@ +export type LlmRequest = { + systemPrompt: string; + userPrompt: string; + temperature: number; +}; diff --git a/libs/api-service/src/lib/llm/service/LlmClientFactory.ts b/libs/api-service/src/lib/llm/service/LlmClientFactory.ts new file mode 100644 index 00000000..49f2ec70 --- /dev/null +++ b/libs/api-service/src/lib/llm/service/LlmClientFactory.ts @@ -0,0 +1,22 @@ +import { logger } from '@michess/be-utils'; +import { BotConfig } from '../../user/config/model/BotConfig'; +import { GeminiClient } from '../client/GeminiClient'; +import { LlmClient } from '../client/LlmClient'; + +export class LlmClientFactory { + static create(botConfig: BotConfig, apiKey: string): LlmClient { + switch (botConfig.provider) { + case 'gemini': + return new GeminiClient(apiKey, botConfig.model); + case 'claude': + case 'gpt': + logger.warn( + { provider: botConfig.provider }, + 'LLM provider not yet implemented, falling back to Gemini', + ); + return new GeminiClient(apiKey, botConfig.model); + default: + throw new Error(`Unknown LLM provider: ${botConfig.provider}`); + } + } +} diff --git a/libs/api-service/src/lib/lock/model/ResourceType.ts b/libs/api-service/src/lib/lock/model/ResourceType.ts index da9f1d06..ae7fed9b 100644 --- a/libs/api-service/src/lib/lock/model/ResourceType.ts +++ b/libs/api-service/src/lib/lock/model/ResourceType.ts @@ -1 +1 @@ -export type ResourceType = 'game' | 'user' | 'rating'; +export type ResourceType = 'game' | 'user' | 'rating' | 'matchmaking'; diff --git a/libs/api-service/src/lib/matchmaking/service/MatchmakingService.ts b/libs/api-service/src/lib/matchmaking/service/MatchmakingService.ts new file mode 100644 index 00000000..d9b620eb --- /dev/null +++ b/libs/api-service/src/lib/matchmaking/service/MatchmakingService.ts @@ -0,0 +1,213 @@ +import { logger } from '@michess/be-utils'; +import { EventEmitter, Maybe } from '@michess/common-utils'; +import { TimeControlClassification } from '@michess/core-game'; +import { MatchmakingRepository, QueueEntry } from '@michess/infra-db'; +import { Job, Queue, Worker } from 'bullmq'; +import Redis from 'ioredis'; +import { GamesService } from '../../games/service/GamesService'; +import { LockService } from '../../lock/service/LockService'; +import { RatingsService } from '../../user/service/RatingsService'; + +type MatchFoundEvent = { + type: 'match_found'; + data: { + player1Id: string; + player2Id: string; + gameId: string; + }; +}; + +type MatchmakingEvent = MatchFoundEvent; + +type MatchmakingJobData = Record; + +export class MatchmakingService extends EventEmitter { + private matchmakingQueue: Queue; + private matchmakingWorker: Worker; + + constructor( + private redis: Redis, + private gamesService: GamesService, + private ratingsService: RatingsService, + private lockService: LockService, + private matchmakingRepository: MatchmakingRepository, + ) { + super(); + + const connectionOptions = { connection: redis }; + + this.matchmakingQueue = new Queue('matchmaking', connectionOptions); + this.matchmakingWorker = new Worker( + 'matchmaking', + this.processMatchmaking.bind(this), + connectionOptions, + ); + } + + async initialize(): Promise { + // Run matchmaking every 2 seconds + await this.matchmakingQueue.upsertJobScheduler('find-matches', { + every: 2000, + }); + } + + async close(): Promise { + logger.info('Closing matchmaking service'); + await this.matchmakingWorker.close(); + await this.matchmakingQueue.close(); + } + + async joinQueue( + playerId: string, + playerName: Maybe, + options: { + variant: 'standard'; + timeControlClassification: TimeControlClassification; + timeControl?: { + initialSec: number; + incrementSec: number; + }; + }, + ): Promise { + // Get player rating + const rating = await this.ratingsService.getRatingByPlayerId( + playerId, + options.variant, + options.timeControlClassification, + ); + + const entry: QueueEntry = { + playerId, + playerName: playerName ?? 'Anonymous', + rating: rating.value, + variant: options.variant, + timeControlClassification: options.timeControlClassification, + timeControl: options.timeControl, + joinedAt: Date.now(), + }; + + await this.matchmakingRepository.joinQueue(entry); + + logger.info( + { + playerId, + rating: rating.value, + timeControl: options.timeControlClassification, + }, + 'Player joined matchmaking queue', + ); + } + + async leaveQueue(playerId: string): Promise { + const removed = await this.matchmakingRepository.leaveQueue(playerId); + + if (removed) { + logger.info({ playerId }, 'Player left matchmaking queue'); + } + + return removed; + } + + async getQueueEntry(playerId: string): Promise> { + return this.matchmakingRepository.getQueueEntry(playerId); + } + + private async processMatchmaking( + _job: Job, + ): Promise { + await using lock = await this.lockService.acquireLock( + 'matchmaking', + 'global', + ); + + const playerIds = new Set( + await this.matchmakingRepository.getAllPlayerIds(), + ); + + for (const playerId of playerIds) { + if (!playerIds.has(playerId)) { + continue; + } + + const opponentId = await this.attemptMatch(playerId); + if (opponentId) { + playerIds.delete(playerId); + playerIds.delete(opponentId); + } + } + } + + private async attemptMatch(playerId: string): Promise { + const opponent = await this.matchmakingRepository.findMatch(playerId, 200); + + if (!opponent) { + return undefined; + } + + const playerEntry = + await this.matchmakingRepository.getQueueEntry(playerId); + + if (!playerEntry) { + return undefined; + } + + logger.info( + { + player1: playerId, + player2: opponent.playerId, + ratingDiff: Math.abs(playerEntry.rating - opponent.rating), + }, + 'Match found', + ); + + try { + // Create game + const gameDetails = await this.gamesService.createGame({ + variant: playerEntry.variant, + isPrivate: false, + timeControl: playerEntry.timeControl + ? { + type: 'realtime', + initialSec: playerEntry.timeControl.initialSec, + incrementSec: playerEntry.timeControl.incrementSec, + } + : undefined, + }); + + // Remove both from queue + await this.matchmakingRepository.leaveQueue(playerId); + await this.matchmakingRepository.leaveQueue(opponent.playerId); + + // Emit match found event + this.emit({ + type: 'match_found', + data: { + player1Id: playerId, + player2Id: opponent.playerId, + gameId: gameDetails.id, + }, + }); + + logger.info( + { + player1: playerId, + player2: opponent.playerId, + gameId: gameDetails.id, + }, + 'Match created successfully', + ); + + return opponent.playerId; + } catch (error) { + logger.error( + { + error, + player1: playerId, + player2: opponent.playerId, + }, + 'Failed to create match', + ); + return undefined; + } + } +} diff --git a/libs/api-service/src/lib/metrics/UsageMetricsService.ts b/libs/api-service/src/lib/metrics/UsageMetricsService.ts index 5f71be8d..a15c5165 100644 --- a/libs/api-service/src/lib/metrics/UsageMetricsService.ts +++ b/libs/api-service/src/lib/metrics/UsageMetricsService.ts @@ -33,6 +33,9 @@ export class UsageMetricsService { } async initialize() { + await this.cacheRepo.setClientCount(this.processId, 0); + await this.cacheRepo.calcTotalClients(); + await this.metricCleanupQueue.upsertJobScheduler('cleanup-metrics', { every: 5000, }); diff --git a/libs/api-service/src/lib/user/config/BotRegistry.ts b/libs/api-service/src/lib/user/config/BotRegistry.ts new file mode 100644 index 00000000..5c729989 --- /dev/null +++ b/libs/api-service/src/lib/user/config/BotRegistry.ts @@ -0,0 +1,35 @@ +import { Maybe } from '@michess/common-utils'; +import { BotConfig } from './model/BotConfig'; + +const BOT_REGISTRY: Record = { + 'bot-gemini-1': { + id: 'bot-gemini-1', + name: 'Gemini 1', + username: 'gemini-1', + description: 'A balanced AI chess player powered by Gemini', + provider: 'gemini', + model: 'gemini-2.5-flash', + personality: + 'You play balanced, solid chess. Consider both tactical and positional factors.', + temperature: 0.7, + }, +}; + +const getBotConfig = (botId: string): Maybe => { + return BOT_REGISTRY[botId]; +}; + +const index = (): BotConfig[] => { + return Object.values(BOT_REGISTRY); +}; + +const isBotUser = (userId: string): boolean => { + return BOT_REGISTRY[userId] !== undefined; +}; + +export const BotRegistry = { + get: getBotConfig, + getBotConfig, + index, + isBotUser, +}; diff --git a/libs/api-service/src/lib/user/config/model/BotConfig.ts b/libs/api-service/src/lib/user/config/model/BotConfig.ts new file mode 100644 index 00000000..dfcbc409 --- /dev/null +++ b/libs/api-service/src/lib/user/config/model/BotConfig.ts @@ -0,0 +1,10 @@ +export type BotConfig = { + id: string; + name: string; + username: string; + description: string; + provider: 'gemini' | 'claude' | 'gpt'; + model: string; + personality: string; + temperature: number; +}; diff --git a/libs/api-service/src/lib/user/service/BotService.ts b/libs/api-service/src/lib/user/service/BotService.ts new file mode 100644 index 00000000..fe98356b --- /dev/null +++ b/libs/api-service/src/lib/user/service/BotService.ts @@ -0,0 +1,314 @@ +import { BotInfoV1 } from '@michess/api-schema'; +import { logger } from '@michess/be-utils'; +import { assertDefined } from '@michess/common-utils'; +import { + Chessboard, + FenParser, + FenStr, + Move, + MoveOption, +} from '@michess/core-board'; +import { + CacheRepository, + GameRepository, + UserRepository, +} from '@michess/infra-db'; +import { Job, Queue, Worker } from 'bullmq'; +import { GameEvent } from '../../games/model/GameEvent'; +import { GameplayService } from '../../games/service/GameplayService'; +import { LlmConfig } from '../../llm/config/LlmConfig'; +import { LlmClientFactory } from '../../llm/service/LlmClientFactory'; +import { BotRegistry } from '../config/BotRegistry'; + +type BotMoveJobData = { + gameId: string; + botId: string; +}; + +export class BotService { + private unsubscribe?: () => void; + private botMoveQueue: Queue; + private botMoveWorker: Worker; + + constructor( + private readonly userRepository: UserRepository, + private readonly gameRepository: GameRepository, + private readonly gameplayService: GameplayService, + private readonly cacheRepository: CacheRepository, + private readonly llmConfig: LlmConfig, + ) { + const connectionOptions = { connection: this.cacheRepository.client }; + + this.botMoveQueue = new Queue(`bot-move`, connectionOptions); + this.botMoveWorker = new Worker( + `bot-move`, + this.processBotMove.bind(this), + connectionOptions, + ); + } + + async initialize(): Promise { + logger.info('Initializing bot users...'); + + const bots = BotRegistry.index(); + + for (const bot of bots) { + const existingUser = await this.userRepository.findUserById(bot.id); + + if (!existingUser) { + await this.userRepository.createUser({ + id: bot.id, + name: bot.name, + username: bot.username, + email: `${bot.username}@bot.michess.com`, + emailVerified: true, + role: 'bot', + isAnonymous: false, + createdAt: new Date(), + updatedAt: new Date(), + }); + + logger.info({ botId: bot.id, botName: bot.name }, 'Bot user created'); + } else { + await this.userRepository.updateUser(bot.id, { + id: bot.id, + name: bot.name, + username: bot.username, + email: `${bot.username}@bot.michess.com`, + emailVerified: true, + role: 'bot', + isAnonymous: false, + updatedAt: new Date(), + }); + + logger.debug({ botId: bot.id }, 'Bot user already exists, updated'); + } + } + + logger.info({ count: bots.length }, 'Bot initialization complete'); + + this.unsubscribe = this.gameplayService.subscribe( + (event) => { + this.handleGameEvent(event).catch((err) => { + logger.error({ err }, 'Error in bot event handler'); + }); + }, + ['move_made', 'game_joined'], + ); + } + + async close(): Promise { + logger.info('Closing bot service'); + if (this.unsubscribe) { + this.unsubscribe(); + } + await this.botMoveQueue.close(); + await this.botMoveWorker.close(); + } + + async listBots(): Promise { + const botUsers = await this.userRepository.listBots(); + + return botUsers.map((botUser) => { + const botConfig = BotRegistry.get(botUser.id); + + return { + id: botUser.id, + name: botUser.name, + username: botUser.username ?? botUser.id, + description: botConfig?.description ?? '', + }; + }); + } + + async handleGameEvent(event: GameEvent): Promise { + const gameDetails = + event.type === 'move_made' ? event.data.gameDetails : event.data; + + if ( + gameDetails.status !== 'IN_PROGRESS' && + gameDetails.status !== 'READY' + ) { + return; + } + + const chessboard = Chessboard.fromPosition( + FenParser.toChessPosition( + gameDetails.initialPosition ?? FenStr.standardInitial(), + ), + gameDetails.moves.map((m) => Move.fromUci(m.uci)), + ); + const currentPlayer = gameDetails.players[chessboard.position.turn]; + + if (currentPlayer?.isBot) { + logger.info( + { + gameId: gameDetails.id, + botId: currentPlayer.id, + botName: currentPlayer.name, + eventType: event.type, + }, + 'Bot turn detected, queuing move generation', + ); + + await this.queueBotMove(gameDetails.id, currentPlayer.id); + } else { + return; + } + } + + private async queueBotMove(gameId: string, botId: string): Promise { + await this.botMoveQueue.add('generate-move', { + gameId, + botId, + }); + } + + private async processBotMove(job: Job): Promise { + const { gameId, botId } = job.data; + + logger.info( + { + gameId, + botId, + jobId: job.id, + }, + 'Processing bot move job', + ); + + try { + await this.playBotMove(gameId, botId); + } catch (error) { + logger.error( + { + err: error, + gameId, + botId, + jobId: job.id, + }, + 'Failed to generate bot move', + ); + throw error; + } + } + + private async playBotMove(gameId: string, botId: string): Promise { + const botConfig = BotRegistry.get(botId); + if (!botConfig) { + throw new Error(`Bot configuration not found for bot ${botId}`); + } + + // Load game from database + const game = await this.gameRepository.findGameWithRelationsById(gameId); + assertDefined(game, `Game ${gameId} not found`); + + // Build chessboard from game state + const moves = game.moves.map((m) => Move.fromUci(m.uci)); + const initialPosition = FenParser.toChessPosition(FenStr.standardInitial()); + + const chessboard = Chessboard.fromPosition(initialPosition, moves); + + // Get available move options + const moveOptions = chessboard.moveOptions; + + if (moveOptions.length === 0) { + throw new Error('No legal moves available'); + } + + const llmClient = LlmClientFactory.create( + botConfig, + this.llmConfig.geminiApiKey, + ); + + // Get FEN position for compact representation + const fen = FenParser.toFenStr(chessboard.position); + + // Format available moves for the LLM + const availableMoves = moveOptions + .map((opt) => Move.toUci(MoveOption.toMove(opt))) + .join(' '); + + const systemPrompt = `You are a chess AI. Respond with only a single UCI move from the legal moves list. No explanation.`; + + const userPrompt = `Position: ${fen} +Legal moves: ${availableMoves} +Move:`; + + const response = await llmClient.generateResponse({ + systemPrompt, + userPrompt, + temperature: botConfig.temperature, + }); + + logger.info( + { + gameId, + botId, + response: { + finishReason: response.finishReason, + content: response.content, + contentLength: response.content?.length, + }, + }, + 'LLM response received', + ); + + if (response.finishReason === 'error' || !response.content.trim()) { + logger.error( + { + gameId, + botId, + finishReason: response.finishReason, + content: response.content, + }, + 'LLM failed to generate a valid response', + ); + throw new Error('LLM failed to generate a valid response'); + } + + // Extract UCI move from response (take first word, clean it up) + const uciMove = response.content.trim().split(/\s+/)[0].toLowerCase(); + + // Validate that the move is in the available moves + const isValidMove = moveOptions.some( + (opt) => Move.toUci(MoveOption.toMove(opt)) === uciMove, + ); + + if (!isValidMove) { + logger.warn( + { + gameId, + botId, + suggestedMove: uciMove, + availableMoves, + }, + 'LLM suggested invalid move, choosing random legal move', + ); + // Fallback to random legal move + const randomMove = + moveOptions[Math.floor(Math.random() * moveOptions.length)]; + const fallbackUci = Move.toUci(MoveOption.toMove(randomMove)); + + await this.gameplayService.makeMove(botId, { + gameId, + uci: fallbackUci, + }); + return; + } + + logger.info( + { + gameId, + botId, + uciMove, + }, + 'Bot generated move', + ); + + // Make the move through GameplayService + await this.gameplayService.makeMove(botId, { + gameId, + uci: uciMove, + }); + } +} diff --git a/libs/be-utils/src/lib/logger.ts b/libs/be-utils/src/lib/logger.ts index ec9a1159..55e45980 100644 --- a/libs/be-utils/src/lib/logger.ts +++ b/libs/be-utils/src/lib/logger.ts @@ -1,5 +1,6 @@ import { pino } from 'pino'; export const logger = pino({ + enabled: process.env.NODE_ENV !== 'test', level: process.env.LOG_LEVEL || 'info', }); diff --git a/libs/common-utils/src/index.ts b/libs/common-utils/src/index.ts index 324b78a6..0febff5c 100644 --- a/libs/common-utils/src/index.ts +++ b/libs/common-utils/src/index.ts @@ -2,6 +2,7 @@ export * from './lib/assertDefined'; export * from './lib/assertEqual'; export * from './lib/counter'; export * from './lib/countProps'; +export * from './lib/EventEmitter'; export * from './lib/immutability/insertItems'; export * from './lib/immutability/removeItem'; export * from './lib/immutability/updateItem'; diff --git a/libs/common-utils/src/lib/EventEmitter.ts b/libs/common-utils/src/lib/EventEmitter.ts new file mode 100644 index 00000000..4ae41d2a --- /dev/null +++ b/libs/common-utils/src/lib/EventEmitter.ts @@ -0,0 +1,54 @@ +type EventHandler = (event: TEvent) => void; + +type EventFilter = + | TEvent['type'] + | TEvent['type'][]; + +export class EventEmitter { + private observers: Set> = new Set(); + + /** + * Subscribe to events + * @param handler - Function to call when events are emitted + * @param filter - Optional event type(s) to filter for. If not provided, all events are received. + * @returns Unsubscribe function + */ + subscribe( + handler: EventHandler, + filter?: EventFilter, + ): () => void { + const wrappedHandler: EventHandler = (event) => { + if (!filter) { + handler(event); + } else if (Array.isArray(filter)) { + if (filter.includes(event.type)) { + handler(event); + } + } else { + if (event.type === filter) { + handler(event); + } + } + }; + + this.observers.add(wrappedHandler); + + return () => { + this.observers.delete(wrappedHandler); + }; + } + + /** + * Emit an event to all subscribers + */ + protected emit(event: TEvent): void { + this.observers.forEach((handler) => handler(event)); + } + + /** + * Clear all subscribers + */ + protected clearSubscribers(): void { + this.observers.clear(); + } +} diff --git a/libs/core-board/src/index.ts b/libs/core-board/src/index.ts index f65efdfd..2d57a743 100644 --- a/libs/core-board/src/index.ts +++ b/libs/core-board/src/index.ts @@ -3,6 +3,7 @@ export * from './lib/bitboard/Bitboard'; export * from './lib/bitboard/ChessBitboard'; export * from './lib/BoardCoordinates'; export * from './lib/BoardState'; +export * from './lib/Chessboard'; export * from './lib/ColoredPieceType'; export * from './lib/common/Color'; export * from './lib/common/Coordinate'; @@ -10,6 +11,7 @@ export * from './lib/common/Piece'; export * from './lib/common/PieceType'; export * from './lib/fen/model/FenStr'; export * from './lib/mocks/BoardState.mock'; +export * from './lib/mocks/Chessboard.mock'; export * from './lib/mocks/ChessPosition.mock'; export * from './lib/mocks/Piece.mock'; export * from './lib/mocks/PiecePlacements.mock'; @@ -24,3 +26,4 @@ export * from './lib/position/model/CastlingRight'; export * from './lib/position/model/ChessPosition'; export * from './lib/position/model/PiecePlacement'; export * from './lib/position/model/PiecePlacements'; +export * from './lib/ZobristHash'; diff --git a/libs/core-game/src/lib/Chessboard.ts b/libs/core-board/src/lib/Chessboard.ts similarity index 94% rename from libs/core-game/src/lib/Chessboard.ts rename to libs/core-board/src/lib/Chessboard.ts index 4d8d15e2..f0dec0ec 100644 --- a/libs/core-game/src/lib/Chessboard.ts +++ b/libs/core-board/src/lib/Chessboard.ts @@ -1,15 +1,13 @@ import { Maybe } from '@michess/common-utils'; -import { - ChessPosition, - Move, - MoveGenerator, - MoveNotation, - MoveOption, - MoveRecord, - Piece, - PiecePlacements, - PieceType, -} from '@michess/core-board'; +import { Piece } from './common/Piece'; +import { PieceType } from './common/PieceType'; +import { MoveGenerator } from './move/generator/MoveGenerator'; +import { Move } from './move/Move'; +import { MoveNotation } from './move/MoveNotation'; +import { MoveOption } from './move/MoveOption'; +import { MoveRecord } from './move/MoveRecord'; +import { ChessPosition } from './position/model/ChessPosition'; +import { PiecePlacements } from './position/model/PiecePlacements'; import { ZobristHash } from './ZobristHash'; type BoardState = { diff --git a/libs/core-game/src/lib/ZobristHash.ts b/libs/core-board/src/lib/ZobristHash.ts similarity index 95% rename from libs/core-game/src/lib/ZobristHash.ts rename to libs/core-board/src/lib/ZobristHash.ts index c3742d3c..c62f1b40 100644 --- a/libs/core-game/src/lib/ZobristHash.ts +++ b/libs/core-board/src/lib/ZobristHash.ts @@ -1,12 +1,10 @@ import { Maybe } from '@michess/common-utils'; -import { - ChessPosition, - Color, - Coordinate, - PieceType, - CastlingAbility, - Piece, -} from '@michess/core-board'; +import { Color } from './common/Color'; +import { Coordinate } from './common/Coordinate'; +import { Piece } from './common/Piece'; +import { PieceType } from './common/PieceType'; +import { CastlingAbility } from './position/model/CastlingAbility'; +import { ChessPosition } from './position/model/ChessPosition'; // Zobrist hash constants - using pre-generated deterministic 64-bit values // These should be consistent across runs for reproducible hashing diff --git a/libs/core-game/src/lib/__tests__/Chessboard.spec.ts b/libs/core-board/src/lib/__tests__/Chessboard.spec.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/Chessboard.spec.ts rename to libs/core-board/src/lib/__tests__/Chessboard.spec.ts diff --git a/libs/core-game/src/lib/__tests__/ZobristHash.spec.ts b/libs/core-board/src/lib/__tests__/ZobristHash.spec.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/ZobristHash.spec.ts rename to libs/core-board/src/lib/__tests__/ZobristHash.spec.ts index 0e865713..7655a190 100644 --- a/libs/core-game/src/lib/__tests__/ZobristHash.spec.ts +++ b/libs/core-board/src/lib/__tests__/ZobristHash.spec.ts @@ -1,8 +1,8 @@ import { - createChessPositionMock, CastlingAbility, - Piece, Coordinate, + createChessPositionMock, + Piece, } from '@michess/core-board'; import { ZobristHash } from '../ZobristHash'; diff --git a/libs/core-game/src/lib/__tests__/test-cases/TestCases.ts b/libs/core-board/src/lib/__tests__/test-cases/TestCases.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/TestCases.ts rename to libs/core-board/src/lib/__tests__/test-cases/TestCases.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/castling.ts b/libs/core-board/src/lib/__tests__/test-cases/castling.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/castling.ts rename to libs/core-board/src/lib/__tests__/test-cases/castling.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/checkmates.ts b/libs/core-board/src/lib/__tests__/test-cases/checkmates.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/checkmates.ts rename to libs/core-board/src/lib/__tests__/test-cases/checkmates.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/famous.ts b/libs/core-board/src/lib/__tests__/test-cases/famous.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/famous.ts rename to libs/core-board/src/lib/__tests__/test-cases/famous.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/pawns.ts b/libs/core-board/src/lib/__tests__/test-cases/pawns.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/pawns.ts rename to libs/core-board/src/lib/__tests__/test-cases/pawns.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/promotions.ts b/libs/core-board/src/lib/__tests__/test-cases/promotions.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/promotions.ts rename to libs/core-board/src/lib/__tests__/test-cases/promotions.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/stalemates.ts b/libs/core-board/src/lib/__tests__/test-cases/stalemates.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/stalemates.ts rename to libs/core-board/src/lib/__tests__/test-cases/stalemates.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/standard.ts b/libs/core-board/src/lib/__tests__/test-cases/standard.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/standard.ts rename to libs/core-board/src/lib/__tests__/test-cases/standard.ts diff --git a/libs/core-game/src/lib/__tests__/test-cases/taxing.ts b/libs/core-board/src/lib/__tests__/test-cases/taxing.ts similarity index 100% rename from libs/core-game/src/lib/__tests__/test-cases/taxing.ts rename to libs/core-board/src/lib/__tests__/test-cases/taxing.ts diff --git a/libs/core-game/src/lib/mocks/Chessboard.mock.ts b/libs/core-board/src/lib/mocks/Chessboard.mock.ts similarity index 84% rename from libs/core-game/src/lib/mocks/Chessboard.mock.ts rename to libs/core-board/src/lib/mocks/Chessboard.mock.ts index 90eb40cc..fef81c7d 100644 --- a/libs/core-game/src/lib/mocks/Chessboard.mock.ts +++ b/libs/core-board/src/lib/mocks/Chessboard.mock.ts @@ -1,5 +1,4 @@ -import { ChessPosition, Move } from '@michess/core-board'; -import { Chessboard } from '../Chessboard'; +import { Chessboard, ChessPosition, Move } from '@michess/core-board'; const standardInitial = () => { return Chessboard.fromPosition(ChessPosition.standardInitial()); diff --git a/libs/core-game/src/index.ts b/libs/core-game/src/index.ts index 3d78924c..d99f1f1a 100644 --- a/libs/core-game/src/index.ts +++ b/libs/core-game/src/index.ts @@ -3,7 +3,6 @@ export * from './lib/actions/model/GameAction'; export * from './lib/actions/model/GameActionIn'; export * from './lib/actions/model/GameActionOption'; export * from './lib/actions/model/GameActionType'; -export * from './lib/Chessboard'; export * from './lib/ChessGame'; export * from './lib/model/ChessGameError'; export * from './lib/model/ChessGameErrorCode'; diff --git a/libs/core-game/src/lib/ChessGame.ts b/libs/core-game/src/lib/ChessGame.ts index 3df1ed60..5aa52f58 100644 --- a/libs/core-game/src/lib/ChessGame.ts +++ b/libs/core-game/src/lib/ChessGame.ts @@ -1,5 +1,6 @@ import { assertDefined, isDefined, Maybe } from '@michess/common-utils'; import { + Chessboard, ChessPosition, Color, FenParser, @@ -10,7 +11,6 @@ import { GameResult } from '@michess/core-rating'; import { ChessGameActions } from './actions/ChessGameActions'; import { GameActionIn } from './actions/model/GameActionIn'; import { GameActionOption } from './actions/model/GameActionOption'; -import { Chessboard } from './Chessboard'; import { ChessClock } from './ChessClock'; import { ChessGameError } from './model/ChessGameError'; import { ChessGameIn } from './model/ChessGameIn'; diff --git a/libs/core-game/src/lib/__tests__/ChessGame.spec.ts b/libs/core-game/src/lib/__tests__/ChessGame.spec.ts index ce28a612..38781eb9 100644 --- a/libs/core-game/src/lib/__tests__/ChessGame.spec.ts +++ b/libs/core-game/src/lib/__tests__/ChessGame.spec.ts @@ -1,6 +1,7 @@ import { Color, createChessPositionMock, FenParser } from '@michess/core-board'; import { ChessGame } from '../ChessGame'; import { GameStateMock } from '../model/__mocks__/GameState.mock'; +import { PlayerInfoMock } from '../model/__mocks__/PlayerInfo.mock'; import { ChessGameResultType } from '../model/ChessGameResultType'; import { GameStatusType } from '../model/GameStatusType'; @@ -154,7 +155,7 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { + white: PlayerInfoMock.fromPartial({ id: 'player1', name: 'Player One', rating: { @@ -164,8 +165,8 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, - black: { + }), + black: PlayerInfoMock.fromPartial({ id: 'player2', name: 'Player Two', rating: { @@ -175,7 +176,7 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, + }), }, status: 'IN_PROGRESS', }), @@ -196,7 +197,7 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { + white: PlayerInfoMock.fromPartial({ id: 'player1', name: 'Player One', rating: { @@ -206,8 +207,8 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, - black: { + }), + black: PlayerInfoMock.fromPartial({ id: 'player2', name: 'Player Two', rating: { @@ -217,7 +218,7 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, + }), }, status: 'IN_PROGRESS', }), @@ -248,7 +249,10 @@ describe('ChessGame', () => { it('should allow a player to join as white when white slot is empty', () => { const position = createChessPositionMock(); const chessGame = ChessGame.fromChessPosition(position); - const playerInfo = { id: 'player1', name: 'Player One' }; + const playerInfo = PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }); const gameWithPlayer = chessGame.joinGame(playerInfo, Color.White); const gameState = gameWithPlayer.getState(); @@ -261,7 +265,10 @@ describe('ChessGame', () => { it('should allow a player to join as black when black slot is empty', () => { const position = createChessPositionMock(); const chessGame = ChessGame.fromChessPosition(position); - const playerInfo = { id: 'player1', name: 'Player One' }; + const playerInfo = PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }); const gameWithPlayer = chessGame.joinGame(playerInfo, Color.Black); const gameState = gameWithPlayer.getState(); @@ -274,7 +281,10 @@ describe('ChessGame', () => { it('should assign a random available side when no side is specified', () => { const position = createChessPositionMock(); const chessGame = ChessGame.fromChessPosition(position); - const playerInfo = { id: 'player1', name: 'Player One' }; + const playerInfo = PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }); const gameWithPlayer = chessGame.joinGame(playerInfo); const gameState = gameWithPlayer.getState(); @@ -289,8 +299,14 @@ describe('ChessGame', () => { it('should set status to READY when both players have joined', () => { const position = createChessPositionMock(); const chessGame = ChessGame.fromChessPosition(position); - const player1 = { id: 'player1', name: 'Player One' }; - const player2 = { id: 'player2', name: 'Player Two' }; + const player1 = PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }); + const player2 = PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }); const gameWithPlayer1 = chessGame.joinGame(player1, Color.White); const gameWithBothPlayers = gameWithPlayer1.joinGame( @@ -307,8 +323,14 @@ describe('ChessGame', () => { it('should throw error when trying to join a side that is already taken', () => { const position = createChessPositionMock(); const chessGame = ChessGame.fromChessPosition(position); - const player1 = { id: 'player1', name: 'Player One' }; - const player2 = { id: 'player2', name: 'Player Two' }; + const player1 = PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }); + const player2 = PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }); const gameWithPlayer1 = chessGame.joinGame(player1, Color.White); @@ -320,9 +342,18 @@ describe('ChessGame', () => { it('should throw error when trying to join a game where all sides are taken', () => { const position = createChessPositionMock(); const chessGame = ChessGame.fromChessPosition(position); - const player1 = { id: 'player1', name: 'Player One' }; - const player2 = { id: 'player2', name: 'Player Two' }; - const player3 = { id: 'player3', name: 'Player Three' }; + const player1 = PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }); + const player2 = PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }); + const player3 = PlayerInfoMock.fromPartial({ + id: 'player3', + name: 'Player Three', + }); const gameWithPlayer1 = chessGame.joinGame(player1, Color.White); const gameWithBothPlayers = gameWithPlayer1.joinGame( @@ -341,7 +372,10 @@ describe('ChessGame', () => { it('should preserve existing game state when a player joins', () => { const position = createChessPositionMock(); const chessGame = ChessGame.fromChessPosition(position); - const playerInfo = { id: 'player1', name: 'Player One' }; + const playerInfo = PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }); const gameWithPlayer = chessGame.joinGame(playerInfo, Color.White); @@ -363,8 +397,14 @@ describe('ChessGame', () => { 'r1bqkbnr/ppp2ppp/2np4/4p3/2B1P3/5Q2/PPPP1PPP/RNB1K1NR w KQkq - 0 1', ), players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'IN_PROGRESS', }), @@ -391,8 +431,14 @@ describe('ChessGame', () => { '3k4/5K2/8/8/8/8/6Q1/8 w - - 0 1', ), players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'IN_PROGRESS', }), @@ -420,8 +466,14 @@ describe('ChessGame', () => { 'r1bqkbnr/ppp2ppp/2np4/4p3/2B1P3/5Q2/PPPP1PPP/RNB1K1NR w KQkq - 0 1', ), players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'IN_PROGRESS', timeControl: { @@ -454,8 +506,14 @@ describe('ChessGame', () => { '3k4/5K2/8/8/8/8/6Q1/8 w - - 0 1', ), players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'IN_PROGRESS', timeControl: { @@ -488,7 +546,7 @@ describe('ChessGame', () => { 'r1bqkbnr/ppp2ppp/2np4/4p3/2B1P3/5Q2/PPPP1PPP/RNB1K1NR w KQkq - 0 1', ), players: { - white: { + white: PlayerInfoMock.fromPartial({ id: 'player1', name: 'Player One', rating: { @@ -498,8 +556,8 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, - black: { + }), + black: PlayerInfoMock.fromPartial({ id: 'player2', name: 'Player Two', rating: { @@ -509,7 +567,7 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, + }), }, status: 'IN_PROGRESS', }), @@ -536,8 +594,14 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'READY', }), @@ -559,8 +623,14 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'READY', }), @@ -581,8 +651,14 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'IN_PROGRESS', }), @@ -599,8 +675,14 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'ENDED', result: { type: 'white_win', timestamp: Date.now() }, @@ -617,8 +699,14 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'READY', }), @@ -635,7 +723,10 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), black: undefined, }, status: 'WAITING', @@ -654,8 +745,14 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'ENDED', result: { type: 'white_win', timestamp: Date.now() }, @@ -671,8 +768,14 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromPartial({ + id: 'player1', + name: 'Player One', + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), }, status: 'IN_PROGRESS', }), @@ -687,7 +790,7 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { + white: PlayerInfoMock.fromPartial({ id: 'player1', name: 'Player One', rating: { @@ -697,8 +800,11 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, - black: { id: 'player2', name: 'Player Two' }, // No rating + }), + black: PlayerInfoMock.fromPartial({ + id: 'player2', + name: 'Player Two', + }), // No rating }, status: 'ENDED', result: { type: 'white_win', timestamp: Date.now() }, @@ -713,7 +819,7 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { + white: PlayerInfoMock.fromPartial({ id: 'player1', name: 'Player One', rating: { @@ -723,8 +829,8 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, - black: { + }), + black: PlayerInfoMock.fromPartial({ id: 'player2', name: 'Player Two', rating: { @@ -734,7 +840,7 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, + }), }, status: 'ENDED', result: { type: 'white_win', timestamp: Date.now() }, @@ -753,7 +859,7 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { + white: PlayerInfoMock.fromPartial({ id: 'player1', name: 'Player One', rating: { @@ -763,8 +869,8 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, - black: { + }), + black: PlayerInfoMock.fromPartial({ id: 'player2', name: 'Player Two', rating: { @@ -774,7 +880,7 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, + }), }, status: 'ENDED', result: { type: 'white_win', timestamp: Date.now() }, @@ -790,7 +896,7 @@ describe('ChessGame', () => { const chessGame = ChessGame.fromGameState( GameStateMock.fromPartial({ players: { - white: { + white: PlayerInfoMock.fromPartial({ id: 'player1', name: 'Player One', rating: { @@ -800,8 +906,8 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, - black: { + }), + black: PlayerInfoMock.fromPartial({ id: 'player2', name: 'Player Two', rating: { @@ -811,7 +917,7 @@ describe('ChessGame', () => { volatility: 0.06, timestamp: new Date(), }, - }, + }), }, status: 'ENDED', result: { type: 'draw', timestamp: Date.now() }, @@ -833,8 +939,8 @@ describe('ChessGame', () => { '8/8/8/8/8/3k4/8/3K4 w - - 0 1', // Just two kings ), players: { - white: { id: 'player1', name: 'Player One' }, - black: { id: 'player2', name: 'Player Two' }, + white: PlayerInfoMock.fromId('player1'), + black: PlayerInfoMock.fromId('player2'), }, status: 'IN_PROGRESS', }), diff --git a/libs/core-game/src/lib/actions/ChessGameActions.ts b/libs/core-game/src/lib/actions/ChessGameActions.ts index ab1e35d3..ef14542b 100644 --- a/libs/core-game/src/lib/actions/ChessGameActions.ts +++ b/libs/core-game/src/lib/actions/ChessGameActions.ts @@ -1,5 +1,4 @@ -import { Color } from '@michess/core-board'; -import { Chessboard } from '../Chessboard'; +import { Chessboard, Color } from '@michess/core-board'; import { GameStatusType } from '../model/GameStatusType'; import { GameAction } from './model/GameAction'; import { GameActionIn } from './model/GameActionIn'; diff --git a/libs/core-game/src/lib/actions/__tests__/ChessGameActions.spec.ts b/libs/core-game/src/lib/actions/__tests__/ChessGameActions.spec.ts index dada0e4b..51967c7c 100644 --- a/libs/core-game/src/lib/actions/__tests__/ChessGameActions.spec.ts +++ b/libs/core-game/src/lib/actions/__tests__/ChessGameActions.spec.ts @@ -1,5 +1,4 @@ -import { Color } from '@michess/core-board'; -import { ChessboardMock } from '../../mocks/Chessboard.mock'; +import { ChessboardMock, Color } from '@michess/core-board'; import { ChessGameActions } from '../ChessGameActions'; import { GameActionOption } from '../model/GameActionOption'; diff --git a/libs/core-game/src/lib/model/GamePlayers.ts b/libs/core-game/src/lib/model/GamePlayers.ts index f8252745..019cf3bb 100644 --- a/libs/core-game/src/lib/model/GamePlayers.ts +++ b/libs/core-game/src/lib/model/GamePlayers.ts @@ -40,8 +40,8 @@ const getGameResult = ( const fromResult = ( byColor: { - white: { id: string; name: string; rating: RatingSnapshot }; - black: { id: string; name: string; rating: RatingSnapshot }; + white: { id: string; name: string; rating: RatingSnapshot; isBot: boolean }; + black: { id: string; name: string; rating: RatingSnapshot; isBot: boolean }; }, result: ChessGameResult, ): GamePlayers => { @@ -57,6 +57,7 @@ const fromResult = ( white: { id: byColor.white.id, name: byColor.white.name, + isBot: byColor.white.isBot, rating: byColor.white.rating, ratingDiff: RatingCalculator.compute( byColor.white.rating, @@ -66,6 +67,7 @@ const fromResult = ( black: { id: byColor.black.id, name: byColor.black.name, + isBot: byColor.black.isBot, rating: byColor.black.rating, ratingDiff: RatingCalculator.compute( byColor.black.rating, @@ -77,8 +79,18 @@ const fromResult = ( const from = ( byColor: { - white?: { id: string; name: string; rating?: RatingSnapshot }; - black?: { id: string; name: string; rating?: RatingSnapshot }; + white?: { + id: string; + name: string; + rating?: RatingSnapshot; + isBot?: boolean; + }; + black?: { + id: string; + name: string; + rating?: RatingSnapshot; + isBot?: boolean; + }; }, result?: ChessGameResult, ): GamePlayers => { @@ -90,11 +102,13 @@ const from = ( id: white.id, name: white.name, rating: white.rating, + isBot: white.isBot ?? false, }; const blackWithRating = { id: black.id, name: black.name, rating: black.rating, + isBot: black.isBot ?? false, }; return fromResult( @@ -108,6 +122,7 @@ const from = ( ? { id: white.id, name: white.name, + isBot: white.isBot ?? false, rating: white.rating, } : undefined, @@ -115,6 +130,7 @@ const from = ( ? { id: black.id, name: black.name, + isBot: black.isBot ?? false, rating: black.rating, } : undefined, diff --git a/libs/core-game/src/lib/model/PlayerInfo.ts b/libs/core-game/src/lib/model/PlayerInfo.ts index b9de7a59..99848b6d 100644 --- a/libs/core-game/src/lib/model/PlayerInfo.ts +++ b/libs/core-game/src/lib/model/PlayerInfo.ts @@ -5,4 +5,5 @@ export type PlayerInfo = { rating?: RatingSnapshot; ratingDiff?: number; name: string; + isBot: boolean; }; diff --git a/libs/core-game/src/lib/model/__mocks__/GameState.mock.ts b/libs/core-game/src/lib/model/__mocks__/GameState.mock.ts index d474f729..8f203148 100644 --- a/libs/core-game/src/lib/model/__mocks__/GameState.mock.ts +++ b/libs/core-game/src/lib/model/__mocks__/GameState.mock.ts @@ -7,8 +7,8 @@ const gameStateMock: GameState = { classification: 'no_clock', }, players: { - white: { id: 'player1', name: 'Alice' }, - black: { id: 'player2', name: 'Bob' }, + white: { id: 'player1', name: 'Alice', isBot: false }, + black: { id: 'player2', name: 'Bob', isBot: false }, }, initialPosition: ChessPosition.standardInitial(), movesRecord: [], diff --git a/libs/core-game/src/lib/model/__mocks__/PlayerInfo.mock.ts b/libs/core-game/src/lib/model/__mocks__/PlayerInfo.mock.ts new file mode 100644 index 00000000..8453c11a --- /dev/null +++ b/libs/core-game/src/lib/model/__mocks__/PlayerInfo.mock.ts @@ -0,0 +1,14 @@ +import { PlayerInfo } from '../PlayerInfo'; + +const fromId = (id: string): PlayerInfo => ({ + id, + name: `u${id}`, + isBot: false, +}); +const fromPartial = (partial: Partial): PlayerInfo => ({ + id: 'u1', + isBot: false, + name: 'Player One', + ...partial, +}); +export const PlayerInfoMock = { fromId, fromPartial }; diff --git a/libs/infra-db/src/auth.config.ts b/libs/infra-db/src/auth.config.ts index 221177f7..c9a50a40 100644 --- a/libs/infra-db/src/auth.config.ts +++ b/libs/infra-db/src/auth.config.ts @@ -1,23 +1,25 @@ -import Redis from 'ioredis'; +import { betterAuth } from 'better-auth'; +import { admin, anonymous, username } from 'better-auth/plugins'; import postgres from 'postgres'; -import { AuthClient } from './lib/auth/AuthClient'; -import { DatabaseClient } from './lib/DatabaseClient'; +import { createDrizzleAdapter } from './lib/auth/drizzleAdapter'; +import { Drizzle } from './lib/Drizzle'; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -const client = DatabaseClient.from(postgres(process.env.DATABASE_URL!)); -const redisClient = new Redis( - process.env.REDIS_URL || 'redis://localhost:6379', -); +const client = Drizzle.from(postgres(process.env.DATABASE_URL!)); -export const auth = AuthClient.from(client, { - get: async (key) => { - return await redisClient.get(key); +export const auth = betterAuth({ + emailAndPassword: { + enabled: true, }, - set: async (key, value, ttl) => { - if (ttl) await redisClient.setex(key, ttl, value); - else await redisClient.set(key, value); + database: createDrizzleAdapter(client), + plugins: [anonymous(), username(), admin()], + secondaryStorage: { + get: async () => {}, + set: async () => {}, + delete: async () => {}, }, - delete: async (key) => { - await redisClient.del(key); + emailVerification: { + autoSignInAfterVerification: true, + sendOnSignUp: true, }, }); diff --git a/libs/infra-db/src/generated/migrations/0003_previous_arclight.sql b/libs/infra-db/src/generated/migrations/0003_previous_arclight.sql new file mode 100644 index 00000000..58a80952 --- /dev/null +++ b/libs/infra-db/src/generated/migrations/0003_previous_arclight.sql @@ -0,0 +1,4 @@ +ALTER TABLE "users" ADD COLUMN "role" text;--> statement-breakpoint +ALTER TABLE "users" ADD COLUMN "banned" boolean DEFAULT false;--> statement-breakpoint +ALTER TABLE "users" ADD COLUMN "ban_reason" text;--> statement-breakpoint +ALTER TABLE "users" ADD COLUMN "ban_expires" timestamp; \ No newline at end of file diff --git a/libs/infra-db/src/generated/migrations/meta/0003_snapshot.json b/libs/infra-db/src/generated/migrations/meta/0003_snapshot.json new file mode 100644 index 00000000..183402e5 --- /dev/null +++ b/libs/infra-db/src/generated/migrations/meta/0003_snapshot.json @@ -0,0 +1,844 @@ +{ + "id": "4ecdf6de-34a5-4546-8e72-790020328b63", + "prevId": "03b319a6-4160-4703-8068-36d0cf5eb0bf", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.accounts": { + "name": "accounts", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "account_id": { + "name": "account_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "provider_id": { + "name": "provider_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "access_token": { + "name": "access_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "refresh_token": { + "name": "refresh_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "id_token": { + "name": "id_token", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "access_token_expires_at": { + "name": "access_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "refresh_token_expires_at": { + "name": "refresh_token_expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "scope": { + "name": "scope", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "password": { + "name": "password", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "accounts_user_id_users_id_fk": { + "name": "accounts_user_id_users_id_fk", + "tableFrom": "accounts", + "tableTo": "users", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.actions": { + "name": "actions", + "schema": "", + "columns": { + "action_id": { + "name": "action_id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "color": { + "name": "color", + "type": "color", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "move_number": { + "name": "move_number", + "type": "smallint", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "action_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "payload": { + "name": "payload", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "actions_game_id_games_game_id_fk": { + "name": "actions_game_id_games_game_id_fk", + "tableFrom": "actions", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "game_id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.games": { + "name": "games", + "schema": "", + "columns": { + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": true, + "notNull": true, + "default": "gen_random_uuid()" + }, + "variant": { + "name": "variant", + "type": "variant", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'standard'" + }, + "is_private": { + "name": "is_private", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "white_player_id": { + "name": "white_player_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "black_player_id": { + "name": "black_player_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "white_rating_id": { + "name": "white_rating_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "black_rating_id": { + "name": "black_rating_id", + "type": "integer", + "primaryKey": false, + "notNull": false + }, + "time_control_classification": { + "name": "time_control_classification", + "type": "time_control_classification", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'no_clock'" + }, + "time_control": { + "name": "time_control", + "type": "jsonb", + "primaryKey": false, + "notNull": false + }, + "status": { + "name": "status", + "type": "game_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'empty'" + }, + "result": { + "name": "result", + "type": "result", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'0-0'" + }, + "result_reason": { + "name": "result_reason", + "type": "result_reason", + "typeSchema": "public", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "started_at": { + "name": "started_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "ended_at": { + "name": "ended_at", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": { + "games_white_player_id_users_id_fk": { + "name": "games_white_player_id_users_id_fk", + "tableFrom": "games", + "tableTo": "users", + "columnsFrom": [ + "white_player_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "games_black_player_id_users_id_fk": { + "name": "games_black_player_id_users_id_fk", + "tableFrom": "games", + "tableTo": "users", + "columnsFrom": [ + "black_player_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "games_white_rating_id_ratings_id_fk": { + "name": "games_white_rating_id_ratings_id_fk", + "tableFrom": "games", + "tableTo": "ratings", + "columnsFrom": [ + "white_rating_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "games_black_rating_id_ratings_id_fk": { + "name": "games_black_rating_id_ratings_id_fk", + "tableFrom": "games", + "tableTo": "ratings", + "columnsFrom": [ + "black_rating_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "set null", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "game_variant_tc_unique": { + "name": "game_variant_tc_unique", + "nullsNotDistinct": false, + "columns": [ + "game_id", + "variant", + "time_control_classification" + ] + } + }, + "policies": {}, + "checkConstraints": { + "time_control_standard_check": { + "name": "time_control_standard_check", + "value": "(\n \"games\".\"time_control_classification\" NOT IN ('bullet', 'blitz', 'rapid')\n OR (\n \"games\".\"time_control\" IS NOT NULL\n AND \"games\".\"time_control\"->>'initial' IS NOT NULL\n AND \"games\".\"time_control\"->>'increment' IS NOT NULL\n )\n )" + }, + "time_control_correspondence_check": { + "name": "time_control_correspondence_check", + "value": "(\n \"games\".\"time_control_classification\" != 'correspondence'\n OR (\n \"games\".\"time_control\" IS NOT NULL\n AND \"games\".\"time_control\"->>'daysPerMove' IS NOT NULL\n )\n )" + }, + "time_control_no_clock_check": { + "name": "time_control_no_clock_check", + "value": "(\n \"games\".\"time_control_classification\" != 'no_clock'\n OR \"games\".\"time_control\" IS NULL\n )" + } + }, + "isRLSEnabled": false + }, + "public.moves": { + "name": "moves", + "schema": "", + "columns": { + "move_id": { + "name": "move_id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": true + }, + "uci": { + "name": "uci", + "type": "varchar(10)", + "primaryKey": false, + "notNull": true + }, + "moved_at": { + "name": "moved_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "moves_game_id_games_game_id_fk": { + "name": "moves_game_id_games_game_id_fk", + "tableFrom": "moves", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "game_id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.ratings": { + "name": "ratings", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "serial", + "primaryKey": true, + "notNull": true + }, + "player_id": { + "name": "player_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "game_id": { + "name": "game_id", + "type": "uuid", + "primaryKey": false, + "notNull": false + }, + "variant": { + "name": "variant", + "type": "variant", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "time_control_classification": { + "name": "time_control_classification", + "type": "time_control_classification", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "rating": { + "name": "rating", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "deviation": { + "name": "deviation", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "volatility": { + "name": "volatility", + "type": "real", + "primaryKey": false, + "notNull": true + }, + "timestamp": { + "name": "timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": { + "idx_ratings_player_variant_tc_created": { + "name": "idx_ratings_player_variant_tc_created", + "columns": [ + { + "expression": "player_id", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "variant", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "time_control_classification", + "isExpression": false, + "asc": true, + "nulls": "last" + }, + { + "expression": "timestamp", + "isExpression": false, + "asc": false, + "nulls": "last" + } + ], + "isUnique": false, + "concurrently": false, + "method": "btree", + "with": {} + } + }, + "foreignKeys": { + "ratings_player_id_users_id_fk": { + "name": "ratings_player_id_users_id_fk", + "tableFrom": "ratings", + "tableTo": "users", + "columnsFrom": [ + "player_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "ratings_game_id_games_game_id_fk": { + "name": "ratings_game_id_games_game_id_fk", + "tableFrom": "ratings", + "tableTo": "games", + "columnsFrom": [ + "game_id" + ], + "columnsTo": [ + "game_id" + ], + "onDelete": "set null", + "onUpdate": "no action" + }, + "ratings_game_variant_tc_fk": { + "name": "ratings_game_variant_tc_fk", + "tableFrom": "ratings", + "tableTo": "games", + "columnsFrom": [ + "game_id", + "variant", + "time_control_classification" + ], + "columnsTo": [ + "game_id", + "variant", + "time_control_classification" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.users": { + "name": "users", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "email_verified": { + "name": "email_verified", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "image": { + "name": "image", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "is_anonymous": { + "name": "is_anonymous", + "type": "boolean", + "primaryKey": false, + "notNull": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "display_username": { + "name": "display_username", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "role": { + "name": "role", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "banned": { + "name": "banned", + "type": "boolean", + "primaryKey": false, + "notNull": false, + "default": false + }, + "ban_reason": { + "name": "ban_reason", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "ban_expires": { + "name": "ban_expires", + "type": "timestamp", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "users_email_unique": { + "name": "users_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "users_username_unique": { + "name": "users_username_unique", + "nullsNotDistinct": false, + "columns": [ + "username" + ] + } + }, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + }, + "public.verifications": { + "name": "verifications", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "identifier": { + "name": "identifier", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "value": { + "name": "value", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "expires_at": { + "name": "expires_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "policies": {}, + "checkConstraints": {}, + "isRLSEnabled": false + } + }, + "enums": { + "public.action_type": { + "name": "action_type", + "schema": "public", + "values": [ + "accept_draw", + "offer_draw", + "resign" + ] + }, + "public.color": { + "name": "color", + "schema": "public", + "values": [ + "white", + "black" + ] + }, + "public.game_status": { + "name": "game_status", + "schema": "public", + "values": [ + "empty", + "waiting", + "ready", + "in-progress", + "end" + ] + }, + "public.result": { + "name": "result", + "schema": "public", + "values": [ + "1-0", + "0-1", + "1/2-1/2", + "0-0" + ] + }, + "public.result_reason": { + "name": "result_reason", + "schema": "public", + "values": [ + "checkmate", + "stalemate", + "timeout", + "resignation", + "abandoned" + ] + }, + "public.time_control_classification": { + "name": "time_control_classification", + "schema": "public", + "values": [ + "correspondence", + "blitz", + "bullet", + "rapid", + "no_clock" + ] + }, + "public.variant": { + "name": "variant", + "schema": "public", + "values": [ + "standard" + ] + } + }, + "schemas": {}, + "sequences": {}, + "roles": {}, + "policies": {}, + "views": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/libs/infra-db/src/generated/migrations/meta/_journal.json b/libs/infra-db/src/generated/migrations/meta/_journal.json index 6524b060..ca141c5c 100644 --- a/libs/infra-db/src/generated/migrations/meta/_journal.json +++ b/libs/infra-db/src/generated/migrations/meta/_journal.json @@ -22,6 +22,13 @@ "when": 1762431195086, "tag": "0002_bored_gargoyle", "breakpoints": true + }, + { + "idx": 3, + "version": "7", + "when": 1763547310284, + "tag": "0003_previous_arclight", + "breakpoints": true } ] } \ No newline at end of file diff --git a/libs/infra-db/src/index.ts b/libs/infra-db/src/index.ts index d1a19796..f977e676 100644 --- a/libs/infra-db/src/index.ts +++ b/libs/infra-db/src/index.ts @@ -8,7 +8,9 @@ export * from './lib/Repositories'; export * from './lib/repository/ActionRepository'; export * from './lib/repository/CacheRepository'; export * from './lib/repository/GameRepository'; +export * from './lib/repository/MatchmakingRepository'; export * from './lib/repository/MoveRepository'; +export * from './lib/repository/QueueEntry'; export * from './lib/repository/RatingRepository'; export * from './lib/repository/UserRepository'; export * as schema from './lib/schema'; diff --git a/libs/infra-db/src/lib/DatabaseClient.ts b/libs/infra-db/src/lib/DatabaseClient.ts index 93f91d46..8934bc18 100644 --- a/libs/infra-db/src/lib/DatabaseClient.ts +++ b/libs/infra-db/src/lib/DatabaseClient.ts @@ -1,7 +1,8 @@ import { logger } from '@michess/be-utils'; import { Logger } from 'drizzle-orm'; -import { drizzle, PostgresJsDatabase } from 'drizzle-orm/postgres-js'; +import { PostgresJsDatabase } from 'drizzle-orm/postgres-js'; import { Sql } from 'postgres'; +import { Drizzle } from './Drizzle'; import * as schema from './schema'; type Schema = typeof schema; @@ -17,13 +18,7 @@ const dbLogger: Logger = { export type DatabaseClient = PostgresJsDatabase; const from = (pgClient: Sql): DatabaseClient => { - const drizzleClient = drizzle({ - client: pgClient, - schema, - logger: dbLogger, - casing: 'snake_case', - }); - + const drizzleClient = Drizzle.from(pgClient, dbLogger); return drizzleClient; }; diff --git a/libs/infra-db/src/lib/Drizzle.ts b/libs/infra-db/src/lib/Drizzle.ts new file mode 100644 index 00000000..12b66a8f --- /dev/null +++ b/libs/infra-db/src/lib/Drizzle.ts @@ -0,0 +1,19 @@ +import { Logger } from 'drizzle-orm'; +import { drizzle } from 'drizzle-orm/postgres-js'; +import { Sql } from 'postgres'; +import * as schema from './schema'; + +type Schema = typeof schema; + +const from = (pgClient: Sql, logger?: Logger) => { + return drizzle({ + client: pgClient, + schema, + logger, + casing: 'snake_case', + }); +}; + +export const Drizzle = { + from, +}; diff --git a/libs/infra-db/src/lib/Repositories.ts b/libs/infra-db/src/lib/Repositories.ts index c21fc633..4e30def4 100644 --- a/libs/infra-db/src/lib/Repositories.ts +++ b/libs/infra-db/src/lib/Repositories.ts @@ -3,6 +3,7 @@ import { Sql } from 'postgres'; import { ActionRepository } from './repository/ActionRepository'; import { CacheRepository } from './repository/CacheRepository'; import { GameRepository } from './repository/GameRepository'; +import { MatchmakingRepository } from './repository/MatchmakingRepository'; import { MoveRepository } from './repository/MoveRepository'; import { RatingRepository } from './repository/RatingRepository'; import { UserRepository } from './repository/UserRepository'; @@ -14,6 +15,7 @@ export type Repositories = { action: ActionRepository; cache: CacheRepository; rating: RatingRepository; + matchmaking: MatchmakingRepository; }; const from = (sql: Sql, redis: Redis): Repositories => { @@ -24,6 +26,7 @@ const from = (sql: Sql, redis: Redis): Repositories => { action: new ActionRepository(sql), cache: new CacheRepository(redis), rating: new RatingRepository(sql), + matchmaking: new MatchmakingRepository(redis), }; }; diff --git a/libs/infra-db/src/lib/auth/AuthClient.ts b/libs/infra-db/src/lib/auth/AuthClient.ts index 35af2eee..fb923a6b 100644 --- a/libs/infra-db/src/lib/auth/AuthClient.ts +++ b/libs/infra-db/src/lib/auth/AuthClient.ts @@ -7,7 +7,7 @@ import { SecondaryStorage, User, } from 'better-auth'; -import { anonymous, username } from 'better-auth/plugins'; +import { admin, anonymous, username } from 'better-auth/plugins'; import { DatabaseClient } from '../DatabaseClient'; import { createDrizzleAdapter } from './drizzleAdapter'; @@ -65,7 +65,7 @@ export const AuthClient = { // TODO: Use app config trustedOrigins: process.env.CORS_ORIGINS?.split(',') || [], database: createDrizzleAdapter(db), - plugins: [anonymous(), username()], + plugins: [anonymous(), username(), admin()], secondaryStorage, socialProviders: { google: oauthConfig diff --git a/libs/infra-db/src/lib/auth/drizzleAdapter.ts b/libs/infra-db/src/lib/auth/drizzleAdapter.ts index c924214c..02869f29 100644 --- a/libs/infra-db/src/lib/auth/drizzleAdapter.ts +++ b/libs/infra-db/src/lib/auth/drizzleAdapter.ts @@ -1,8 +1,10 @@ import { drizzleAdapter } from 'better-auth/adapters/drizzle'; -import { DatabaseClient } from '../DatabaseClient'; +import { PostgresJsDatabase } from 'drizzle-orm/postgres-js'; import * as schema from '../schema'; -export const createDrizzleAdapter = (db: DatabaseClient) => { +type Schema = typeof schema; + +export const createDrizzleAdapter = (db: PostgresJsDatabase) => { return drizzleAdapter(db, { provider: 'pg', schema, diff --git a/libs/infra-db/src/lib/repository/GameRepository.ts b/libs/infra-db/src/lib/repository/GameRepository.ts index c8defddc..40ebf985 100644 --- a/libs/infra-db/src/lib/repository/GameRepository.ts +++ b/libs/infra-db/src/lib/repository/GameRepository.ts @@ -9,7 +9,7 @@ import { GameStatusEnum } from '../model/GameStatusEnum'; import { InsertGame } from '../model/InsertGame'; import { SelectGame } from '../model/SelectGame'; import { SelectGameWithRelations } from '../model/SelectGameWithRelations'; -import { games } from '../schema'; +import { games, moves } from '../schema'; import { BaseRepository } from './BaseRepository'; type QueryOptions = { @@ -100,7 +100,9 @@ export class GameRepository extends BaseRepository { blackPlayer: true, blackRating: true, whiteRating: true, - moves: true, + moves: { + orderBy: moves.moveId, + }, actions: true, }, offset: options.page @@ -125,7 +127,9 @@ export class GameRepository extends BaseRepository { return await this.db.query.games.findFirst({ where: eq(this.schema.games.gameId, id), with: { - moves: true, + moves: { + orderBy: moves.moveId, + }, whitePlayer: true, blackPlayer: true, actions: true, diff --git a/libs/infra-db/src/lib/repository/MatchmakingRepository.ts b/libs/infra-db/src/lib/repository/MatchmakingRepository.ts new file mode 100644 index 00000000..6b5a7d51 --- /dev/null +++ b/libs/infra-db/src/lib/repository/MatchmakingRepository.ts @@ -0,0 +1,126 @@ +import { Maybe } from '@michess/common-utils'; +import { TimeControlClassification } from '@michess/core-game'; +import Redis from 'ioredis'; +import { QueueEntry } from './QueueEntry'; + +type QueueKey = `matchmaking:${string}:${TimeControlClassification}:${string}`; + +export class MatchmakingRepository { + constructor(private redis: Redis) {} + + private getQueueKey( + variant: 'standard', + timeControlClassification: TimeControlClassification, + timeControl: QueueEntry['timeControl'], + ): QueueKey { + const timeControlStr = timeControl + ? `${timeControl.initialSec}+${timeControl.incrementSec}` + : 'none'; + return `matchmaking:${variant}:${timeControlClassification}:${timeControlStr}`; + } + + private getEntryKey(playerId: string): string { + return `matchmaking:entry:${playerId}`; + } + + async joinQueue(entry: QueueEntry): Promise { + const queueKey = this.getQueueKey( + entry.variant, + entry.timeControlClassification, + entry.timeControl, + ); + const entryKey = this.getEntryKey(entry.playerId); + + await this.redis.setex(entryKey, 300, JSON.stringify(entry)); + + await this.redis.zadd(queueKey, entry.rating, entry.playerId); + await this.redis.expire(queueKey, 300); + } + + async leaveQueue(playerId: string): Promise { + const entryKey = this.getEntryKey(playerId); + const entryData = await this.redis.get(entryKey); + + if (entryData) { + const entry: QueueEntry = JSON.parse(entryData); + const queueKey = this.getQueueKey( + entry.variant, + entry.timeControlClassification, + entry.timeControl, + ); + + await this.redis.zrem(queueKey, playerId); + await this.redis.del(entryKey); + + return true; + } else { + return false; + } + } + + async findMatch( + playerId: string, + ratingRange: number = 200, + ): Promise> { + const entryKey = this.getEntryKey(playerId); + const entryData = await this.redis.get(entryKey); + + if (!entryData) { + return undefined; + } + + const playerEntry: QueueEntry = JSON.parse(entryData); + const queueKey = this.getQueueKey( + playerEntry.variant, + playerEntry.timeControlClassification, + playerEntry.timeControl, + ); + + const minRating = playerEntry.rating - ratingRange; + const maxRating = playerEntry.rating + ratingRange; + + const candidateIds = await this.redis.zrangebyscore( + queueKey, + minRating, + maxRating, + ); + + // Find first candidate that isn't the player themselves + for (const candidateId of candidateIds) { + if (candidateId === playerId) { + continue; + } + + const candidateKey = this.getEntryKey(candidateId); + const candidateData = await this.redis.get(candidateKey); + + if (!candidateData) { + // Clean up stale entry + await this.redis.zrem(queueKey, candidateId); + continue; + } + + const candidate: QueueEntry = JSON.parse(candidateData); + + return candidate; + } + + return undefined; + } + + async getQueueEntry(playerId: string): Promise> { + const entryKey = this.getEntryKey(playerId); + const entryData = await this.redis.get(entryKey); + + if (!entryData) { + return undefined; + } + + return JSON.parse(entryData); + } + + async getAllPlayerIds(): Promise { + const keys = await this.redis.keys('matchmaking:entry:*'); + return keys.map((key) => key.replace('matchmaking:entry:', '')); + } +} diff --git a/libs/infra-db/src/lib/repository/QueueEntry.ts b/libs/infra-db/src/lib/repository/QueueEntry.ts new file mode 100644 index 00000000..fcbb2aca --- /dev/null +++ b/libs/infra-db/src/lib/repository/QueueEntry.ts @@ -0,0 +1,14 @@ +import { TimeControlClassification } from '@michess/core-game'; + +export type QueueEntry = { + playerId: string; + playerName: string; + rating: number; + variant: 'standard'; + timeControlClassification: TimeControlClassification; + timeControl?: { + initialSec: number; + incrementSec: number; + }; + joinedAt: number; +}; diff --git a/libs/infra-db/src/lib/repository/UserRepository.ts b/libs/infra-db/src/lib/repository/UserRepository.ts index ca3e2e42..4084adc9 100644 --- a/libs/infra-db/src/lib/repository/UserRepository.ts +++ b/libs/infra-db/src/lib/repository/UserRepository.ts @@ -29,4 +29,10 @@ export class UserRepository extends BaseRepository { async deleteUser(id: string): Promise { await this.db.delete(users).where(eq(this.schema.users.id, id)); } + + async listBots(): Promise { + return this.db.query.users.findMany({ + where: eq(this.schema.users.role, 'bot'), + }); + } } diff --git a/libs/infra-db/src/lib/schema/users.ts b/libs/infra-db/src/lib/schema/users.ts index 71d6d0a1..45948b57 100644 --- a/libs/infra-db/src/lib/schema/users.ts +++ b/libs/infra-db/src/lib/schema/users.ts @@ -12,4 +12,8 @@ export const users = pgTable('users', { isAnonymous: boolean('is_anonymous'), username: text('username').unique(), displayUsername: text('display_username'), + role: text('role'), + banned: boolean('banned').default(false), + banReason: text('ban_reason'), + banExpires: timestamp('ban_expires'), }); diff --git a/libs/react-chessboard/src/lib/Chessboard.tsx b/libs/react-chessboard/src/lib/Chessboard.tsx index 3971a6e6..9889fb6f 100644 --- a/libs/react-chessboard/src/lib/Chessboard.tsx +++ b/libs/react-chessboard/src/lib/Chessboard.tsx @@ -1,5 +1,4 @@ -import { Color } from '@michess/core-board'; -import { Chessboard as ChessboardModel } from '@michess/core-game'; +import { Chessboard as ChessboardModel, Color } from '@michess/core-board'; import { ChessboardView } from './ChessboardView'; import { ChessboardContextProvider } from './context/ChessboardContextProvider'; import { useResponsiveBoardSize } from './hooks/useResponsiveBoardSize'; diff --git a/libs/react-chessboard/src/lib/context/ChessboardContext.ts b/libs/react-chessboard/src/lib/context/ChessboardContext.ts index a52a78c8..17cb96c6 100644 --- a/libs/react-chessboard/src/lib/context/ChessboardContext.ts +++ b/libs/react-chessboard/src/lib/context/ChessboardContext.ts @@ -1,5 +1,4 @@ -import { Coordinate } from '@michess/core-board'; -import { Chessboard } from '@michess/core-game'; +import { Chessboard, Coordinate } from '@michess/core-board'; import React from 'react'; import { GameResultType } from '../model/GameResultType'; import { Square } from '../model/Square'; diff --git a/libs/react-chessboard/src/lib/context/ChessboardContextProvider.tsx b/libs/react-chessboard/src/lib/context/ChessboardContextProvider.tsx index 6c584e67..c207c66e 100644 --- a/libs/react-chessboard/src/lib/context/ChessboardContextProvider.tsx +++ b/libs/react-chessboard/src/lib/context/ChessboardContextProvider.tsx @@ -1,11 +1,11 @@ import { BoardCoordinates, + Chessboard, Color, Coordinate, FenParser, MoveOption, } from '@michess/core-board'; -import { Chessboard } from '@michess/core-game'; import { ReactNode, useCallback, diff --git a/migrations.json b/migrations.json new file mode 100644 index 00000000..d9fac3af --- /dev/null +++ b/migrations.json @@ -0,0 +1,19 @@ +{ + "migrations": [ + { + "cli": "nx", + "version": "22.1.0-beta.5", + "description": "Updates the nx wrapper.", + "implementation": "./src/migrations/update-22-1-0/update-nx-wrapper", + "package": "nx", + "name": "22-1-0-update-nx-wrapper" + }, + { + "version": "22.1.0-rc.1", + "description": "Removes redundant TypeScript project references from project's tsconfig.json files when runtime tsconfig files (e.g., tsconfig.lib.json, tsconfig.app.json) exist.", + "factory": "./src/migrations/update-22-1-0/remove-redundant-ts-project-references", + "package": "@nx/js", + "name": "remove-redundant-ts-project-references" + } + ] +} diff --git a/nx.json b/nx.json index 8003aeac..6616e06b 100644 --- a/nx.json +++ b/nx.json @@ -62,7 +62,7 @@ "dependsOn": ["^build"], "inputs": ["production", "^production"] }, - "@nx/vite:test": { + "@nx/vitest:test": { "cache": true, "inputs": ["default", "^production"] }, diff --git a/package.json b/package.json index 778e44b7..507aa5ef 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,13 @@ "test": "nx test", "test:all": "nx run-many --target=test --all", "test:all:coverage": "nx run-many --target=test --all --coverage", + "coverage:merge": "tsx tools/merge-coverage.ts", "typecheck": "pnpm run typecheck:web && pnpm run typecheck:node", "typecheck:web": "tsc --build apps/web-chess --noEmit", "typecheck:node": "tsc --build apps/node-chess --noEmit", "perft": "tsx --tsconfig tools/tsconfig.tools.json tools/perft.ts", "perft:debug": "tsx --inspect-brk --tsconfig tools/tsconfig.tools.json tools/perft.ts", - "better-auth:generate": "pnpx @better-auth/cli generate --config=libs/infra-db/src/auth.config.ts --output=libs/infra-db/src/lib/schema/auth.ts", + "better-auth:generate": "dotenv -e ./apps/node-chess/.env -c -- pnpx @better-auth/cli generate --config=libs/infra-db/src/auth.config.ts --output=libs/infra-db/src/lib/schema/auth.ts", "drizzle-studio": "dotenv -e ./apps/node-chess/.env -c -- drizzle-kit studio --config=libs/infra-db/drizzle.config.ts", "migration:generate": "drizzle-kit generate --config=libs/infra-db/drizzle.config.ts", "migration:run": "dotenv -e ./apps/node-chess/.env -c -- drizzle-kit migrate --config=libs/infra-db/drizzle.config.ts", @@ -28,43 +29,41 @@ "onlyBuiltDependencies": [ "nx" ], - "patchedDependencies": { - "vitest@3.2.4": "patches/vitest@3.2.4.patch" - }, "overrides": { "react": "19.1.0", "react-dom": "19.1.0" } }, "dependencies": { - "@aws-sdk/client-sesv2": "^3.911.0", - "@grafana/faro-web-sdk": "^1.19.0", - "@grafana/faro-web-tracing": "^1.19.0", - "@hono/node-server": "^1.19.5", + "@aws-sdk/client-sesv2": "^3.929.0", + "@google/genai": "^1.30.0", + "@grafana/faro-web-sdk": "^2.0.2", + "@grafana/faro-web-tracing": "^2.0.2", + "@hono/node-server": "^1.19.6", "@hono/zod-validator": "^0.7.4", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/auto-instrumentations-node": "^0.65.0", + "@opentelemetry/auto-instrumentations-node": "^0.67.0", "@radix-ui/themes": "^3.2.1", - "@react-email/components": "0.5.6", + "@react-email/components": "1.0.0", "@socket.io/redis-streams-adapter": "^0.2.2", - "@tanstack/react-query": "^5.90.2", + "@tanstack/react-query": "^5.90.7", "@tanstack/react-router": "^1.132.47", "better-auth": "1.3.27", - "bullmq": "^5.61.0", + "bullmq": "^5.63.0", "core-js": "^3.46.0", "dotenv": "^17.2.3", "dotenv-cli": "^10.0.0", - "drizzle-orm": "^0.44.6", - "hono": "^4.9.12", + "drizzle-orm": "^0.44.7", + "hono": "^4.10.5", "hono-pino": "^0.10.3", "ioredis": "^5.8.1", - "ky": "^1.12.0", - "lucide-react": "^0.545.0", - "nodemailer": "^7.0.9", + "ky": "^1.14.0", + "lucide-react": "^0.553.0", + "nodemailer": "^7.0.10", "pino": "^9.13.1", "postgres": "^3.4.7", - "react": "19.1.0", - "react-dom": "19.1.0", + "react": "19.2.0", + "react-dom": "19.2.0", "redis-semaphore": "^5.6.2", "socket.io": "^4.8.1", "zod": "^4.1.12", @@ -72,16 +71,17 @@ }, "devDependencies": { "@mswjs/socket.io-binding": "^0.2.0", - "@nx/esbuild": "21.6.4", - "@nx/eslint": "21.6.4", - "@nx/eslint-plugin": "21.6.4", - "@nx/jest": "21.6.4", - "@nx/js": "21.6.4", - "@nx/node": "21.6.4", - "@nx/react": "21.6.4", - "@nx/vite": "21.6.4", - "@nx/web": "21.6.4", - "@nx/workspace": "21.6.4", + "@nx/esbuild": "22.1.3", + "@nx/eslint": "22.1.3", + "@nx/eslint-plugin": "22.1.3", + "@nx/jest": "22.1.3", + "@nx/js": "22.1.3", + "@nx/node": "22.1.3", + "@nx/react": "22.1.3", + "@nx/vite": "22.1.3", + "@nx/vitest": "^22.1.3", + "@nx/web": "22.1.3", + "@nx/workspace": "22.1.3", "@swc-node/register": "~1.9.1", "@swc/core": "~1.5.7", "@swc/helpers": "~0.5.11", @@ -100,8 +100,8 @@ "@typescript-eslint/eslint-plugin": "8.46.1", "@typescript-eslint/parser": "8.46.1", "@vitejs/plugin-react": "^5.0.4", - "@vitest/coverage-v8": "^3.2.4", - "@vitest/ui": "^3.0.0", + "@vitest/coverage-v8": "^4.0.15", + "@vitest/ui": "^4.0.15", "babel-jest": "30.2.0", "commander": "^14.0.0", "cross-fetch": "^4.1.0", @@ -122,7 +122,8 @@ "jsdom": "~27.0.0", "jsonc-eslint-parser": "^2.1.0", "msw": "^2.11.5", - "nx": "21.6.4", + "nx": "22.1.3", + "nyc": "^17.1.0", "pino-pretty": "^13.1.1", "prettier": "3.6.2", "regenerator-runtime": "0.13.9", @@ -134,6 +135,6 @@ "typescript": "5.9.3", "typescript-plugin-css-modules": "^5.2.0", "vite": "^7.0.0", - "vitest": "^3.0.0" + "vitest": "^4.0.15" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0f84b03..80b37bbc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,48 +8,46 @@ overrides: react: 19.1.0 react-dom: 19.1.0 -patchedDependencies: - vitest@3.2.4: - hash: dde3c7a634692aefe0877c763192102a73d3451e6d12dae61df88fd1e6e9368e - path: patches/vitest@3.2.4.patch - importers: .: dependencies: '@aws-sdk/client-sesv2': - specifier: ^3.911.0 - version: 3.911.0 + specifier: ^3.929.0 + version: 3.929.0 + '@google/genai': + specifier: ^1.30.0 + version: 1.30.0 '@grafana/faro-web-sdk': - specifier: ^1.19.0 - version: 1.19.0 + specifier: ^2.0.2 + version: 2.0.2 '@grafana/faro-web-tracing': - specifier: ^1.19.0 - version: 1.19.0 + specifier: ^2.0.2 + version: 2.0.2 '@hono/node-server': - specifier: ^1.19.5 - version: 1.19.5(hono@4.9.12) + specifier: ^1.19.6 + version: 1.19.6(hono@4.10.5) '@hono/zod-validator': specifier: ^0.7.4 - version: 0.7.4(hono@4.9.12)(zod@4.1.12) + version: 0.7.4(hono@4.10.5)(zod@4.1.12) '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 '@opentelemetry/auto-instrumentations-node': - specifier: ^0.65.0 - version: 0.65.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) + specifier: ^0.67.0 + version: 0.67.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13) '@radix-ui/themes': specifier: ^3.2.1 version: 3.2.1(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-email/components': - specifier: 0.5.6 - version: 0.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: 1.0.0 + version: 1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@socket.io/redis-streams-adapter': specifier: ^0.2.2 version: 0.2.2(socket.io-adapter@2.5.5) '@tanstack/react-query': - specifier: ^5.90.2 - version: 5.90.2(react@19.1.0) + specifier: ^5.90.7 + version: 5.90.7(react@19.1.0) '@tanstack/react-router': specifier: ^1.132.47 version: 1.132.47(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -57,8 +55,8 @@ importers: specifier: 1.3.27 version: 1.3.27(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.9) bullmq: - specifier: ^5.61.0 - version: 5.61.0 + specifier: ^5.63.0 + version: 5.63.0 core-js: specifier: ^3.46.0 version: 3.46.0 @@ -69,26 +67,26 @@ importers: specifier: ^10.0.0 version: 10.0.0 drizzle-orm: - specifier: ^0.44.6 - version: 0.44.6(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.5)(postgres@3.4.7) + specifier: ^0.44.7 + version: 0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(kysely@0.28.5)(postgres@3.4.7) hono: - specifier: ^4.9.12 - version: 4.9.12 + specifier: ^4.10.5 + version: 4.10.5 hono-pino: specifier: ^0.10.3 - version: 0.10.3(hono@4.9.12)(pino@9.13.1) + version: 0.10.3(hono@4.10.5)(pino@9.13.1) ioredis: specifier: ^5.8.1 version: 5.8.1 ky: - specifier: ^1.12.0 - version: 1.12.0 + specifier: ^1.14.0 + version: 1.14.0 lucide-react: - specifier: ^0.545.0 - version: 0.545.0(react@19.1.0) + specifier: ^0.553.0 + version: 0.553.0(react@19.1.0) nodemailer: - specifier: ^7.0.9 - version: 7.0.9 + specifier: ^7.0.10 + version: 7.0.10 pino: specifier: ^9.13.1 version: 9.13.1 @@ -118,35 +116,38 @@ importers: specifier: ^0.2.0 version: 0.2.0(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3)) '@nx/esbuild': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/eslint': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/eslint-plugin': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.4.2))(typescript@5.9.3))(eslint-config-prettier@10.1.5(eslint@9.37.0(jiti@2.4.2)))(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.4.2))(typescript@5.9.3))(eslint-config-prettier@10.1.5(eslint@9.37.0(jiti@2.4.2)))(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3) '@nx/jest': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) '@nx/js': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/node': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) '@nx/react': - specifier: 21.6.4 - version: 21.6.4(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) + specifier: 22.1.3 + version: 22.1.3(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) '@nx/vite': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@3.2.4) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15) + '@nx/vitest': + specifier: ^22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15) '@nx/web': - specifier: 21.6.4 - version: 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + specifier: 22.1.3 + version: 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@nx/workspace': - specifier: 21.6.4 - version: 21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) + specifier: 22.1.3 + version: 22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) '@swc-node/register': specifier: ~1.9.1 version: 1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3) @@ -158,7 +159,7 @@ importers: version: 0.5.17 '@tanstack/react-query-devtools': specifier: ^5.87.4 - version: 5.87.4(@tanstack/react-query@5.90.2(react@19.1.0))(react@19.1.0) + version: 5.87.4(@tanstack/react-query@5.90.7(react@19.1.0))(react@19.1.0) '@tanstack/react-router-devtools': specifier: ^1.131.42 version: 1.131.42(@tanstack/react-router@1.132.47(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.132.47)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.9)(tiny-invariant@1.3.3) @@ -202,11 +203,11 @@ importers: specifier: ^5.0.4 version: 5.0.4(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0)) '@vitest/coverage-v8': - specifier: ^3.2.4 - version: 3.2.4(vitest@3.2.4) + specifier: ^4.0.15 + version: 4.0.15(vitest@4.0.15) '@vitest/ui': - specifier: ^3.0.0 - version: 3.2.4(vitest@3.2.4) + specifier: ^4.0.15 + version: 4.0.15(vitest@4.0.15) babel-jest: specifier: 30.2.0 version: 30.2.0(@babel/core@7.28.4) @@ -268,8 +269,11 @@ importers: specifier: ^2.11.5 version: 2.11.5(@types/node@24.3.0)(typescript@5.9.3) nx: - specifier: 21.6.4 - version: 21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) + specifier: 22.1.3 + version: 22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) + nyc: + specifier: ^17.1.0 + version: 17.1.0 pino-pretty: specifier: ^13.1.1 version: 13.1.1 @@ -304,8 +308,8 @@ importers: specifier: ^7.0.0 version: 7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) vitest: - specifier: ^3.0.0 - version: 3.2.4(patch_hash=dde3c7a634692aefe0877c763192102a73d3451e6d12dae61df88fd1e6e9368e)(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) + specifier: ^4.0.15 + version: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.3.0)(@vitest/ui@4.0.15)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) packages: @@ -315,10 +319,6 @@ packages: '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -344,103 +344,103 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-sesv2@3.911.0': - resolution: {integrity: sha512-5KY/6Wj/F6ZmzZaXWJHbPrR/JsVDMrC1oTFWDbKAGfMf6jYuRrLNc8NqzbuXMd4eRsvxhMFt+Mydgjl/bENSAw==} + '@aws-sdk/client-sesv2@3.929.0': + resolution: {integrity: sha512-nhYy7ePUDti0u9SfFoWIsRD6z+5WLmg7CBhauljALOT605WHeZEgZAYjsSXtn1heXqiuKybmQSi/FNoC37MrDA==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.911.0': - resolution: {integrity: sha512-N9QAeMvN3D1ZyKXkQp4aUgC4wUMuA5E1HuVCkajc0bq1pnH4PIke36YlrDGGREqPlyLFrXCkws2gbL5p23vtlg==} + '@aws-sdk/client-sso@3.929.0': + resolution: {integrity: sha512-CE1T7PvN2MDRCw96BTUz2Zcnb6Lae3Dl4w3TPB5auBv2sAiIPbQegFUwT2C8teMDGCNXyndzoTvAd4wmO9AcpA==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.911.0': - resolution: {integrity: sha512-k4QG9A+UCq/qlDJFmjozo6R0eXXfe++/KnCDMmajehIE9kh+b/5DqlGvAmbl9w4e92LOtrY6/DN3mIX1xs4sXw==} + '@aws-sdk/core@3.928.0': + resolution: {integrity: sha512-e28J2uKjy2uub4u41dNnmzAu0AN3FGB+LRcLN2Qnwl9Oq3kIcByl5sM8ZD+vWpNG+SFUrUasBCq8cMnHxwXZ4w==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.911.0': - resolution: {integrity: sha512-6FWRwWn3LUZzLhqBXB+TPMW2ijCWUqGICSw8bVakEdODrvbiv1RT/MVUayzFwz/ek6e6NKZn6DbSWzx07N9Hjw==} + '@aws-sdk/credential-provider-env@3.928.0': + resolution: {integrity: sha512-tB8F9Ti0/NFyFVQX8UQtgRik88evtHpyT6WfXOB4bAY6lEnEHA0ubJZmk9y+aUeoE+OsGLx70dC3JUsiiCPJkQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.911.0': - resolution: {integrity: sha512-xUlwKmIUW2fWP/eM3nF5u4CyLtOtyohlhGJ5jdsJokr3MrQ7w0tDITO43C9IhCn+28D5UbaiWnKw5ntkw7aVfA==} + '@aws-sdk/credential-provider-http@3.928.0': + resolution: {integrity: sha512-67ynC/8UW9Y8Gn1ZZtC3OgcQDGWrJelHmkbgpmmxYUrzVhp+NINtz3wiTzrrBFhPH/8Uy6BxvhMfXhn0ptcMEQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.911.0': - resolution: {integrity: sha512-bQ86kWAZ0Imn7uWl7uqOYZ2aqlkftPmEc8cQh+QyhmUXbia8II4oYKq/tMek6j3M5UOMCiJVxzJoxemJZA6/sw==} + '@aws-sdk/credential-provider-ini@3.929.0': + resolution: {integrity: sha512-XIzWsJUYeS/DjggHFB53sGGjXdlN/BA6x+Y/JvLbpdkGD2yLISU34/cDPbK/O8BAQCRTCQ69VPa/1AdNgZZRQw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.911.0': - resolution: {integrity: sha512-4oGpLwgQCKNtVoJROztJ4v7lZLhCqcUMX6pe/DQ2aU0TktZX7EczMCIEGjVo5b7yHwSNWt2zW0tDdgVUTsMHPw==} + '@aws-sdk/credential-provider-node@3.929.0': + resolution: {integrity: sha512-GhNZEacpa7fh8GNggshm5S93UK25bCV5aDK8c2vfe7Y3OxBiL89Ox5GUKCu0xIOqiBdfYkI9wvWCFsQRRn7Bjw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.911.0': - resolution: {integrity: sha512-mKshhV5jRQffZjbK9x7bs+uC2IsYKfpzYaBamFsEov3xtARCpOiKaIlM8gYKFEbHT2M+1R3rYYlhhl9ndVWS2g==} + '@aws-sdk/credential-provider-process@3.928.0': + resolution: {integrity: sha512-XL0juran8yhqwn0mreV+NJeHJOkcRBaExsvVn9fXWW37A4gLh4esSJxM2KbSNh0t+/Bk3ehBI5sL9xad+yRDuw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.911.0': - resolution: {integrity: sha512-JAxd4uWe0Zc9tk6+N0cVxe9XtJVcOx6Ms0k933ZU9QbuRMH6xti/wnZxp/IvGIWIDzf5fhqiGyw5MSyDeI5b1w==} + '@aws-sdk/credential-provider-sso@3.929.0': + resolution: {integrity: sha512-aADe6cLo4+9MUOe0GnC5kUn8IduEKnTxqBlsciZOplU0/0+Rdp9rRh/e9ZBskeIXZ33eO2HG+KDAf1lvtPT7dA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.911.0': - resolution: {integrity: sha512-urIbXWWG+cm54RwwTFQuRwPH0WPsMFSDF2/H9qO2J2fKoHRURuyblFCyYG3aVKZGvFBhOizJYexf5+5w3CJKBw==} + '@aws-sdk/credential-provider-web-identity@3.929.0': + resolution: {integrity: sha512-L18JtW28xUZVTRHblgqZ8QTVGQfxpMLIuVYgQXrVWiY9Iz9EF4XrfZo3ywCAgqfgLi5pgg3fCxx/pe7uiMOs2w==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.910.0': - resolution: {integrity: sha512-F9Lqeu80/aTM6S/izZ8RtwSmjfhWjIuxX61LX+/9mxJyEkgaECRxv0chsLQsLHJumkGnXRy/eIyMLBhcTPF5vg==} + '@aws-sdk/middleware-host-header@3.922.0': + resolution: {integrity: sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.910.0': - resolution: {integrity: sha512-3LJyyfs1USvRuRDla1pGlzGRtXJBXD1zC9F+eE9Iz/V5nkmhyv52A017CvKWmYoR0DM9dzjLyPOI0BSSppEaTw==} + '@aws-sdk/middleware-logger@3.922.0': + resolution: {integrity: sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.910.0': - resolution: {integrity: sha512-m/oLz0EoCy+WoIVBnXRXJ4AtGpdl0kPE7U+VH9TsuUzHgxY1Re/176Q1HWLBRVlz4gr++lNsgsMWEC+VnAwMpw==} + '@aws-sdk/middleware-recursion-detection@3.922.0': + resolution: {integrity: sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.911.0': - resolution: {integrity: sha512-P0mIIW/QkAGNvFu15Jqa5NSmHeQvZkkQY8nbQpCT3tGObZe4wRsq5u1mOS+CJp4DIBbRZuHeX7ohbX5kPMi4dg==} + '@aws-sdk/middleware-sdk-s3@3.928.0': + resolution: {integrity: sha512-LTkjS6cpJ2PEtsottTKq7JxZV0oH+QJ12P/dGNPZL4URayjEMBVR/dp4zh835X/FPXzijga3sdotlIKzuFy9FA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.911.0': - resolution: {integrity: sha512-rY3LvGvgY/UI0nmt5f4DRzjEh8135A2TeHcva1bgOmVfOI4vkkGfA20sNRqerOkSO6hPbkxJapO50UJHFzmmyA==} + '@aws-sdk/middleware-user-agent@3.928.0': + resolution: {integrity: sha512-ESvcfLx5PtpdUM3ptCwb80toBTd3y5I4w5jaeOPHihiZr7jkRLE/nsaCKzlqscPs6UQ8xI0maav04JUiTskcHw==} engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.911.0': - resolution: {integrity: sha512-lp/sXbdX/S0EYaMYPVKga0omjIUbNNdFi9IJITgKZkLC6CzspihIoHd5GIdl4esMJevtTQQfkVncXTFkf/a4YA==} + '@aws-sdk/nested-clients@3.929.0': + resolution: {integrity: sha512-emR4LTSupxPed1ni0zVxz5msezz/gA1YYXooiW567+NyhvLgSzDvNjK7GPU1waLCj1LrRFe7NkXX1pwa5sPrpw==} engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.910.0': - resolution: {integrity: sha512-gzQAkuHI3xyG6toYnH/pju+kc190XmvnB7X84vtN57GjgdQJICt9So/BD0U6h+eSfk9VBnafkVrAzBzWMEFZVw==} + '@aws-sdk/region-config-resolver@3.925.0': + resolution: {integrity: sha512-FOthcdF9oDb1pfQBRCfWPZhJZT5wqpvdAS5aJzB1WDZ+6EuaAhLzLH/fW1slDunIqq1PSQGG3uSnVglVVOvPHQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.911.0': - resolution: {integrity: sha512-SJ4dUcY9+HPDIMCHiskT8F7JrRVZF2Y1NUN0Yiy6VUHSULgq2MDlIzSQpNICnmXhk1F1E1B2jJG9XtPYrvtqUg==} + '@aws-sdk/signature-v4-multi-region@3.928.0': + resolution: {integrity: sha512-1+Ic8+MyqQy+OE6QDoQKVCIcSZO+ETmLLLpVS5yu0fihBU85B5HHU7iaKX1qX7lEaGPMpSN/mbHW0VpyQ0Xqaw==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.911.0': - resolution: {integrity: sha512-O1c5F1pbEImgEe3Vr8j1gpWu69UXWj3nN3vvLGh77hcrG5dZ8I27tSP5RN4Labm8Dnji/6ia+vqSYpN8w6KN5A==} + '@aws-sdk/token-providers@3.929.0': + resolution: {integrity: sha512-78kph1R6TVJ53VXDKUmt64HMqWjTECLymJ7kLguz2QJiWh2ZdLvpyYGvaueEwwhisHYBh2qef1tGIf/PpEb8SQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/types@3.910.0': - resolution: {integrity: sha512-o67gL3vjf4nhfmuSUNNkit0d62QJEwwHLxucwVJkR/rw9mfUtAWsgBs8Tp16cdUbMgsyQtCQilL8RAJDoGtadQ==} + '@aws-sdk/types@3.922.0': + resolution: {integrity: sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w==} engines: {node: '>=18.0.0'} '@aws-sdk/util-arn-parser@3.893.0': resolution: {integrity: sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.910.0': - resolution: {integrity: sha512-6XgdNe42ibP8zCQgNGDWoOF53RfEKzpU/S7Z29FTTJ7hcZv0SytC0ZNQQZSx4rfBl036YWYwJRoJMlT4AA7q9A==} + '@aws-sdk/util-endpoints@3.922.0': + resolution: {integrity: sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ==} engines: {node: '>=18.0.0'} '@aws-sdk/util-locate-window@3.893.0': resolution: {integrity: sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-user-agent-browser@3.910.0': - resolution: {integrity: sha512-iOdrRdLZHrlINk9pezNZ82P/VxO/UmtmpaOAObUN+xplCUJu31WNM2EE/HccC8PQw6XlAudpdA6HDTGiW6yVGg==} + '@aws-sdk/util-user-agent-browser@3.922.0': + resolution: {integrity: sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA==} - '@aws-sdk/util-user-agent-node@3.911.0': - resolution: {integrity: sha512-3l+f6ooLF6Z6Lz0zGi7vSKSUYn/EePPizv88eZQpEAFunBHv+CSVNPtxhxHfkm7X9tTsV4QGZRIqo3taMLolmA==} + '@aws-sdk/util-user-agent-node@3.928.0': + resolution: {integrity: sha512-s0jP67nQLLWVWfBtqTkZUkSWK5e6OI+rs+wFya2h9VLyWBFir17XSDI891s8HZKIVCEl8eBrup+hhywm4nsIAA==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -448,12 +448,12 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.911.0': - resolution: {integrity: sha512-/yh3oe26bZfCVGrIMRM9Z4hvvGJD+qx5tOLlydOkuBkm72aXON7D9+MucjJXTAcI8tF2Yq+JHa0478eHQOhnLg==} + '@aws-sdk/xml-builder@3.921.0': + resolution: {integrity: sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q==} engines: {node: '>=18.0.0'} - '@aws/lambda-invoke-store@0.0.1': - resolution: {integrity: sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==} + '@aws/lambda-invoke-store@0.1.1': + resolution: {integrity: sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==} engines: {node: '>=18.0.0'} '@babel/code-frame@7.27.1': @@ -547,6 +547,10 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} @@ -564,6 +568,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} @@ -1108,6 +1117,10 @@ packages: resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1179,14 +1192,14 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.7.0': + resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.7.0': + resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -1669,14 +1682,23 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} - '@grafana/faro-core@1.19.0': - resolution: {integrity: sha512-Juo5G/aviSh3XqSGGr6D61noAC8sb+oCawBsv545ILEeOQdINyzRaoQdRpnXEY3DLS9LYtL0PYhvHZiP3rlscQ==} + '@google/genai@1.30.0': + resolution: {integrity: sha512-3MRcgczBFbUat1wIlZoLJ0vCCfXgm7Qxjh59cZi2X08RgWLtm9hKOspzp7TOg1TV2e26/MLxR2GR5yD5GmBV2w==} + engines: {node: '>=20.0.0'} + peerDependencies: + '@modelcontextprotocol/sdk': ^1.20.1 + peerDependenciesMeta: + '@modelcontextprotocol/sdk': + optional: true + + '@grafana/faro-core@2.0.2': + resolution: {integrity: sha512-dUcQBUDzvWmDbVDlYYEmVyjxZJjqC8syCuE/YWDJp/Zps9DkDH5CdF5kWuSb3cCm6U1iTo9czDkORPj0KEN9WQ==} - '@grafana/faro-web-sdk@1.19.0': - resolution: {integrity: sha512-3u74mV2uBWqoF6WBx71p0vtkaS1Z0QbGoZ8tuX5yiYnIybqnhKdGkApFUi7q5se0tMPIeJdMVoRFdLU8f9hfAw==} + '@grafana/faro-web-sdk@2.0.2': + resolution: {integrity: sha512-Tn5XUBfmEOXexFGRVmtR1JqyoUWU0luw1T27p9vwBCAg6X5yCVOf7N73ctIZ+WD7eS1DCLdAGT8ehx44WXgyeQ==} - '@grafana/faro-web-tracing@1.19.0': - resolution: {integrity: sha512-p37kQ/n8vU53ISCMvUn42upbGKqiRZI/QspHGx6kI7nDD5CJIl/2Byzg9vGDuw9BgMEOCIS8Oz6b5+U05kfKdQ==} + '@grafana/faro-web-tracing@2.0.2': + resolution: {integrity: sha512-jFKpXkAGI4SO1wlDQfZ6I0ZBeGq1VykT4TiGWFY7VnMnQZeiEUA/KfpJpEya+CdkDmd+c9hiBmSZDLzplu8dNA==} '@grpc/grpc-js@1.14.0': resolution: {integrity: sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==} @@ -1690,8 +1712,8 @@ packages: '@hexagon/base64@1.1.28': resolution: {integrity: sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==} - '@hono/node-server@1.19.5': - resolution: {integrity: sha512-iBuhh+uaaggeAuf+TftcjZyWh2GEgZcVGXkNtskLVoWaXhnJtC5HLHrU8W1KHDoucqO1MswwglmkWLFyiDn4WQ==} + '@hono/node-server@1.19.6': + resolution: {integrity: sha512-Shz/KjlIeAhfiuE93NDKVdZ7HdBVLQAfdbaXEaoAVO3ic9ibRSLGIQGkcBbFyuLr+7/1D5ZCINM8B+6IvXeMtw==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -1884,15 +1906,9 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} @@ -1911,22 +1927,22 @@ packages: '@modern-js/utils@2.68.2': resolution: {integrity: sha512-revom/i/EhKfI0STNLo/AUbv7gY0JY0Ni2gO6P/Z4cTyZZRgd5j90678YB2DGn+LtmSrEWtUphyDH5Jn1RKjgg==} - '@module-federation/bridge-react-webpack-plugin@0.18.0': - resolution: {integrity: sha512-xc9qMy+G1KIW+d8sylQehT/jxQtFtYpvvP+2nFJBlOuu7n5WzOUB/7bpgR3wCHyFa5IiczS8egsLMnjOm3EpFA==} + '@module-federation/bridge-react-webpack-plugin@0.21.4': + resolution: {integrity: sha512-aVxpy5dI5da2Qxw5YUDrXnzB68G3tUM3hogaImBjUvEsXFOxg7Pc5DBio2I/FJ45jXnoP3Gaswa0vLz6xWiyiA==} - '@module-federation/cli@0.18.0': - resolution: {integrity: sha512-5AX+Q1J4hJBboApdDza3N3cuduL7w3TtMR6FkLQJIkL64Dix7cB4qXuQHVL0MOmYGYR16d4iBesEStZVTihFJQ==} + '@module-federation/cli@0.21.4': + resolution: {integrity: sha512-WmNVpq9h6xFe5+NviLL8/n174nhS5pOVHs7JAW7e/0qpQ5qXXn4ZN57ewUNfd6+RR6WYuoP1Q3ZWkeK+/dv9gQ==} engines: {node: '>=16.0.0'} hasBin: true - '@module-federation/data-prefetch@0.18.0': - resolution: {integrity: sha512-+CaHs5NdbmwlmgXFcDOPq1B6viFo0IQtK6hqbotXdIV1jhY+g7/kbywM2gyNBEErifqG4VapaAj4Q7I0klv/gg==} + '@module-federation/data-prefetch@0.21.4': + resolution: {integrity: sha512-RKCacRLuh2kd9gtTkEqYlT0l2w9B0NDDthOVHCi+WlHWc5vXDxupZaEFFOAUimzARN8dPXok2iwlLLD2gs6AQw==} peerDependencies: react: 19.1.0 react-dom: 19.1.0 - '@module-federation/dts-plugin@0.18.0': - resolution: {integrity: sha512-L5fAq7QXYC12Ew7HXN3YwTcOa8UJF/rzqIvJjoX5r3xALOiRZI4u/kIH+kR887JCXocAzudmbq4lJ5nRduzvqA==} + '@module-federation/dts-plugin@0.21.4': + resolution: {integrity: sha512-dStZ+J90JByoa++p3TuB4xx3b+25tHb9EAsvBkv86ptXEM1QFYRljV/7fvrQrvvqgD6Jpmq1LESi5NvI5J9P+w==} peerDependencies: typescript: ^4.9.0 || ^5.0.0 vue-tsc: '>=1.0.24' @@ -1934,8 +1950,8 @@ packages: vue-tsc: optional: true - '@module-federation/enhanced@0.18.0': - resolution: {integrity: sha512-OG3MF558qvEwkW57hWP/u4aPE2kA1/GeEn/2TSLRB94l7NkPfErXua53PqfrGWSW6JAXtPSK8NJk3qwY77ELDQ==} + '@module-federation/enhanced@0.21.4': + resolution: {integrity: sha512-QX4nfL1E2dboPBCLIU/x1P87wa/fwj+AOLP7TPJ6CHwEahXoXbrnrux6Hjcf/6SfrN9RGZkEauYy2W/VvigJlw==} hasBin: true peerDependencies: typescript: ^4.9.0 || ^5.0.0 @@ -1949,25 +1965,25 @@ packages: webpack: optional: true - '@module-federation/error-codes@0.15.0': - resolution: {integrity: sha512-CFJSF+XKwTcy0PFZ2l/fSUpR4z247+Uwzp1sXVkdIfJ/ATsnqf0Q01f51qqSEA6MYdQi6FKos9FIcu3dCpQNdg==} + '@module-federation/error-codes@0.21.2': + resolution: {integrity: sha512-mGbPAAApgjmQUl4J7WAt20aV04a26TyS21GDEpOGXFEQG5FqmZnSJ6FqB8K19HgTKioBT1+fF/Ctl5bGGao/EA==} - '@module-federation/error-codes@0.18.0': - resolution: {integrity: sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==} + '@module-federation/error-codes@0.21.4': + resolution: {integrity: sha512-ClpL5MereWNXh+EgDjz7w4RrC1JlisQTvXDa1gLxpviHafzNDfdViVmuhi9xXVuj+EYo8KU70Y999KHhk9424Q==} - '@module-federation/inject-external-runtime-core-plugin@0.18.0': - resolution: {integrity: sha512-+2wvaHzDpWtS1y64KilE+WOXzCASg7regNpGLQYxRbVAZw7AZ5w1XwyQR3eJqlQtqshlyA/f8KLYMPLMnA3TSw==} + '@module-federation/inject-external-runtime-core-plugin@0.21.4': + resolution: {integrity: sha512-lOy+qPEA56AdkSIN2hO5zsKvnbplCJHUR5B6BKjo5+q752BrE3C1O0vAXYBRgmdQIBn+JAssdkbJKtfwl8oReQ==} peerDependencies: - '@module-federation/runtime-tools': 0.18.0 + '@module-federation/runtime-tools': 0.21.4 - '@module-federation/managers@0.18.0': - resolution: {integrity: sha512-iwhFNvJIW66+jZSOFst8X0aADtyNHxHX5gFScbFI3tkQnwGL4aXYV0UWzDf+x+emd+saqdMkgczU3LLA+SxybQ==} + '@module-federation/managers@0.21.4': + resolution: {integrity: sha512-z8KZJdT56lv73GKh0g7IO4CLxCtgV44qnTCn7GZ/R1cdR0JhdDvrqlYL8rrVGPw1y2BqudO0OxlRw0LjAGGj7g==} - '@module-federation/manifest@0.18.0': - resolution: {integrity: sha512-L1TFJmC2RKsYZWd5ejPsb/xM3shFQwt0Qwe2EG7BT5PKxpzCv8T8WqA7huH7EaQbYwaRObUZVgcHUOpkUdbIug==} + '@module-federation/manifest@0.21.4': + resolution: {integrity: sha512-sW6eYTpqeNjPszC2FMUyT21IaUkqueDPlmPffyV9XVUSjOZgNa5VbDiD3qyW86v/bHC0nhrQ0/TWKn8EPOszLQ==} - '@module-federation/node@2.7.11': - resolution: {integrity: sha512-yiXzTl0gFluQJlDe/MwJ/Z6EF9nTzfhmFldNO+u5YyZZD1tYpuYowjRKewsQETua87idtxPw1DlZ20gN3cMO2g==} + '@module-federation/node@2.7.23': + resolution: {integrity: sha512-2v9ks2caLDJl1wAqVeFLaxKK7oBT6jM1nHzJXsFqgTC0xN2GyRBUz+SHmcXIRcMW5FZKIBBzv8OZrte2/z5PWQ==} peerDependencies: next: '*' react: 19.1.0 @@ -1981,8 +1997,8 @@ packages: react-dom: optional: true - '@module-federation/rspack@0.18.0': - resolution: {integrity: sha512-YXJwgjlblSGdmnDMduf72LlVJYUuPx3sYdGTa0BWDf+fq+nEVfq6+k8Y+YbrqAx5qrGVytA4LnT1waP0+FtzeQ==} + '@module-federation/rspack@0.21.4': + resolution: {integrity: sha512-/FG6CjAg8M5EUwTMOMxceC+oLggHwYMGaTp7jCXhCXQJpnJ0C/OvcgKp0lif+ELIRxerAAldrFO06/4n9gLEIg==} peerDependencies: '@rspack/core': '>=0.7' typescript: ^4.9.0 || ^5.0.0 @@ -1993,38 +2009,38 @@ packages: vue-tsc: optional: true - '@module-federation/runtime-core@0.15.0': - resolution: {integrity: sha512-RYzI61fRDrhyhaEOXH3AgIGlHiot0wPFXu7F43cr+ZnTi+VlSYWLdlZ4NBuT9uV6JSmH54/c+tEZm5SXgKR2sQ==} + '@module-federation/runtime-core@0.21.2': + resolution: {integrity: sha512-LtDnccPxjR8Xqa3daRYr1cH/6vUzK3mQSzgvnfsUm1fXte5syX4ftWw3Eu55VdqNY3yREFRn77AXdu9PfPEZRw==} - '@module-federation/runtime-core@0.18.0': - resolution: {integrity: sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==} + '@module-federation/runtime-core@0.21.4': + resolution: {integrity: sha512-SGpmoOLGNxZofpTOk6Lxb2ewaoz5wMi93AFYuuJB04HTVcngEK+baNeUZ2D/xewrqNIJoMY6f5maUjVfIIBPUA==} - '@module-federation/runtime-tools@0.15.0': - resolution: {integrity: sha512-kzFn3ObUeBp5vaEtN1WMxhTYBuYEErxugu1RzFUERD21X3BZ+b4cWwdFJuBDlsmVjctIg/QSOoZoPXRKAO0foA==} + '@module-federation/runtime-tools@0.21.2': + resolution: {integrity: sha512-SgG9NWTYGNYcHSd5MepO3AXf6DNXriIo4sKKM4mu4RqfYhHyP+yNjnF/gvYJl52VD61g0nADmzLWzBqxOqk2tg==} - '@module-federation/runtime-tools@0.18.0': - resolution: {integrity: sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==} + '@module-federation/runtime-tools@0.21.4': + resolution: {integrity: sha512-RzFKaL0DIjSmkn76KZRfzfB6dD07cvID84950jlNQgdyoQFUGkqD80L6rIpVCJTY/R7LzR3aQjHnoqmq4JPo3w==} - '@module-federation/runtime@0.15.0': - resolution: {integrity: sha512-dTPsCNum9Bhu3yPOcrPYq0YnM9eCMMMNB1wuiqf1+sFbQlNApF0vfZxooqz3ln0/MpgE0jerVvFsLVGfqvC9Ug==} + '@module-federation/runtime@0.21.2': + resolution: {integrity: sha512-97jlOx4RAnAHMBTfgU5FBK6+V/pfT6GNX0YjSf8G+uJ3lFy74Y6kg/BevEkChTGw5waCLAkw/pw4LmntYcNN7g==} - '@module-federation/runtime@0.18.0': - resolution: {integrity: sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==} + '@module-federation/runtime@0.21.4': + resolution: {integrity: sha512-wgvGqryurVEvkicufJmTG0ZehynCeNLklv8kIk5BLIsWYSddZAE+xe4xov1kgH5fIJQAoQNkRauFFjVNlHoAkA==} - '@module-federation/sdk@0.15.0': - resolution: {integrity: sha512-PWiYbGcJrKUD6JZiEPihrXhV3bgXdll4bV7rU+opV7tHaun+Z0CdcawjZ82Xnpb8MCPGmqHwa1MPFeUs66zksw==} + '@module-federation/sdk@0.21.2': + resolution: {integrity: sha512-t2vHSJ1a9zjg7LLJoEghcytNLzeFCqOat5TbXTav5dgU0xXw82Cf0EfLrxiJL6uUpgbtyvUdqqa2DVAvMPjiiA==} - '@module-federation/sdk@0.18.0': - resolution: {integrity: sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==} + '@module-federation/sdk@0.21.4': + resolution: {integrity: sha512-tzvhOh/oAfX++6zCDDxuvioHY4Jurf8vcfoCbKFxusjmyKr32GPbwFDazUP+OPhYCc3dvaa9oWU6X/qpUBLfJw==} - '@module-federation/third-party-dts-extractor@0.18.0': - resolution: {integrity: sha512-Xw4CttEkxhSKnBny2TgQZAjUqFtjm1DFgFbiHOyH1XxfBGZlmDKaoK99MxHZRY9olEPtxMC9xCaK13KUE4KD+g==} + '@module-federation/third-party-dts-extractor@0.21.4': + resolution: {integrity: sha512-zKaKpABSbpZhKbTUGkN6VKqApa+PcawwXAv+L8co3vhErRna82svSIicgLy27n4QzAFJ09coB4WgnPQLjXdU+A==} - '@module-federation/webpack-bundler-runtime@0.15.0': - resolution: {integrity: sha512-i+3wu2Ljh2TmuUpsnjwZVupOVqV50jP0ndA8PSP4gwMKlgdGeaZ4VH5KkHAXGr2eiYUxYLMrJXz1+eILJqeGDg==} + '@module-federation/webpack-bundler-runtime@0.21.2': + resolution: {integrity: sha512-06R/NDY6Uh5RBIaBOFwYWzJCf1dIiQd/DFHToBVhejUT3ZFG7GzHEPIIsAGqMzne/JSmVsvjlXiJu7UthQ6rFA==} - '@module-federation/webpack-bundler-runtime@0.18.0': - resolution: {integrity: sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==} + '@module-federation/webpack-bundler-runtime@0.21.4': + resolution: {integrity: sha512-dusmR3uPnQh9u9ChQo3M+GLOuGFthfvnh7WitF/a1eoeTfRmXqnMFsXtZCUK+f/uXf+64874Zj/bhAgbBcVHZA==} '@msgpack/msgpack@2.8.0': resolution: {integrity: sha512-h9u4u/jiIRKbq25PM+zymTyW6bhTzELvOoUd+AvYriWOAKpLGnIamaET3pnHYoI5iYphAHBI4ayx0MehR+VVPQ==} @@ -2075,6 +2091,9 @@ packages: '@napi-rs/wasm-runtime@0.2.4': resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} + '@napi-rs/wasm-runtime@1.0.7': + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + '@noble/ciphers@2.0.1': resolution: {integrity: sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g==} engines: {node: '>= 20.19.0'} @@ -2095,24 +2114,24 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nx/devkit@21.6.4': - resolution: {integrity: sha512-uMvpnMDJTT3aW4Zp+Ig1YJzvHhjpgrkt2aPEKN7v7rM9TzcEmEWqyR8RZG7QlE4QAJe2uK2F6l1Z4n/5Bnonxw==} + '@nx/devkit@22.1.3': + resolution: {integrity: sha512-ACwmelqurupbuvvTUA+hWw978H2odLGvnYtlSut3qmw/TzS7bkptd4CmPpks6dGPTOSQbJGzbwLo9OEMs36BBA==} peerDependencies: - nx: '>= 20 <= 22' + nx: '>= 21 <= 23 || ^22.0.0-0' - '@nx/docker@21.6.4': - resolution: {integrity: sha512-O0NyqE3WLPGtX+mktTAyYrIADjiyIHTLhi/xiTtDjSxJrfQoszf0qc/4BkjkJouPRG71PnBzO/qHhwiuUznK0Q==} + '@nx/docker@22.1.3': + resolution: {integrity: sha512-2eJ9dTYEasmRhaSvPVrjf5fJBchK6u8EBXZ8zK3vB2rRDskTy510BnSWwdsYtWLa+liILqJXUH0Gw61rP078lw==} - '@nx/esbuild@21.6.4': - resolution: {integrity: sha512-0zsqVXza91y68IfdItSh458CI7KW/7CWajCicF2uemfsnuZnNS0huojvPYqtEsjwVjhXlrAFI5ibei11BgSkng==} + '@nx/esbuild@22.1.3': + resolution: {integrity: sha512-VuE+cy+CmHZQK1YGWksMai9d/gpibBHgSGPp6ZolI7VKef6tblLO+W5a4ZhYkFujwj30SajkxWB2mHSXdn08AQ==} peerDependencies: esbuild: '>=0.19.2 <1.0.0' peerDependenciesMeta: esbuild: optional: true - '@nx/eslint-plugin@21.6.4': - resolution: {integrity: sha512-OLl8T/+tBS7yhdno60nC3Mu8smIfQeQXb6DqtgLVip0Yk0jC4g3RiHsVOUrAz1FLDEy7wAkJl60mxK2qttVV0w==} + '@nx/eslint-plugin@22.1.3': + resolution: {integrity: sha512-iWgwBFb0O5tWJtPAkokoZFAo3OylVxAZ1r6da/LaGtvCu7baNe0v2JRwr3bBPouIba66LlPqzpvbVgT30U/NuQ==} peerDependencies: '@typescript-eslint/parser': ^6.13.2 || ^7.0.0 || ^8.0.0 eslint-config-prettier: ^10.0.0 @@ -2120,8 +2139,8 @@ packages: eslint-config-prettier: optional: true - '@nx/eslint@21.6.4': - resolution: {integrity: sha512-/8nfOmOVyWOyhmJKxJjpXZ+euMgTgRxa1X/jb6jHNjkA421vSuctp1i/OoS73eaClDsvu5qPELX00q2uJVoxJg==} + '@nx/eslint@22.1.3': + resolution: {integrity: sha512-CV+ienWkcc6tMU6BJLlDWNumxpOIuhI09cun00tYAfUeXe3p1TvYXZGn9//1YmSiuDFTHmvJNpGCGch6D0JkHg==} peerDependencies: '@zkochan/js-yaml': 0.0.7 eslint: ^8.0.0 || ^9.0.0 @@ -2129,90 +2148,101 @@ packages: '@zkochan/js-yaml': optional: true - '@nx/jest@21.6.4': - resolution: {integrity: sha512-ZKg1GMxXbhi1AfPJtO4HVjnfgJ+VYmYz5CH1OzllN+ws5Txjt/9/1EKySHDcNMMRgcq4z81mhMT5ILo+p4RriA==} + '@nx/jest@22.1.3': + resolution: {integrity: sha512-LK0zVFFh92gvTePKHqS9hy69r+zDYiopDAp5CHpo/PGrxFHXMEfquLUz5QEOXw3bTCjujVS3Nn+Cu3UV6iaT9w==} - '@nx/js@21.6.4': - resolution: {integrity: sha512-B1MeF/ICfK9tiUg7ylrOxaQuDjx76SKS9JKFOsoQcOIyUK5iVALGYOGdYdZ+2a3E9azWRlqJFRs8VQ1P+XQ9TQ==} + '@nx/js@22.1.3': + resolution: {integrity: sha512-6JGFV/gcU+zz9SiZmXkcwic/ez/rLP/VtmOHjG2XGkvip9wN1rLMAC/ho9HwkS4f15sASumciTAjDpf8VzQ1/g==} peerDependencies: verdaccio: ^6.0.5 peerDependenciesMeta: verdaccio: optional: true - '@nx/module-federation@21.6.4': - resolution: {integrity: sha512-wtc4lQw+4C8LuNXPOp9+7ZahYyZ7YBEFpLv77ki91YNHhZdp4vcRMB/dPaLLsaQ5CDTF6qn4MsbJpcAcVe+ogw==} + '@nx/module-federation@22.1.3': + resolution: {integrity: sha512-ALhQsD1dcWQCJ8XgfdM19FkvN8ZdT9ITlOR38AaD3z8ROf4WVS55dbXzq/2BJ5B0uc/iMRKvrmzLwx+DF+IUXQ==} - '@nx/node@21.6.4': - resolution: {integrity: sha512-6NjlglWeX0jtqyUWUl+T4CHR9C2ocEb6XmTujTm+KkDq/rYkfsLm4cHNS6v1rBoIFpf4OCLtPx9PccXU5h/o5w==} + '@nx/node@22.1.3': + resolution: {integrity: sha512-ian2fEovbSTe8cqt7oHWsSWOlXDj3p8jUuuuuP1jb+MbXCfI9eMZie1mrJLhQnlCXXaKnjP97Of1rLL2Ry3RDg==} - '@nx/nx-darwin-arm64@21.6.4': - resolution: {integrity: sha512-Ra24qHf55i9ogJ8wDymRzQL0kLK8uEXjntwKHD0stZtyiYO1tCKLgvxn5oOhiyn1sAk7aKT238s2y9zJ5bYPnQ==} + '@nx/nx-darwin-arm64@22.1.3': + resolution: {integrity: sha512-4D/jXGsr3jcQ0vBo8aXXZMdfmC3n4OsZ1zjFaOXlF62Ujug+RqI/IvKxycT9r7Lr09PmW2OqBC01NfIWKoBLhg==} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@21.6.4': - resolution: {integrity: sha512-4tzVVu+2arCpu7RGqdb4JR3fvKyTrHUn0fX33kMtds2TGvzERbfgBPzEzrqbLiflpYdxqCZX8l0yPRsvjuCojA==} + '@nx/nx-darwin-x64@22.1.3': + resolution: {integrity: sha512-XmdccOBp1Lx9DXUzYDX65mkFqFvXaxUKm1d63bfA43vxIYUpR59SASB81KRQ/Q4dgvvU27C0EJuxSJbXsSkSYw==} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@21.6.4': - resolution: {integrity: sha512-DqeQn//aHLdvqkd5uTpAm6/TGW54XBg3UEfvCD5LFLMXWVdToi6CbIFnRIhufdFLEboQH0Nm22fdJnGwAPV+Xw==} + '@nx/nx-freebsd-x64@22.1.3': + resolution: {integrity: sha512-O+o4mqPwhKxfdsri4KxDbXbjwIwr04GfTSfA0TwgXs6hFf68qmc45FAmPGrPSvxIJg9+mUVDeFirdS8GcUE0jQ==} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@21.6.4': - resolution: {integrity: sha512-6m82VzjrVVvwZtS5rFj0j7CcDrYaSkZ4yk0lf1NIvRqWjgnTnfaG58XQQxLo8wxH8mKiPDQzlDuer9HNNIxKCw==} + '@nx/nx-linux-arm-gnueabihf@22.1.3': + resolution: {integrity: sha512-ZIPDgzLq8qmvrZ3Bp+bWXam5uKwahjcChBNtORVtrHQfm4mxov2RMUMKTg2ZsVAWVP64zK+gmzG5LuoZjPMm4Q==} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@21.6.4': - resolution: {integrity: sha512-Ohlh3YdzbmWnXjlDZd6yw20mNMWvZ1CGW/iQ5suerfyJZGjO+ToPjw3Mp8HgBoesHaWPGi81GhjAEyiZmEAHug==} + '@nx/nx-linux-arm64-gnu@22.1.3': + resolution: {integrity: sha512-wgpPaTpQKl+cCkSuE5zamTVrg14mRvT+bLAeN/yHSUgMztvGxwl3Ll+K9DgEcktBo1PLECTWNkVaW8IAsJm4Rg==} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@21.6.4': - resolution: {integrity: sha512-OLvEpJYo7n8nHGaBSl7Fb+Oz68wmPfRP+i6voQbM8qV/g5No9vE/QtAdSTlyFXOCGwSekCGpc2Ef2KOvpmYUTg==} + '@nx/nx-linux-arm64-musl@22.1.3': + resolution: {integrity: sha512-o9XmQehSPR2y0RD4evD+Ob3lNFuwsFOL5upVJqZ3rcE6GkJIFPg8SwEP5FaRIS5MwS04fxnek20NZ18BHjjV/g==} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@21.6.4': - resolution: {integrity: sha512-TYC5a5VnXhEGGVAtPVwdG5qLzf9p7SZyOrOdQMZlAZCchFpL37gmV1OMH1Eb5eM32o+mGF/DDIgbyNXAErTN5g==} + '@nx/nx-linux-x64-gnu@22.1.3': + resolution: {integrity: sha512-ekcinyDNTa2huVe02T2SFMR8oArohozRbMGO19zftbObXXI4dLdoAuLNb3vK9Pe4vYOpkhfxBVkZvcWMmx7JdA==} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@21.6.4': - resolution: {integrity: sha512-2ZG3DUadDpP79oW5DIYMZPKFMCGSRbqLKeHlW8miYORbPJ6VinUp6wTVDx6cAoL2IhP9biD6dItc9Dcfn5Hj2g==} + '@nx/nx-linux-x64-musl@22.1.3': + resolution: {integrity: sha512-CqpRIJeIgELCqIgjtSsYnnLi6G0uqjbp/Pw9d7w4im4/NmJXqaE9gxpdHA1eowXLgAy9W1LkfzCPS8Q2IScPuQ==} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@21.6.4': - resolution: {integrity: sha512-o64p5hVavJhD+ISxCfwCKhKccgXalEnvfXfqXBV6yZiud6kDnYphPp2SPzyf9NgZyuFJdeFRvJ1XtuEzW3VcXg==} + '@nx/nx-win32-arm64-msvc@22.1.3': + resolution: {integrity: sha512-YbuWb8KQsAR9G0+7b4HA16GV962/VWtRcdS7WY2yaScmPT2W5rObl528Y2j4DuB0j/MVZj12qJKrYfUyjL+UJA==} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@21.6.4': - resolution: {integrity: sha512-g+YwOFd9sjTjf6LCaN8hq6plvNo4BfwmTurnKBzJ/Q/hCbxffYpo1Vdos+OfHBuMsJN2yIMX97LwB0d9w2I8Ag==} + '@nx/nx-win32-x64-msvc@22.1.3': + resolution: {integrity: sha512-G90Sp409ypeOUbmj6nmEbdy043KJUKaZ7pffxmM6i63yEe2F2WdmMgdi525vUEgmq+pfB9zQQOX1sDR/rPFvtg==} cpu: [x64] os: [win32] - '@nx/react@21.6.4': - resolution: {integrity: sha512-Yv6XK07/1MYTnS5LdVmDOVgvk+4A0Ewkaf+kO8gXN+8K2gGpcWkmPphFvTeLf5+E0f0/681AgJn5AMhXKMyr6w==} + '@nx/react@22.1.3': + resolution: {integrity: sha512-PsQYvp7wMW/nLQBo4KNabPI3w9732Ke+RNgZRTvXuNaExmA/15kXsV2DjOSIuuGQhhTYDuO8RhkuhwCzlnLOMA==} - '@nx/rollup@21.6.4': - resolution: {integrity: sha512-kR5k0NEHi9Q+FLDb8iYiZrZHPwKjLHYP3QN5rkfatdn2Wfhhde2MH1FVyXzwLifpU4j4Yn+DXWDd5ecMQCw89g==} + '@nx/rollup@22.1.3': + resolution: {integrity: sha512-u+/8MdTohAJdzLihinFLqtdOmbiMC/w/1mCezO16sREFTXzIwpGwY8/MSClJx+jyYxLnh8D6ZjM9QudMumUPcg==} + + '@nx/vite@22.1.3': + resolution: {integrity: sha512-Yf4Idl/E1gS1ZCM/WdN8S7W8UIvnjJqTI0URUBtSlUqiv9vVQg4uS//MLByMJ+gaytjrkHJZ4TkKWFVhwyfbeg==} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vitest: ^1.3.1 || ^2.0.0 || ^3.0.0 || ^4.0.0 - '@nx/vite@21.6.4': - resolution: {integrity: sha512-l/MPOUsVA8ptJobXH9a0Mq0uD4WYsQSGj+P15Gzbeg7OV+Ta3tFnbQFHfVpNfa3kTe4Qph4gCZCG9DdUnLkmiw==} + '@nx/vitest@22.1.3': + resolution: {integrity: sha512-mgntz7E9Nq/61C632RUX1auaYapttWQSCQ/pQbl1uiJdgpZijf+5StTslhijJeFT/PllRvK5qdr2WV9FguJTyw==} peerDependencies: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 - vitest: ^1.3.1 || ^2.0.0 || ^3.0.0 + vitest: ^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 + peerDependenciesMeta: + vite: + optional: true + vitest: + optional: true - '@nx/web@21.6.4': - resolution: {integrity: sha512-TWmZtRcTAYjh195uzCUT+8LjqD5wVrLrCwbpdDBdilTnfK4dcIrbWIIRsrfMMjbMPqMnr+QEsvNVHNPROwrnrg==} + '@nx/web@22.1.3': + resolution: {integrity: sha512-ilDioHQwuybZbc9Obvl8R7pJm6TWB3Lj2OXojKMN3Bv57Pbd4QTSgh6dcTgq5g1OE+1KcN1+sXLZQzrR2kXQsA==} - '@nx/workspace@21.6.4': - resolution: {integrity: sha512-zTpM9mRqdo05BzucBe7jRPCo64geDJP+WsX4/5vSynxpy9CBlbpCuBGzm3+P7/u0BgmpI+Yv2E3KOLoEcprRJg==} + '@nx/workspace@22.1.3': + resolution: {integrity: sha512-VthMD2e4JV8w6fysIHCa/6ZauHSJXT7m2lVIglvK14cJcSfUHuQMUB7KhluH7x7UIEwSOXToCh28YLhexIlr9A==} '@open-draft/deferred-promise@2.2.0': resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} @@ -2223,33 +2253,23 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opentelemetry/api-logs@0.202.0': - resolution: {integrity: sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api-logs@0.206.0': - resolution: {integrity: sha512-yIVDu9jX//nV5wSMLZLdHdb1SKHIMj9k+wQVFtln5Flcgdldz9BkHtavvExQiJqBZg2OpEEJEZmzQazYztdz2A==} + '@opentelemetry/api-logs@0.208.0': + resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==} engines: {node: '>=8.0.0'} '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/auto-instrumentations-node@0.65.0': - resolution: {integrity: sha512-+22R+WR1zDge4Y8AIFaBl/8q0sTWzPd913aT3VsqCxxcnf1R7O1TKClRmvTahyYFScDNGd8v94RBa1hJmKFBUg==} + '@opentelemetry/auto-instrumentations-node@0.67.0': + resolution: {integrity: sha512-dE0/otVr/2XpOCJ5T82rUww1hdniN0vQZmt7JxlGQTe6h3bvKWfFnkBgKASzXRUqD5VAtcC3W8YeOsLPJ3OspA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.4.1 '@opentelemetry/core': ^2.0.0 - '@opentelemetry/context-async-hooks@2.1.0': - resolution: {integrity: sha512-zOyetmZppnwTyPrt4S7jMfXiSX9yyfF0hxlA8B5oo2TtKl+/RGCy7fi4DrBfIf3lCPrkKsRBWZZD7RFojK7FDg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/core@2.0.1': - resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==} + '@opentelemetry/context-async-hooks@2.2.0': + resolution: {integrity: sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2260,380 +2280,368 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-logs-otlp-grpc@0.206.0': - resolution: {integrity: sha512-kJKxKBaGwqWop95d6tcluz260IWwIgOG0BH8oVm6429tg8LxY2PJb7Om8d5s+5vOFM8DkUYCnIpn9d/13/RcKQ==} + '@opentelemetry/core@2.2.0': + resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: - '@opentelemetry/api': ^1.3.0 + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/exporter-logs-otlp-http@0.206.0': - resolution: {integrity: sha512-VWcHEnS+1kN+sQTAdCgSn2anqHPxY1/e52fhpe2mcSnEaXI1srFf3RU5DAu7hzQO6T9DPQzOKG8kc76vCtyYDw==} + '@opentelemetry/exporter-logs-otlp-grpc@0.208.0': + resolution: {integrity: sha512-AmZDKFzbq/idME/yq68M155CJW1y056MNBekH9OZewiZKaqgwYN4VYfn3mXVPftYsfrCM2r4V6tS8H2LmfiDCg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-logs-otlp-proto@0.206.0': - resolution: {integrity: sha512-CsYNXJwkn1qCXJGE+/JvvYucAjL8rpaxa2hnl+tDP6M5E0O3UVa8zG4ZUEebjr5J5Nc32egvslEZx5rgNOp3lQ==} + '@opentelemetry/exporter-logs-otlp-http@0.208.0': + resolution: {integrity: sha512-jOv40Bs9jy9bZVLo/i8FwUiuCvbjWDI+ZW13wimJm4LjnlwJxGgB+N/VWOZUTpM+ah/awXeQqKdNlpLf2EjvYg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-grpc@0.206.0': - resolution: {integrity: sha512-/qGIwVa27BSGqzULB34O+UtEVl4isc+gEd2ydMfZVidWpdkJYbMeZZYBWi4z6giD0w0Dep5k/NIJ/lSEZoKEIg==} + '@opentelemetry/exporter-logs-otlp-proto@0.208.0': + resolution: {integrity: sha512-Wy8dZm16AOfM7yddEzSFzutHZDZ6HspKUODSUJVjyhnZFMBojWDjSNgduyCMlw6qaxJYz0dlb0OEcb4Eme+BfQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-http@0.206.0': - resolution: {integrity: sha512-u6ztHNbgNlFw3vCuOErGsiiEcDk9KB0pwd/Jv6aPnvV4oKJd/5K+lfiSjDpCFUh5UUFJdGmHtADxUgbRpYMPyA==} + '@opentelemetry/exporter-metrics-otlp-grpc@0.208.0': + resolution: {integrity: sha512-YbEnk7jjYmvhIwp2xJGkEvdgnayrA2QSr28R1LR1klDPvCxsoQPxE6TokDbQpoCEhD3+KmJVEXfb4EeEQxjymg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-metrics-otlp-proto@0.206.0': - resolution: {integrity: sha512-mLlmXmVOSwMw8Cm9RKz5ZuTUWW28lQWWIcy5cpEUhIrJ5cuSuTZ/PKIaa3+CHmcKkkF2pWFdBkzOIar9aApzoQ==} + '@opentelemetry/exporter-metrics-otlp-http@0.208.0': + resolution: {integrity: sha512-QZ3TrI90Y0i1ezWQdvreryjY0a5TK4J9gyDLIyhLBwV+EQUvyp5wR7TFPKCAexD4TDSWM0t3ulQDbYYjVtzTyA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-prometheus@0.206.0': - resolution: {integrity: sha512-sCzW+vE2KhlDZhH73f7drr+d0kvlsqG02t9xGtG40c6t4hjgpa5qEwEZTzFo9s4djtUrmDBjwJ5S3NYuCERVKg==} + '@opentelemetry/exporter-metrics-otlp-proto@0.208.0': + resolution: {integrity: sha512-CvvVD5kRDmRB/uSMalvEF6kiamY02pB46YAqclHtfjJccNZFxbkkXkMMmcJ7NgBFa5THmQBNVQ2AHyX29nRxOw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-grpc@0.206.0': - resolution: {integrity: sha512-/q8sU9wj20tT9m+529VXN9E9DzpvNui5Cict8onY/gRGeXqTav21xHkvmv0FSpetb/29WS89drVjfI8/Mf2iWQ==} + '@opentelemetry/exporter-prometheus@0.208.0': + resolution: {integrity: sha512-Rgws8GfIfq2iNWCD3G1dTD9xwYsCof1+tc5S5X0Ahdb5CrAPE+k5P70XCWHqrFFurVCcKaHLJ/6DjIBHWVfLiw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-http@0.202.0': - resolution: {integrity: sha512-/hKE8DaFCJuaQqE1IxpgkcjOolUIwgi3TgHElPVKGdGRBSmJMTmN/cr6vWa55pCJIXPyhKvcMrbrya7DZ3VmzA==} + '@opentelemetry/exporter-trace-otlp-grpc@0.208.0': + resolution: {integrity: sha512-E/eNdcqVUTAT7BC+e8VOw/krqb+5rjzYkztMZ/o+eyJl+iEY6PfczPXpwWuICwvsm0SIhBoh9hmYED5Vh5RwIw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-http@0.206.0': - resolution: {integrity: sha512-xiEhJZxE9yDb13FVW4XaF7J56boLv1NALOGEVu3F8jMC24iZmX5TSVRJCNGLWyy1Xb3N27Yu31kdSsmEBCnxyw==} + '@opentelemetry/exporter-trace-otlp-http@0.208.0': + resolution: {integrity: sha512-jbzDw1q+BkwKFq9yxhjAJ9rjKldbt5AgIy1gmEIJjEV/WRxQ3B6HcLVkwbjJ3RcMif86BDNKR846KJ0tY0aOJA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-trace-otlp-proto@0.206.0': - resolution: {integrity: sha512-A3lGp39qqZGt6PU/9X682/4KdkDMu+jO+slnNCdm8Zki3AKEFulY2yYtz4rL0rah/liN+ENRsFQWI/B3xJiZGw==} + '@opentelemetry/exporter-trace-otlp-proto@0.208.0': + resolution: {integrity: sha512-q844Jc3ApkZVdWYd5OAl+an3n1XXf3RWHa3Zgmnhw3HpsM3VluEKHckUUEqHPzbwDUx2lhPRVkqK7LsJ/CbDzA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/exporter-zipkin@2.1.0': - resolution: {integrity: sha512-0mEI0VDZrrX9t5RE1FhAyGz+jAGt96HSuXu73leswtY3L5YZD11gtcpARY2KAx/s6Z2+rj5Mhj566JsI2C7mfA==} + '@opentelemetry/exporter-zipkin@2.2.0': + resolution: {integrity: sha512-VV4QzhGCT7cWrGasBWxelBjqbNBbyHicWWS/66KoZoe9BzYwFB72SH2/kkc4uAviQlO8iwv2okIJy+/jqqEHTg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/instrumentation-amqplib@0.53.0': - resolution: {integrity: sha512-HNcdq0RePzpfBRXR5TqW72xVde8rKsJGgO0NQKa+RDg834Lg6F8RODE6q7I9aQSJ3x7yzLzlKrUcrf3aWyJ51A==} + '@opentelemetry/instrumentation-amqplib@0.55.0': + resolution: {integrity: sha512-5ULoU8p+tWcQw5PDYZn8rySptGSLZHNX/7srqo2TioPnAAcvTy6sQFQXsNPrAnyRRtYGMetXVyZUy5OaX1+IfA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-aws-lambda@0.58.0': - resolution: {integrity: sha512-AKQsZ6+Ok0tQyaUDA0iml/YKmCL9t/HhrEqEqq62QFxnK+bYTKaTZX93aD94djffdZmNQsBOUxV47vI2f04X0g==} + '@opentelemetry/instrumentation-aws-lambda@0.60.0': + resolution: {integrity: sha512-8S0kBnVy/GdYy0/dBhdZglIMhbv2OYiTcv2uPdAog2p+ndF+XpsR+J3fXnksYybE1SFV6TLkkEVJrWIU2E2zBg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-aws-sdk@0.62.0': - resolution: {integrity: sha512-tzU6uCKOhQyfQ33pvgKKB3ULm/cIATrfk5c61G8Z/lg+qTDVaL32RcpSI9kMJRLXm/Xb9rKtNGawkwsldLonjg==} + '@opentelemetry/instrumentation-aws-sdk@0.64.0': + resolution: {integrity: sha512-8+Y8IcUfME5jD03LISBcd9sFipgOon2uAoiLKSCroiGD6MPuwMzqlVvhlKSzq7uxwtZIhR6CTmjCpLsCHum59A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-bunyan@0.52.0': - resolution: {integrity: sha512-X3LdQZdeLw7hMrZ420RWKipPtjAWlHBpffflj4/FPkPBOlIfqXeBIj5LxgppRdCRqes1XNesml0RnvHm+dO4ZQ==} + '@opentelemetry/instrumentation-bunyan@0.54.0': + resolution: {integrity: sha512-DnPoHSLcKwQmueW+7OOaXFD/cj1M6hqwTm6P88QdMbln/dqEatLxzt/ACPk4Yb5x4aU3ZLyeLyKxtzfhp76+aw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-cassandra-driver@0.52.0': - resolution: {integrity: sha512-xFW3IrKgj8g1CT2EeYefrJFszPzyji1eqzFXJz7/FuVw+hxFGThvtSt/s/0Yc7nNk/4L0e043PasjkBV6EyP2w==} + '@opentelemetry/instrumentation-cassandra-driver@0.54.0': + resolution: {integrity: sha512-nOjBx4EZVMaAE3pfM1DBOwoxtskZyzLfsqVAmrrCyBgULyJ7pfF5T1S/08u4v/ba61vOihk32WclyYEKnWmx6A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-connect@0.50.0': - resolution: {integrity: sha512-7HnvSpMU3CKASVQOyqumqaoUAtfvZX4RPe/CM9yz0V2tdFQkQqsvZkRlpfn6nhTZZu2rEvgTPBXcxQj1j94DHA==} + '@opentelemetry/instrumentation-connect@0.52.0': + resolution: {integrity: sha512-GXPxfNB5szMbV3I9b7kNWSmQBoBzw7MT0ui6iU/p+NIzVx3a06Ri2cdQO7tG9EKb4aKSLmfX9Cw5cKxXqX6Ohg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-cucumber@0.22.0': - resolution: {integrity: sha512-0EMO1s3TA4g6pKeEf3UQOom1cRAxx0yQx7YYY6KjCuVFZDIAyvjDvRtOH8eDoF576SKO0AK5h1mHO9zPlL0dog==} + '@opentelemetry/instrumentation-cucumber@0.24.0': + resolution: {integrity: sha512-ICHrmax9PwU/Z+fehD0uIjM8W0cEvdToglV1+o76Mgw51HZBVp2Y3mkga1qMPIN5tPMoWUYoYtI4U85rea5HYg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/instrumentation-dataloader@0.24.0': - resolution: {integrity: sha512-MRknpMIZbfjglaTxPyBlnmUc8/tS9bXmhMRnV27iMnYglLUiB9TRuxttBCYvx1oB9H6L8aHEprFkbawm/AxGUw==} + '@opentelemetry/instrumentation-dataloader@0.26.0': + resolution: {integrity: sha512-P2BgnFfTOarZ5OKPmYfbXfDFjQ4P9WkQ1Jji7yH5/WwB6Wm/knynAoA1rxbjWcDlYupFkyT0M1j6XLzDzy0aCA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-dns@0.50.0': - resolution: {integrity: sha512-F8DyblCwDTmmF6gAq4UidwVd8lpkEsw9Mr601Gjrd5hNOPVMD6EXKgxn1i9FRWF165v7Xj75YWtfnd1tw1tX1w==} + '@opentelemetry/instrumentation-dns@0.52.0': + resolution: {integrity: sha512-XJvS8PkZec+X6HhOi1xldJydTpmIUAW14+1vyqwAK97LWKXlxmiWst8/fjZ709+CHgshz8i5V37yCHlr6o3pxw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-express@0.55.0': - resolution: {integrity: sha512-E4SSJJcEZv8OIE643gcuJt8gZzxNbUft/x4tZmF5r1zqIFkmzhCgpKpDrFtrUh/blRjiOdOWlT7E4tzU19fDEA==} + '@opentelemetry/instrumentation-express@0.57.0': + resolution: {integrity: sha512-HAdx/o58+8tSR5iW+ru4PHnEejyKrAy9fYFhlEI81o10nYxrGahnMAHWiSjhDC7UQSY3I4gjcPgSKQz4rm/asg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-fastify@0.51.0': - resolution: {integrity: sha512-siQ91pYvl2kN/jY1igu/wwPZ879yKbE7S/j4RIFDF4ePF2CtP34H+MvtGcL/QK+GxMRECtPhP+vaEBZsxMFGYA==} + '@opentelemetry/instrumentation-fastify@0.53.0': + resolution: {integrity: sha512-bNsoCpe/cmrLWH6T4FEkFx403mW40PWtpYCraadbncQVE9UOeQOYdI3+J5UbciiyR92d1MFVF9HLAv8zA/yXzA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-fetch@0.202.0': - resolution: {integrity: sha512-RlLgOJAKs9cQIRXPoLnS6YG8CeQt1gR+WJpzthQlqt4hdgNmfnyB7zZrg1yddECF0K2lPGBqF4s+IqjA4dy3JQ==} + '@opentelemetry/instrumentation-fetch@0.208.0': + resolution: {integrity: sha512-zgStoUfNF1xH9bCq539k1aeieKxPiAvBo5gKipQ9fIt+eJsFvqGcSzrrDX+OYgpIPW/IVNgWBoOw6zVmKwgNwQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-fs@0.26.0': - resolution: {integrity: sha512-040fNEfh+89lAot9Oma60x37Iynn0Kk/Rx8J7MWsQ26LP64O4KM+nUqsa0OSXORfaiAG24rPxcJ+6fWrnUzKjA==} + '@opentelemetry/instrumentation-fs@0.28.0': + resolution: {integrity: sha512-FFvg8fq53RRXVBRHZViP+EMxMR03tqzEGpuq55lHNbVPyFklSVfQBN50syPhK5UYYwaStx0eyCtHtbRreusc5g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-generic-pool@0.50.0': - resolution: {integrity: sha512-iP/yGU1WNKUQx7SBUIcPyWYYsofBI8XQaaxRD7PezEapDCgCayRWHNGLmQOklRFfPE1nIyaT53sF4cakfu/yyA==} + '@opentelemetry/instrumentation-generic-pool@0.52.0': + resolution: {integrity: sha512-ISkNcv5CM2IwvsMVL31Tl61/p2Zm2I2NAsYq5SSBgOsOndT0TjnptjufYVScCnD5ZLD1tpl4T3GEYULLYOdIdQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-graphql@0.54.0': - resolution: {integrity: sha512-8CLwzDJmRmaCurwLhz66aUd3e/N4LX0bRfmWEBZcHRFK9RZKftMsgyTQCLK1+gncISHF1ySQxg0slHz5udz7jA==} + '@opentelemetry/instrumentation-graphql@0.56.0': + resolution: {integrity: sha512-IPvNk8AFoVzTAM0Z399t34VDmGDgwT6rIqCUug8P9oAGerl2/PEIYMPOl/rerPGu+q8gSWdmbFSjgg7PDVRd3Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-grpc@0.206.0': - resolution: {integrity: sha512-fzydq6yk2tMm+mGKMvNkpqlcbWE7wGSihiHftqGR1Q0tRFvEXJZzOg51fsrV9O59fDujrAJxyFzs/1zYcqeMGg==} + '@opentelemetry/instrumentation-grpc@0.208.0': + resolution: {integrity: sha512-8hFEQRAiOyIWO6LYj7tUfdAgNCuQUdYjLYMItRYlOLGJhshGdGYD7aeNzt2H+HPMDEWnKWqldIHfLTqM7ep7gg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-hapi@0.53.0': - resolution: {integrity: sha512-3R0zH21TQ7A0c6gJIFQMdVgFQoZRY37AD1GlsWcCr/HFHVrfLcvJm39Y6GNFkSC7j7lR2okoF2sSqlivfTBEPA==} + '@opentelemetry/instrumentation-hapi@0.55.0': + resolution: {integrity: sha512-prqAkRf9e4eEpy4G3UcR32prKE8NLNlA90TdEU1UsghOTg0jUvs40Jz8LQWFEs5NbLbXHYGzB4CYVkCI8eWEVQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-http@0.206.0': - resolution: {integrity: sha512-U355U6PpRSj5NDLqI8uY2SPp4uapuGASSGFLPoQbrqphHQ6pJrHDFBTR72a+S5XvHJo1PlLS84k4IOl+tXYPsA==} + '@opentelemetry/instrumentation-http@0.208.0': + resolution: {integrity: sha512-rhmK46DRWEbQQB77RxmVXGyjs6783crXCnFjYQj+4tDH/Kpv9Rbg3h2kaNyp5Vz2emF1f9HOQQvZoHzwMWOFZQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-ioredis@0.54.0': - resolution: {integrity: sha512-SkGBzieEHnpfeYB112R9wzshtpqZkQ0DUHm1DhminO4KYIOTyGS7NkaZlIcRUsmMg3/1Tk1HqEVjSdCO2rOXfA==} + '@opentelemetry/instrumentation-ioredis@0.56.0': + resolution: {integrity: sha512-XSWeqsd3rKSsT3WBz/JKJDcZD4QYElZEa0xVdX8f9dh4h4QgXhKRLorVsVkK3uXFbC2sZKAS2Ds+YolGwD83Dg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-kafkajs@0.16.0': - resolution: {integrity: sha512-b0Hk6qlVvXWBc29xoZFFem5UW9Wd0JZP45JQUel9Zcx8roR4XzJVPLKCaiNpESh7wdDnzLWGxShBVf0jACUhcQ==} + '@opentelemetry/instrumentation-kafkajs@0.18.0': + resolution: {integrity: sha512-KCL/1HnZN5zkUMgPyOxfGjLjbXjpd4odDToy+7c+UsthIzVLFf99LnfIBE8YSSrYE4+uS7OwJMhvhg3tWjqMBg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-knex@0.51.0': - resolution: {integrity: sha512-zfEivMt9dM/4gtkGSOSc+PFXAGIYkVWp+gpLkwVlqKvYlcAJoKBs+zzLCbfWS3tBFaa33S33hyaSR1zdgNgBeg==} + '@opentelemetry/instrumentation-knex@0.53.0': + resolution: {integrity: sha512-xngn5cH2mVXFmiT1XfQ1aHqq1m4xb5wvU6j9lSgLlihJ1bXzsO543cpDwjrZm2nMrlpddBf55w8+bfS4qDh60g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-koa@0.55.0': - resolution: {integrity: sha512-NiVRP6LjMt6D86qw1NrO0GUYuCfKHDFhcIZ8wO6nuyvYl8FfFIZ5mCoyVi7QGdrIpxKoh+Zzca5Cr9tY5WBt0w==} + '@opentelemetry/instrumentation-koa@0.57.0': + resolution: {integrity: sha512-3JS8PU/D5E3q295mwloU2v7c7/m+DyCqdu62BIzWt+3u9utjxC9QS7v6WmUNuoDN3RM+Q+D1Gpj13ERo+m7CGg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.9.0 - '@opentelemetry/instrumentation-lru-memoizer@0.51.0': - resolution: {integrity: sha512-fJv2ZBWoH+55y9SxfUXIc9sSjiUT/ObdGaIsaipMm7C6BDeqevRdJQXqMxFKq5vujbfUlHNRqgVzpK2Wp15efw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-memcached@0.50.0': - resolution: {integrity: sha512-prftOtrAC5o6bAS2aRem4KT3LjHSjDW6OO/8bMqbAbTaMBF4sMHm7kkYeJ0+FHV6rWWGaaaBjRxHNR49wTEKkQ==} + '@opentelemetry/instrumentation-lru-memoizer@0.53.0': + resolution: {integrity: sha512-LDwWz5cPkWWr0HBIuZUjslyvijljTwmwiItpMTHujaULZCxcYE9eU44Qf/pbVC8TulT0IhZi+RoGvHKXvNhysw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongodb@0.59.0': - resolution: {integrity: sha512-g4AyEjcr+nmKg2RGjN+Qkqv9PFQNKuTzS1iRTQl1q4Q3tVB/rvTHdryLbyYCYCQij8+pzewTMUjwlPZmjon9iw==} + '@opentelemetry/instrumentation-memcached@0.52.0': + resolution: {integrity: sha512-aBeEX0vLXwaXx96jQsrS6GAshzp5Kj027M/a0UQj7YzAOZXAa3ZJ65gryHoFlFmMgi3UAfThWIhahajG1FuQTQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mongoose@0.53.0': - resolution: {integrity: sha512-r6yvqwOoNoAl6Scb4HRHN1Li0w/3WF0/OT1oNNB0t11fJRI29k+8/hJKx8jgyxR5x8lQWuj0nKsraDlFxEG0Cw==} + '@opentelemetry/instrumentation-mongodb@0.61.0': + resolution: {integrity: sha512-OV3i2DSoY5M/pmLk+68xr5RvkHU8DRB3DKMzYJdwDdcxeLs62tLbkmRyqJZsYf3Ht7j11rq35pHOWLuLzXL7pQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql2@0.53.0': - resolution: {integrity: sha512-4AnLwGuY9ZUzFA1b92+BUzKdNXKdUKNFWuB0OFjqG5lCk/fm0nhPkIK0UFlUW4JQRGz3PzALl8T0rePG8nzxrg==} + '@opentelemetry/instrumentation-mongoose@0.55.0': + resolution: {integrity: sha512-5afj0HfF6aM6Nlqgu6/PPHFk8QBfIe3+zF9FGpX76jWPS0/dujoEYn82/XcLSaW5LPUDW8sni+YeK0vTBNri+w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-mysql@0.52.0': - resolution: {integrity: sha512-aoeBQj2fgRaScme2znr2fTbn4Y/Gcwy35IiZcaGutXlzrQ7gfmxgQCvbHuQV8oKeN7fd8HZgXN6oTeBdRItKLA==} + '@opentelemetry/instrumentation-mysql2@0.55.0': + resolution: {integrity: sha512-0cs8whQG55aIi20gnK8B7cco6OK6N+enNhW0p5284MvqJ5EPi+I1YlWsWXgzv/V2HFirEejkvKiI4Iw21OqDWg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-nestjs-core@0.53.0': - resolution: {integrity: sha512-8sDcdwPb6fJ2ayD7Q7H2Vxwj21ao8Atuvm+RtPzAdrOvqEWTigpO99LJaEsZRRphJTdRBejg07/oYQzJusPODQ==} + '@opentelemetry/instrumentation-mysql@0.54.0': + resolution: {integrity: sha512-bqC1YhnwAeWmRzy1/Xf9cDqxNG2d/JDkaxnqF5N6iJKN1eVWI+vg7NfDkf52/Nggp3tl1jcC++ptC61BD6738A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-net@0.50.0': - resolution: {integrity: sha512-HHxV5bncOK8PGQljfPCaUfLeGwCR0rqPDliifPlR9pQ4fULOUN6UTfW2pGuHUI87tyyPzny6yRQ1JmRx/pK1BA==} + '@opentelemetry/instrumentation-nestjs-core@0.55.0': + resolution: {integrity: sha512-JFLNhbbEGnnQrMKOYoXx0nNk5N9cPeghu4xP/oup40a7VaSeYruyOiFbg9nkbS4ZQiI8aMuRqUT3Mo4lQjKEKg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-oracledb@0.32.0': - resolution: {integrity: sha512-fqtKs5wr5MBDtxbqXsXARHs5JAqoK61+2JnapDvRSpDFqvL0PnXAnBW5/xpIv5nGU+nU7SAMCw17Ac/HZ/1jAg==} + '@opentelemetry/instrumentation-net@0.52.0': + resolution: {integrity: sha512-POT0FudTQTsTs9Xa8Uo5z0gGV1T3EEvy3GNas4Lr5aIMxe5xz/XlHci8xNZ/lzwjTY7KfYsXvkzxRBovDVtH5Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-pg@0.59.0': - resolution: {integrity: sha512-26Q6wwsx84K8KNX/CZ2q6ZRv2hIzPawRpL0og+Ro4BHN8Qin+ktkqFDlF2n83KPJn/tFstz3nErue+DAVXAGTw==} + '@opentelemetry/instrumentation-openai@0.6.0': + resolution: {integrity: sha512-FmmAi+gwuAyoWkxuyqpFlBCi7YG36L3HLnLVE0gf2iZV+AQlVQgd9kP8SxywSPV1L9BqTwJJ8mDIUiIBp9zSAQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-pino@0.53.0': - resolution: {integrity: sha512-0voOkY2o2rXx5g15uBMDd7T+v09pa1g1OOS/G2pqNCf49+WGiKgdljgf8Ph4Gr2Cjxs8Vs9bH9xefmK2jUFCBA==} + '@opentelemetry/instrumentation-oracledb@0.34.0': + resolution: {integrity: sha512-eHNRO4mKgvFfPfSi+Y2GNrWl+YOOnnhVoII9vlCcAroEJ0i/IC6sBsDm18LKYXnRjz1zNnX31Sn0a00S1rKaNA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-redis@0.55.0': - resolution: {integrity: sha512-k+EsOHQ4iFjqLx/Oj392onrS1IiLhFy6VEokpRB0Yu9LPPbMeX/Zvd+1XsNGVGOH0GNENtHLh/WeYZTI9p2WmA==} + '@opentelemetry/instrumentation-pg@0.61.0': + resolution: {integrity: sha512-UeV7KeTnRSM7ECHa3YscoklhUtTQPs6V6qYpG283AB7xpnPGCUCUfECFT9jFg6/iZOQTt3FHkB1wGTJCNZEvPw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-restify@0.52.0': - resolution: {integrity: sha512-0Aehz5A+CriuVMqGo9y8yV2BYNkOse1Dud/PaURtjclv6/+FA+IBlAteG6R0CSBsIQEtNguVOqDkh4GTERq65Q==} + '@opentelemetry/instrumentation-pino@0.55.0': + resolution: {integrity: sha512-+powYgQcZvGD/JJ0zaXB/2e2rK/WS41GDAq4KlKv26gT5rjWc70Pxvk2OP0d/XAWlLxpRAxOEAP0ggVAuVYNbA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-router@0.51.0': - resolution: {integrity: sha512-UEW3Nuvvv9WePvgqie1xmyPY5B/K0AtpakdFFiOW715j/BTDWVnnQ6N1L4xMZ9la3dJlWbDK5t29M9kj4l5u5Q==} + '@opentelemetry/instrumentation-redis@0.57.0': + resolution: {integrity: sha512-bCxTHQFXzrU3eU1LZnOZQ3s5LURxQPDlU3/upBzlWY77qOI1GZuGofazj3jtzjctMJeBEJhNwIFEgRPBX1kp/Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-runtime-node@0.20.0': - resolution: {integrity: sha512-r2A5Xv2B21F7a9oBiokrqRTko0weZaUaFblkeJZBVWIIX3ZhPF7P5MtpZalLDKaABtM47zEMAkws++z0034MBg==} + '@opentelemetry/instrumentation-restify@0.54.0': + resolution: {integrity: sha512-V6kCoAtU8jLuUi9hr3IEWVTHr8d8s4wObV1DlI/A+VzYToK1W4Zv1SI8x3hiF0yR1poRjOY6rl91Q427HHTMww==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-socket.io@0.53.0': - resolution: {integrity: sha512-PVBVfWy6q3WwHQ3x9h0ZP1dcX0B249Xjdwjx97sgw+p5bWRaReSKKQlLKfFR723muIvtYE+wDOUJwtPIdYVtJQ==} + '@opentelemetry/instrumentation-router@0.53.0': + resolution: {integrity: sha512-3gF9jJ7C3lwlCOer1KzKKdpLr6/c7yOZBP44KI+Xi/TqiZjhsfUlHjetzC6BLDjkSk1DnIGyf+YzJR4aF5dJBQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-tedious@0.25.0': - resolution: {integrity: sha512-lRUg0qngt1DJGEGiF+TCYY60IM27vNDovodjblNkmOrFB2FvgWy9zMBnCjGt8w4yPZML+sEIL9iZEQeFkf5VvA==} + '@opentelemetry/instrumentation-runtime-node@0.22.0': + resolution: {integrity: sha512-27aodhzdWqPuPVWM2UsLYz2gl6yLRqLP7Z6Kn6ukUx/I+9oruaztJkLtYg4SqCrm/7Nsv9FIly7gO3/ZyDIMPg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-undici@0.17.0': - resolution: {integrity: sha512-EpVMeF/+Fv/QnMxehOyFA+x5ch96yBMXBMnzCvyD2qZFvZViw9qLCZvpDG4VpKWVURF0Tv/M++fUlMWY1HNVrA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.7.0 - - '@opentelemetry/instrumentation-winston@0.51.0': - resolution: {integrity: sha512-OMiMxDXsQ0XEefVcFtCp7hYXkfEtqCd8Y0/Lsam3G+U4etujqhYSL4IfteHysntFAT6Ji2JZ5QmffuwPKf/07g==} + '@opentelemetry/instrumentation-socket.io@0.55.0': + resolution: {integrity: sha512-j/ceXFREnYKIO5+qBPlbigiMYnYhyEz9y8hkWSzMIUA6lnirdEf/viGI+q1VpjqB/Fl87X4ejWl+taQGBYIB+A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-xml-http-request@0.202.0': - resolution: {integrity: sha512-N0wZyWpdUviscnhNKbRr2mEEfTtVi0ki7v6Lr9ZsK5mUtg12e9Mf/LsT2Msl7tvyGDGGi8Tmm8ssFrfLOADqDw==} + '@opentelemetry/instrumentation-tedious@0.27.0': + resolution: {integrity: sha512-jRtyUJNZppPBjPae4ZjIQ2eqJbcRaRfJkr0lQLHFmOU/no5A6e9s1OHLd5XZyZoBJ/ymngZitanyRRA5cniseA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation@0.202.0': - resolution: {integrity: sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA==} + '@opentelemetry/instrumentation-undici@0.19.0': + resolution: {integrity: sha512-Pst/RhR61A2OoZQZkn6OLpdVpXp6qn3Y92wXa6umfJe9rV640r4bc6SWvw4pPN6DiQqPu2c8gnSSZPDtC6JlpQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: - '@opentelemetry/api': ^1.3.0 + '@opentelemetry/api': ^1.7.0 - '@opentelemetry/instrumentation@0.206.0': - resolution: {integrity: sha512-anPU9GAn3vSH/0JFQZ4e626xRw8p8R21kxM7xammFk9BRhfDw1IpgqvFMllbb+1MSHHEX9EiUqYHJyWo/B6KGA==} + '@opentelemetry/instrumentation-winston@0.53.0': + resolution: {integrity: sha512-yF9v0DphyG715er1HG1pbweNUSygvc22xw2s2Y8E8oaEMJo2/nH3Ww/8c4K6gdI/6xvi2unla1KQBCYN4uCo8w==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.202.0': - resolution: {integrity: sha512-nMEOzel+pUFYuBJg2znGmHJWbmvMbdX5/RhoKNKowguMbURhz0fwik5tUKplLcUtl8wKPL1y9zPnPxeBn65N0Q==} + '@opentelemetry/instrumentation-xml-http-request@0.208.0': + resolution: {integrity: sha512-me0knebxJxnzis73p5/ZQgdLNG6nsUXMsDR/dZk+BPOiNyd3Me9ye2wVM06JlcLA54w4JESw6wMTNi4lMhowFQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-exporter-base@0.206.0': - resolution: {integrity: sha512-Rv54oSNKMHYS5hv+H5EGksfBUtvPQWFTK+Dk6MjJun9tOijCsFJrhRFvAqg5d67TWSMn+ZQYRKIeXh5oLVrpAQ==} + '@opentelemetry/instrumentation@0.208.0': + resolution: {integrity: sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-grpc-exporter-base@0.206.0': - resolution: {integrity: sha512-IA8EDbrB8OKtidMqErBY8sUc9mh03LOXuNPwp4/rdPrxSt45g1gBuZMovRXdEWfRyKKbF2E7MdipT2m11bs6SQ==} + '@opentelemetry/otlp-exporter-base@0.208.0': + resolution: {integrity: sha512-gMd39gIfVb2OgxldxUtOwGJYSH8P1kVFFlJLuut32L6KgUC4gl1dMhn+YC2mGn0bDOiQYSk/uHOdSjuKp58vvA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.202.0': - resolution: {integrity: sha512-5XO77QFzs9WkexvJQL9ksxL8oVFb/dfi9NWQSq7Sv0Efr9x3N+nb1iklP1TeVgxqJ7m1xWiC/Uv3wupiQGevMw==} + '@opentelemetry/otlp-grpc-exporter-base@0.208.0': + resolution: {integrity: sha512-fGvAg3zb8fC0oJAzfz7PQppADI2HYB7TSt/XoCaBJFi1mSquNUjtHXEoviMgObLAa1NRIgOC1lsV1OUKi+9+lQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/otlp-transformer@0.206.0': - resolution: {integrity: sha512-Li2Cik1WnmNbU2mmTnw7DxvRiXhMcnAuTfAclP8y/zy7h5+GrLDpTZ+Z0XUs+Q3MLkb/h3ry4uFrC/z+2a6X7g==} + '@opentelemetry/otlp-transformer@0.208.0': + resolution: {integrity: sha512-DCFPY8C6lAQHUNkzcNT9R+qYExvsk6C5Bto2pbNxgicpcSWbe2WHShLxkOxIdNcBiYPdVHv/e7vH7K6TI+C+fQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/propagator-b3@2.1.0': - resolution: {integrity: sha512-yOdHmFseIChYanddMMz0mJIFQHyjwbNhoxc65fEAA8yanxcBPwoFDoh1+WBUWAO/Z0NRgk+k87d+aFIzAZhcBw==} + '@opentelemetry/propagator-b3@2.2.0': + resolution: {integrity: sha512-9CrbTLFi5Ee4uepxg2qlpQIozoJuoAZU5sKMx0Mn7Oh+p7UrgCiEV6C02FOxxdYVRRFQVCinYR8Kf6eMSQsIsw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/propagator-jaeger@2.1.0': - resolution: {integrity: sha512-QYo7vLyMjrBCUTpwQBF/e+rvP7oGskrSELGxhSvLj5gpM0az9oJnu/0O4l2Nm7LEhAff80ntRYKkAcSwVgvSVQ==} + '@opentelemetry/propagator-jaeger@2.2.0': + resolution: {integrity: sha512-FfeOHOrdhiNzecoB1jZKp2fybqmqMPJUXe2ZOydP7QzmTPYcfPeuaclTLYVhK3HyJf71kt8sTl92nV4YIaLaKA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -2642,104 +2650,92 @@ packages: resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==} engines: {node: ^18.19.0 || >=20.6.0} - '@opentelemetry/resource-detector-alibaba-cloud@0.31.9': - resolution: {integrity: sha512-V+HbpICyzmJoQHYpiN0xRlj7QqeR9pPo+JZiZztV77L2MdlUCa/Cq7h0gdFNIKc0P9u9rYYYW21oaqdhhC5LZg==} + '@opentelemetry/resource-detector-alibaba-cloud@0.31.11': + resolution: {integrity: sha512-R/asn6dAOWMfkLeEwqHCUz0cNbb9oiHVyd11iwlypeT/p9bR1lCX5juu5g/trOwxo62dbuFcDbBdKCJd3O2Edg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resource-detector-aws@2.6.0': - resolution: {integrity: sha512-atZ9/HNXh9ZJuMZUH2TPl89imFZBaoiU0Mksa70ysVhYRzhk3hfJyiu+eETjZ7NhGjBPrd3sfVYEq/St/7+o3g==} + '@opentelemetry/resource-detector-aws@2.8.0': + resolution: {integrity: sha512-L8K5L3bsDKboX7sDofZyRonyK8dfS+CF7ho8YbZ6OrH+d5uyRBsrjuokPzcju1jP2ZzgtpYzhLwzi9zPXyRLlA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resource-detector-azure@0.14.0': - resolution: {integrity: sha512-IxfP+Ki3dGKL7pM+vFsW7TTgglZ0+ISCTAnIVmPf73bvCHcReVS6tbT1P4MhXIaJ+hWImUD8ZIJ7rbkcBlD8/w==} + '@opentelemetry/resource-detector-azure@0.16.0': + resolution: {integrity: sha512-7ZIgPGsI5/sp4nXXUUyyQ8grg6brJV1U/itQWmZID72Nhvm4k/MhYpjZC80HFId47pMUGkoM3wxbZHfunLSnIw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resource-detector-container@0.7.9': - resolution: {integrity: sha512-BiS14kCylLzh/mayN/sjnOdhnpfgiekaEsIzaL29MErfQR0mFCZjAE2uu8jMjShva9bSDFs65ouuAFft+vBthg==} + '@opentelemetry/resource-detector-container@0.7.11': + resolution: {integrity: sha512-XUxnGuANa/EdxagipWMXKYFC7KURwed9/V0+NtYjFmwWHzV9/J4IYVGTK8cWDpyUvAQf/vE4sMa3rnS025ivXQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resource-detector-gcp@0.41.0': - resolution: {integrity: sha512-ghh4+mDt6vK52k4ZvVZMAyQ0H6+x2RDxW8nWaGLdaQxE35eJzMghXZvOd0h+vw5C6/h8/z82Kwk2Vgd5nhE6SA==} + '@opentelemetry/resource-detector-gcp@0.43.0': + resolution: {integrity: sha512-QBrljIppRyMLjEJdx+nKid5FyCQCh4TK2jNSHVRsJio1qnPoPy18J6rD3Pbx6VF0/Z5vwLD+E3PHe/Bi6vE0Rw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/resources@2.0.1': - resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/resources@2.1.0': resolution: {integrity: sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-logs@0.202.0': - resolution: {integrity: sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ==} + '@opentelemetry/resources@2.2.0': + resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' + '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-logs@0.206.0': - resolution: {integrity: sha512-SQ2yTmqe4Mw9RI3a/glVkfjWPsXh6LySvnljXubiZq4zu+UP8NMJt2j82ZsYb+KpD7Eu+/41/7qlJnjdeVjz7Q==} + '@opentelemetry/sdk-logs@0.208.0': + resolution: {integrity: sha512-QlAyL1jRpOeaqx7/leG1vJMp84g0xKP6gJmfELBpnI4O/9xPX+Hu5m1POk9Kl+veNkyth5t19hRlN6tNY1sjbA==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.4.0 <1.10.0' - '@opentelemetry/sdk-metrics@2.0.1': - resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.9.0 <1.10.0' - - '@opentelemetry/sdk-metrics@2.1.0': - resolution: {integrity: sha512-J9QX459mzqHLL9Y6FZ4wQPRZG4TOpMCyPOh6mkr/humxE1W2S3Bvf4i75yiMW9uyed2Kf5rxmLhTm/UK8vNkAw==} + '@opentelemetry/sdk-metrics@2.2.0': + resolution: {integrity: sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.9.0 <1.10.0' - '@opentelemetry/sdk-node@0.206.0': - resolution: {integrity: sha512-t/2xYG1+pXK2M4jra48Gw6BS0E/hz4zYwuqC8G8JCTx9UQpCiFlaA3Yxbns79R1h6NbQz7NAe2kJO3/Jf9BoIA==} + '@opentelemetry/sdk-node@0.208.0': + resolution: {integrity: sha512-pbAqpZ7zTMFuTf3YecYsecsto/mheuvnK2a/jgstsE5ynWotBjgF5bnz5500W9Xl2LeUfg04WMt63TWtAgzRMw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.0.1': - resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==} + '@opentelemetry/sdk-trace-base@2.1.0': + resolution: {integrity: sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-base@2.1.0': - resolution: {integrity: sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==} + '@opentelemetry/sdk-trace-base@2.2.0': + resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' - '@opentelemetry/sdk-trace-node@2.1.0': - resolution: {integrity: sha512-SvVlBFc/jI96u/mmlKm86n9BbTCbQ35nsPoOohqJX6DXH92K0kTe73zGY5r8xoI1QkjR9PizszVJLzMC966y9Q==} + '@opentelemetry/sdk-trace-node@2.2.0': + resolution: {integrity: sha512-+OaRja3f0IqGG2kptVeYsrZQK9nKRSpfFrKtRBq4uh6nIB8bTBgaGvYQrQoRrQWQMA5dK5yLhDMDc0dvYvCOIQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-web@2.0.1': - resolution: {integrity: sha512-R4/i0rISvAujG4Zwk3s6ySyrWG+Db3SerZVM4jZ2lEzjrNylF7nRAy1hVvWe8gTbwIxX+6w6ZvZwdtl2C7UQHQ==} + '@opentelemetry/sdk-trace-web@2.1.0': + resolution: {integrity: sha512-2F6ZuZFmJg4CdhRPP8+60DkvEwGLCiU3ffAkgnnqe/ALGEBqGa0HrZaNWFGprXWVivrYHpXhr7AEfasgLZD71g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-web@2.1.0': - resolution: {integrity: sha512-2F6ZuZFmJg4CdhRPP8+60DkvEwGLCiU3ffAkgnnqe/ALGEBqGa0HrZaNWFGprXWVivrYHpXhr7AEfasgLZD71g==} + '@opentelemetry/sdk-trace-web@2.2.0': + resolution: {integrity: sha512-x/LHsDBO3kfqaFx5qSzBljJ5QHsRXrvS4MybBDy1k7Svidb8ZyIPudWVzj3s5LpPkYZIgi9e+7tdsNCnptoelw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -3603,8 +3599,8 @@ packages: '@types/react-dom': optional: true - '@react-email/body@0.1.0': - resolution: {integrity: sha512-o1bcSAmDYNNHECbkeyceCVPGmVsYvT+O3sSO/Ct7apKUu3JphTi31hu+0Nwqr/pgV5QFqdoT5vdS3SW5DJFHgQ==} + '@react-email/body@0.2.0': + resolution: {integrity: sha512-9GCWmVmKUAoRfloboCd+RKm6X17xn7eGL7HnpAZUnjBXBilWCxsKnLMTC/ixSHDKS/A/057M1Tx6ZUXd89sVBw==} peerDependencies: react: 19.1.0 @@ -3614,9 +3610,9 @@ packages: peerDependencies: react: 19.1.0 - '@react-email/code-block@0.1.0': - resolution: {integrity: sha512-jSpHFsgqnQXxDIssE4gvmdtFncaFQz5D6e22BnVjcCPk/udK+0A9jRwGFEG8JD2si9ZXBmU4WsuqQEczuZn4ww==} - engines: {node: '>=18.0.0'} + '@react-email/code-block@0.2.0': + resolution: {integrity: sha512-eIrPW9PIFgDopQU0e/OPpwCW2QWQDtNZDSsiN4sJO8KdMnWWnXJicnRfzrit5rHwFo+Y98i+w/Y5ScnBAFr1dQ==} + engines: {node: '>=22.0.0'} peerDependencies: react: 19.1.0 @@ -3632,9 +3628,9 @@ packages: peerDependencies: react: 19.1.0 - '@react-email/components@0.5.6': - resolution: {integrity: sha512-3o9ellDaF3bBcVMWeos9HI0iUIT1zGygPRcn9WSfI5JREORiN6ViEJIvz5SKWEn1KPNZtw/iaW8ct7PpVyhomg==} - engines: {node: '>=18.0.0'} + '@react-email/components@1.0.0': + resolution: {integrity: sha512-PVqzptGFPR2wZGtlSejSMTrmAdxGUB0b2HH5+2HUUtaUFy3N1v5wblb9s+Ar8TqSL9c05KOH3sITbnmZYCVgSQ==} + engines: {node: '>=22.0.0'} peerDependencies: react: 19.1.0 @@ -3685,9 +3681,9 @@ packages: peerDependencies: react: 19.1.0 - '@react-email/markdown@0.0.15': - resolution: {integrity: sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==} - engines: {node: '>=18.0.0'} + '@react-email/markdown@0.0.17': + resolution: {integrity: sha512-6op3AfsBC9BJKkhG+eoMFRFWlr0/f3FYbtQrK+VhGzJocEAY0WINIFN+W8xzXr//3IL0K/aKtnH3FtpIuescQQ==} + engines: {node: '>=22.0.0'} peerDependencies: react: 19.1.0 @@ -3697,9 +3693,9 @@ packages: peerDependencies: react: 19.1.0 - '@react-email/render@1.3.2': - resolution: {integrity: sha512-oq8/BD/I/YspeuBjjdLJG6xaf9tsPYk+VWu8/mX9xWbRN0t0ExKSVm9sEBL6RsCpndQA2jbY2VgPEreIrzUgqw==} - engines: {node: '>=18.0.0'} + '@react-email/render@2.0.0': + resolution: {integrity: sha512-rdjNj6iVzv8kRKDPFas+47nnoe6B40+nwukuXwY4FCwM7XBg6tmYr+chQryCuavUj2J65MMf6fztk1bxOUiSVA==} + engines: {node: '>=22.0.0'} peerDependencies: react: 19.1.0 react-dom: 19.1.0 @@ -3716,11 +3712,43 @@ packages: peerDependencies: react: 19.1.0 - '@react-email/tailwind@1.2.2': - resolution: {integrity: sha512-heO9Khaqxm6Ulm6p7HQ9h01oiiLRrZuuEQuYds/O7Iyp3c58sMVHZGIxiRXO/kSs857NZQycpjewEVKF3jhNTw==} - engines: {node: '>=18.0.0'} - peerDependencies: + '@react-email/tailwind@2.0.0': + resolution: {integrity: sha512-CV2rBO+bUzhJkra/H9bw1M9BwvBiNyT3RmC5DSfRXp/a0TYMtPjRo9IRnKeyNl40D/qPxH3bKNg6O7cTOVVsog==} + engines: {node: '>=22.0.0'} + peerDependencies: + '@react-email/body': 0.2.0 + '@react-email/button': 0.2.0 + '@react-email/code-block': 0.2.0 + '@react-email/code-inline': 0.0.5 + '@react-email/container': 0.0.15 + '@react-email/heading': 0.0.15 + '@react-email/hr': 0.0.11 + '@react-email/img': 0.0.11 + '@react-email/link': 0.0.12 + '@react-email/preview': 0.0.13 + '@react-email/text': 0.1.5 react: 19.1.0 + peerDependenciesMeta: + '@react-email/body': + optional: true + '@react-email/button': + optional: true + '@react-email/code-block': + optional: true + '@react-email/code-inline': + optional: true + '@react-email/container': + optional: true + '@react-email/heading': + optional: true + '@react-email/hr': + optional: true + '@react-email/img': + optional: true + '@react-email/link': + optional: true + '@react-email/preview': + optional: true '@react-email/text@0.1.5': resolution: {integrity: sha512-o5PNHFSE085VMXayxH+SJ1LSOtGsTv+RpNKnTiJDrJUwoBu77G3PlKOsZZQHCNyD28WsQpl9v2WcJLbQudqwPg==} @@ -3911,61 +3939,61 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-darwin-arm64@1.4.1': - resolution: {integrity: sha512-enh5DYbpaexdEmjbcxj3BJDauP3w+20jFKWvKROtAQV350PUw0bf2b4WOgngIH9hBzlfjpXNYAk6T5AhVAlY3Q==} + '@rspack/binding-darwin-arm64@1.6.1': + resolution: {integrity: sha512-am7gVsqicKY/FhDfNa/InHxrBd3wRt6rI7sFTaunKaPbPERjWSKr/sI47tB3t8uNYmLQFFhWFijomAhDyrlHMg==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@1.4.1': - resolution: {integrity: sha512-KoehyhBji4TLXhn4mqOUw6xsQNRzNVA9XcCm1Jx+M1Qb0dhMTNfduvBSyXuRV5+/QaRbk7+4UJbyRNFUtt96kA==} + '@rspack/binding-darwin-x64@1.6.1': + resolution: {integrity: sha512-uadcJOal5YTg191+kvi47I0b+U0sRKe8vKFjMXYOrSIcbXGVRdBxROt/HMlKnvg0u/A83f6AABiY6MA2fCs/gw==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@1.4.1': - resolution: {integrity: sha512-PJ5cHqvrj1bK7jH5DVrdKoR8Fy+p6l9baxXajq/6xWTxP+4YTdEtLsRZnpLMS1Ho2RRpkxDWJn+gdlKuleNioQ==} + '@rspack/binding-linux-arm64-gnu@1.6.1': + resolution: {integrity: sha512-n7UGSBzv7PiX+V1Q2bY3S1XWyN3RCykCQUgfhZ+xWietCM/1349jgN7DoXKPllqlof1GPGBjziHU0sQZTC4tag==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.4.1': - resolution: {integrity: sha512-cpDz+z3FwVQfK6VYfXQEb0ym6fFIVmvK4y3R/2VAbVGWYVxZB5I6AcSdOWdDnpppHmcHpf+qQFlwhHvbpMMJNQ==} + '@rspack/binding-linux-arm64-musl@1.6.1': + resolution: {integrity: sha512-P7nx0jsKxx7g3QAnH9UnJDGVgs1M2H7ZQl68SRyrs42TKOd9Md22ynoMIgCK1zoy+skssU6MhWptluSggXqSrA==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.4.1': - resolution: {integrity: sha512-jjTx53CpiYWK7fAv5qS8xHEytFK6gLfZRk+0kt2YII6uqez/xQ3SRcboreH8XbJcBoxINBzMNMf5/SeMBZ939A==} + '@rspack/binding-linux-x64-gnu@1.6.1': + resolution: {integrity: sha512-SdiurC1bV/QHnj7rmrBYJLdsat3uUDWl9KjkVjEbtc8kQV0Ri4/vZRH0nswgzx7hZNY2j0jYuCm5O8+3qeJEMg==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.4.1': - resolution: {integrity: sha512-FAyR3Og81Smtr/CnsuTiW4ZCYAPCqeV73lzMKZ9xdVUgM9324ryEgqgX38GZLB5Mo7cvQhv7/fpMeHQo16XQCw==} + '@rspack/binding-linux-x64-musl@1.6.1': + resolution: {integrity: sha512-JoSJu29nV+auOePhe8x2Fzqxiga1YGNcOMWKJ5Uj8rHBZ8FPAiiE+CpLG8TwfpHsivojrY/sy6fE8JldYLV5TQ==} cpu: [x64] os: [linux] - '@rspack/binding-wasm32-wasi@1.4.1': - resolution: {integrity: sha512-3Q1VICIQP4GsaTJEmmwfowQ48NvhlL0CKH88l5+mbji2rBkGx7yR67pPdfCVNjXcCtFoemTYw98eaumJTjC++g==} + '@rspack/binding-wasm32-wasi@1.6.1': + resolution: {integrity: sha512-u5NiSHxM7LtIo4cebq/hQPJ9o39u127am3eVJHDzdmBVhTYYO5l7XVUnFmcU8hNHuj/4lJzkFviWFbf3SaRSYA==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@1.4.1': - resolution: {integrity: sha512-DdLPOy1J98kn45uEhiEqlBKgMvet+AxOzX2OcrnU0wQXthGM9gty1YXYNryOhlK+X+eOcwcP3GbnDOAKi8nKqw==} + '@rspack/binding-win32-arm64-msvc@1.6.1': + resolution: {integrity: sha512-u2Lm4iyUstX/H4JavHnFLIlXQwMka6WVvG2XH8uRd6ziNTh0k/u9jlFADzhdZMvxj63L2hNXCs7TrMZTx2VObQ==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.4.1': - resolution: {integrity: sha512-13s8fYtyC9DyvKosD2Kvzd6fVZDZZyPp91L4TEXWaO0CFhaCbtLTYIntExq9MwtKHYKKx7bchIFw93o0xjKjUg==} + '@rspack/binding-win32-ia32-msvc@1.6.1': + resolution: {integrity: sha512-/rMU4pjnQeYnkrXmlqeEPiUNT1wHfJ8GR5v2zqcHXBQkAtic3ZsLwjHpucJjrfRsN5CcVChxJl/T7ozlITfcYw==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.4.1': - resolution: {integrity: sha512-ubQW8FcLnwljDanwTzkC9Abyo59gmX8m9uVr1GHOEuEU9Cua0KMijX2j/MYfiziz4nuQgv1saobY7K1I5nE3YA==} + '@rspack/binding-win32-x64-msvc@1.6.1': + resolution: {integrity: sha512-8qsdb5COuZF5Trimo3HHz3N0KuRtrPtRCMK/wi7DOT1nR6CpUeUMPTjvtPl/O/QezQje+cpBFTa5BaQ1WKlHhw==} cpu: [x64] os: [win32] - '@rspack/binding@1.4.1': - resolution: {integrity: sha512-zYgOmI+LC2zxB/LIcnaeK66ElFHaPChdWzRruTT1LAFFwpgGkBGAwFoP27PDnxQW0Aejci21Ld8X9tyxm08QFw==} + '@rspack/binding@1.6.1': + resolution: {integrity: sha512-6duvh3CbDA3c4HpNkzIOP9z1wn/mKY1Mrxj+AqgcNvsE0ppp1iKlMsJCDgl7SlUauus2AgtM1dIEU+0sRajmwQ==} - '@rspack/core@1.4.1': - resolution: {integrity: sha512-UTRCTQk2G8YiPBiMvfn8FcysxeO4Muek6a/Z39Cw2r4ZI8k5iPnKiyZboTJLS7120PwWBw2SO+QQje35Z44x0g==} - engines: {node: '>=16.0.0'} + '@rspack/core@1.6.1': + resolution: {integrity: sha512-hZVrmiZoBTchWUdh/XbeJ5z+GqHW5aPYeufBigmtUeyzul8uJtHlWKmQhpG+lplMf6o1RESTjjxl632TP/Cfhg==} + engines: {node: '>=18.12.0'} peerDependencies: '@swc/helpers': '>=0.5.1' peerDependenciesMeta: @@ -3998,32 +4026,32 @@ packages: '@sinonjs/fake-timers@13.0.5': resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==} - '@smithy/abort-controller@4.2.3': - resolution: {integrity: sha512-xWL9Mf8b7tIFuAlpjKtRPnHrR8XVrwTj5NPYO/QwZPtc0SDLsPxb56V5tzi5yspSMytISHybifez+4jlrx0vkQ==} + '@smithy/abort-controller@4.2.5': + resolution: {integrity: sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==} engines: {node: '>=18.0.0'} - '@smithy/config-resolver@4.3.3': - resolution: {integrity: sha512-xSql8A1Bl41O9JvGU/CtgiLBlwkvpHTSKRlvz9zOBvBCPjXghZ6ZkcVzmV2f7FLAA+80+aqKmIOmy8pEDrtCaw==} + '@smithy/config-resolver@4.4.3': + resolution: {integrity: sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==} engines: {node: '>=18.0.0'} - '@smithy/core@3.17.0': - resolution: {integrity: sha512-Tir3DbfoTO97fEGUZjzGeoXgcQAUBRDTmuH9A8lxuP8ATrgezrAJ6cLuRvwdKN4ZbYNlHgKlBX69Hyu3THYhtg==} + '@smithy/core@3.18.0': + resolution: {integrity: sha512-vGSDXOJFZgOPTatSI1ly7Gwyy/d/R9zh2TO3y0JZ0uut5qQ88p9IaWaZYIWSSqtdekNM4CGok/JppxbAff4KcQ==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.2.3': - resolution: {integrity: sha512-hA1MQ/WAHly4SYltJKitEsIDVsNmXcQfYBRv2e+q04fnqtAX5qXaybxy/fhUeAMCnQIdAjaGDb04fMHQefWRhw==} + '@smithy/credential-provider-imds@4.2.5': + resolution: {integrity: sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.3.4': - resolution: {integrity: sha512-bwigPylvivpRLCm+YK9I5wRIYjFESSVwl8JQ1vVx/XhCw0PtCi558NwTnT2DaVCl5pYlImGuQTSwMsZ+pIavRw==} + '@smithy/fetch-http-handler@5.3.6': + resolution: {integrity: sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==} engines: {node: '>=18.0.0'} - '@smithy/hash-node@4.2.3': - resolution: {integrity: sha512-6+NOdZDbfuU6s1ISp3UOk5Rg953RJ2aBLNLLBEcamLjHAg1Po9Ha7QIB5ZWhdRUVuOUrT8BVFR+O2KIPmw027g==} + '@smithy/hash-node@4.2.5': + resolution: {integrity: sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==} engines: {node: '>=18.0.0'} - '@smithy/invalid-dependency@4.2.3': - resolution: {integrity: sha512-Cc9W5DwDuebXEDMpOpl4iERo8I0KFjTnomK2RMdhhR87GwrSmUmwMxS4P5JdRf+LsjOdIqumcerwRgYMr/tZ9Q==} + '@smithy/invalid-dependency@4.2.5': + resolution: {integrity: sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==} engines: {node: '>=18.0.0'} '@smithy/is-array-buffer@2.2.0': @@ -4034,72 +4062,72 @@ packages: resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-content-length@4.2.3': - resolution: {integrity: sha512-/atXLsT88GwKtfp5Jr0Ks1CSa4+lB+IgRnkNrrYP0h1wL4swHNb0YONEvTceNKNdZGJsye+W2HH8W7olbcPUeA==} + '@smithy/middleware-content-length@4.2.5': + resolution: {integrity: sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.3.4': - resolution: {integrity: sha512-/RJhpYkMOaUZoJEkddamGPPIYeKICKXOu/ojhn85dKDM0n5iDIhjvYAQLP3K5FPhgB203O3GpWzoK2OehEoIUw==} + '@smithy/middleware-endpoint@4.3.7': + resolution: {integrity: sha512-i8Mi8OuY6Yi82Foe3iu7/yhBj1HBRoOQwBSsUNYglJTNSFaWYTNM2NauBBs/7pq2sqkLRqeUXA3Ogi2utzpUlQ==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.4.4': - resolution: {integrity: sha512-vSgABQAkuUHRO03AhR2rWxVQ1un284lkBn+NFawzdahmzksAoOeVMnXXsuPViL4GlhRHXqFaMlc8Mj04OfQk1w==} + '@smithy/middleware-retry@4.4.7': + resolution: {integrity: sha512-E7Vc6WHCHlzDRTx1W0jZ6J1L6ziEV0PIWcUdmfL4y+c8r7WYr6I+LkQudaD8Nfb7C5c4P3SQ972OmXHtv6m/OA==} engines: {node: '>=18.0.0'} - '@smithy/middleware-serde@4.2.3': - resolution: {integrity: sha512-8g4NuUINpYccxiCXM5s1/V+uLtts8NcX4+sPEbvYQDZk4XoJfDpq5y2FQxfmUL89syoldpzNzA0R9nhzdtdKnQ==} + '@smithy/middleware-serde@4.2.5': + resolution: {integrity: sha512-La1ldWTJTZ5NqQyPqnCNeH9B+zjFhrNoQIL1jTh4zuqXRlmXhxYHhMtI1/92OlnoAtp6JoN7kzuwhWoXrBwPqg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-stack@4.2.3': - resolution: {integrity: sha512-iGuOJkH71faPNgOj/gWuEGS6xvQashpLwWB1HjHq1lNNiVfbiJLpZVbhddPuDbx9l4Cgl0vPLq5ltRfSaHfspA==} + '@smithy/middleware-stack@4.2.5': + resolution: {integrity: sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==} engines: {node: '>=18.0.0'} - '@smithy/node-config-provider@4.3.3': - resolution: {integrity: sha512-NzI1eBpBSViOav8NVy1fqOlSfkLgkUjUTlohUSgAEhHaFWA3XJiLditvavIP7OpvTjDp5u2LhtlBhkBlEisMwA==} + '@smithy/node-config-provider@4.3.5': + resolution: {integrity: sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.4.2': - resolution: {integrity: sha512-MHFvTjts24cjGo1byXqhXrbqm7uznFD/ESFx8npHMWTFQVdBZjrT1hKottmp69LBTRm/JQzP/sn1vPt0/r6AYQ==} + '@smithy/node-http-handler@4.4.5': + resolution: {integrity: sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==} engines: {node: '>=18.0.0'} - '@smithy/property-provider@4.2.3': - resolution: {integrity: sha512-+1EZ+Y+njiefCohjlhyOcy1UNYjT+1PwGFHCxA/gYctjg3DQWAU19WigOXAco/Ql8hZokNehpzLd0/+3uCreqQ==} + '@smithy/property-provider@4.2.5': + resolution: {integrity: sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==} engines: {node: '>=18.0.0'} - '@smithy/protocol-http@5.3.3': - resolution: {integrity: sha512-Mn7f/1aN2/jecywDcRDvWWWJF4uwg/A0XjFMJtj72DsgHTByfjRltSqcT9NyE9RTdBSN6X1RSXrhn/YWQl8xlw==} + '@smithy/protocol-http@5.3.5': + resolution: {integrity: sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==} engines: {node: '>=18.0.0'} - '@smithy/querystring-builder@4.2.3': - resolution: {integrity: sha512-LOVCGCmwMahYUM/P0YnU/AlDQFjcu+gWbFJooC417QRB/lDJlWSn8qmPSDp+s4YVAHOgtgbNG4sR+SxF/VOcJQ==} + '@smithy/querystring-builder@4.2.5': + resolution: {integrity: sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==} engines: {node: '>=18.0.0'} - '@smithy/querystring-parser@4.2.3': - resolution: {integrity: sha512-cYlSNHcTAX/wc1rpblli3aUlLMGgKZ/Oqn8hhjFASXMCXjIqeuQBei0cnq2JR8t4RtU9FpG6uyl6PxyArTiwKA==} + '@smithy/querystring-parser@4.2.5': + resolution: {integrity: sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==} engines: {node: '>=18.0.0'} - '@smithy/service-error-classification@4.2.3': - resolution: {integrity: sha512-NkxsAxFWwsPsQiwFG2MzJ/T7uIR6AQNh1SzcxSUnmmIqIQMlLRQDKhc17M7IYjiuBXhrQRjQTo3CxX+DobS93g==} + '@smithy/service-error-classification@4.2.5': + resolution: {integrity: sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==} engines: {node: '>=18.0.0'} - '@smithy/shared-ini-file-loader@4.3.3': - resolution: {integrity: sha512-9f9Ixej0hFhroOK2TxZfUUDR13WVa8tQzhSzPDgXe5jGL3KmaM9s8XN7RQwqtEypI82q9KHnKS71CJ+q/1xLtQ==} + '@smithy/shared-ini-file-loader@4.4.0': + resolution: {integrity: sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.3.3': - resolution: {integrity: sha512-CmSlUy+eEYbIEYN5N3vvQTRfqt0lJlQkaQUIf+oizu7BbDut0pozfDjBGecfcfWf7c62Yis4JIEgqQ/TCfodaA==} + '@smithy/signature-v4@5.3.5': + resolution: {integrity: sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.9.0': - resolution: {integrity: sha512-qz7RTd15GGdwJ3ZCeBKLDQuUQ88m+skh2hJwcpPm1VqLeKzgZvXf6SrNbxvx7uOqvvkjCMXqx3YB5PDJyk00ww==} + '@smithy/smithy-client@4.9.3': + resolution: {integrity: sha512-8tlueuTgV5n7inQCkhyptrB3jo2AO80uGrps/XTYZivv5MFQKKBj3CIWIGMI2fRY5LEduIiazOhAWdFknY1O9w==} engines: {node: '>=18.0.0'} - '@smithy/types@4.8.0': - resolution: {integrity: sha512-QpELEHLO8SsQVtqP+MkEgCYTFW0pleGozfs3cZ183ZBj9z3VC1CX1/wtFMK64p+5bhtZo41SeLK1rBRtd25nHQ==} + '@smithy/types@4.9.0': + resolution: {integrity: sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==} engines: {node: '>=18.0.0'} - '@smithy/url-parser@4.2.3': - resolution: {integrity: sha512-I066AigYvY3d9VlU3zG9XzZg1yT10aNqvCaBTw9EPgu5GrsEl1aUkcMvhkIXascYH1A8W0LQo3B1Kr1cJNcQEw==} + '@smithy/url-parser@4.2.5': + resolution: {integrity: sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==} engines: {node: '>=18.0.0'} '@smithy/util-base64@4.3.0': @@ -4126,32 +4154,32 @@ packages: resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.3.3': - resolution: {integrity: sha512-vqHoybAuZXbFXZqgzquiUXtdY+UT/aU33sxa4GBPkiYklmR20LlCn+d3Wc3yA5ZM13gQ92SZe/D8xh6hkjx+IQ==} + '@smithy/util-defaults-mode-browser@4.3.6': + resolution: {integrity: sha512-kbpuXbEf2YQ9zEE6eeVnUCQWO0e1BjMnKrXL8rfXgiWA0m8/E0leU4oSNzxP04WfCmW8vjEqaDeXWxwE4tpOjQ==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.2.4': - resolution: {integrity: sha512-X5/xrPHedifo7hJUUWKlpxVb2oDOiqPUXlvsZv1EZSjILoutLiJyWva3coBpn00e/gPSpH8Rn2eIbgdwHQdW7Q==} + '@smithy/util-defaults-mode-node@4.2.9': + resolution: {integrity: sha512-dgyribrVWN5qE5usYJ0m5M93mVM3L3TyBPZWe1Xl6uZlH2gzfQx3dz+ZCdW93lWqdedJRkOecnvbnoEEXRZ5VQ==} engines: {node: '>=18.0.0'} - '@smithy/util-endpoints@3.2.3': - resolution: {integrity: sha512-aCfxUOVv0CzBIkU10TubdgKSx5uRvzH064kaiPEWfNIvKOtNpu642P4FP1hgOFkjQIkDObrfIDnKMKkeyrejvQ==} + '@smithy/util-endpoints@3.2.5': + resolution: {integrity: sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==} engines: {node: '>=18.0.0'} '@smithy/util-hex-encoding@4.2.0': resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} engines: {node: '>=18.0.0'} - '@smithy/util-middleware@4.2.3': - resolution: {integrity: sha512-v5ObKlSe8PWUHCqEiX2fy1gNv6goiw6E5I/PN2aXg3Fb/hse0xeaAnSpXDiWl7x6LamVKq7senB+m5LOYHUAHw==} + '@smithy/util-middleware@4.2.5': + resolution: {integrity: sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==} engines: {node: '>=18.0.0'} - '@smithy/util-retry@4.2.3': - resolution: {integrity: sha512-lLPWnakjC0q9z+OtiXk+9RPQiYPNAovt2IXD3CP4LkOnd9NpUsxOjMx1SnoUVB7Orb7fZp67cQMtTBKMFDvOGg==} + '@smithy/util-retry@4.2.5': + resolution: {integrity: sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==} engines: {node: '>=18.0.0'} - '@smithy/util-stream@4.5.3': - resolution: {integrity: sha512-oZvn8a5bwwQBNYHT2eNo0EU8Kkby3jeIg1P2Lu9EQtqDxki1LIjGRJM6dJ5CZUig8QmLxWxqOKWvg3mVoOBs5A==} + '@smithy/util-stream@4.5.6': + resolution: {integrity: sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==} engines: {node: '>=18.0.0'} '@smithy/util-uri-escape@4.2.0': @@ -4179,6 +4207,9 @@ packages: peerDependencies: socket.io-adapter: ^2.5.4 + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -4359,8 +4390,8 @@ packages: resolution: {integrity: sha512-UCHM2uS0t/uSszqPEo+SBSSoQVeQ+LlOWAVBl5SA7+AedeAbKafIPjFn8huZCXNLAYb0WKV2+wETr7lDK9uz7g==} engines: {node: '>=12'} - '@tanstack/query-core@5.90.2': - resolution: {integrity: sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ==} + '@tanstack/query-core@5.90.7': + resolution: {integrity: sha512-6PN65csiuTNfBMXqQUxQhCNdtm1rV+9kC9YwWAIKcaxAauq3Wu7p18j3gQY3YIBJU70jT/wzCCZ2uqto/vQgiQ==} '@tanstack/query-devtools@5.87.3': resolution: {integrity: sha512-LkzxzSr2HS1ALHTgDmJH5eGAVsSQiuwz//VhFW5OqNk0OQ+Fsqba0Tsf+NzWRtXYvpgUqwQr4b2zdFZwxHcGvg==} @@ -4371,8 +4402,8 @@ packages: '@tanstack/react-query': ^5.87.4 react: 19.1.0 - '@tanstack/react-query@5.90.2': - resolution: {integrity: sha512-CLABiR+h5PYfOWr/z+vWFt5VsOA2ekQeRQBFSKlcoW6Ndx/f8rfyVmq4LbgOM4GG2qtxAxjLYLOpCNTYm4uKzw==} + '@tanstack/react-query@5.90.7': + resolution: {integrity: sha512-wAHc/cgKzW7LZNFloThyHnV/AX9gTg3w5yAv0gvQHPZoCnepwqCMtzbuPbb2UvfvO32XZ46e8bPOYbfZhzVnnQ==} peerDependencies: react: 19.1.0 @@ -4461,14 +4492,17 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} - '@types/aws-lambda@8.10.152': - resolution: {integrity: sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw==} + '@types/aws-lambda@8.10.157': + resolution: {integrity: sha512-ofjcRCO1N7tMZDSO11u5bFHPDfUFD3Q9YK9g4S4w8UDKuG3CNlw2lNK1sd3Itdo7JORygZmG4h9ZykS8dlXvMA==} '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -4506,12 +4540,6 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/fs-extra@8.1.5': - resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} - - '@types/glob@7.2.0': - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - '@types/http-proxy@1.17.16': resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} @@ -4544,10 +4572,6 @@ packages: '@types/memcached@2.2.10': resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} - '@types/minimatch@6.0.0': - resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} - deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. - '@types/mysql@2.15.27': resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} @@ -4566,8 +4590,8 @@ packages: '@types/pg-pool@2.0.6': resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} - '@types/pg@8.15.5': - resolution: {integrity: sha512-LF7lF6zWEKxuT3/OR8wAZGzkg4ENGXFNyiV/JeOt9z5B+0ZVwbql9McqX5c/WStFq1GaGso7H1AzP/qSzmlCKQ==} + '@types/pg@8.15.6': + resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} '@types/postcss-modules-local-by-default@4.0.2': resolution: {integrity: sha512-CtYCcD+L+trB3reJPny+bKWKMzPfxEyQpKIwit7kErnOexf5/faaGpkFy4I5AwbV4hp1sk7/aTg0tt0B67VkLQ==} @@ -4768,48 +4792,48 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 - '@vitest/coverage-v8@3.2.4': - resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + '@vitest/coverage-v8@4.0.15': + resolution: {integrity: sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==} peerDependencies: - '@vitest/browser': 3.2.4 - vitest: 3.2.4 + '@vitest/browser': 4.0.15 + vitest: 4.0.15 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.0.15': + resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==} - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} + '@vitest/mocker@4.0.15': + resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==} peerDependencies: msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.0.15': + resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.0.15': + resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.0.15': + resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.0.15': + resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==} - '@vitest/ui@3.2.4': - resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==} + '@vitest/ui@4.0.15': + resolution: {integrity: sha512-sxSyJMaKp45zI0u+lHrPuZM1ZJQ8FaVD35k+UxVrha1yyvQ+TZuUYllUixwvQXlB7ixoDc7skf3lQPopZIvaQw==} peerDependencies: - vitest: 3.2.4 + vitest: 4.0.15 - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.0.15': + resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -4914,6 +4938,10 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -4970,6 +4998,13 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + append-transform@2.0.0: + resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} + engines: {node: '>=8'} + + archy@1.0.0: + resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -5001,10 +5036,6 @@ packages: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - array.prototype.findlast@1.2.5: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} @@ -5033,15 +5064,11 @@ packages: resolution: {integrity: sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==} engines: {node: '>=12.0.0'} - assertion-error@2.0.1: - resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} - engines: {node: '>=12'} - ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-v8-to-istanbul@0.3.5: - resolution: {integrity: sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==} + ast-v8-to-istanbul@0.3.8: + resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==} async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} @@ -5076,9 +5103,6 @@ packages: resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} engines: {node: '>=4'} - axios@1.10.0: - resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} - axios@1.12.2: resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} @@ -5103,10 +5127,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - babel-plugin-istanbul@7.0.0: - resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} - engines: {node: '>=12'} - babel-plugin-istanbul@7.0.1: resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==} engines: {node: '>=12'} @@ -5147,11 +5167,6 @@ packages: '@babel/traverse': optional: true - babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} - peerDependencies: - '@babel/core': ^7.0.0 - babel-preset-current-node-syntax@1.2.0: resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: @@ -5267,21 +5282,24 @@ packages: buffer-builder@0.2.0: resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - bullmq@5.61.0: - resolution: {integrity: sha512-khaTjc1JnzaYFl4FrUtsSsqugAW/urRrcZ9Q0ZE+REAw8W+gkHFqxbGlutOu6q7j7n91wibVaaNlOUMdiEvoSQ==} + bullmq@5.63.0: + resolution: {integrity: sha512-HT1iM3Jt4bZeg3Ru/MxrOy2iIItxcl1Pz5Ync1Vrot70jBpVguMxFEiSaDU57BwYwR4iwnObDnzct2lirKkX5A==} bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + caching-transform@4.0.0: + resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} engines: {node: '>=8'} call-bind-apply-helpers@1.0.2: @@ -5314,8 +5332,8 @@ packages: caniuse-lite@1.0.30001726: resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==} - chai@5.3.3: - resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + chai@6.2.1: + resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} engines: {node: '>=18'} chalk@3.0.0: @@ -5330,10 +5348,6 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - check-error@2.1.1: - resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} - engines: {node: '>= 16'} - chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} @@ -5355,6 +5369,10 @@ packages: classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -5367,6 +5385,9 @@ packages: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -5400,9 +5421,6 @@ packages: colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - colorette@1.4.0: - resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -5452,6 +5470,9 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -5601,6 +5622,10 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -5671,6 +5696,10 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + decimal.js@10.5.0: resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} @@ -5682,10 +5711,6 @@ packages: babel-plugin-macros: optional: true - deep-eql@5.0.2: - resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} - engines: {node: '>=6'} - deep-equal@1.0.1: resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} @@ -5696,6 +5721,10 @@ packages: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-require-extensions@3.0.1: + resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} + engines: {node: '>=8'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -5766,10 +5795,6 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -5826,8 +5851,8 @@ packages: resolution: {integrity: sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==} hasBin: true - drizzle-orm@0.44.6: - resolution: {integrity: sha512-uy6uarrrEOc9K1u5/uhBFJbdF5VJ5xQ/Yzbecw3eAYOunv5FDeYkR2m8iitocdHBOHbvorviKOW5GVw0U1j4LQ==} + drizzle-orm@0.44.7: + resolution: {integrity: sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=4' @@ -5925,6 +5950,9 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -6036,6 +6064,9 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es6-error@4.1.1: + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} + esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -6242,9 +6273,6 @@ packages: fast-copy@3.0.2: resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} - fast-deep-equal@2.0.1: - resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} - fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -6291,6 +6319,10 @@ packages: fengari@0.1.4: resolution: {integrity: sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==} + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} @@ -6363,18 +6395,22 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} + foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} - form-data@4.0.3: - resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} - engines: {node: '>= 6'} - form-data@4.0.4: resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + forwarded-parse@2.1.2: resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} @@ -6389,6 +6425,9 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + front-matter@4.0.2: resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} @@ -6429,10 +6468,18 @@ packages: resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} engines: {node: '>=14'} + gaxios@7.1.3: + resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==} + engines: {node: '>=18'} + gcp-metadata@6.1.1: resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} engines: {node: '>=14'} + gcp-metadata@8.1.2: + resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} + engines: {node: '>=18'} + generic-names@4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} @@ -6522,19 +6569,23 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@10.0.1: - resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==} - engines: {node: '>=8'} - goober@2.1.16: resolution: {integrity: sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==} peerDependencies: csstype: ^3.0.10 + google-auth-library@10.5.0: + resolution: {integrity: sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==} + engines: {node: '>=18'} + google-logging-utils@0.0.2: resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} engines: {node: '>=14'} + google-logging-utils@1.1.3: + resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} + engines: {node: '>=14'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -6549,6 +6600,10 @@ packages: resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + gtoken@8.0.0: + resolution: {integrity: sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==} + engines: {node: '>=18'} + handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -6580,6 +6635,10 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hasha@5.2.2: + resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} + engines: {node: '>=8'} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -6611,14 +6670,10 @@ packages: hono: '>=4.0.0' pino: '>=7.1.0' - hono@4.9.12: - resolution: {integrity: sha512-SrTC0YxqPwnN7yKa8gg/giLyQ2pILCKoideIHbYbFQlWZjYt68D2A4Ae1hehO/aDQ6RmTcpqOV/O2yBtMzx/VQ==} + hono@4.10.5: + resolution: {integrity: sha512-h/MXuTkoAK8NG1EfDp0jI1YLf6yGdDnfkebRO2pwEh5+hE3RAJFXkCsnD0vamSiARK4ZrB6MY+o3E/hCnOyHrQ==} engines: {node: '>=16.9.0'} - hosted-git-info@7.0.2: - resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} - engines: {node: ^16.14.0 || >=18.0.0} - html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -6726,8 +6781,8 @@ packages: resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} engines: {node: '>=8'} - import-in-the-middle@1.15.0: - resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + import-in-the-middle@2.0.0: + resolution: {integrity: sha512-yNZhyQYqXpkT0AKq3F3KLasUSK4fHvebNH5hOsKQw2dhGSALvQ4U0BqUc5suziKvydO5u5hgN2hy1RJaho8U5A==} import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} @@ -6865,10 +6920,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-plain-object@3.0.1: - resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} - engines: {node: '>=0.10.0'} - is-plain-object@5.0.0: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} @@ -6907,6 +6958,9 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -6960,14 +7014,26 @@ packages: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} + istanbul-lib-hook@3.0.0: + resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} + engines: {node: '>=8'} + istanbul-lib-instrument@6.0.3: resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} engines: {node: '>=10'} + istanbul-lib-processinfo@2.0.3: + resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} + engines: {node: '>=8'} + istanbul-lib-report@3.0.1: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} engines: {node: '>=10'} @@ -6976,6 +7042,10 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} + engines: {node: '>=8'} + iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} @@ -7238,9 +7308,16 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -7252,12 +7329,12 @@ packages: koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - koa@3.0.1: - resolution: {integrity: sha512-oDxVkRwPOHhGlxKIDiDB2h+/l05QPtefD7nSqRgDfZt8P+QVYFWjfeK8jANf5O2YXjk8egd7KntvXKYx82wOag==} + koa@3.0.3: + resolution: {integrity: sha512-MeuwbCoN1daWS32/Ni5qkzmrOtQO2qrnfdxDHjrm6s4b59yG4nexAJ0pTEFyzjLp0pBVO80CZp0vW8Ze30Ebow==} engines: {node: '>= 18'} - ky@1.12.0: - resolution: {integrity: sha512-YRLmSUHCwOJRBMArtqMRLOmO7fewn3yOoui6aB8ERkRVXupa0UiaQaKbIXteMt4jUElhbdqTMsLFHs8APxxUoQ==} + ky@1.14.0: + resolution: {integrity: sha512-Rczb6FMM6JT0lvrOlP5WUOCB7s9XKxzwgErzhKlKde1bEV90FXplV1o87fpt4PU/asJFiqjYJxAJyzJhcrxOsQ==} engines: {node: '>=18'} kysely@0.28.5: @@ -7330,6 +7407,9 @@ packages: lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + lodash.flattendeep@4.4.0: + resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + lodash.isarguments@3.1.0: resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} @@ -7363,9 +7443,6 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.2.1: - resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -7379,8 +7456,8 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.545.0: - resolution: {integrity: sha512-7r1/yUuflQDSt4f1bpn5ZAocyIxcTyVyBBChSVtBKn5M+392cPmI5YJMWOJKk/HUWGm5wg83chlAZtCcGbEZtw==} + lucide-react@0.553.0: + resolution: {integrity: sha512-BRgX5zrWmNy/lkVAe0dXBgd7XQdZ3HTf+Hwe3c9WK6dqgnj9h+hxV+MDncM88xDWlCq27+TKvHGE70ViODNILw==} peerDependencies: react: 19.1.0 @@ -7395,8 +7472,11 @@ packages: magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -7416,20 +7496,15 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - marked@7.0.4: - resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==} - engines: {node: '>= 16'} + marked@15.0.12: + resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} + engines: {node: '>= 18'} hasBin: true math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - md-to-react-email@5.0.5: - resolution: {integrity: sha512-OvAXqwq57uOk+WZqFFNCMZz8yDp8BD3WazW1wAKHUrPbbdr89K9DWS6JXY09vd9xNdPNeurI8DU/X4flcfaD8A==} - peerDependencies: - react: 19.1.0 - mdn-data@2.0.14: resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} @@ -7598,6 +7673,11 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} @@ -7607,6 +7687,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp-build-optional-packages@5.2.2: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true @@ -7617,6 +7701,10 @@ packages: node-machine-id@1.1.12: resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} + node-preload@0.2.1: + resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} + engines: {node: '>=8'} + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -7624,8 +7712,8 @@ packages: resolution: {integrity: sha512-OXdegQq03OmXEjt2hZP33W2YPs/E5BcFQks46+G2gAxs4gHOIVD1u7EqlYLYSKsaIpyKCK9Gbk0ta1/gjRSMRQ==} engines: {node: '>=6'} - nodemailer@7.0.9: - resolution: {integrity: sha512-9/Qm0qXIByEP8lEV2qOqcAW7bRpL8CR9jcTwk3NBnHJNmP9fIJ86g2fgmIXqHY+nj55ZEMwWqYAT2QTDpRUYiQ==} + nodemailer@7.0.10: + resolution: {integrity: sha512-Us/Se1WtT0ylXgNFfyFSx4LElllVLJXQjWi2Xz17xWw7amDKO2MLtFnVp1WACy7GkVGs+oBlRopVNUzlrGSw1w==} engines: {node: '>=6.0.0'} normalize-path@3.0.0: @@ -7640,10 +7728,6 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - npm-package-arg@11.0.1: - resolution: {integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==} - engines: {node: ^16.14.0 || >=18.0.0} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -7654,8 +7738,8 @@ packages: nwsapi@2.2.20: resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} - nx@21.6.4: - resolution: {integrity: sha512-RVQ7x/bTfJmGWS1rnGMpLDeaW7MnM8eja0qfSbZooP55GWPE6g4uwMKqfX+uqU/dV9GBNOBn77y8h0dEIZtMhg==} + nx@22.1.3: + resolution: {integrity: sha512-8zS/jhz1ZYSlW3tDEkqIA3oXaS/BTnpuFNV6L3tGKAaIxdn1sD5BuOdxIVK+G/TaoxOhw2iKrGiZeSSpV7fILw==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -7666,6 +7750,11 @@ packages: '@swc/core': optional: true + nyc@17.1.0: + resolution: {integrity: sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==} + engines: {node: '>=18'} + hasBin: true + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7698,6 +7787,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -7760,6 +7852,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + p-queue@6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} @@ -7772,6 +7868,10 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + package-hash@4.0.0: + resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} + engines: {node: '>=8'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -7833,10 +7933,6 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.1: - resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} - engines: {node: '>= 14.16'} - peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} @@ -8162,9 +8258,9 @@ packages: resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} engines: {node: '>=6'} - proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + process-on-spawn@1.1.0: + resolution: {integrity: sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==} + engines: {node: '>=8'} process-warning@5.0.0: resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} @@ -8262,9 +8358,6 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-promise-suspense@0.3.4: - resolution: {integrity: sha512-I42jl7L3Ze6kZaq+7zXWSunBa3b1on5yfvUW6Eo/3fFOj6dZ5Bqmcd264nJbTK/gn1HjjILAjSwnZbV4RpSaNQ==} - react-refresh@0.17.0: resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} engines: {node: '>=0.10.0'} @@ -8369,6 +8462,10 @@ packages: resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} hasBin: true + release-zalgo@1.0.0: + resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} + engines: {node: '>=4'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -8377,14 +8474,13 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-in-the-middle@7.5.2: - resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} - engines: {node: '>=8.6.0'} - require-in-the-middle@8.0.0: resolution: {integrity: sha512-9s0pnM5tH8G4dSI3pms2GboYOs25LwOGnRMxN/Hx3TYT1K0rh6OjaWf4dI0DAQnMyaEXWoGVnSTPQasqwzTTAA==} engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -8441,9 +8537,14 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup-plugin-copy@3.5.0: - resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==} - engines: {node: '>=8.3'} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true rollup-plugin-postcss@4.0.2: resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} @@ -8683,6 +8784,9 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} @@ -8797,6 +8901,10 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + spawn-wrap@2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -8833,8 +8941,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -8920,9 +9028,6 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - strnum@2.1.1: resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} @@ -8979,6 +9084,9 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} + tailwindcss@4.1.12: + resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==} + tapable@2.2.2: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} @@ -9015,10 +9123,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} @@ -9031,23 +9135,16 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tinyexec@1.0.2: + resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + engines: {node: '>=18'} tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} engines: {node: '>=14.0.0'} tldts-core@6.1.86: @@ -9188,6 +9285,10 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -9216,6 +9317,9 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} + typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-plugin-css-modules@5.2.0: resolution: {integrity: sha512-c5pAU5d+m3GciDr/WhkFldz1NIEGBafuP/3xhFt9BEXS2gmn/LvjkoZ11vEBIuP8LkXfPNhOt1BUhM5efFuwOw==} peerDependencies: @@ -9335,6 +9439,10 @@ packages: resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} hasBin: true + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -9346,10 +9454,6 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} - validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} @@ -9357,11 +9461,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite@7.1.5: resolution: {integrity: sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -9402,26 +9501,32 @@ packages: yaml: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.0.15: + resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.15 + '@vitest/browser-preview': 4.0.15 + '@vitest/browser-webdriverio': 4.0.15 + '@vitest/ui': 4.0.15 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': optional: true '@vitest/ui': optional: true @@ -9444,8 +9549,12 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - web-vitals@4.2.4: - resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + web-vitals@5.1.0: + resolution: {integrity: sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg==} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -9507,6 +9616,9 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + which-typed-array@1.1.19: resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} @@ -9547,6 +9659,9 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + write-file-atomic@5.0.1: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -9602,6 +9717,9 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -9618,10 +9736,18 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -9672,11 +9798,6 @@ snapshots: '@adobe/css-tools@4.4.4': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -9708,7 +9829,7 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.910.0 + '@aws-sdk/types': 3.922.0 '@aws-sdk/util-locate-window': 3.893.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -9716,7 +9837,7 @@ snapshots: '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.910.0 + '@aws-sdk/types': 3.922.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -9725,368 +9846,367 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.910.0 + '@aws-sdk/types': 3.922.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-sesv2@3.911.0': + '@aws-sdk/client-sesv2@3.929.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.911.0 - '@aws-sdk/credential-provider-node': 3.911.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.911.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/signature-v4-multi-region': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.911.0 - '@smithy/config-resolver': 4.3.3 - '@smithy/core': 3.17.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/hash-node': 4.2.3 - '@smithy/invalid-dependency': 4.2.3 - '@smithy/middleware-content-length': 4.2.3 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 - '@smithy/middleware-serde': 4.2.3 - '@smithy/middleware-stack': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/node-http-handler': 4.4.2 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/credential-provider-node': 3.929.0 + '@aws-sdk/middleware-host-header': 3.922.0 + '@aws-sdk/middleware-logger': 3.922.0 + '@aws-sdk/middleware-recursion-detection': 3.922.0 + '@aws-sdk/middleware-user-agent': 3.928.0 + '@aws-sdk/region-config-resolver': 3.925.0 + '@aws-sdk/signature-v4-multi-region': 3.928.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@aws-sdk/util-user-agent-browser': 3.922.0 + '@aws-sdk/util-user-agent-node': 3.928.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.7 + '@smithy/middleware-retry': 4.4.7 + '@smithy/middleware-serde': 4.2.5 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.3 - '@smithy/util-defaults-mode-node': 4.2.4 - '@smithy/util-endpoints': 3.2.3 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.6 + '@smithy/util-defaults-mode-node': 4.2.9 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.911.0': + '@aws-sdk/client-sso@3.929.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.911.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.911.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.911.0 - '@smithy/config-resolver': 4.3.3 - '@smithy/core': 3.17.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/hash-node': 4.2.3 - '@smithy/invalid-dependency': 4.2.3 - '@smithy/middleware-content-length': 4.2.3 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 - '@smithy/middleware-serde': 4.2.3 - '@smithy/middleware-stack': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/node-http-handler': 4.4.2 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/middleware-host-header': 3.922.0 + '@aws-sdk/middleware-logger': 3.922.0 + '@aws-sdk/middleware-recursion-detection': 3.922.0 + '@aws-sdk/middleware-user-agent': 3.928.0 + '@aws-sdk/region-config-resolver': 3.925.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@aws-sdk/util-user-agent-browser': 3.922.0 + '@aws-sdk/util-user-agent-node': 3.928.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.7 + '@smithy/middleware-retry': 4.4.7 + '@smithy/middleware-serde': 4.2.5 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.3 - '@smithy/util-defaults-mode-node': 4.2.4 - '@smithy/util-endpoints': 3.2.3 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.6 + '@smithy/util-defaults-mode-node': 4.2.9 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.911.0': - dependencies: - '@aws-sdk/types': 3.910.0 - '@aws-sdk/xml-builder': 3.911.0 - '@smithy/core': 3.17.0 - '@smithy/node-config-provider': 4.3.3 - '@smithy/property-provider': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/signature-v4': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 + '@aws-sdk/core@3.928.0': + dependencies: + '@aws-sdk/types': 3.922.0 + '@aws-sdk/xml-builder': 3.921.0 + '@smithy/core': 3.18.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 '@smithy/util-base64': 4.3.0 - '@smithy/util-middleware': 4.2.3 + '@smithy/util-middleware': 4.2.5 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.911.0': + '@aws-sdk/credential-provider-env@3.928.0': dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.3 - '@smithy/types': 4.8.0 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.911.0': - dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/node-http-handler': 4.4.2 - '@smithy/property-provider': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/util-stream': 4.5.3 + '@aws-sdk/credential-provider-http@3.928.0': + dependencies: + '@aws-sdk/core': 3.928.0 + '@aws-sdk/types': 3.922.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/property-provider': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.911.0': - dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/credential-provider-env': 3.911.0 - '@aws-sdk/credential-provider-http': 3.911.0 - '@aws-sdk/credential-provider-process': 3.911.0 - '@aws-sdk/credential-provider-sso': 3.911.0 - '@aws-sdk/credential-provider-web-identity': 3.911.0 - '@aws-sdk/nested-clients': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/credential-provider-imds': 4.2.3 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/credential-provider-ini@3.929.0': + dependencies: + '@aws-sdk/core': 3.928.0 + '@aws-sdk/credential-provider-env': 3.928.0 + '@aws-sdk/credential-provider-http': 3.928.0 + '@aws-sdk/credential-provider-process': 3.928.0 + '@aws-sdk/credential-provider-sso': 3.929.0 + '@aws-sdk/credential-provider-web-identity': 3.929.0 + '@aws-sdk/nested-clients': 3.929.0 + '@aws-sdk/types': 3.922.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.911.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.911.0 - '@aws-sdk/credential-provider-http': 3.911.0 - '@aws-sdk/credential-provider-ini': 3.911.0 - '@aws-sdk/credential-provider-process': 3.911.0 - '@aws-sdk/credential-provider-sso': 3.911.0 - '@aws-sdk/credential-provider-web-identity': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/credential-provider-imds': 4.2.3 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/credential-provider-node@3.929.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.928.0 + '@aws-sdk/credential-provider-http': 3.928.0 + '@aws-sdk/credential-provider-ini': 3.929.0 + '@aws-sdk/credential-provider-process': 3.928.0 + '@aws-sdk/credential-provider-sso': 3.929.0 + '@aws-sdk/credential-provider-web-identity': 3.929.0 + '@aws-sdk/types': 3.922.0 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.911.0': + '@aws-sdk/credential-provider-process@3.928.0': dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.911.0': + '@aws-sdk/credential-provider-sso@3.929.0': dependencies: - '@aws-sdk/client-sso': 3.911.0 - '@aws-sdk/core': 3.911.0 - '@aws-sdk/token-providers': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/client-sso': 3.929.0 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/token-providers': 3.929.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.911.0': + '@aws-sdk/credential-provider-web-identity@3.929.0': dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/nested-clients': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/nested-clients': 3.929.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/middleware-host-header@3.910.0': + '@aws-sdk/middleware-host-header@3.922.0': dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/types': 3.922.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.910.0': + '@aws-sdk/middleware-logger@3.922.0': dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/types': 4.8.0 + '@aws-sdk/types': 3.922.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.910.0': + '@aws-sdk/middleware-recursion-detection@3.922.0': dependencies: - '@aws-sdk/types': 3.910.0 - '@aws/lambda-invoke-store': 0.0.1 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/types': 3.922.0 + '@aws/lambda-invoke-store': 0.1.1 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.911.0': + '@aws-sdk/middleware-sdk-s3@3.928.0': dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/types': 3.910.0 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/types': 3.922.0 '@aws-sdk/util-arn-parser': 3.893.0 - '@smithy/core': 3.17.0 - '@smithy/node-config-provider': 4.3.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/signature-v4': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 + '@smithy/core': 3.18.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-stream': 4.5.3 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.911.0': + '@aws-sdk/middleware-user-agent@3.928.0': dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@smithy/core': 3.17.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@smithy/core': 3.18.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.911.0': + '@aws-sdk/nested-clients@3.929.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.911.0 - '@aws-sdk/middleware-host-header': 3.910.0 - '@aws-sdk/middleware-logger': 3.910.0 - '@aws-sdk/middleware-recursion-detection': 3.910.0 - '@aws-sdk/middleware-user-agent': 3.911.0 - '@aws-sdk/region-config-resolver': 3.910.0 - '@aws-sdk/types': 3.910.0 - '@aws-sdk/util-endpoints': 3.910.0 - '@aws-sdk/util-user-agent-browser': 3.910.0 - '@aws-sdk/util-user-agent-node': 3.911.0 - '@smithy/config-resolver': 4.3.3 - '@smithy/core': 3.17.0 - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/hash-node': 4.2.3 - '@smithy/invalid-dependency': 4.2.3 - '@smithy/middleware-content-length': 4.2.3 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-retry': 4.4.4 - '@smithy/middleware-serde': 4.2.3 - '@smithy/middleware-stack': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/node-http-handler': 4.4.2 - '@smithy/protocol-http': 5.3.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/middleware-host-header': 3.922.0 + '@aws-sdk/middleware-logger': 3.922.0 + '@aws-sdk/middleware-recursion-detection': 3.922.0 + '@aws-sdk/middleware-user-agent': 3.928.0 + '@aws-sdk/region-config-resolver': 3.925.0 + '@aws-sdk/types': 3.922.0 + '@aws-sdk/util-endpoints': 3.922.0 + '@aws-sdk/util-user-agent-browser': 3.922.0 + '@aws-sdk/util-user-agent-node': 3.928.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/core': 3.18.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/hash-node': 4.2.5 + '@smithy/invalid-dependency': 4.2.5 + '@smithy/middleware-content-length': 4.2.5 + '@smithy/middleware-endpoint': 4.3.7 + '@smithy/middleware-retry': 4.4.7 + '@smithy/middleware-serde': 4.2.5 + '@smithy/middleware-stack': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/node-http-handler': 4.4.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 '@smithy/util-body-length-node': 4.2.1 - '@smithy/util-defaults-mode-browser': 4.3.3 - '@smithy/util-defaults-mode-node': 4.2.4 - '@smithy/util-endpoints': 3.2.3 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/util-defaults-mode-browser': 4.3.6 + '@smithy/util-defaults-mode-node': 4.2.9 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.910.0': + '@aws-sdk/region-config-resolver@3.925.0': dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 - '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.3 + '@aws-sdk/types': 3.922.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.911.0': + '@aws-sdk/signature-v4-multi-region@3.928.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/signature-v4': 5.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/middleware-sdk-s3': 3.928.0 + '@aws-sdk/types': 3.922.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/signature-v4': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.911.0': + '@aws-sdk/token-providers@3.929.0': dependencies: - '@aws-sdk/core': 3.911.0 - '@aws-sdk/nested-clients': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/core': 3.928.0 + '@aws-sdk/nested-clients': 3.929.0 + '@aws-sdk/types': 3.922.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.910.0': + '@aws-sdk/types@3.922.0': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 '@aws-sdk/util-arn-parser@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.910.0': + '@aws-sdk/util-endpoints@3.922.0': dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 - '@smithy/util-endpoints': 3.2.3 + '@aws-sdk/types': 3.922.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-endpoints': 3.2.5 tslib: 2.8.1 '@aws-sdk/util-locate-window@3.893.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.910.0': + '@aws-sdk/util-user-agent-browser@3.922.0': dependencies: - '@aws-sdk/types': 3.910.0 - '@smithy/types': 4.8.0 + '@aws-sdk/types': 3.922.0 + '@smithy/types': 4.9.0 bowser: 2.12.1 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.911.0': + '@aws-sdk/util-user-agent-node@3.928.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.911.0 - '@aws-sdk/types': 3.910.0 - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 + '@aws-sdk/middleware-user-agent': 3.928.0 + '@aws-sdk/types': 3.922.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.911.0': + '@aws-sdk/xml-builder@3.921.0': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 fast-xml-parser: 5.2.5 tslib: 2.8.1 - '@aws/lambda-invoke-store@0.0.1': {} + '@aws/lambda-invoke-store@0.1.1': {} '@babel/code-frame@7.27.1': dependencies: @@ -10227,6 +10347,8 @@ snapshots: '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} + '@babel/helper-validator-option@7.27.1': {} '@babel/helper-wrap-function@7.27.1': @@ -10246,6 +10368,10 @@ snapshots: dependencies: '@babel/types': 7.28.4 + '@babel/parser@7.28.5': + dependencies: + '@babel/types': 7.28.5 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -10917,6 +11043,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.5': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 + '@bcoe/v8-coverage@0.2.3': {} '@bcoe/v8-coverage@1.0.2': {} @@ -10972,16 +11103,16 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@emnapi/core@1.4.3': + '@emnapi/core@1.7.0': dependencies: - '@emnapi/wasi-threads': 1.0.2 + '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.7.0': dependencies: tslib: 2.8.1 - '@emnapi/wasi-threads@1.0.2': + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 @@ -11268,28 +11399,37 @@ snapshots: '@floating-ui/utils@0.2.10': {} - '@grafana/faro-core@1.19.0': + '@google/genai@1.30.0': + dependencies: + google-auth-library: 10.5.0 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@grafana/faro-core@2.0.2': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) - '@grafana/faro-web-sdk@1.19.0': + '@grafana/faro-web-sdk@2.0.2': dependencies: - '@grafana/faro-core': 1.19.0 + '@grafana/faro-core': 2.0.2 ua-parser-js: 1.0.41 - web-vitals: 4.2.4 + web-vitals: 5.1.0 - '@grafana/faro-web-tracing@1.19.0': + '@grafana/faro-web-tracing@2.0.2': dependencies: - '@grafana/faro-web-sdk': 1.19.0 + '@grafana/faro-web-sdk': 2.0.2 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fetch': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-xml-http-request': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fetch': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-xml-http-request': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-web': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: @@ -11309,13 +11449,13 @@ snapshots: '@hexagon/base64@1.1.28': {} - '@hono/node-server@1.19.5(hono@4.9.12)': + '@hono/node-server@1.19.6(hono@4.10.5)': dependencies: - hono: 4.9.12 + hono: 4.10.5 - '@hono/zod-validator@0.7.4(hono@4.9.12)(zod@4.1.12)': + '@hono/zod-validator@0.7.4(hono@4.10.5)(zod@4.1.12)': dependencies: - hono: 4.9.12 + hono: 4.10.5 zod: 4.1.12 '@humanfs/core@0.19.1': {} @@ -11544,8 +11684,8 @@ snapshots: dependencies: '@babel/core': 7.28.4 '@jest/types': 30.0.5 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 7.0.0 + '@jridgewell/trace-mapping': 0.3.31 + babel-plugin-istanbul: 7.0.1 chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 @@ -11617,15 +11757,8 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -11653,17 +11786,17 @@ snapshots: lodash: 4.17.21 rslog: 1.2.8 - '@module-federation/bridge-react-webpack-plugin@0.18.0': + '@module-federation/bridge-react-webpack-plugin@0.21.4': dependencies: - '@module-federation/sdk': 0.18.0 + '@module-federation/sdk': 0.21.4 '@types/semver': 7.5.8 semver: 7.6.3 - '@module-federation/cli@0.18.0(typescript@5.9.3)': + '@module-federation/cli@0.21.4(typescript@5.9.3)': dependencies: '@modern-js/node-bundle-require': 2.68.2 - '@module-federation/dts-plugin': 0.18.0(typescript@5.9.3) - '@module-federation/sdk': 0.18.0 + '@module-federation/dts-plugin': 0.21.4(typescript@5.9.3) + '@module-federation/sdk': 0.21.4 chalk: 3.0.0 commander: 11.1.0 transitivePeerDependencies: @@ -11674,27 +11807,27 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/data-prefetch@0.18.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@module-federation/data-prefetch@0.21.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@module-federation/runtime': 0.18.0 - '@module-federation/sdk': 0.18.0 + '@module-federation/runtime': 0.21.4 + '@module-federation/sdk': 0.21.4 fs-extra: 9.1.0 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@module-federation/dts-plugin@0.18.0(typescript@5.9.3)': + '@module-federation/dts-plugin@0.21.4(typescript@5.9.3)': dependencies: - '@module-federation/error-codes': 0.18.0 - '@module-federation/managers': 0.18.0 - '@module-federation/sdk': 0.18.0 - '@module-federation/third-party-dts-extractor': 0.18.0 + '@module-federation/error-codes': 0.21.4 + '@module-federation/managers': 0.21.4 + '@module-federation/sdk': 0.21.4 + '@module-federation/third-party-dts-extractor': 0.21.4 adm-zip: 0.5.16 ansi-colors: 4.1.3 - axios: 1.10.0 + axios: 1.12.2 chalk: 3.0.0 fs-extra: 9.1.0 isomorphic-ws: 5.0.0(ws@8.18.0) - koa: 3.0.1 + koa: 3.0.3 lodash.clonedeepwith: 4.5.0 log4js: 6.9.1 node-schedule: 2.1.1 @@ -11707,19 +11840,19 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/enhanced@0.18.0(@rspack/core@1.4.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12))': - dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.18.0 - '@module-federation/cli': 0.18.0(typescript@5.9.3) - '@module-federation/data-prefetch': 0.18.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@module-federation/dts-plugin': 0.18.0(typescript@5.9.3) - '@module-federation/error-codes': 0.18.0 - '@module-federation/inject-external-runtime-core-plugin': 0.18.0(@module-federation/runtime-tools@0.18.0) - '@module-federation/managers': 0.18.0 - '@module-federation/manifest': 0.18.0(typescript@5.9.3) - '@module-federation/rspack': 0.18.0(@rspack/core@1.4.1(@swc/helpers@0.5.17))(typescript@5.9.3) - '@module-federation/runtime-tools': 0.18.0 - '@module-federation/sdk': 0.18.0 + '@module-federation/enhanced@0.21.4(@rspack/core@1.6.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12))': + dependencies: + '@module-federation/bridge-react-webpack-plugin': 0.21.4 + '@module-federation/cli': 0.21.4(typescript@5.9.3) + '@module-federation/data-prefetch': 0.21.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@module-federation/dts-plugin': 0.21.4(typescript@5.9.3) + '@module-federation/error-codes': 0.21.4 + '@module-federation/inject-external-runtime-core-plugin': 0.21.4(@module-federation/runtime-tools@0.21.4) + '@module-federation/managers': 0.21.4 + '@module-federation/manifest': 0.21.4(typescript@5.9.3) + '@module-federation/rspack': 0.21.4(@rspack/core@1.6.1(@swc/helpers@0.5.17))(typescript@5.9.3) + '@module-federation/runtime-tools': 0.21.4 + '@module-federation/sdk': 0.21.4 btoa: 1.2.1 schema-utils: 4.3.2 upath: 2.0.1 @@ -11735,25 +11868,25 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/error-codes@0.15.0': {} + '@module-federation/error-codes@0.21.2': {} - '@module-federation/error-codes@0.18.0': {} + '@module-federation/error-codes@0.21.4': {} - '@module-federation/inject-external-runtime-core-plugin@0.18.0(@module-federation/runtime-tools@0.18.0)': + '@module-federation/inject-external-runtime-core-plugin@0.21.4(@module-federation/runtime-tools@0.21.4)': dependencies: - '@module-federation/runtime-tools': 0.18.0 + '@module-federation/runtime-tools': 0.21.4 - '@module-federation/managers@0.18.0': + '@module-federation/managers@0.21.4': dependencies: - '@module-federation/sdk': 0.18.0 + '@module-federation/sdk': 0.21.4 find-pkg: 2.0.0 fs-extra: 9.1.0 - '@module-federation/manifest@0.18.0(typescript@5.9.3)': + '@module-federation/manifest@0.21.4(typescript@5.9.3)': dependencies: - '@module-federation/dts-plugin': 0.18.0(typescript@5.9.3) - '@module-federation/managers': 0.18.0 - '@module-federation/sdk': 0.18.0 + '@module-federation/dts-plugin': 0.21.4(typescript@5.9.3) + '@module-federation/managers': 0.21.4 + '@module-federation/sdk': 0.21.4 chalk: 3.0.0 find-pkg: 2.0.0 transitivePeerDependencies: @@ -11764,11 +11897,11 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/node@2.7.11(@rspack/core@1.4.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12))': + '@module-federation/node@2.7.23(@rspack/core@1.6.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12))': dependencies: - '@module-federation/enhanced': 0.18.0(@rspack/core@1.4.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) - '@module-federation/runtime': 0.18.0 - '@module-federation/sdk': 0.18.0 + '@module-federation/enhanced': 0.21.4(@rspack/core@1.6.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) + '@module-federation/runtime': 0.21.4 + '@module-federation/sdk': 0.21.4 btoa: 1.2.1 encoding: 0.1.13 node-fetch: 2.7.0(encoding@0.1.13) @@ -11785,16 +11918,16 @@ snapshots: - utf-8-validate - vue-tsc - '@module-federation/rspack@0.18.0(@rspack/core@1.4.1(@swc/helpers@0.5.17))(typescript@5.9.3)': + '@module-federation/rspack@0.21.4(@rspack/core@1.6.1(@swc/helpers@0.5.17))(typescript@5.9.3)': dependencies: - '@module-federation/bridge-react-webpack-plugin': 0.18.0 - '@module-federation/dts-plugin': 0.18.0(typescript@5.9.3) - '@module-federation/inject-external-runtime-core-plugin': 0.18.0(@module-federation/runtime-tools@0.18.0) - '@module-federation/managers': 0.18.0 - '@module-federation/manifest': 0.18.0(typescript@5.9.3) - '@module-federation/runtime-tools': 0.18.0 - '@module-federation/sdk': 0.18.0 - '@rspack/core': 1.4.1(@swc/helpers@0.5.17) + '@module-federation/bridge-react-webpack-plugin': 0.21.4 + '@module-federation/dts-plugin': 0.21.4(typescript@5.9.3) + '@module-federation/inject-external-runtime-core-plugin': 0.21.4(@module-federation/runtime-tools@0.21.4) + '@module-federation/managers': 0.21.4 + '@module-federation/manifest': 0.21.4(typescript@5.9.3) + '@module-federation/runtime-tools': 0.21.4 + '@module-federation/sdk': 0.21.4 + '@rspack/core': 1.6.1(@swc/helpers@0.5.17) btoa: 1.2.1 optionalDependencies: typescript: 5.9.3 @@ -11804,57 +11937,57 @@ snapshots: - supports-color - utf-8-validate - '@module-federation/runtime-core@0.15.0': + '@module-federation/runtime-core@0.21.2': dependencies: - '@module-federation/error-codes': 0.15.0 - '@module-federation/sdk': 0.15.0 + '@module-federation/error-codes': 0.21.2 + '@module-federation/sdk': 0.21.2 - '@module-federation/runtime-core@0.18.0': + '@module-federation/runtime-core@0.21.4': dependencies: - '@module-federation/error-codes': 0.18.0 - '@module-federation/sdk': 0.18.0 + '@module-federation/error-codes': 0.21.4 + '@module-federation/sdk': 0.21.4 - '@module-federation/runtime-tools@0.15.0': + '@module-federation/runtime-tools@0.21.2': dependencies: - '@module-federation/runtime': 0.15.0 - '@module-federation/webpack-bundler-runtime': 0.15.0 + '@module-federation/runtime': 0.21.2 + '@module-federation/webpack-bundler-runtime': 0.21.2 - '@module-federation/runtime-tools@0.18.0': + '@module-federation/runtime-tools@0.21.4': dependencies: - '@module-federation/runtime': 0.18.0 - '@module-federation/webpack-bundler-runtime': 0.18.0 + '@module-federation/runtime': 0.21.4 + '@module-federation/webpack-bundler-runtime': 0.21.4 - '@module-federation/runtime@0.15.0': + '@module-federation/runtime@0.21.2': dependencies: - '@module-federation/error-codes': 0.15.0 - '@module-federation/runtime-core': 0.15.0 - '@module-federation/sdk': 0.15.0 + '@module-federation/error-codes': 0.21.2 + '@module-federation/runtime-core': 0.21.2 + '@module-federation/sdk': 0.21.2 - '@module-federation/runtime@0.18.0': + '@module-federation/runtime@0.21.4': dependencies: - '@module-federation/error-codes': 0.18.0 - '@module-federation/runtime-core': 0.18.0 - '@module-federation/sdk': 0.18.0 + '@module-federation/error-codes': 0.21.4 + '@module-federation/runtime-core': 0.21.4 + '@module-federation/sdk': 0.21.4 - '@module-federation/sdk@0.15.0': {} + '@module-federation/sdk@0.21.2': {} - '@module-federation/sdk@0.18.0': {} + '@module-federation/sdk@0.21.4': {} - '@module-federation/third-party-dts-extractor@0.18.0': + '@module-federation/third-party-dts-extractor@0.21.4': dependencies: find-pkg: 2.0.0 fs-extra: 9.1.0 resolve: 1.22.8 - '@module-federation/webpack-bundler-runtime@0.15.0': + '@module-federation/webpack-bundler-runtime@0.21.2': dependencies: - '@module-federation/runtime': 0.15.0 - '@module-federation/sdk': 0.15.0 + '@module-federation/runtime': 0.21.2 + '@module-federation/sdk': 0.21.2 - '@module-federation/webpack-bundler-runtime@0.18.0': + '@module-federation/webpack-bundler-runtime@0.21.4': dependencies: - '@module-federation/runtime': 0.18.0 - '@module-federation/sdk': 0.18.0 + '@module-federation/runtime': 0.21.4 + '@module-federation/sdk': 0.21.4 '@msgpack/msgpack@2.8.0': {} @@ -11896,17 +12029,24 @@ snapshots: '@napi-rs/wasm-runtime@0.2.11': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 '@tybys/wasm-util': 0.9.0 optional: true '@napi-rs/wasm-runtime@0.2.4': dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 '@tybys/wasm-util': 0.9.0 + '@napi-rs/wasm-runtime@1.0.7': + dependencies: + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 + '@tybys/wasm-util': 0.10.1 + optional: true + '@noble/ciphers@2.0.1': {} '@noble/hashes@2.0.1': {} @@ -11923,29 +12063,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nx/devkit@21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/devkit@22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: + '@zkochan/js-yaml': 0.0.7 ejs: 3.1.10 enquirer: 2.3.6 - ignore: 5.3.2 minimatch: 9.0.3 - nx: 21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) + nx: 22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) semver: 7.7.2 tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/docker@21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/docker@22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) enquirer: 2.3.6 tslib: 2.8.1 transitivePeerDependencies: - nx - '@nx/esbuild@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/esbuild@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) picocolors: 1.1.1 tinyglobby: 0.2.15 tsconfig-paths: 4.2.0 @@ -11961,10 +12101,10 @@ snapshots: - supports-color - verdaccio - '@nx/eslint-plugin@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.4.2))(typescript@5.9.3))(eslint-config-prettier@10.1.5(eslint@9.37.0(jiti@2.4.2)))(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)': + '@nx/eslint-plugin@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@typescript-eslint/parser@8.46.1(eslint@9.37.0(jiti@2.4.2))(typescript@5.9.3))(eslint-config-prettier@10.1.5(eslint@9.37.0(jiti@2.4.2)))(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.9.3) '@typescript-eslint/parser': 8.46.1(eslint@9.37.0(jiti@2.4.2))(typescript@5.9.3) '@typescript-eslint/type-utils': 8.46.1(eslint@9.37.0(jiti@2.4.2))(typescript@5.9.3) @@ -11988,10 +12128,10 @@ snapshots: - typescript - verdaccio - '@nx/eslint@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/eslint@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) eslint: 9.37.0(jiti@2.4.2) semver: 7.7.2 tslib: 2.8.1 @@ -12007,12 +12147,12 @@ snapshots: - supports-color - verdaccio - '@nx/jest@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)': + '@nx/jest@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)': dependencies: '@jest/reporters': 30.0.5 '@jest/test-result': 30.0.5 - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.9.3) identity-obj-proxy: 3.0.0 jest-config: 30.0.5(@types/node@24.3.0)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3)) @@ -12039,7 +12179,7 @@ snapshots: - typescript - verdaccio - '@nx/js@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/js@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': dependencies: '@babel/core': 7.28.4 '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.28.4) @@ -12048,8 +12188,8 @@ snapshots: '@babel/preset-env': 7.27.2(@babel/core@7.28.4) '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4) '@babel/runtime': 7.27.6 - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/workspace': 21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/workspace': 22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) '@zkochan/js-yaml': 0.0.7 babel-plugin-const-enum: 1.2.0(@babel/core@7.28.4) babel-plugin-macros: 3.1.0 @@ -12057,13 +12197,10 @@ snapshots: chalk: 4.1.2 columnify: 1.6.0 detect-port: 1.6.1 - enquirer: 2.3.6 ignore: 5.3.2 js-tokens: 4.0.0 jsonc-parser: 3.2.0 - npm-package-arg: 11.0.1 npm-run-path: 4.0.1 - ora: 5.3.0 picocolors: 1.1.1 picomatch: 4.0.2 semver: 7.7.2 @@ -12078,15 +12215,15 @@ snapshots: - nx - supports-color - '@nx/module-federation@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(esbuild@0.19.12)(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)': + '@nx/module-federation@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(esbuild@0.19.12)(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)': dependencies: - '@module-federation/enhanced': 0.18.0(@rspack/core@1.4.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) - '@module-federation/node': 2.7.11(@rspack/core@1.4.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) - '@module-federation/sdk': 0.18.0 - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/web': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@rspack/core': 1.4.1(@swc/helpers@0.5.17) + '@module-federation/enhanced': 0.21.4(@rspack/core@1.6.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) + '@module-federation/node': 2.7.23(@rspack/core@1.6.1(@swc/helpers@0.5.17))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)) + '@module-federation/sdk': 0.21.4 + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/web': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@rspack/core': 1.6.1(@swc/helpers@0.5.17) express: 4.21.2 http-proxy-middleware: 3.0.5 picocolors: 1.1.1 @@ -12112,13 +12249,13 @@ snapshots: - vue-tsc - webpack-cli - '@nx/node@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)': + '@nx/node@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/docker': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/eslint': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/jest': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/docker': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/eslint': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/jest': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(babel-plugin-macros@3.1.0)(esbuild-register@3.6.0(esbuild@0.19.12))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) kill-port: 1.6.1 tcp-port-used: 1.0.2 tslib: 2.8.1 @@ -12139,45 +12276,44 @@ snapshots: - typescript - verdaccio - '@nx/nx-darwin-arm64@21.6.4': + '@nx/nx-darwin-arm64@22.1.3': optional: true - '@nx/nx-darwin-x64@21.6.4': + '@nx/nx-darwin-x64@22.1.3': optional: true - '@nx/nx-freebsd-x64@21.6.4': + '@nx/nx-freebsd-x64@22.1.3': optional: true - '@nx/nx-linux-arm-gnueabihf@21.6.4': + '@nx/nx-linux-arm-gnueabihf@22.1.3': optional: true - '@nx/nx-linux-arm64-gnu@21.6.4': + '@nx/nx-linux-arm64-gnu@22.1.3': optional: true - '@nx/nx-linux-arm64-musl@21.6.4': + '@nx/nx-linux-arm64-musl@22.1.3': optional: true - '@nx/nx-linux-x64-gnu@21.6.4': + '@nx/nx-linux-x64-gnu@22.1.3': optional: true - '@nx/nx-linux-x64-musl@21.6.4': + '@nx/nx-linux-x64-musl@22.1.3': optional: true - '@nx/nx-win32-arm64-msvc@21.6.4': + '@nx/nx-win32-arm64-msvc@22.1.3': optional: true - '@nx/nx-win32-x64-msvc@21.6.4': + '@nx/nx-win32-x64-msvc@22.1.3': optional: true - '@nx/react@21.6.4(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@3.2.4)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12))': + '@nx/react@22.1.3(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/babel__core@7.20.5)(@zkochan/js-yaml@0.0.7)(esbuild@0.19.12)(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15)(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12))': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/eslint': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/module-federation': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(esbuild@0.19.12)(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3) - '@nx/rollup': 21.6.4(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) - '@nx/vite': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@3.2.4) - '@nx/web': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/eslint': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@zkochan/js-yaml@0.0.7)(eslint@9.37.0(jiti@2.4.2))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/module-federation': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(esbuild@0.19.12)(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.9.3) + '@nx/rollup': 22.1.3(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3) + '@nx/web': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.9.3) '@svgr/webpack': 8.1.0(typescript@5.9.3) express: 4.21.2 @@ -12187,6 +12323,8 @@ snapshots: picocolors: 1.1.1 semver: 7.7.2 tslib: 2.8.1 + optionalDependencies: + '@nx/vite': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15) transitivePeerDependencies: - '@babel/core' - '@babel/traverse' @@ -12215,10 +12353,10 @@ snapshots: - webpack - webpack-cli - '@nx/rollup@21.6.4(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)': + '@nx/rollup@22.1.3(@babel/core@7.28.4)(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/babel__core@7.20.5)(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3)': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@rollup/plugin-babel': 6.0.4(@babel/core@7.28.4)(@types/babel__core@7.20.5)(rollup@4.50.1) '@rollup/plugin-commonjs': 25.0.8(rollup@4.50.1) '@rollup/plugin-image': 3.0.3(rollup@4.50.1) @@ -12230,7 +12368,6 @@ snapshots: picomatch: 4.0.2 postcss: 8.5.6 rollup: 4.50.1 - rollup-plugin-copy: 3.5.0 rollup-plugin-postcss: 4.0.2(postcss@8.5.6)(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3)) rollup-plugin-typescript2: 0.36.0(rollup@4.50.1)(typescript@5.9.3) tslib: 2.8.1 @@ -12247,10 +12384,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@3.2.4)': + '@nx/vite@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15)': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/vitest': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.9.3) ajv: 8.17.1 enquirer: 2.3.6 @@ -12259,7 +12397,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 vite: 7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) - vitest: 3.2.4(patch_hash=dde3c7a634692aefe0877c763192102a73d3451e6d12dae61df88fd1e6e9368e)(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.3.0)(@vitest/ui@4.0.15)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -12270,10 +12408,30 @@ snapshots: - typescript - verdaccio - '@nx/web@21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + '@nx/vitest@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))(typescript@5.9.3)(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))(vitest@4.0.15)': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) - '@nx/js': 21.6.4(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@phenomnomnominal/tsquery': 5.0.1(typescript@5.9.3) + semver: 7.7.2 + tslib: 2.8.1 + optionalDependencies: + vite: 7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.3.0)(@vitest/ui@4.0.15)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - debug + - nx + - supports-color + - typescript + - verdaccio + + '@nx/web@22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)))': + dependencies: + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/js': 22.1.3(@babel/traverse@7.28.4)(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) detect-port: 1.6.1 http-server: 14.1.1 picocolors: 1.1.1 @@ -12287,13 +12445,13 @@ snapshots: - supports-color - verdaccio - '@nx/workspace@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))': + '@nx/workspace@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))': dependencies: - '@nx/devkit': 21.6.4(nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) + '@nx/devkit': 22.1.3(nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17))) '@zkochan/js-yaml': 0.0.7 chalk: 4.1.2 enquirer: 2.3.6 - nx: 21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) + nx: 22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)) picomatch: 4.0.2 semver: 7.7.2 tslib: 2.8.1 @@ -12312,731 +12470,684 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opentelemetry/api-logs@0.202.0': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api-logs@0.206.0': + '@opentelemetry/api-logs@0.208.0': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} - '@opentelemetry/auto-instrumentations-node@0.65.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + '@opentelemetry/auto-instrumentations-node@0.67.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-amqplib': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-aws-lambda': 0.58.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-aws-sdk': 0.62.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-bunyan': 0.52.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-cassandra-driver': 0.52.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-connect': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-cucumber': 0.22.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-dataloader': 0.24.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-dns': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-express': 0.55.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fastify': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-fs': 0.26.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-generic-pool': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-graphql': 0.54.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-grpc': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-hapi': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-http': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-ioredis': 0.54.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-kafkajs': 0.16.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-knex': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-koa': 0.55.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-lru-memoizer': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-memcached': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongodb': 0.59.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mongoose': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql': 0.52.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-mysql2': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-nestjs-core': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-net': 0.50.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-oracledb': 0.32.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-pg': 0.59.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-pino': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-redis': 0.55.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-restify': 0.52.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-router': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-runtime-node': 0.20.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-socket.io': 0.53.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-tedious': 0.25.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-undici': 0.17.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-winston': 0.51.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-alibaba-cloud': 0.31.9(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-aws': 2.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-azure': 0.14.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-container': 0.7.9(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-gcp': 0.41.0(@opentelemetry/api@1.9.0)(encoding@0.1.13) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-lambda': 0.60.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-sdk': 0.64.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-bunyan': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cucumber': 0.24.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dns': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.18.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-memcached': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-net': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-openai': 0.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-oracledb': 0.34.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-restify': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-router': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-runtime-node': 0.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-socket.io': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.19.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.31.11(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 2.8.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.16.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.7.11(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.43.0(@opentelemetry/api@1.9.0)(encoding@0.1.13) '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - encoding - supports-color - '@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/exporter-logs-otlp-grpc@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-grpc@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-http@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-logs-otlp-proto@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-grpc@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-http@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-metrics-otlp-proto@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-prometheus@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-grpc@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http@0.202.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-http@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-trace-otlp-proto@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/exporter-trace-otlp-proto@0.206.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin@2.1.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/exporter-zipkin@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/instrumentation-amqplib@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-amqplib@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-aws-lambda@0.58.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-aws-lambda@0.60.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@types/aws-lambda': 8.10.152 + '@types/aws-lambda': 8.10.157 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-aws-sdk@0.62.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-aws-sdk@0.64.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-bunyan@0.52.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-bunyan@0.54.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@types/bunyan': 1.8.11 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-cassandra-driver@0.52.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-cassandra-driver@0.54.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-connect@0.50.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-connect@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 '@types/connect': 3.4.38 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-cucumber@0.22.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-cucumber@0.24.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-dataloader@0.24.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-dataloader@0.26.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-dns@0.50.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-dns@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-express@0.55.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-express@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fastify@0.51.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-fastify@0.53.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fetch@0.202.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-fetch@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-web': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-web': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fs@0.26.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-fs@0.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-generic-pool@0.50.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-generic-pool@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-graphql@0.54.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-graphql@0.56.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-grpc@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-grpc@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-hapi@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-hapi@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-http@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-http@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 forwarded-parse: 2.1.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-ioredis@0.54.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-ioredis@0.56.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.38.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-kafkajs@0.16.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-kafkajs@0.18.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-knex@0.51.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-knex@0.53.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-koa@0.55.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-koa@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-lru-memoizer@0.51.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-lru-memoizer@0.53.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-memcached@0.50.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-memcached@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 '@types/memcached': 2.2.10 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongodb@0.59.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mongodb@0.61.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongoose@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mongoose@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql2@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mysql2@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql@0.52.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-mysql@0.54.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@types/mysql': 2.15.27 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-nestjs-core@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-nestjs-core@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-net@0.50.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-net@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-oracledb@0.32.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-openai@0.6.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-oracledb@0.34.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 '@types/oracledb': 6.5.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-pg@0.59.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-pg@0.61.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) - '@types/pg': 8.15.5 + '@types/pg': 8.15.6 '@types/pg-pool': 2.0.6 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-pino@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-pino@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-redis@0.55.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-redis@0.57.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common': 0.38.2 '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-restify@0.52.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-restify@0.54.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-router@0.51.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-router@0.53.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-runtime-node@0.20.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-runtime-node@0.22.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-socket.io@0.53.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-socket.io@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-tedious@0.25.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-tedious@0.27.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@types/tedious': 4.0.14 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-undici@0.17.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-undici@0.19.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-winston@0.51.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-winston@0.53.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-xml-http-request@0.202.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-xml-http-request@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-web': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-web': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.202.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - import-in-the-middle: 1.15.0 - require-in-the-middle: 7.5.2 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation@0.206.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - import-in-the-middle: 1.15.0 + '@opentelemetry/api-logs': 0.208.0 + import-in-the-middle: 2.0.0 require-in-the-middle: 8.0.0 transitivePeerDependencies: - supports-color - '@opentelemetry/otlp-exporter-base@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/otlp-exporter-base@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-exporter-base@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-grpc-exporter-base@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-grpc-exporter-base@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.206.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.208.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer@0.202.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/otlp-transformer@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - protobufjs: 7.5.4 - - '@opentelemetry/otlp-transformer@0.206.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) protobufjs: 7.5.4 - '@opentelemetry/propagator-b3@2.1.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-b3@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger@2.1.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/propagator-jaeger@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/redis-common@0.38.2': {} - '@opentelemetry/resource-detector-alibaba-cloud@0.31.9(@opentelemetry/api@1.9.0)': + '@opentelemetry/resource-detector-alibaba-cloud@0.31.11(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-aws@2.6.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resource-detector-aws@2.8.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/resource-detector-azure@0.14.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resource-detector-azure@0.16.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/resource-detector-container@0.7.9(@opentelemetry/api@1.9.0)': + '@opentelemetry/resource-detector-container@0.7.11(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-gcp@0.41.0(@opentelemetry/api@1.9.0)(encoding@0.1.13)': + '@opentelemetry/resource-detector-gcp@0.43.0(@opentelemetry/api@1.9.0)(encoding@0.1.13)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) gcp-metadata: 6.1.1(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sdk-logs@0.202.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/sdk-logs@0.206.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-logs@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics@2.1.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-metrics@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-node@0.206.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-node@0.208.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.206.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-grpc': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-grpc': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-http': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-metrics-otlp-proto': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-prometheus': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-proto': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-zipkin': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-b3': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/propagator-jaeger': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.206.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api-logs': 0.208.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color - '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -13044,18 +13155,19 @@ snapshots: '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sdk-trace-node@2.1.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/sdk-trace-web@2.0.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/sdk-trace-node@2.2.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-web@2.1.0(@opentelemetry/api@1.9.0)': dependencies: @@ -13063,12 +13175,18 @@ snapshots: '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-web@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions@1.37.0': {} '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -13960,7 +14078,7 @@ snapshots: '@types/react': 19.0.0 '@types/react-dom': 19.0.0 - '@react-email/body@0.1.0(react@19.1.0)': + '@react-email/body@0.2.0(react@19.1.0)': dependencies: react: 19.1.0 @@ -13968,7 +14086,7 @@ snapshots: dependencies: react: 19.1.0 - '@react-email/code-block@0.1.0(react@19.1.0)': + '@react-email/code-block@0.2.0(react@19.1.0)': dependencies: prismjs: 1.30.0 react: 19.1.0 @@ -13981,11 +14099,11 @@ snapshots: dependencies: react: 19.1.0 - '@react-email/components@0.5.6(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-email/components@1.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@react-email/body': 0.1.0(react@19.1.0) + '@react-email/body': 0.2.0(react@19.1.0) '@react-email/button': 0.2.0(react@19.1.0) - '@react-email/code-block': 0.1.0(react@19.1.0) + '@react-email/code-block': 0.2.0(react@19.1.0) '@react-email/code-inline': 0.0.5(react@19.1.0) '@react-email/column': 0.0.13(react@19.1.0) '@react-email/container': 0.0.15(react@19.1.0) @@ -13996,12 +14114,12 @@ snapshots: '@react-email/html': 0.0.11(react@19.1.0) '@react-email/img': 0.0.11(react@19.1.0) '@react-email/link': 0.0.12(react@19.1.0) - '@react-email/markdown': 0.0.15(react@19.1.0) + '@react-email/markdown': 0.0.17(react@19.1.0) '@react-email/preview': 0.0.13(react@19.1.0) - '@react-email/render': 1.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@react-email/render': 2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@react-email/row': 0.0.12(react@19.1.0) '@react-email/section': 0.0.16(react@19.1.0) - '@react-email/tailwind': 1.2.2(react@19.1.0) + '@react-email/tailwind': 2.0.0(@react-email/body@0.2.0(react@19.1.0))(@react-email/button@0.2.0(react@19.1.0))(@react-email/code-block@0.2.0(react@19.1.0))(@react-email/code-inline@0.0.5(react@19.1.0))(@react-email/container@0.0.15(react@19.1.0))(@react-email/heading@0.0.15(react@19.1.0))(@react-email/hr@0.0.11(react@19.1.0))(@react-email/img@0.0.11(react@19.1.0))(@react-email/link@0.0.12(react@19.1.0))(@react-email/preview@0.0.13(react@19.1.0))(@react-email/text@0.1.5(react@19.1.0))(react@19.1.0) '@react-email/text': 0.1.5(react@19.1.0) react: 19.1.0 transitivePeerDependencies: @@ -14039,22 +14157,21 @@ snapshots: dependencies: react: 19.1.0 - '@react-email/markdown@0.0.15(react@19.1.0)': + '@react-email/markdown@0.0.17(react@19.1.0)': dependencies: - md-to-react-email: 5.0.5(react@19.1.0) + marked: 15.0.12 react: 19.1.0 '@react-email/preview@0.0.13(react@19.1.0)': dependencies: react: 19.1.0 - '@react-email/render@1.3.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@react-email/render@2.0.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: html-to-text: 9.0.5 prettier: 3.6.2 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-promise-suspense: 0.3.4 '@react-email/row@0.0.12(react@19.1.0)': dependencies: @@ -14064,9 +14181,22 @@ snapshots: dependencies: react: 19.1.0 - '@react-email/tailwind@1.2.2(react@19.1.0)': + '@react-email/tailwind@2.0.0(@react-email/body@0.2.0(react@19.1.0))(@react-email/button@0.2.0(react@19.1.0))(@react-email/code-block@0.2.0(react@19.1.0))(@react-email/code-inline@0.0.5(react@19.1.0))(@react-email/container@0.0.15(react@19.1.0))(@react-email/heading@0.0.15(react@19.1.0))(@react-email/hr@0.0.11(react@19.1.0))(@react-email/img@0.0.11(react@19.1.0))(@react-email/link@0.0.12(react@19.1.0))(@react-email/preview@0.0.13(react@19.1.0))(@react-email/text@0.1.5(react@19.1.0))(react@19.1.0)': dependencies: + '@react-email/text': 0.1.5(react@19.1.0) react: 19.1.0 + tailwindcss: 4.1.12 + optionalDependencies: + '@react-email/body': 0.2.0(react@19.1.0) + '@react-email/button': 0.2.0(react@19.1.0) + '@react-email/code-block': 0.2.0(react@19.1.0) + '@react-email/code-inline': 0.0.5(react@19.1.0) + '@react-email/container': 0.0.15(react@19.1.0) + '@react-email/heading': 0.0.15(react@19.1.0) + '@react-email/hr': 0.0.11(react@19.1.0) + '@react-email/img': 0.0.11(react@19.1.0) + '@react-email/link': 0.0.12(react@19.1.0) + '@react-email/preview': 0.0.13(react@19.1.0) '@react-email/text@0.1.5(react@19.1.0)': dependencies: @@ -14204,55 +14334,55 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.50.1': optional: true - '@rspack/binding-darwin-arm64@1.4.1': + '@rspack/binding-darwin-arm64@1.6.1': optional: true - '@rspack/binding-darwin-x64@1.4.1': + '@rspack/binding-darwin-x64@1.6.1': optional: true - '@rspack/binding-linux-arm64-gnu@1.4.1': + '@rspack/binding-linux-arm64-gnu@1.6.1': optional: true - '@rspack/binding-linux-arm64-musl@1.4.1': + '@rspack/binding-linux-arm64-musl@1.6.1': optional: true - '@rspack/binding-linux-x64-gnu@1.4.1': + '@rspack/binding-linux-x64-gnu@1.6.1': optional: true - '@rspack/binding-linux-x64-musl@1.4.1': + '@rspack/binding-linux-x64-musl@1.6.1': optional: true - '@rspack/binding-wasm32-wasi@1.4.1': + '@rspack/binding-wasm32-wasi@1.6.1': dependencies: - '@napi-rs/wasm-runtime': 0.2.11 + '@napi-rs/wasm-runtime': 1.0.7 optional: true - '@rspack/binding-win32-arm64-msvc@1.4.1': + '@rspack/binding-win32-arm64-msvc@1.6.1': optional: true - '@rspack/binding-win32-ia32-msvc@1.4.1': + '@rspack/binding-win32-ia32-msvc@1.6.1': optional: true - '@rspack/binding-win32-x64-msvc@1.4.1': + '@rspack/binding-win32-x64-msvc@1.6.1': optional: true - '@rspack/binding@1.4.1': + '@rspack/binding@1.6.1': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.4.1 - '@rspack/binding-darwin-x64': 1.4.1 - '@rspack/binding-linux-arm64-gnu': 1.4.1 - '@rspack/binding-linux-arm64-musl': 1.4.1 - '@rspack/binding-linux-x64-gnu': 1.4.1 - '@rspack/binding-linux-x64-musl': 1.4.1 - '@rspack/binding-wasm32-wasi': 1.4.1 - '@rspack/binding-win32-arm64-msvc': 1.4.1 - '@rspack/binding-win32-ia32-msvc': 1.4.1 - '@rspack/binding-win32-x64-msvc': 1.4.1 - - '@rspack/core@1.4.1(@swc/helpers@0.5.17)': - dependencies: - '@module-federation/runtime-tools': 0.15.0 - '@rspack/binding': 1.4.1 + '@rspack/binding-darwin-arm64': 1.6.1 + '@rspack/binding-darwin-x64': 1.6.1 + '@rspack/binding-linux-arm64-gnu': 1.6.1 + '@rspack/binding-linux-arm64-musl': 1.6.1 + '@rspack/binding-linux-x64-gnu': 1.6.1 + '@rspack/binding-linux-x64-musl': 1.6.1 + '@rspack/binding-wasm32-wasi': 1.6.1 + '@rspack/binding-win32-arm64-msvc': 1.6.1 + '@rspack/binding-win32-ia32-msvc': 1.6.1 + '@rspack/binding-win32-x64-msvc': 1.6.1 + + '@rspack/core@1.6.1(@swc/helpers@0.5.17)': + dependencies: + '@module-federation/runtime-tools': 0.21.2 + '@rspack/binding': 1.6.1 '@rspack/lite-tapable': 1.0.1 optionalDependencies: '@swc/helpers': 0.5.17 @@ -14288,58 +14418,59 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@smithy/abort-controller@4.2.3': + '@smithy/abort-controller@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/config-resolver@4.3.3': + '@smithy/config-resolver@4.4.3': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 '@smithy/util-config-provider': 4.2.0 - '@smithy/util-middleware': 4.2.3 + '@smithy/util-endpoints': 3.2.5 + '@smithy/util-middleware': 4.2.5 tslib: 2.8.1 - '@smithy/core@3.17.0': + '@smithy/core@3.18.0': dependencies: - '@smithy/middleware-serde': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/middleware-serde': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 '@smithy/util-base64': 4.3.0 '@smithy/util-body-length-browser': 4.2.0 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-stream': 4.5.3 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-stream': 4.5.6 '@smithy/util-utf8': 4.2.0 '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.2.3': + '@smithy/credential-provider-imds@4.2.5': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/property-provider': 4.2.3 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.3.4': + '@smithy/fetch-http-handler@5.3.6': dependencies: - '@smithy/protocol-http': 5.3.3 - '@smithy/querystring-builder': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 '@smithy/util-base64': 4.3.0 tslib: 2.8.1 - '@smithy/hash-node@4.2.3': + '@smithy/hash-node@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 '@smithy/util-buffer-from': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/invalid-dependency@4.2.3': + '@smithy/invalid-dependency@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 '@smithy/is-array-buffer@2.2.0': @@ -14350,120 +14481,120 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/middleware-content-length@4.2.3': + '@smithy/middleware-content-length@4.2.5': dependencies: - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.3.4': + '@smithy/middleware-endpoint@4.3.7': dependencies: - '@smithy/core': 3.17.0 - '@smithy/middleware-serde': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 - '@smithy/url-parser': 4.2.3 - '@smithy/util-middleware': 4.2.3 + '@smithy/core': 3.18.0 + '@smithy/middleware-serde': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 + '@smithy/url-parser': 4.2.5 + '@smithy/util-middleware': 4.2.5 tslib: 2.8.1 - '@smithy/middleware-retry@4.4.4': + '@smithy/middleware-retry@4.4.7': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/service-error-classification': 4.2.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 - '@smithy/util-middleware': 4.2.3 - '@smithy/util-retry': 4.2.3 + '@smithy/node-config-provider': 4.3.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/service-error-classification': 4.2.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 + '@smithy/util-middleware': 4.2.5 + '@smithy/util-retry': 4.2.5 '@smithy/uuid': 1.1.0 tslib: 2.8.1 - '@smithy/middleware-serde@4.2.3': + '@smithy/middleware-serde@4.2.5': dependencies: - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/middleware-stack@4.2.3': + '@smithy/middleware-stack@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/node-config-provider@4.3.3': + '@smithy/node-config-provider@4.3.5': dependencies: - '@smithy/property-provider': 4.2.3 - '@smithy/shared-ini-file-loader': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.5 + '@smithy/shared-ini-file-loader': 4.4.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/node-http-handler@4.4.2': + '@smithy/node-http-handler@4.4.5': dependencies: - '@smithy/abort-controller': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/querystring-builder': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/abort-controller': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/querystring-builder': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/property-provider@4.2.3': + '@smithy/property-provider@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/protocol-http@5.3.3': + '@smithy/protocol-http@5.3.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/querystring-builder@4.2.3': + '@smithy/querystring-builder@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 '@smithy/util-uri-escape': 4.2.0 tslib: 2.8.1 - '@smithy/querystring-parser@4.2.3': + '@smithy/querystring-parser@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/service-error-classification@4.2.3': + '@smithy/service-error-classification@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 - '@smithy/shared-ini-file-loader@4.3.3': + '@smithy/shared-ini-file-loader@4.4.0': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/signature-v4@5.3.3': + '@smithy/signature-v4@5.3.5': dependencies: '@smithy/is-array-buffer': 4.2.0 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 '@smithy/util-hex-encoding': 4.2.0 - '@smithy/util-middleware': 4.2.3 + '@smithy/util-middleware': 4.2.5 '@smithy/util-uri-escape': 4.2.0 '@smithy/util-utf8': 4.2.0 tslib: 2.8.1 - '@smithy/smithy-client@4.9.0': + '@smithy/smithy-client@4.9.3': dependencies: - '@smithy/core': 3.17.0 - '@smithy/middleware-endpoint': 4.3.4 - '@smithy/middleware-stack': 4.2.3 - '@smithy/protocol-http': 5.3.3 - '@smithy/types': 4.8.0 - '@smithy/util-stream': 4.5.3 + '@smithy/core': 3.18.0 + '@smithy/middleware-endpoint': 4.3.7 + '@smithy/middleware-stack': 4.2.5 + '@smithy/protocol-http': 5.3.5 + '@smithy/types': 4.9.0 + '@smithy/util-stream': 4.5.6 tslib: 2.8.1 - '@smithy/types@4.8.0': + '@smithy/types@4.9.0': dependencies: tslib: 2.8.1 - '@smithy/url-parser@4.2.3': + '@smithy/url-parser@4.2.5': dependencies: - '@smithy/querystring-parser': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/querystring-parser': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 '@smithy/util-base64@4.3.0': @@ -14494,49 +14625,49 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.3.3': + '@smithy/util-defaults-mode-browser@4.3.6': dependencies: - '@smithy/property-provider': 4.2.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.2.4': + '@smithy/util-defaults-mode-node@4.2.9': dependencies: - '@smithy/config-resolver': 4.3.3 - '@smithy/credential-provider-imds': 4.2.3 - '@smithy/node-config-provider': 4.3.3 - '@smithy/property-provider': 4.2.3 - '@smithy/smithy-client': 4.9.0 - '@smithy/types': 4.8.0 + '@smithy/config-resolver': 4.4.3 + '@smithy/credential-provider-imds': 4.2.5 + '@smithy/node-config-provider': 4.3.5 + '@smithy/property-provider': 4.2.5 + '@smithy/smithy-client': 4.9.3 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-endpoints@3.2.3': + '@smithy/util-endpoints@3.2.5': dependencies: - '@smithy/node-config-provider': 4.3.3 - '@smithy/types': 4.8.0 + '@smithy/node-config-provider': 4.3.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 '@smithy/util-hex-encoding@4.2.0': dependencies: tslib: 2.8.1 - '@smithy/util-middleware@4.2.3': + '@smithy/util-middleware@4.2.5': dependencies: - '@smithy/types': 4.8.0 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-retry@4.2.3': + '@smithy/util-retry@4.2.5': dependencies: - '@smithy/service-error-classification': 4.2.3 - '@smithy/types': 4.8.0 + '@smithy/service-error-classification': 4.2.5 + '@smithy/types': 4.9.0 tslib: 2.8.1 - '@smithy/util-stream@4.5.3': + '@smithy/util-stream@4.5.6': dependencies: - '@smithy/fetch-http-handler': 5.3.4 - '@smithy/node-http-handler': 4.4.2 - '@smithy/types': 4.8.0 + '@smithy/fetch-http-handler': 5.3.6 + '@smithy/node-http-handler': 4.4.5 + '@smithy/types': 4.9.0 '@smithy/util-base64': 4.3.0 '@smithy/util-buffer-from': 4.2.0 '@smithy/util-hex-encoding': 4.2.0 @@ -14571,6 +14702,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@standard-schema/spec@1.0.0': {} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.4)': dependencies: '@babel/core': 7.28.4 @@ -14747,19 +14880,19 @@ snapshots: '@tanstack/history@1.132.31': {} - '@tanstack/query-core@5.90.2': {} + '@tanstack/query-core@5.90.7': {} '@tanstack/query-devtools@5.87.3': {} - '@tanstack/react-query-devtools@5.87.4(@tanstack/react-query@5.90.2(react@19.1.0))(react@19.1.0)': + '@tanstack/react-query-devtools@5.87.4(@tanstack/react-query@5.90.7(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/query-devtools': 5.87.3 - '@tanstack/react-query': 5.90.2(react@19.1.0) + '@tanstack/react-query': 5.90.7(react@19.1.0) react: 19.1.0 - '@tanstack/react-query@5.90.2(react@19.1.0)': + '@tanstack/react-query@5.90.7(react@19.1.0)': dependencies: - '@tanstack/query-core': 5.90.2 + '@tanstack/query-core': 5.90.7 react: 19.1.0 '@tanstack/react-router-devtools@1.131.42(@tanstack/react-router@1.132.47(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@tanstack/router-core@1.132.47)(csstype@3.1.3)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(solid-js@1.9.9)(tiny-invariant@1.3.3)': @@ -14858,13 +14991,18 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 '@types/aria-query@5.0.4': {} - '@types/aws-lambda@8.10.152': {} + '@types/aws-lambda@8.10.157': {} '@types/babel__core@7.20.5': dependencies: @@ -14917,15 +15055,6 @@ snapshots: '@types/estree@1.0.8': {} - '@types/fs-extra@8.1.5': - dependencies: - '@types/node': 24.3.0 - - '@types/glob@7.2.0': - dependencies: - '@types/minimatch': 6.0.0 - '@types/node': 24.3.0 - '@types/http-proxy@1.17.16': dependencies: '@types/node': 24.3.0 @@ -14963,10 +15092,6 @@ snapshots: dependencies: '@types/node': 24.3.0 - '@types/minimatch@6.0.0': - dependencies: - minimatch: 9.0.5 - '@types/mysql@2.15.27': dependencies: '@types/node': 24.3.0 @@ -14977,7 +15102,7 @@ snapshots: '@types/nodemailer@7.0.2': dependencies: - '@aws-sdk/client-sesv2': 3.911.0 + '@aws-sdk/client-sesv2': 3.929.0 '@types/node': 24.3.0 transitivePeerDependencies: - aws-crt @@ -14990,9 +15115,9 @@ snapshots: '@types/pg-pool@2.0.6': dependencies: - '@types/pg': 8.15.5 + '@types/pg': 8.15.6 - '@types/pg@8.15.5': + '@types/pg@8.15.6': dependencies: '@types/node': 24.3.0 pg-protocol: 1.10.3 @@ -15200,78 +15325,73 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@3.2.4(vitest@3.2.4)': + '@vitest/coverage-v8@4.0.15(vitest@4.0.15)': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.5 - debug: 4.4.1 + '@vitest/utils': 4.0.15 + ast-v8-to-istanbul: 0.3.8 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.1.7 - magic-string: 0.30.19 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(patch_hash=dde3c7a634692aefe0877c763192102a73d3451e6d12dae61df88fd1e6e9368e)(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) + istanbul-reports: 3.2.0 + magicast: 0.5.1 + obug: 2.1.1 + std-env: 3.10.0 + tinyrainbow: 3.0.3 + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.3.0)(@vitest/ui@4.0.15)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) transitivePeerDependencies: - supports-color - '@vitest/expect@3.2.4': + '@vitest/expect@4.0.15': dependencies: + '@standard-schema/spec': 1.0.0 '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - tinyrainbow: 2.0.0 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 + chai: 6.2.1 + tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))': + '@vitest/mocker@4.0.15(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 4.0.15 estree-walker: 3.0.3 - magic-string: 0.30.19 + magic-string: 0.30.21 optionalDependencies: msw: 2.11.5(@types/node@24.3.0)(typescript@5.9.3) vite: 7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) - '@vitest/pretty-format@3.2.4': + '@vitest/pretty-format@4.0.15': dependencies: - tinyrainbow: 2.0.0 + tinyrainbow: 3.0.3 - '@vitest/runner@3.2.4': + '@vitest/runner@4.0.15': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.0.15 pathe: 2.0.3 - strip-literal: 3.0.0 - '@vitest/snapshot@3.2.4': + '@vitest/snapshot@4.0.15': dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.19 + '@vitest/pretty-format': 4.0.15 + magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 + '@vitest/spy@4.0.15': {} - '@vitest/ui@3.2.4(vitest@3.2.4)': + '@vitest/ui@4.0.15(vitest@4.0.15)': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.0.15 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 - tinyrainbow: 2.0.0 - vitest: 3.2.4(patch_hash=dde3c7a634692aefe0877c763192102a73d3451e6d12dae61df88fd1e6e9368e)(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) + tinyrainbow: 3.0.3 + vitest: 4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.3.0)(@vitest/ui@4.0.15)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) - '@vitest/utils@3.2.4': + '@vitest/utils@4.0.15': dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.2.1 - tinyrainbow: 2.0.0 + '@vitest/pretty-format': 4.0.15 + tinyrainbow: 3.0.3 '@webassemblyjs/ast@1.14.1': dependencies: @@ -15393,6 +15513,11 @@ snapshots: agent-base@7.1.4: {} + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -15443,6 +15568,12 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + append-transform@2.0.0: + dependencies: + default-require-extensions: 3.0.1 + + archy@1.0.0: {} + arg@4.1.3: {} argparse@1.0.10: @@ -15479,8 +15610,6 @@ snapshots: is-string: 1.1.1 math-intrinsics: 1.1.0 - array-union@2.1.0: {} - array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.8 @@ -15538,11 +15667,9 @@ snapshots: pvutils: 1.1.3 tslib: 2.8.1 - assertion-error@2.0.1: {} - ast-types-flow@0.0.8: {} - ast-v8-to-istanbul@0.3.5: + ast-v8-to-istanbul@0.3.8: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -15574,14 +15701,6 @@ snapshots: axe-core@4.10.3: {} - axios@1.10.0: - dependencies: - follow-redirects: 1.15.9(debug@4.4.1) - form-data: 4.0.3 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axios@1.12.2: dependencies: follow-redirects: 1.15.9(debug@4.4.1) @@ -15627,16 +15746,6 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-istanbul@7.0.0: - dependencies: - '@babel/helper-plugin-utils': 7.27.1 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 6.0.3 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - babel-plugin-istanbul@7.0.1: dependencies: '@babel/helper-plugin-utils': 7.27.1 @@ -15694,25 +15803,6 @@ snapshots: optionalDependencies: '@babel/traverse': 7.28.4 - babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.4): - dependencies: - '@babel/core': 7.28.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4) - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4): dependencies: '@babel/core': 7.28.4 @@ -15850,6 +15940,8 @@ snapshots: buffer-builder@0.2.0: optional: true + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -15857,7 +15949,7 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bullmq@5.61.0: + bullmq@5.63.0: dependencies: cron-parser: 4.9.0 ioredis: 5.8.1 @@ -15871,7 +15963,12 @@ snapshots: bytes@3.1.2: {} - cac@6.7.14: {} + caching-transform@4.0.0: + dependencies: + hasha: 5.2.2 + make-dir: 3.1.0 + package-hash: 4.0.0 + write-file-atomic: 3.0.3 call-bind-apply-helpers@1.0.2: dependencies: @@ -15905,13 +16002,7 @@ snapshots: caniuse-lite@1.0.30001726: {} - chai@5.3.3: - dependencies: - assertion-error: 2.0.1 - check-error: 2.1.1 - deep-eql: 5.0.2 - loupe: 3.2.1 - pathval: 2.0.1 + chai@6.2.1: {} chalk@3.0.0: dependencies: @@ -15925,8 +16016,6 @@ snapshots: char-regex@1.0.2: {} - check-error@2.1.1: {} - chokidar@4.0.3: dependencies: readdirp: 4.1.2 @@ -15941,6 +16030,8 @@ snapshots: classnames@2.5.1: {} + clean-stack@2.2.0: {} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 @@ -15949,6 +16040,12 @@ snapshots: cli-width@4.1.0: {} + cliui@6.0.0: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -15973,8 +16070,6 @@ snapshots: colord@2.9.3: {} - colorette@1.4.0: {} - colorette@2.0.20: {} colorjs.io@0.5.2: @@ -16013,6 +16108,8 @@ snapshots: content-type@1.0.5: {} + convert-source-map@1.9.0: {} + convert-source-map@2.0.0: {} cookie-es@2.0.0: {} @@ -16197,6 +16294,8 @@ snapshots: damerau-levenshtein@1.0.8: {} + data-uri-to-buffer@4.0.1: {} + data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 @@ -16249,20 +16348,24 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + decimal.js@10.5.0: {} dedent@1.6.0(babel-plugin-macros@3.1.0): optionalDependencies: babel-plugin-macros: 3.1.0 - deep-eql@5.0.2: {} - deep-equal@1.0.1: {} deep-is@0.1.4: {} deepmerge@4.3.1: {} + default-require-extensions@3.0.1: + dependencies: + strip-bom: 4.0.0 + defaults@1.0.4: dependencies: clone: 1.0.4 @@ -16316,10 +16419,6 @@ snapshots: diff@4.0.2: {} - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -16391,10 +16490,10 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.44.6(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.5)(postgres@3.4.7): + drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.15.6)(kysely@0.28.5)(postgres@3.4.7): optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/pg': 8.15.5 + '@types/pg': 8.15.6 kysely: 0.28.5 postgres: 3.4.7 @@ -16406,6 +16505,10 @@ snapshots: eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + ee-first@1.1.1: {} ejs@3.1.10: @@ -16591,6 +16694,8 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es6-error@4.1.1: {} + esbuild-register@3.6.0(esbuild@0.19.12): dependencies: debug: 4.4.1 @@ -16966,8 +17071,6 @@ snapshots: fast-copy@3.0.2: {} - fast-deep-equal@2.0.1: {} - fast-deep-equal@3.1.3: {} fast-glob@3.3.3: @@ -17012,6 +17115,11 @@ snapshots: sprintf-js: 1.1.3 tmp: 0.0.33 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fflate@0.8.2: {} figures@3.2.0: @@ -17089,12 +17197,17 @@ snapshots: dependencies: is-callable: 1.2.7 + foreground-child@2.0.0: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 3.0.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.3: + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -17102,13 +17215,9 @@ snapshots: hasown: 2.0.2 mime-types: 2.1.35 - form-data@4.0.4: + formdata-polyfill@4.0.10: dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.2 - mime-types: 2.1.35 + fetch-blob: 3.2.0 forwarded-parse@2.1.2: {} @@ -17118,6 +17227,8 @@ snapshots: fresh@0.5.2: {} + fromentries@1.3.2: {} + front-matter@4.0.2: dependencies: js-yaml: 3.14.1 @@ -17172,6 +17283,15 @@ snapshots: - encoding - supports-color + gaxios@7.1.3: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + rimraf: 5.0.10 + transitivePeerDependencies: + - supports-color + gcp-metadata@6.1.1(encoding@0.1.13): dependencies: gaxios: 6.7.1(encoding@0.1.13) @@ -17181,6 +17301,14 @@ snapshots: - encoding - supports-color + gcp-metadata@8.1.2: + dependencies: + gaxios: 7.1.3 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + generic-names@4.0.0: dependencies: loader-utils: 3.3.1 @@ -17286,23 +17414,26 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - globby@10.0.1: - dependencies: - '@types/glob': 7.2.0 - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - glob: 7.2.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - goober@2.1.16(csstype@3.1.3): dependencies: csstype: 3.1.3 + google-auth-library@10.5.0: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.1.3 + gcp-metadata: 8.1.2 + google-logging-utils: 1.1.3 + gtoken: 8.0.0 + jws: 4.0.0 + transitivePeerDependencies: + - supports-color + google-logging-utils@0.0.2: {} + google-logging-utils@1.1.3: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -17311,6 +17442,13 @@ snapshots: graphql@16.11.0: {} + gtoken@8.0.0: + dependencies: + gaxios: 7.1.3 + jws: 4.0.0 + transitivePeerDependencies: + - supports-color + handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -17340,6 +17478,11 @@ snapshots: dependencies: has-symbols: 1.1.0 + hasha@5.2.2: + dependencies: + is-stream: 2.0.1 + type-fest: 0.8.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -17360,17 +17503,13 @@ snapshots: dependencies: parse-passwd: 1.0.0 - hono-pino@0.10.3(hono@4.9.12)(pino@9.13.1): + hono-pino@0.10.3(hono@4.10.5)(pino@9.13.1): dependencies: defu: 6.1.4 - hono: 4.9.12 + hono: 4.10.5 pino: 9.13.1 - hono@4.9.12: {} - - hosted-git-info@7.0.2: - dependencies: - lru-cache: 10.4.3 + hono@4.10.5: {} html-encoding-sniffer@3.0.0: dependencies: @@ -17514,7 +17653,7 @@ snapshots: dependencies: resolve-from: 5.0.0 - import-in-the-middle@1.15.0: + import-in-the-middle@2.0.0: dependencies: acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) @@ -17655,8 +17794,6 @@ snapshots: is-number@7.0.0: {} - is-plain-object@3.0.1: {} - is-plain-object@5.0.0: {} is-potential-custom-element-name@1.0.1: {} @@ -17695,6 +17832,8 @@ snapshots: dependencies: which-typed-array: 1.1.19 + is-typedarray@1.0.0: {} + is-unicode-supported@0.1.0: {} is-url@1.2.4: {} @@ -17736,25 +17875,46 @@ snapshots: istanbul-lib-coverage@3.2.2: {} + istanbul-lib-hook@3.0.0: + dependencies: + append-transform: 2.0.0 + istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.28.4 - '@babel/parser': 7.28.4 + '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 transitivePeerDependencies: - supports-color + istanbul-lib-processinfo@2.0.3: + dependencies: + archy: 1.0.0 + cross-spawn: 7.0.6 + istanbul-lib-coverage: 3.2.2 + p-map: 3.0.0 + rimraf: 3.0.2 + uuid: 8.3.2 + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.1 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + istanbul-lib-source-maps@5.0.6: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 debug: 4.4.1 istanbul-lib-coverage: 3.2.2 transitivePeerDependencies: @@ -17765,6 +17925,11 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + istanbul-reports@3.2.0: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + iterator.prototype@1.1.5: dependencies: define-data-property: 1.1.4 @@ -18063,7 +18228,7 @@ snapshots: '@jest/snapshot-utils': 30.0.5 '@jest/transform': 30.0.5 '@jest/types': 30.0.5 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.4) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) chalk: 4.1.2 expect: 30.0.5 graceful-fs: 4.2.11 @@ -18274,6 +18439,17 @@ snapshots: object.assign: 4.1.7 object.values: 1.2.1 + jwa@2.0.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@4.0.0: + dependencies: + jwa: 2.0.1 + safe-buffer: 5.2.1 + keygrip@1.1.0: dependencies: tsscmp: 1.0.6 @@ -18289,7 +18465,7 @@ snapshots: koa-compose@4.1.0: {} - koa@3.0.1: + koa@3.0.3: dependencies: accepts: 1.3.8 content-disposition: 0.5.4 @@ -18310,7 +18486,7 @@ snapshots: type-is: 2.0.1 vary: 1.1.2 - ky@1.12.0: {} + ky@1.14.0: {} kysely@0.28.5: {} @@ -18375,6 +18551,8 @@ snapshots: lodash.defaults@4.2.0: {} + lodash.flattendeep@4.4.0: {} + lodash.isarguments@3.1.0: {} lodash.memoize@4.1.2: {} @@ -18408,8 +18586,6 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.2.1: {} - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -18422,7 +18598,7 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.545.0(react@19.1.0): + lucide-react@0.553.0(react@19.1.0): dependencies: react: 19.1.0 @@ -18434,10 +18610,14 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: + magic-string@0.30.21: dependencies: - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 + '@jridgewell/sourcemap-codec': 1.5.5 + + magicast@0.5.1: + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 source-map-js: 1.2.1 make-dir@2.1.0: @@ -18460,15 +18640,10 @@ snapshots: dependencies: tmpl: 1.0.5 - marked@7.0.4: {} + marked@15.0.12: {} math-intrinsics@1.1.0: {} - md-to-react-email@5.0.5(react@19.1.0): - dependencies: - marked: 7.0.4 - react: 19.1.0 - mdn-data@2.0.14: {} mdn-data@2.0.28: {} @@ -18615,12 +18790,20 @@ snapshots: node-addon-api@7.1.1: optional: true + node-domexception@1.0.0: {} + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 optionalDependencies: encoding: 0.1.13 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-gyp-build-optional-packages@5.2.2: dependencies: detect-libc: 2.1.1 @@ -18630,6 +18813,10 @@ snapshots: node-machine-id@1.1.12: {} + node-preload@0.2.1: + dependencies: + process-on-spawn: 1.1.0 + node-releases@2.0.19: {} node-schedule@2.1.1: @@ -18638,7 +18825,7 @@ snapshots: long-timeout: 0.1.1 sorted-array-functions: 1.3.0 - nodemailer@7.0.9: {} + nodemailer@7.0.10: {} normalize-path@3.0.0: {} @@ -18646,13 +18833,6 @@ snapshots: normalize-url@6.1.0: {} - npm-package-arg@11.0.1: - dependencies: - hosted-git-info: 7.0.2 - proc-log: 3.0.0 - semver: 7.7.2 - validate-npm-package-name: 5.0.1 - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -18663,7 +18843,7 @@ snapshots: nwsapi@2.2.20: {} - nx@21.6.4(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)): + nx@22.1.3(@swc-node/register@1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3))(@swc/core@1.5.29(@swc/helpers@0.5.17)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 @@ -18680,7 +18860,7 @@ snapshots: figures: 3.2.0 flat: 5.0.2 front-matter: 4.0.2 - ignore: 5.3.2 + ignore: 7.0.5 jest-diff: 30.0.5 jsonc-parser: 3.2.0 lines-and-columns: 2.0.3 @@ -18701,21 +18881,53 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 21.6.4 - '@nx/nx-darwin-x64': 21.6.4 - '@nx/nx-freebsd-x64': 21.6.4 - '@nx/nx-linux-arm-gnueabihf': 21.6.4 - '@nx/nx-linux-arm64-gnu': 21.6.4 - '@nx/nx-linux-arm64-musl': 21.6.4 - '@nx/nx-linux-x64-gnu': 21.6.4 - '@nx/nx-linux-x64-musl': 21.6.4 - '@nx/nx-win32-arm64-msvc': 21.6.4 - '@nx/nx-win32-x64-msvc': 21.6.4 + '@nx/nx-darwin-arm64': 22.1.3 + '@nx/nx-darwin-x64': 22.1.3 + '@nx/nx-freebsd-x64': 22.1.3 + '@nx/nx-linux-arm-gnueabihf': 22.1.3 + '@nx/nx-linux-arm64-gnu': 22.1.3 + '@nx/nx-linux-arm64-musl': 22.1.3 + '@nx/nx-linux-x64-gnu': 22.1.3 + '@nx/nx-linux-x64-musl': 22.1.3 + '@nx/nx-win32-arm64-msvc': 22.1.3 + '@nx/nx-win32-x64-msvc': 22.1.3 '@swc-node/register': 1.9.2(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/types@0.1.24)(typescript@5.9.3) '@swc/core': 1.5.29(@swc/helpers@0.5.17) transitivePeerDependencies: - debug + nyc@17.1.0: + dependencies: + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + caching-transform: 4.0.0 + convert-source-map: 1.9.0 + decamelize: 1.2.0 + find-cache-dir: 3.3.2 + find-up: 4.1.0 + foreground-child: 3.3.1 + get-package-type: 0.1.0 + glob: 7.2.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-hook: 3.0.0 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-processinfo: 2.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.2.0 + make-dir: 3.1.0 + node-preload: 0.2.1 + p-map: 3.0.0 + process-on-spawn: 1.1.0 + resolve-from: 5.0.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + spawn-wrap: 2.0.0 + test-exclude: 6.0.0 + yargs: 15.4.1 + transitivePeerDependencies: + - supports-color + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -18758,6 +18970,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + obug@2.1.1: {} + on-exit-leak-free@2.1.2: {} on-finished@2.4.1: @@ -18828,6 +19042,10 @@ snapshots: dependencies: p-limit: 3.1.0 + p-map@3.0.0: + dependencies: + aggregate-error: 3.1.0 + p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 @@ -18839,6 +19057,13 @@ snapshots: p-try@2.2.0: {} + package-hash@4.0.0: + dependencies: + graceful-fs: 4.2.11 + hasha: 5.2.2 + lodash.flattendeep: 4.4.0 + release-zalgo: 1.0.0 + package-json-from-dist@1.0.1: {} parent-module@1.0.1: @@ -18888,8 +19113,6 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.1: {} - peberminta@0.9.0: {} pg-int8@1.0.1: {} @@ -19205,7 +19428,9 @@ snapshots: prismjs@1.30.0: {} - proc-log@3.0.0: {} + process-on-spawn@1.1.0: + dependencies: + fromentries: 1.3.2 process-warning@5.0.0: {} @@ -19358,10 +19583,6 @@ snapshots: react-is@18.3.1: {} - react-promise-suspense@0.3.4: - dependencies: - fast-deep-equal: 2.0.1 - react-refresh@0.17.0: {} react-remove-scroll-bar@2.3.8(@types/react@19.0.0)(react@19.1.0): @@ -19467,18 +19688,14 @@ snapshots: dependencies: jsesc: 3.0.2 + release-zalgo@1.0.0: + dependencies: + es6-error: 4.1.1 + require-directory@2.1.1: {} require-from-string@2.0.2: {} - require-in-the-middle@7.5.2: - dependencies: - debug: 4.4.1 - module-details-from-path: 1.0.4 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - require-in-the-middle@8.0.0: dependencies: debug: 4.4.1 @@ -19486,6 +19703,8 @@ snapshots: transitivePeerDependencies: - supports-color + require-main-filename@2.0.0: {} + requires-port@1.0.0: {} reserved-words@0.1.2: {} @@ -19536,13 +19755,13 @@ snapshots: rfdc@1.4.1: {} - rollup-plugin-copy@3.5.0: + rimraf@3.0.2: dependencies: - '@types/fs-extra': 8.1.5 - colorette: 1.4.0 - fs-extra: 8.1.0 - globby: 10.0.1 - is-plain-object: 3.0.1 + glob: 7.2.3 + + rimraf@5.0.10: + dependencies: + glob: 10.4.5 rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3)): dependencies: @@ -19812,6 +20031,8 @@ snapshots: transitivePeerDependencies: - supports-color + set-blocking@2.0.0: {} + set-cookie-parser@2.7.1: {} set-function-length@1.2.2: @@ -19970,6 +20191,15 @@ snapshots: source-map@0.7.4: optional: true + spawn-wrap@2.0.0: + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 + split2@4.2.0: {} sprintf-js@1.0.3: {} @@ -19992,7 +20222,7 @@ snapshots: statuses@2.0.2: {} - std-env@3.9.0: {} + std-env@3.10.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -20104,10 +20334,6 @@ snapshots: strip-json-comments@5.0.3: {} - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - strnum@2.1.1: {} style-inject@0.3.0: {} @@ -20175,6 +20401,8 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 + tailwindcss@4.1.12: {} + tapable@2.2.2: {} tar-stream@2.2.0: @@ -20217,12 +20445,6 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - test-exclude@7.0.1: - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 - minimatch: 9.0.5 - thread-stream@3.1.0: dependencies: real-require: 0.2.0 @@ -20233,18 +20455,14 @@ snapshots: tinybench@2.9.0: {} - tinyexec@0.3.2: {} + tinyexec@1.0.2: {} tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@1.1.1: {} - - tinyrainbow@2.0.0: {} - - tinyspy@4.0.3: {} + tinyrainbow@3.0.3: {} tldts-core@6.1.86: {} @@ -20371,6 +20589,8 @@ snapshots: type-fest@0.21.3: {} + type-fest@0.8.1: {} + type-fest@4.41.0: {} type-is@1.6.18: @@ -20417,6 +20637,10 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 + typedarray-to-buffer@3.1.5: + dependencies: + is-typedarray: 1.0.0 + typescript-plugin-css-modules@5.2.0(ts-node@10.9.1(@swc/core@1.5.29(@swc/helpers@0.5.17))(@types/node@24.3.0)(typescript@5.9.3))(typescript@5.9.3): dependencies: '@types/postcss-modules-local-by-default': 4.0.2 @@ -20545,6 +20769,8 @@ snapshots: uuid@11.1.0: {} + uuid@8.3.2: {} + uuid@9.0.1: {} v8-compile-cache-lib@3.0.1: {} @@ -20555,34 +20781,11 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - validate-npm-package-name@5.0.1: {} - varint@6.0.0: optional: true vary@1.1.2: {} - vite-node@3.2.4(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0): - dependencies: - cac: 6.7.14 - debug: 4.4.1 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0): dependencies: esbuild: 0.25.5 @@ -20603,34 +20806,32 @@ snapshots: tsx: 4.20.6 yaml: 2.8.0 - vitest@3.2.4(patch_hash=dde3c7a634692aefe0877c763192102a73d3451e6d12dae61df88fd1e6e9368e)(@types/node@24.3.0)(@vitest/ui@3.2.4)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0): + vitest@4.0.15(@opentelemetry/api@1.9.0)(@types/node@24.3.0)(@vitest/ui@4.0.15)(jiti@2.4.2)(jsdom@27.0.0(postcss@8.5.6))(less@4.4.1)(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0): dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - debug: 4.4.1 + '@vitest/expect': 4.0.15 + '@vitest/mocker': 4.0.15(msw@2.11.5(@types/node@24.3.0)(typescript@5.9.3))(vite@7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0)) + '@vitest/pretty-format': 4.0.15 + '@vitest/runner': 4.0.15 + '@vitest/snapshot': 4.0.15 + '@vitest/spy': 4.0.15 + '@vitest/utils': 4.0.15 + es-module-lexer: 1.7.0 expect-type: 1.2.2 - magic-string: 0.30.19 + magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.9.0 + std-env: 3.10.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 + tinyrainbow: 3.0.3 vite: 7.1.5(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) - vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.4.2)(less@4.4.1)(sass-embedded@1.89.2)(sass@1.89.2)(stylus@0.62.0)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.0) why-is-node-running: 2.3.0 optionalDependencies: + '@opentelemetry/api': 1.9.0 '@types/node': 24.3.0 - '@vitest/ui': 3.2.4(vitest@3.2.4) + '@vitest/ui': 4.0.15(vitest@4.0.15) jsdom: 27.0.0(postcss@8.5.6) transitivePeerDependencies: - jiti @@ -20641,7 +20842,6 @@ snapshots: - sass-embedded - stylus - sugarss - - supports-color - terser - tsx - yaml @@ -20663,7 +20863,9 @@ snapshots: dependencies: defaults: 1.0.4 - web-vitals@4.2.4: {} + web-streams-polyfill@3.3.3: {} + + web-vitals@5.1.0: {} webidl-conversions@3.0.1: {} @@ -20761,6 +20963,8 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 + which-module@2.0.1: {} + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 @@ -20808,6 +21012,13 @@ snapshots: wrappy@1.0.2: {} + write-file-atomic@3.0.3: + dependencies: + imurmurhash: 0.1.4 + is-typedarray: 1.0.0 + signal-exit: 3.0.7 + typedarray-to-buffer: 3.1.5 + write-file-atomic@5.0.1: dependencies: imurmurhash: 0.1.4 @@ -20827,6 +21038,8 @@ snapshots: xtend@4.0.2: {} + y18n@4.0.3: {} + y18n@5.0.8: {} yallist@3.1.1: {} @@ -20835,8 +21048,27 @@ snapshots: yaml@2.8.0: {} + yargs-parser@18.1.3: + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + yargs-parser@21.1.1: {} + yargs@15.4.1: + dependencies: + cliui: 6.0.0 + decamelize: 1.2.0 + find-up: 4.1.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 4.2.3 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 18.1.3 + yargs@17.7.2: dependencies: cliui: 8.0.1 diff --git a/tools/merge-coverage.ts b/tools/merge-coverage.ts new file mode 100755 index 00000000..62aa3eed --- /dev/null +++ b/tools/merge-coverage.ts @@ -0,0 +1,31 @@ +import { execSync } from 'child_process'; +import fs from 'fs'; +import path from 'path'; + +// Find all coverage-final.json files +const coverageFiles = execSync('find coverage -name "coverage-final.json"', { encoding: 'utf8' }) + .trim() + .split('\n') + .filter(Boolean); + +if (coverageFiles.length === 0) { + console.error('No coverage files found. Run tests with --coverage first.'); + process.exit(1); +} + +// Create .nyc_output directory +fs.mkdirSync('.nyc_output', { recursive: true }); + +// Copy files with unique names +coverageFiles.forEach(file => { + const uniqueName = file.replace(/\//g, '_'); + fs.copyFileSync(file, path.join('.nyc_output', uniqueName)); +}); + +console.log(`Merging ${coverageFiles.length} coverage files...`); + +// Run nyc report +execSync('npx nyc report', { stdio: 'inherit' }); + +// Cleanup +fs.rmSync('.nyc_output', { recursive: true, force: true }); diff --git a/tools/perft.ts b/tools/perft.ts index bc218557..c1e34f38 100644 --- a/tools/perft.ts +++ b/tools/perft.ts @@ -1,5 +1,9 @@ -import { ChessPosition, FenParser, FenStr } from '@michess/core-board'; -import { Chessboard } from '@michess/core-game'; +import { + Chessboard, + ChessPosition, + FenParser, + FenStr, +} from '@michess/core-board'; import { Command } from 'commander'; // Default FEN for standard starting position