From 34edd9298e3a78556cc17ac4511ff2d63ab5364e Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Mar 2025 00:59:08 -0400 Subject: [PATCH 01/22] Initial JWT Auth for backend --- .../interceptors/current-user.interceptor.ts | 6 +- .../src/pantries/pantries.controller.ts | 41 +- apps/backend/src/pantries/pantries.module.ts | 11 +- apps/backend/src/users/users.controller.ts | 12 +- apps/backend/src/users/users.module.ts | 1 + apps/frontend/src/app.tsx | 116 +- apps/frontend/src/aws-exports.ts | 10 + apps/frontend/src/containers/landingPage.tsx | 14 +- package.json | 4 +- yarn.lock | 1638 ++++++++++++++++- 10 files changed, 1800 insertions(+), 53 deletions(-) create mode 100644 apps/frontend/src/aws-exports.ts diff --git a/apps/backend/src/interceptors/current-user.interceptor.ts b/apps/backend/src/interceptors/current-user.interceptor.ts index e60b545a..70294c88 100644 --- a/apps/backend/src/interceptors/current-user.interceptor.ts +++ b/apps/backend/src/interceptors/current-user.interceptor.ts @@ -27,7 +27,11 @@ export class CurrentUserInterceptor implements NestInterceptor { if (users.length > 0) { const user = users[0]; - request.user = user; + request.user = { + id: user.id, + email: user.email, + role: user.role, + }; } return handler.handle(); diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index d9903aec..aa4e41cc 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -1,42 +1,79 @@ -import { Controller, Get, Param, ParseIntPipe, Post } from '@nestjs/common'; +import { + Controller, + ForbiddenException, + Get, + Param, + ParseIntPipe, + Post, + Request, + UseGuards, + UseInterceptors, +} from '@nestjs/common'; import { Pantry } from './pantries.entity'; import { PantriesService } from './pantries.service'; import { User } from '../users/user.entity'; +import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; +import { AuthGuard } from '@nestjs/passport'; @Controller('pantries') +@UseInterceptors(CurrentUserInterceptor) export class PantriesController { constructor(private pantriesService: PantriesService) {} @Get('/pending') - async getPendingPantries(): Promise { + @UseGuards(AuthGuard('jwt')) + async getPendingPantries(@Request() request): Promise { + if (request.user.role !== 'PANTRY') { + throw new ForbiddenException('Access denied'); + } return this.pantriesService.getPendingPantries(); } @Get('/:pantryId/ssf-contact') + @UseGuards(AuthGuard('jwt')) async getSSFRep( + @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { + if (request.user.role !== 'PANTRY') { + throw new ForbiddenException('Access denied'); + } return this.pantriesService.findSSFRep(pantryId); } @Get('/:pantryId') + @UseGuards(AuthGuard('jwt')) async getPantry( + @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { + if (request.user.role !== 'PANTRY') { + throw new ForbiddenException('Access denied'); + } return this.pantriesService.findOne(pantryId); } @Post('/approve/:pantryId') + @UseGuards(AuthGuard('jwt')) async approvePantry( + @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { + if (request.user.role !== 'PANTRY') { + throw new ForbiddenException('Access denied'); + } return this.pantriesService.approve(pantryId); } @Post('/deny/:pantryId') + @UseGuards(AuthGuard('jwt')) async denyPantry( + @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { + if (request.user.role !== 'PANTRY') { + throw new ForbiddenException('Access denied'); + } return this.pantriesService.deny(pantryId); } } diff --git a/apps/backend/src/pantries/pantries.module.ts b/apps/backend/src/pantries/pantries.module.ts index bbcfad2d..2d51e08f 100644 --- a/apps/backend/src/pantries/pantries.module.ts +++ b/apps/backend/src/pantries/pantries.module.ts @@ -6,10 +6,17 @@ import { PantriesController } from './pantries.controller'; import { JwtStrategy } from '../auth/jwt.strategy'; import { AuthService } from '../auth/auth.service'; import { Pantry } from './pantries.entity'; +import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; +import { UsersModule } from '../users/users.module'; @Module({ - imports: [TypeOrmModule.forFeature([Pantry, User])], + imports: [TypeOrmModule.forFeature([Pantry, User]), UsersModule], controllers: [PantriesController], - providers: [PantriesService, AuthService, JwtStrategy], + providers: [ + PantriesService, + AuthService, + JwtStrategy, + CurrentUserInterceptor, + ], }) export class PantriesModule {} diff --git a/apps/backend/src/users/users.controller.ts b/apps/backend/src/users/users.controller.ts index 88714e8f..928c8e78 100644 --- a/apps/backend/src/users/users.controller.ts +++ b/apps/backend/src/users/users.controller.ts @@ -4,20 +4,20 @@ import { Get, Param, ParseIntPipe, - //UseGuards, - //UseInterceptors, + UseGuards, + UseInterceptors, } from '@nestjs/common'; import { UsersService } from './users.service'; -//import { AuthGuard } from '@nestjs/passport'; +import { AuthGuard } from '@nestjs/passport'; import { User } from './user.entity'; -//import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; +import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; @Controller('users') -//@UseInterceptors(CurrentUserInterceptor) +@UseInterceptors(CurrentUserInterceptor) export class UsersController { constructor(private usersService: UsersService) {} - // @UseGuards(AuthGuard('jwt')) + @UseGuards(AuthGuard('jwt')) @Get('/:userId') async getUser(@Param('userId', ParseIntPipe) userId: number): Promise { return this.usersService.findOne(userId); diff --git a/apps/backend/src/users/users.module.ts b/apps/backend/src/users/users.module.ts index 577c2371..4e6bdecc 100644 --- a/apps/backend/src/users/users.module.ts +++ b/apps/backend/src/users/users.module.ts @@ -11,5 +11,6 @@ import { AuthService } from '../auth/auth.service'; imports: [TypeOrmModule.forFeature([User])], controllers: [UsersController], providers: [UsersService, AuthService, JwtStrategy, CurrentUserInterceptor], + exports: [UsersService], }) export class UsersModule {} diff --git a/apps/frontend/src/app.tsx b/apps/frontend/src/app.tsx index e56b4029..7d656493 100644 --- a/apps/frontend/src/app.tsx +++ b/apps/frontend/src/app.tsx @@ -16,7 +16,43 @@ import FormRequests from '@containers/FormRequests'; import PantryApplication from '@containers/pantryApplication'; import { submitPantryApplicationForm } from '@components/forms/pantryApplicationForm'; import ApprovePantries from '@containers/approvePantries'; -import DonationManagement from '@containers/donationManagement'; +import '@aws-amplify/ui-react/styles.css'; +import { Authenticator } from '@aws-amplify/ui-react'; +import { Amplify } from 'aws-amplify'; +import CognitoAuthConfig from './aws-exports'; +import { Button } from '@chakra-ui/react'; + +Amplify.configure(CognitoAuthConfig); + +const components = { + SignUp: { + Footer() { + return ( + <> + + + + ); + }, + }, + + SignIn: { + Footer() { + return ( + <> + + + + ); + }, + }, +}; const router = createBrowserRouter([ { @@ -24,43 +60,83 @@ const router = createBrowserRouter([ element: , errorElement: , children: [ + // Public routes (no auth needed) + + { + path: '/pantry-application', + element: , + action: submitPantryApplicationForm, + }, + + // Private routes (protected by auth) + { path: '/landing-page', - element: , + element: ( + + + + ), }, { path: '/pantry-overview', - element: , + element: ( + + + + ), }, { path: '/pantry-dashboard/:pantryId', - element: , + element: ( + + + + ), }, { path: '/pantry-past-orders', - element: , + element: ( + + + + ), }, { path: '/pantries', - element: , - }, - { - path: '/pantry-application', - element: , - action: submitPantryApplicationForm, + element: ( + + + + ), }, { path: '/orders', - element: , + element: ( + + + + ), }, { path: '/request-form/:pantryId', - element: , + element: ( + + + + ), }, { - path: '/donation-management', - element: , + path: '/approve-pantries', + element: ( + // + + // + ), }, + + // Actions + { path: '/food-request', action: submitFoodRequestFormModal, @@ -69,10 +145,6 @@ const router = createBrowserRouter([ path: '/confirm-delivery', action: submitDeliveryConfirmationFormModal, }, - { - path: '/approve-pantries', - element: , - }, ], }, ]); @@ -83,7 +155,11 @@ export const App: React.FC = () => { apiClient.getHello().then((res) => console.log(res)); }, []); - return ; + return ( + + + + ); }; export default App; diff --git a/apps/frontend/src/aws-exports.ts b/apps/frontend/src/aws-exports.ts new file mode 100644 index 00000000..e27da0b4 --- /dev/null +++ b/apps/frontend/src/aws-exports.ts @@ -0,0 +1,10 @@ +const CognitoAuthConfig = { + Auth: { + Cognito: { + userPoolClientId: '198bdfe995p1kb4jnopt3sk6i1', + userPoolId: 'us-east-1_StSYXMibq', + region: 'us-east-1', + }, + }, +}; +export default CognitoAuthConfig; diff --git a/apps/frontend/src/containers/landingPage.tsx b/apps/frontend/src/containers/landingPage.tsx index 0e1a72b4..f33ceb0b 100644 --- a/apps/frontend/src/containers/landingPage.tsx +++ b/apps/frontend/src/containers/landingPage.tsx @@ -1,5 +1,17 @@ +import { Button } from '@chakra-ui/react'; +import { signOut } from 'aws-amplify/auth'; + const LandingPage: React.FC = () => { - return <>Landing page; + const handleSignOut = async () => { + await signOut(); + }; + + return ( + <> + Landing page + + + ); }; export default LandingPage; diff --git a/package.json b/package.json index d06d5f29..49dc1bce 100644 --- a/package.json +++ b/package.json @@ -14,10 +14,11 @@ }, "private": true, "dependencies": { + "@aws-amplify/ui-react": "^6.9.4", "@aws-sdk/client-cognito-identity-provider": "^3.410.0", - "@chakra-ui/icons": "^2.2.4", "@aws-sdk/client-s3": "^3.735.0", "@aws-sdk/lib-storage": "^3.735.0", + "@chakra-ui/icons": "^2.2.4", "@chakra-ui/react": "^2.8.2", "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.0", @@ -32,6 +33,7 @@ "@types/google-libphonenumber": "^7.4.30", "@types/mongodb": "^4.0.7", "amazon-cognito-identity-js": "^6.3.5", + "aws-amplify": "^6.13.5", "axios": "^1.5.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", diff --git a/yarn.lock b/yarn.lock index 53501534..a49701ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -55,6 +55,160 @@ ora "5.4.1" rxjs "7.8.1" +"@aws-amplify/analytics@7.0.74": + version "7.0.74" + resolved "https://registry.yarnpkg.com/@aws-amplify/analytics/-/analytics-7.0.74.tgz#920b28c163826038b948966e47cb4159205d05eb" + integrity sha512-X5qsFL09apVxJ20aQsuTQQdP2kKdmz74yBqEucvO0YTHBOiqXh3s63PxC9UOL8/blUWp5E6budwhtegck5gaFg== + dependencies: + "@aws-sdk/client-firehose" "3.621.0" + "@aws-sdk/client-kinesis" "3.621.0" + "@aws-sdk/client-personalize-events" "3.621.0" + "@smithy/util-utf8" "2.0.0" + tslib "^2.5.0" + +"@aws-amplify/api-graphql@4.7.9": + version "4.7.9" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-graphql/-/api-graphql-4.7.9.tgz#29da5f9be3d2606a6e9dcb305ce091a7076289ea" + integrity sha512-bt8MIiOQ8hG81gAWgCS02bSihF9VhdRtu3RIocnRuNWN1wKNcQpV5KEYqr1YJWJulgCRMSiWhxBaAq6qONWiFA== + dependencies: + "@aws-amplify/api-rest" "4.0.74" + "@aws-amplify/core" "6.10.5" + "@aws-amplify/data-schema" "^1.7.0" + "@aws-sdk/types" "3.387.0" + graphql "15.8.0" + rxjs "^7.8.1" + tslib "^2.5.0" + uuid "^9.0.0" + +"@aws-amplify/api-rest@4.0.74": + version "4.0.74" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-rest/-/api-rest-4.0.74.tgz#37a275737fb1dca1464b5221b0ad3f666c4b6634" + integrity sha512-am+FvqMe7Rss7ACqhtOjXUlYvdbOqYoRxAu8iVV60vlYmIA9zkOjCl5KLJOwvVT3Ne6JqZFKUjPZi6mJ5Cz53A== + dependencies: + tslib "^2.5.0" + +"@aws-amplify/api@6.3.5": + version "6.3.5" + resolved "https://registry.yarnpkg.com/@aws-amplify/api/-/api-6.3.5.tgz#5fb51b53a0e452c72650ea17825756b3c6f7121a" + integrity sha512-/GIr4tJmMZO1h5XgkTxSxh2GYAJnzgs49w/RbbelxMbxEVKOIbmQgBNnUdj0TuDXEYdZq43PvIX5NsThNsM6ww== + dependencies: + "@aws-amplify/api-graphql" "4.7.9" + "@aws-amplify/api-rest" "4.0.74" + "@aws-amplify/data-schema" "^1.7.0" + rxjs "^7.8.1" + tslib "^2.5.0" + +"@aws-amplify/auth@6.11.5": + version "6.11.5" + resolved "https://registry.yarnpkg.com/@aws-amplify/auth/-/auth-6.11.5.tgz#e8892e427953afa3fdad20968931484b9cf0a177" + integrity sha512-6ja+VFZK8FQFYonm/cf3ZWFcSHC54Hi+m9wvLeYu35ZKTGJzdQ6Fld0lrJeWL0oPSrRjt/hg2jnkGFdXVF84Ww== + dependencies: + "@aws-crypto/sha256-js" "5.2.0" + "@smithy/types" "^3.3.0" + tslib "^2.5.0" + +"@aws-amplify/core@6.10.5": + version "6.10.5" + resolved "https://registry.yarnpkg.com/@aws-amplify/core/-/core-6.10.5.tgz#ede6eb15ab8daad4b6719b320ed7b0b48f34343c" + integrity sha512-49b7CxS2tGNMWtIsRog/dkVjxjILFVw9k9Pd62YyaL4Yf8VQOXN28C8fhHOl210DnTxQS11bB7PA/ddTGSMcsw== + dependencies: + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/types" "3.398.0" + "@smithy/util-hex-encoding" "2.0.0" + "@types/uuid" "^9.0.0" + js-cookie "^3.0.5" + rxjs "^7.8.1" + tslib "^2.5.0" + uuid "^9.0.0" + +"@aws-amplify/data-schema-types@*": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@aws-amplify/data-schema-types/-/data-schema-types-1.2.0.tgz#fd4ed507adf0786f4ea005121726c72c739d4db0" + integrity sha512-1hy2r7jl3hQ5J/CGjhmPhFPcdGSakfme1ZLjlTMJZILfYifZLSlGRKNCelMb3J5N9203hyeT5XDi5yR47JL1TQ== + dependencies: + graphql "15.8.0" + rxjs "^7.8.1" + +"@aws-amplify/data-schema@^1.7.0": + version "1.20.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/data-schema/-/data-schema-1.20.1.tgz#2cdbb4e5d8888fbc3a08dea2d5f2b06633693fc2" + integrity sha512-uEIRGLGvSiez02erJsFgnkCHSzJXaqRWNQPDw2JB/EeR25h9c8OEk9glo2+EOu8WQ+du62mt5viu+gM/8wujsA== + dependencies: + "@aws-amplify/data-schema-types" "*" + "@smithy/util-base64" "^3.0.0" + "@types/aws-lambda" "^8.10.134" + "@types/json-schema" "^7.0.15" + rxjs "^7.8.1" + +"@aws-amplify/datastore@5.0.76": + version "5.0.76" + resolved "https://registry.yarnpkg.com/@aws-amplify/datastore/-/datastore-5.0.76.tgz#4dfedc6197f0a8f2aa06050b6e04b8109929bc3e" + integrity sha512-0yzI6mLtHuqqE1OHt4wCoxwNTbwXAKPs3vFY/S1mzSZXASXcIRSgcwMsb5DeXTx1XdXO4wEDbqKL2nmf1y143w== + dependencies: + "@aws-amplify/api" "6.3.5" + "@aws-amplify/api-graphql" "4.7.9" + buffer "4.9.2" + idb "5.0.6" + immer "9.0.6" + rxjs "^7.8.1" + ulid "^2.3.0" + +"@aws-amplify/notifications@2.0.74": + version "2.0.74" + resolved "https://registry.yarnpkg.com/@aws-amplify/notifications/-/notifications-2.0.74.tgz#6f357647ea5ac10791e8d807611d280f26ac6fd8" + integrity sha512-MVUyNA2SncxDdoxCu0ynmTpEC3NVVhjtbSxskf0+G0DGOKAB4JobOb/J+bIzTfdiilmf5H5IWRqzeFw8+qhjfg== + dependencies: + "@aws-sdk/types" "3.398.0" + lodash "^4.17.21" + tslib "^2.5.0" + +"@aws-amplify/storage@6.7.15": + version "6.7.15" + resolved "https://registry.yarnpkg.com/@aws-amplify/storage/-/storage-6.7.15.tgz#66f7beb61ce377f893c6cdf710bb815d2c5fef49" + integrity sha512-ZYf+CHFeFQlYvmXt4QzA81QLCuHQlZ73KbcMhIPirCPO3QHI5SfYsVW08tBXhwbgfzExpgFEtJwt5WFmG7uTYw== + dependencies: + "@aws-sdk/types" "3.398.0" + "@smithy/md5-js" "2.0.7" + buffer "4.9.2" + crc-32 "1.2.2" + fast-xml-parser "^4.4.1" + tslib "^2.5.0" + +"@aws-amplify/ui-react-core@3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react-core/-/ui-react-core-3.3.4.tgz#127514891b5db1a68bf15459b2d9b9426d921ef5" + integrity sha512-OBniqT5XPZUz19evqTlw+neDY0z6KbYJuBab7zn1tYrDU9WBaPIYtTINglxJmEyiul4e43EQmegZffHHtRviKA== + dependencies: + "@aws-amplify/ui" "6.9.1" + "@xstate/react" "^3.2.2" + lodash "4.17.21" + react-hook-form "^7.53.2" + xstate "^4.33.6" + +"@aws-amplify/ui-react@^6.9.4": + version "6.9.4" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui-react/-/ui-react-6.9.4.tgz#1059081a2adf873f7e5ccb16f6a1ab4bce002258" + integrity sha512-sJ0dZibIgM7yH14eGw/kZtbjwfj7mtCfpoKrk3W9pAEUv5KuGxiyN99dHui2ZXFSxIC3PGlNLxBQAnWh/i905A== + dependencies: + "@aws-amplify/ui" "6.9.1" + "@aws-amplify/ui-react-core" "3.3.4" + "@radix-ui/react-direction" "^1.1.0" + "@radix-ui/react-dropdown-menu" "^2.1.4" + "@radix-ui/react-slider" "^1.2.2" + "@xstate/react" "^3.2.2" + lodash "4.17.21" + qrcode "1.5.0" + tslib "^2.5.2" + +"@aws-amplify/ui@6.9.1": + version "6.9.1" + resolved "https://registry.yarnpkg.com/@aws-amplify/ui/-/ui-6.9.1.tgz#0ae98542a359b90f3091047ab81102fa5710b729" + integrity sha512-bfzIGv6kg50qtx4jj9JYKXDOzIJnZzukHy/sp/DBkXnQz0CFsppD95bQxDcPXkKMEjZ1VnCFOvgmFvdlsv0i/A== + dependencies: + csstype "^3.1.1" + lodash "4.17.21" + tslib "^2.5.2" + "@aws-crypto/crc32@3.0.0": version "3.0.0" resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz" @@ -241,6 +395,151 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@aws-sdk/client-firehose@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-firehose/-/client-firehose-3.621.0.tgz#2bfb5bc59808dde055ccc18fcb89f6322326729a" + integrity sha512-XAjAkXdb35PDvBYph609Fxn4g00HYH/U6N4+KjF9gLQrdTU+wkjf3D9YD02DZNbApJVcu4eIxWh/8M25YkW02A== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/client-sts" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-kinesis@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-kinesis/-/client-kinesis-3.621.0.tgz#3af1e18622638d20cd0fa3df5182978cb130ab86" + integrity sha512-53Omt/beFmTQPjQNpMuPMk5nMzYVsXCRiO+MeqygZEKYG1fWw/UGluCWVbi7WjClOHacsW8lQcsqIRvkPDFNag== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/client-sts" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/eventstream-serde-browser" "^3.0.5" + "@smithy/eventstream-serde-config-resolver" "^3.0.3" + "@smithy/eventstream-serde-node" "^3.0.4" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + "@smithy/util-waiter" "^3.1.2" + tslib "^2.6.2" + +"@aws-sdk/client-personalize-events@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-personalize-events/-/client-personalize-events-3.621.0.tgz#f061e00d2dc75b1165ace8280879119e78f9a577" + integrity sha512-qkVkqYvOe3WVuVNL/gRITGYFfHJCx2ijGFK7H3hNUJH3P4AwskmouAd1pWf+3cbGedRnj2is7iw7E602LeJIHA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/client-sts" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/client-s3@^3.735.0": version "3.735.0" resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.735.0.tgz" @@ -303,6 +602,51 @@ "@smithy/util-waiter" "^4.0.2" tslib "^2.6.2" +"@aws-sdk/client-sso-oidc@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.621.0.tgz#3fa3d468fbebbd93a5f75c1d51b63cc7af3ef17b" + integrity sha512-mMjk3mFUwV2Y68POf1BQMTF+F6qxt5tPu6daEUCNGC9Cenk3h2YXQQoS4/eSyYzuBiYk3vx49VgleRvdvkg8rg== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sso@3.438.0": version "3.438.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.438.0.tgz" @@ -345,6 +689,50 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@aws-sdk/client-sso@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.621.0.tgz#c0eefeb9adcbc6bb7c91c32070404c8c91846825" + integrity sha512-xpKfikN4u0BaUYZA9FGUMkkDmfoIP0Q03+A86WjqDWhcOoqNA1DkHsE4kZ+r064ifkPUfcNuUvlkVTEoBZoFjA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/client-sso@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.734.0.tgz" @@ -435,6 +823,52 @@ fast-xml-parser "4.2.5" tslib "^2.5.0" +"@aws-sdk/client-sts@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.621.0.tgz#2994f601790893901704c5df56c837e89f279952" + integrity sha512-707uiuReSt+nAx6d0c21xLjLm2lxeKc7padxjv92CIrIocnQSlJPxSCM7r5zBhwiahJA6MNQwmTl2xznU67KgA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/client-sso-oidc" "3.621.0" + "@aws-sdk/core" "3.621.0" + "@aws-sdk/credential-provider-node" "3.621.0" + "@aws-sdk/middleware-host-header" "3.620.0" + "@aws-sdk/middleware-logger" "3.609.0" + "@aws-sdk/middleware-recursion-detection" "3.620.0" + "@aws-sdk/middleware-user-agent" "3.620.0" + "@aws-sdk/region-config-resolver" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@aws-sdk/util-user-agent-browser" "3.609.0" + "@aws-sdk/util-user-agent-node" "3.614.0" + "@smithy/config-resolver" "^3.0.5" + "@smithy/core" "^2.3.1" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/hash-node" "^3.0.3" + "@smithy/invalid-dependency" "^3.0.3" + "@smithy/middleware-content-length" "^3.0.5" + "@smithy/middleware-endpoint" "^3.1.0" + "@smithy/middleware-retry" "^3.0.13" + "@smithy/middleware-serde" "^3.0.3" + "@smithy/middleware-stack" "^3.0.3" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/url-parser" "^3.0.3" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-body-length-node" "^3.0.0" + "@smithy/util-defaults-mode-browser" "^3.0.13" + "@smithy/util-defaults-mode-node" "^3.0.13" + "@smithy/util-endpoints" "^2.0.5" + "@smithy/util-middleware" "^3.0.3" + "@smithy/util-retry" "^3.0.3" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@aws-sdk/core@3.436.0": version "3.436.0" resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.436.0.tgz" @@ -442,6 +876,21 @@ dependencies: "@smithy/smithy-client" "^2.1.12" +"@aws-sdk/core@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.621.0.tgz#e38c56c3ce0c819ca1185eaabcb98412429aaca3" + integrity sha512-CtOwWmDdEiINkGXD93iGfXjN0WmCp9l45cDWHHGa8lRgEDyhuL7bwd/pH5aSzj0j8SiQBG2k0S7DHbd5RaqvbQ== + dependencies: + "@smithy/core" "^2.3.1" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/protocol-http" "^4.1.0" + "@smithy/signature-v4" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/util-middleware" "^3.0.3" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + "@aws-sdk/core@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.734.0.tgz" @@ -469,6 +918,16 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/credential-provider-env@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz#d4692c49a65ebc11dae3f7f8b053fee9268a953c" + integrity sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-env@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.734.0.tgz" @@ -480,6 +939,21 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" +"@aws-sdk/credential-provider-http@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.621.0.tgz#5f944bf548f203d842cf71a5792f73c205544627" + integrity sha512-/jc2tEsdkT1QQAI5Dvoci50DbSxtJrevemwFsm0B73pwCcOQZ5ZwwSdVqGsPutzYzUVx3bcXg3LRL7jLACqRIg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/fetch-http-handler" "^3.2.4" + "@smithy/node-http-handler" "^3.1.4" + "@smithy/property-provider" "^3.1.3" + "@smithy/protocol-http" "^4.1.0" + "@smithy/smithy-client" "^3.1.11" + "@smithy/types" "^3.3.0" + "@smithy/util-stream" "^3.1.3" + tslib "^2.6.2" + "@aws-sdk/credential-provider-http@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.734.0.tgz" @@ -512,6 +986,23 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/credential-provider-ini@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.621.0.tgz#bda2365f88fee40e3ae067b08bf484106c339222" + integrity sha512-0EWVnSc+JQn5HLnF5Xv405M8n4zfdx9gyGdpnCmAmFqEDHA8LmBdxJdpUk1Ovp/I5oPANhjojxabIW5f1uU0RA== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.621.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.621.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-ini@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.734.0.tgz" @@ -548,6 +1039,24 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/credential-provider-node@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.621.0.tgz#9cc5052760a9f9d70d70f12ddbdbf0d59bf13a47" + integrity sha512-4JqpccUgz5Snanpt2+53hbOBbJQrSFq7E1sAAbgY6BKVQUsW5qyXqnjvSF32kDeKa5JpBl3bBWLZl04IadcPHw== + dependencies: + "@aws-sdk/credential-provider-env" "3.620.1" + "@aws-sdk/credential-provider-http" "3.621.0" + "@aws-sdk/credential-provider-ini" "3.621.0" + "@aws-sdk/credential-provider-process" "3.620.1" + "@aws-sdk/credential-provider-sso" "3.621.0" + "@aws-sdk/credential-provider-web-identity" "3.621.0" + "@aws-sdk/types" "3.609.0" + "@smithy/credential-provider-imds" "^3.2.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-node@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.734.0.tgz" @@ -577,6 +1086,17 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/credential-provider-process@3.620.1": + version "3.620.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz#10387cf85400420bb4bbda9cc56937dcc6d6d0ee" + integrity sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-process@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.734.0.tgz" @@ -602,6 +1122,19 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/credential-provider-sso@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.621.0.tgz#710f413708cb372f9f94e8eb9726cf263ffd83e3" + integrity sha512-Kza0jcFeA/GEL6xJlzR2KFf1PfZKMFnxfGzJzl5yN7EjoGdMijl34KaRyVnfRjnCWcsUpBWKNIDk9WZVMY9yiw== + dependencies: + "@aws-sdk/client-sso" "3.621.0" + "@aws-sdk/token-providers" "3.614.0" + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-sso@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.734.0.tgz" @@ -626,6 +1159,16 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/credential-provider-web-identity@3.621.0": + version "3.621.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz#b25878c0a05dad60cd5f91e7e5a31a145c2f14be" + integrity sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/credential-provider-web-identity@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.734.0.tgz" @@ -703,6 +1246,16 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/middleware-host-header@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz#b561d419a08a984ba364c193376b482ff5224d74" + integrity sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-host-header@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz" @@ -731,6 +1284,15 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/middleware-logger@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz#ed44d201f091b8bac908cbf14724c7a4d492553f" + integrity sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-logger@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz" @@ -750,6 +1312,16 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/middleware-recursion-detection@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz#f8270dfff843fd756be971e5673f89c6a24c6513" + integrity sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-recursion-detection@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz" @@ -823,6 +1395,17 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/middleware-user-agent@3.620.0": + version "3.620.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz#1fe3104f04f576a942cf0469bfbd73c38eef3d9e" + integrity sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A== + dependencies: + "@aws-sdk/types" "3.609.0" + "@aws-sdk/util-endpoints" "3.614.0" + "@smithy/protocol-http" "^4.1.0" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/middleware-user-agent@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.734.0.tgz" @@ -891,6 +1474,18 @@ "@smithy/util-middleware" "^2.0.5" tslib "^2.5.0" +"@aws-sdk/region-config-resolver@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz#9cebb31a5bcfea2a41891fff7f28d0164cde179a" + integrity sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.3" + tslib "^2.6.2" + "@aws-sdk/region-config-resolver@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz" @@ -958,6 +1553,17 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@aws-sdk/token-providers@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz#88da04f6d4ce916b0b0f6e045676d04201fb47fd" + integrity sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/property-provider" "^3.1.3" + "@smithy/shared-ini-file-loader" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/token-providers@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.734.0.tgz" @@ -970,6 +1576,22 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" +"@aws-sdk/types@3.387.0": + version "3.387.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.387.0.tgz#15a968344956b2587dbab1224718d72329e050f4" + integrity sha512-YTjFabNwjTF+6yl88f0/tWff018qmmgMmjlw45s6sdVKueWxdxV68U7gepNLF2nhaQPZa6FDOBoA51NaviVs0Q== + dependencies: + "@smithy/types" "^2.1.0" + tslib "^2.5.0" + +"@aws-sdk/types@3.398.0": + version "3.398.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.398.0.tgz#8ce02559536670f9188cddfce32e9dd12b4fe965" + integrity sha512-r44fkS+vsEgKCuEuTV+TIk0t0m5ZlXHNjSDYEUvzLStbbfUFiNus/YG4UCa0wOk9R7VuQI67badsvvPeVPCGDQ== + dependencies: + "@smithy/types" "^2.2.2" + tslib "^2.5.0" + "@aws-sdk/types@3.433.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0": version "3.433.0" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.433.0.tgz" @@ -978,6 +1600,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/types@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.609.0.tgz#06b39d799c9f197a7b43670243e8e78a3bf7d6a5" + integrity sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q== + dependencies: + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/types@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.734.0.tgz" @@ -1002,6 +1632,16 @@ "@smithy/util-endpoints" "^1.0.2" tslib "^2.5.0" +"@aws-sdk/util-endpoints@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz#6564b0ffd7dc3728221e9f9821f5aab1cc58468e" + integrity sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + "@smithy/util-endpoints" "^2.0.5" + tslib "^2.6.2" + "@aws-sdk/util-endpoints@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.734.0.tgz" @@ -1029,6 +1669,16 @@ bowser "^2.11.0" tslib "^2.5.0" +"@aws-sdk/util-user-agent-browser@3.609.0": + version "3.609.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz#aa15421b2e32ae8bc589dac2bd6e8969832ce588" + integrity sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/types" "^3.3.0" + bowser "^2.11.0" + tslib "^2.6.2" + "@aws-sdk/util-user-agent-browser@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz" @@ -1049,6 +1699,16 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@aws-sdk/util-user-agent-node@3.614.0": + version "3.614.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz#1e3f49a80f841a3f21647baed2adce01aac5beb5" + integrity sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA== + dependencies: + "@aws-sdk/types" "3.609.0" + "@smithy/node-config-provider" "^3.1.4" + "@smithy/types" "^3.3.0" + tslib "^2.6.2" + "@aws-sdk/util-user-agent-node@3.734.0": version "3.734.0" resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.734.0.tgz" @@ -3350,6 +4010,33 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz" integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA== +"@floating-ui/core@^1.6.0": + version "1.6.9" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.9.tgz#64d1da251433019dafa091de9b2886ff35ec14e6" + integrity sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw== + dependencies: + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/dom@^1.0.0": + version "1.6.13" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.13.tgz#a8a938532aea27a95121ec16e667a7cbe8c59e34" + integrity sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.9" + +"@floating-ui/react-dom@^2.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@floating-ui/react-dom/-/react-dom-2.1.2.tgz#a1349bbf6a0e5cb5ded55d023766f20a4d439a31" + integrity sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A== + dependencies: + "@floating-ui/dom" "^1.0.0" + +"@floating-ui/utils@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.9.tgz#50dea3616bc8191fb8e112283b49eaff03e78429" + integrity sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg== + "@humanwhocodes/config-array@^0.11.13": version "0.11.13" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz" @@ -4243,6 +4930,243 @@ resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== +"@radix-ui/number@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.1.0.tgz#1e95610461a09cdf8bb05c152e76ca1278d5da46" + integrity sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ== + +"@radix-ui/primitive@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/primitive/-/primitive-1.1.1.tgz#fc169732d755c7fbad33ba8d0cd7fd10c90dc8e3" + integrity sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA== + +"@radix-ui/react-arrow@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz#30c0d574d7bb10eed55cd7007b92d38b03c6b2ab" + integrity sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg== + dependencies: + "@radix-ui/react-primitive" "2.0.2" + +"@radix-ui/react-collection@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-collection/-/react-collection-1.1.2.tgz#b45eccca1cb902fd078b237316bd9fa81e621e15" + integrity sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-slot" "1.1.2" + +"@radix-ui/react-compose-refs@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz#6f766faa975f8738269ebb8a23bad4f5a8d2faec" + integrity sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw== + +"@radix-ui/react-context@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-context/-/react-context-1.1.1.tgz#82074aa83a472353bb22e86f11bcbd1c61c4c71a" + integrity sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q== + +"@radix-ui/react-direction@1.1.0", "@radix-ui/react-direction@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-direction/-/react-direction-1.1.0.tgz#a7d39855f4d077adc2a1922f9c353c5977a09cdc" + integrity sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg== + +"@radix-ui/react-dismissable-layer@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz#96dde2be078c694a621e55e047406c58cd5fe774" + integrity sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-escape-keydown" "1.1.0" + +"@radix-ui/react-dropdown-menu@^2.1.4": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.6.tgz#b66b62648b378370aa3c38e5727fd3bc5b8792a3" + integrity sha512-no3X7V5fD487wab/ZYSHXq3H37u4NVeLDKI/Ks724X/eEFSSEFYZxWgsIlr1UBeEyDaM29HM5x9p1Nv8DuTYPA== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-menu" "2.1.6" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-use-controllable-state" "1.1.0" + +"@radix-ui/react-focus-guards@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz#8635edd346304f8b42cae86b05912b61aef27afe" + integrity sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg== + +"@radix-ui/react-focus-scope@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz#c0a4519cd95c772606a82fc5b96226cd7fdd2602" + integrity sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-id@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-id/-/react-id-1.1.0.tgz#de47339656594ad722eb87f94a6b25f9cffae0ed" + integrity sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-menu@2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@radix-ui/react-menu/-/react-menu-2.1.6.tgz#05fb1ef3fd7545c8abe61178372902970cdec3ce" + integrity sha512-tBBb5CXDJW3t2mo9WlO7r6GTmWV0F0uzHZVFmlRmYpiSK1CDU5IKojP1pm7oknpBOrFZx/YgBRW9oorPO2S/Lg== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-dismissable-layer" "1.1.5" + "@radix-ui/react-focus-guards" "1.1.1" + "@radix-ui/react-focus-scope" "1.1.2" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-popper" "1.2.2" + "@radix-ui/react-portal" "1.1.4" + "@radix-ui/react-presence" "1.1.2" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-roving-focus" "1.1.2" + "@radix-ui/react-slot" "1.1.2" + "@radix-ui/react-use-callback-ref" "1.1.0" + aria-hidden "^1.2.4" + react-remove-scroll "^2.6.3" + +"@radix-ui/react-popper@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-popper/-/react-popper-1.2.2.tgz#d2e1ee5a9b24419c5936a1b7f6f472b7b412b029" + integrity sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA== + dependencies: + "@floating-ui/react-dom" "^2.0.0" + "@radix-ui/react-arrow" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-rect" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + "@radix-ui/rect" "1.1.0" + +"@radix-ui/react-portal@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@radix-ui/react-portal/-/react-portal-1.1.4.tgz#ff5401ff63c8a825c46eea96d3aef66074b8c0c8" + integrity sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA== + dependencies: + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-presence@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-presence/-/react-presence-1.1.2.tgz#bb764ed8a9118b7ec4512da5ece306ded8703cdc" + integrity sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/react-primitive@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz#ac8b7854d87b0d7af388d058268d9a7eb64ca8ef" + integrity sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w== + dependencies: + "@radix-ui/react-slot" "1.1.2" + +"@radix-ui/react-roving-focus@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz#815d051a54299114a68db6eb8d34c41a3c0a646f" + integrity sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw== + dependencies: + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-id" "1.1.0" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-use-callback-ref" "1.1.0" + "@radix-ui/react-use-controllable-state" "1.1.0" + +"@radix-ui/react-slider@^1.2.2": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slider/-/react-slider-1.2.3.tgz#f40072e88891d756493f27bb53285e32d0e6af37" + integrity sha512-nNrLAWLjGESnhqBqcCNW4w2nn7LxudyMzeB6VgdyAnFLC6kfQgnAjSL2v6UkQTnDctJBlxrmxfplWS4iYjdUTw== + dependencies: + "@radix-ui/number" "1.1.0" + "@radix-ui/primitive" "1.1.1" + "@radix-ui/react-collection" "1.1.2" + "@radix-ui/react-compose-refs" "1.1.1" + "@radix-ui/react-context" "1.1.1" + "@radix-ui/react-direction" "1.1.0" + "@radix-ui/react-primitive" "2.0.2" + "@radix-ui/react-use-controllable-state" "1.1.0" + "@radix-ui/react-use-layout-effect" "1.1.0" + "@radix-ui/react-use-previous" "1.1.0" + "@radix-ui/react-use-size" "1.1.0" + +"@radix-ui/react-slot@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@radix-ui/react-slot/-/react-slot-1.1.2.tgz#daffff7b2bfe99ade63b5168407680b93c00e1c6" + integrity sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ== + dependencies: + "@radix-ui/react-compose-refs" "1.1.1" + +"@radix-ui/react-use-callback-ref@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz#bce938ca413675bc937944b0d01ef6f4a6dc5bf1" + integrity sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw== + +"@radix-ui/react-use-controllable-state@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz#1321446857bb786917df54c0d4d084877aab04b0" + integrity sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-use-escape-keydown@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz#31a5b87c3b726504b74e05dac1edce7437b98754" + integrity sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw== + dependencies: + "@radix-ui/react-use-callback-ref" "1.1.0" + +"@radix-ui/react-use-layout-effect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz#3c2c8ce04827b26a39e442ff4888d9212268bd27" + integrity sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w== + +"@radix-ui/react-use-previous@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz#d4dd37b05520f1d996a384eb469320c2ada8377c" + integrity sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og== + +"@radix-ui/react-use-rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz#13b25b913bd3e3987cc9b073a1a164bb1cf47b88" + integrity sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ== + dependencies: + "@radix-ui/rect" "1.1.0" + +"@radix-ui/react-use-size@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz#b4dba7fbd3882ee09e8d2a44a3eed3a7e555246b" + integrity sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw== + dependencies: + "@radix-ui/react-use-layout-effect" "1.1.0" + +"@radix-ui/rect@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@radix-ui/rect/-/rect-1.1.0.tgz#f817d1d3265ac5415dadc67edab30ae196696438" + integrity sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg== + "@remix-run/router@1.10.0": version "1.10.0" resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.10.0.tgz" @@ -4275,6 +5199,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/abort-controller@^3.1.9": + version "3.1.9" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.9.tgz#47d323f754136a489e972d7fd465d534d72fcbff" + integrity sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/abort-controller@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz" @@ -4309,6 +5241,17 @@ "@smithy/util-middleware" "^2.0.5" tslib "^2.5.0" +"@smithy/config-resolver@^3.0.13", "@smithy/config-resolver@^3.0.5": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.13.tgz#653643a77a33d0f5907a5e7582353886b07ba752" + integrity sha512-Gr/qwzyPaTL1tZcq8WQyHhTZREER5R1Wytmz4WnVGL4onA3dNk6Btll55c8Vr58pLdvWZmtG8oZxJTw3t3q7Jg== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/util-config-provider" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + "@smithy/config-resolver@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz" @@ -4320,6 +5263,20 @@ "@smithy/util-middleware" "^4.0.1" tslib "^2.6.2" +"@smithy/core@^2.3.1", "@smithy/core@^2.5.7": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.7.tgz#b545649071905f064cb0407102f3b9159246f8d9" + integrity sha512-8olpW6mKCa0v+ibCjoCzgZHQx1SQmZuW/WkrdZo73wiTprTH6qhmskT60QLFdT9DRa5mXxjz89kQPZ7ZSsoqqg== + dependencies: + "@smithy/middleware-serde" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-body-length-browser" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-stream" "^3.3.4" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/core@^3.1.1", "@smithy/core@^3.1.2": version "3.1.2" resolved "https://registry.npmjs.org/@smithy/core/-/core-3.1.2.tgz" @@ -4345,6 +5302,17 @@ "@smithy/url-parser" "^2.0.12" tslib "^2.5.0" +"@smithy/credential-provider-imds@^3.2.0", "@smithy/credential-provider-imds@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.8.tgz#27ed2747074c86a7d627a98e56f324a65cba88de" + integrity sha512-ZCY2yD0BY+K9iMXkkbnjo+08T2h8/34oHd0Jmh6BZUSZwaaGlGCyBT/3wnS7u7Xl33/EEfN4B6nQr3Gx5bYxgw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + tslib "^2.6.2" + "@smithy/credential-provider-imds@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz" @@ -4366,6 +5334,16 @@ "@smithy/util-hex-encoding" "^2.0.0" tslib "^2.5.0" +"@smithy/eventstream-codec@^3.1.10": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-3.1.10.tgz#0c1a3457e7a23b71cd71525ceb668f8569a84dad" + integrity sha512-323B8YckSbUH0nMIpXn7HZsAVKHYHFUODa8gG9cHo0ySvA1fr5iWaNT+iIL0UCqUzG6QPHA3BSsBtRQou4mMqQ== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^3.7.2" + "@smithy/util-hex-encoding" "^3.0.0" + tslib "^2.6.2" + "@smithy/eventstream-codec@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz" @@ -4376,6 +5354,15 @@ "@smithy/util-hex-encoding" "^4.0.0" tslib "^2.6.2" +"@smithy/eventstream-serde-browser@^3.0.5": + version "3.0.14" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.14.tgz#0c3584c7cde2e210aacdfbbd2b57c1d7e2ca3b95" + integrity sha512-kbrt0vjOIihW3V7Cqj1SXQvAI5BR8SnyQYsandva0AOR307cXAc+IhPngxIPslxTLfxwDpNu0HzCAq6g42kCPg== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/eventstream-serde-browser@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz" @@ -4385,6 +5372,14 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" +"@smithy/eventstream-serde-config-resolver@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.11.tgz#5edceba836debea165ea93145231036f6286d67c" + integrity sha512-P2pnEp4n75O+QHjyO7cbw/vsw5l93K/8EWyjNCAAybYwUmj3M+hjSQZ9P5TVdUgEG08ueMAP5R4FkuSkElZ5tQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/eventstream-serde-config-resolver@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz" @@ -4393,6 +5388,15 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" +"@smithy/eventstream-serde-node@^3.0.4": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.13.tgz#5aebd7b553becee277e411a2b69f6af8c9d7b3a6" + integrity sha512-zqy/9iwbj8Wysmvi7Lq7XFLeDgjRpTbCfwBhJa8WbrylTAHiAu6oQTwdY7iu2lxigbc9YYr9vPv5SzYny5tCXQ== + dependencies: + "@smithy/eventstream-serde-universal" "^3.0.13" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/eventstream-serde-node@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz" @@ -4402,6 +5406,15 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" +"@smithy/eventstream-serde-universal@^3.0.13": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.13.tgz#609c922ea14a0a3eed23a28ac110344c935704eb" + integrity sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw== + dependencies: + "@smithy/eventstream-codec" "^3.1.10" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/eventstream-serde-universal@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz" @@ -4422,6 +5435,28 @@ "@smithy/util-base64" "^2.0.0" tslib "^2.5.0" +"@smithy/fetch-http-handler@^3.2.4": + version "3.2.9" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz#8d5199c162a37caa37a8b6848eefa9ca58221a0b" + integrity sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A== + dependencies: + "@smithy/protocol-http" "^4.1.4" + "@smithy/querystring-builder" "^3.0.7" + "@smithy/types" "^3.5.0" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + +"@smithy/fetch-http-handler@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.1.3.tgz#fc590dea2470d32559ae298306f1277729d24aa9" + integrity sha512-6SxNltSncI8s689nvnzZQc/dPXcpHQ34KUj6gR/HBroytKOd/isMG3gJF/zBE1TBmTT18TXyzhg3O3SOOqGEhA== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + tslib "^2.6.2" + "@smithy/fetch-http-handler@^5.0.1": version "5.0.1" resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz" @@ -4453,6 +5488,16 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@smithy/hash-node@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.11.tgz#99e09ead3fc99c8cd7ca0f254ea0e35714f2a0d3" + integrity sha512-emP23rwYyZhQBvklqTtwetkQlqbNYirDiEEwXl2v0GYWMnCzxst7ZaRAnWuy28njp5kAH54lvkdG37MblZzaHA== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/hash-node@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz" @@ -4480,6 +5525,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/invalid-dependency@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.11.tgz#8144d7b0af9d34ab5f672e1f674f97f8740bb9ae" + integrity sha512-NuQmVPEJjUX6c+UELyVz8kUx8Q539EDeNwbRyu4IIF8MeV7hUtq1FB3SHVyki2u++5XLMFqngeMKk7ccspnNyQ== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/invalid-dependency@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz" @@ -4495,6 +5548,13 @@ dependencies: tslib "^2.5.0" +"@smithy/is-array-buffer@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" + integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== + dependencies: + tslib "^2.6.2" + "@smithy/is-array-buffer@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz" @@ -4502,6 +5562,15 @@ dependencies: tslib "^2.6.2" +"@smithy/md5-js@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-2.0.7.tgz#4dea27b20b065857f953c74dbaa050003f48a374" + integrity sha512-2i2BpXF9pI5D1xekqUsgQ/ohv5+H//G9FlawJrkOJskV18PgJ8LiNbLiskMeYt07yAsSTZR7qtlcAaa/GQLWww== + dependencies: + "@smithy/types" "^2.3.1" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.5.0" + "@smithy/md5-js@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.1.tgz" @@ -4520,6 +5589,15 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/middleware-content-length@^3.0.5": + version "3.0.13" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.13.tgz#6e08fe52739ac8fb3996088e0f8837e4b2ea187f" + integrity sha512-zfMhzojhFpIX3P5ug7jxTjfUcIPcGjcQYzB9t+rv0g1TX7B0QdwONW+ATouaLoD7h7LOw/ZlXfkq4xJ/g2TrIw== + dependencies: + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/middleware-content-length@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz" @@ -4542,6 +5620,20 @@ "@smithy/util-middleware" "^2.0.5" tslib "^2.5.0" +"@smithy/middleware-endpoint@^3.1.0", "@smithy/middleware-endpoint@^3.2.8": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.8.tgz#6ca5de80543ba0f0d40e15dc3f9d0f14d192e06e" + integrity sha512-OEJZKVUEhMOqMs3ktrTWp7UvvluMJEvD5XgQwRePSbDg1VvBaL8pX8mwPltFn6wk1GySbcVwwyldL8S+iqnrEQ== + dependencies: + "@smithy/core" "^2.5.7" + "@smithy/middleware-serde" "^3.0.11" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + "@smithy/url-parser" "^3.0.11" + "@smithy/util-middleware" "^3.0.11" + tslib "^2.6.2" + "@smithy/middleware-endpoint@^4.0.2", "@smithy/middleware-endpoint@^4.0.3": version "4.0.3" resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.3.tgz" @@ -4570,6 +5662,21 @@ tslib "^2.5.0" uuid "^8.3.2" +"@smithy/middleware-retry@^3.0.13": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.34.tgz#136c89fc22d70819fdefc51b0d24952cf98883f1" + integrity sha512-yVRr/AAtPZlUvwEkrq7S3x7Z8/xCd97m2hLDaqdz6ucP2RKHsBjEqaUA2ebNv2SsZoPEi+ZD0dZbOB1u37tGCA== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/protocol-http" "^4.1.8" + "@smithy/service-error-classification" "^3.0.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-retry" "^3.0.11" + tslib "^2.6.2" + uuid "^9.0.1" + "@smithy/middleware-retry@^4.0.3": version "4.0.4" resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.4.tgz" @@ -4593,6 +5700,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/middleware-serde@^3.0.11", "@smithy/middleware-serde@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.11.tgz#c7d54e0add4f83e05c6878a011fc664e21022f12" + integrity sha512-KzPAeySp/fOoQA82TpnwItvX8BBURecpx6ZMu75EZDkAcnPtO6vf7q4aH5QHs/F1s3/snQaSFbbUMcFFZ086Mw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/middleware-serde@^4.0.1", "@smithy/middleware-serde@^4.0.2": version "4.0.2" resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz" @@ -4609,6 +5724,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/middleware-stack@^3.0.11", "@smithy/middleware-stack@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.11.tgz#453af2096924e4064d9da4e053cfdf65d9a36acc" + integrity sha512-1HGo9a6/ikgOMrTrWL/WiN9N8GSVYpuRQO5kjstAq4CvV59bjqnh7TbdXGQ4vxLD3xlSjfBjq5t1SOELePsLnA== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/middleware-stack@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz" @@ -4627,6 +5750,16 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/node-config-provider@^3.1.12", "@smithy/node-config-provider@^3.1.4": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.12.tgz#1b1d674fc83f943dc7b3017e37f16f374e878a6c" + integrity sha512-O9LVEu5J/u/FuNlZs+L7Ikn3lz7VB9hb0GtPT9MQeiBmtK8RSY3ULmsZgXhe6VAlgTw0YO+paQx4p8xdbs43vQ== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/shared-ini-file-loader" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/node-config-provider@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz" @@ -4648,6 +5781,17 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/node-http-handler@^3.1.4", "@smithy/node-http-handler@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz#94dbb3f15342b656ceba2b26e14aa741cace8919" + integrity sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/protocol-http" "^4.1.8" + "@smithy/querystring-builder" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/node-http-handler@^4.0.2": version "4.0.2" resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.2.tgz" @@ -4667,6 +5811,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/property-provider@^3.1.11", "@smithy/property-provider@^3.1.3": + version "3.1.11" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.11.tgz#161cf1c2a2ada361e417382c57f5ba6fbca8acad" + integrity sha512-I/+TMc4XTQ3QAjXfOcUWbSS073oOEAxgx4aZy8jHaf8JQnRkq2SZWw8+PfDtBvLUjcGMdxl+YwtzWe6i5uhL/A== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/property-provider@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz" @@ -4683,6 +5835,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/protocol-http@^4.1.0", "@smithy/protocol-http@^4.1.4", "@smithy/protocol-http@^4.1.8": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.8.tgz#0461758671335f65e8ff3fc0885ab7ed253819c9" + integrity sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/protocol-http@^5.0.1": version "5.0.1" resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz" @@ -4700,6 +5860,15 @@ "@smithy/util-uri-escape" "^2.0.0" tslib "^2.5.0" +"@smithy/querystring-builder@^3.0.11", "@smithy/querystring-builder@^3.0.7": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz#2ed04adbe725671824c5613d0d6f9376d791a909" + integrity sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/util-uri-escape" "^3.0.0" + tslib "^2.6.2" + "@smithy/querystring-builder@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz" @@ -4717,6 +5886,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/querystring-parser@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.11.tgz#9d3177ea19ce8462f18d9712b395239e1ca1f969" + integrity sha512-Je3kFvCsFMnso1ilPwA7GtlbPaTixa3WwC+K21kmMZHsBEOZYQaqxcMqeFFoU7/slFjKDIpiiPydvdJm8Q/MCw== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/querystring-parser@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz" @@ -4732,6 +5909,13 @@ dependencies: "@smithy/types" "^2.4.0" +"@smithy/service-error-classification@^3.0.11": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.11.tgz#d3d7fc0aacd2e60d022507367e55c7939e5bcb8a" + integrity sha512-QnYDPkyewrJzCyaeI2Rmp7pDwbUETe+hU8ADkXmgNusO1bgHBH7ovXJiYmba8t0fNfJx75fE8dlM6SEmZxheog== + dependencies: + "@smithy/types" "^3.7.2" + "@smithy/service-error-classification@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz" @@ -4747,6 +5931,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/shared-ini-file-loader@^3.1.12", "@smithy/shared-ini-file-loader@^3.1.4": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.12.tgz#d98b1b663eb18935ce2cbc79024631d34f54042a" + integrity sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/shared-ini-file-loader@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz" @@ -4769,6 +5961,20 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@smithy/signature-v4@^4.1.0": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.4.tgz#3501d3d09fd82768867bfc00a7be4bad62f62f4d" + integrity sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-middleware" "^3.0.11" + "@smithy/util-uri-escape" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/signature-v4@^5.0.1": version "5.0.1" resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz" @@ -4793,6 +5999,19 @@ "@smithy/util-stream" "^2.0.17" tslib "^2.5.0" +"@smithy/smithy-client@^3.1.11", "@smithy/smithy-client@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.7.0.tgz#8cfaa7b68b7af15e588b96aa14e5dce393f85839" + integrity sha512-9wYrjAZFlqWhgVo3C4y/9kpc68jgiSsKUnsFPzr/MSiRL93+QRDafGTfhhKAb2wsr69Ru87WTiqSfQusSmWipA== + dependencies: + "@smithy/core" "^2.5.7" + "@smithy/middleware-endpoint" "^3.2.8" + "@smithy/middleware-stack" "^3.0.11" + "@smithy/protocol-http" "^4.1.8" + "@smithy/types" "^3.7.2" + "@smithy/util-stream" "^3.3.4" + tslib "^2.6.2" + "@smithy/smithy-client@^4.1.2", "@smithy/smithy-client@^4.1.3": version "4.1.3" resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.3.tgz" @@ -4806,6 +6025,13 @@ "@smithy/util-stream" "^4.0.2" tslib "^2.6.2" +"@smithy/types@^2.1.0", "@smithy/types@^2.2.2", "@smithy/types@^2.3.1": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + "@smithy/types@^2.4.0": version "2.4.0" resolved "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz" @@ -4813,6 +6039,13 @@ dependencies: tslib "^2.5.0" +"@smithy/types@^3.3.0", "@smithy/types@^3.5.0", "@smithy/types@^3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.7.2.tgz#05cb14840ada6f966de1bf9a9c7dd86027343e10" + integrity sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg== + dependencies: + tslib "^2.6.2" + "@smithy/types@^4.1.0": version "4.1.0" resolved "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz" @@ -4829,6 +6062,15 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/url-parser@^3.0.11", "@smithy/url-parser@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.11.tgz#e5f5ffabfb6230159167cf4cc970705fca6b8b2d" + integrity sha512-TmlqXkSk8ZPhfc+SQutjmFr5FjC0av3GZP4B/10caK1SbRwe/v+Wzu/R6xEKxoNqL+8nY18s1byiy6HqPG37Aw== + dependencies: + "@smithy/querystring-parser" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/url-parser@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz" @@ -4846,6 +6088,15 @@ "@smithy/util-buffer-from" "^2.0.0" tslib "^2.5.0" +"@smithy/util-base64@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" + integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/util-base64@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz" @@ -4862,6 +6113,13 @@ dependencies: tslib "^2.5.0" +"@smithy/util-body-length-browser@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" + integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== + dependencies: + tslib "^2.6.2" + "@smithy/util-body-length-browser@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz" @@ -4876,6 +6134,13 @@ dependencies: tslib "^2.5.0" +"@smithy/util-body-length-node@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" + integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== + dependencies: + tslib "^2.6.2" + "@smithy/util-body-length-node@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz" @@ -4891,6 +6156,14 @@ "@smithy/is-array-buffer" "^2.0.0" tslib "^2.5.0" +"@smithy/util-buffer-from@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" + integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== + dependencies: + "@smithy/is-array-buffer" "^3.0.0" + tslib "^2.6.2" + "@smithy/util-buffer-from@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz" @@ -4906,6 +6179,13 @@ dependencies: tslib "^2.5.0" +"@smithy/util-config-provider@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" + integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== + dependencies: + tslib "^2.6.2" + "@smithy/util-config-provider@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz" @@ -4924,6 +6204,17 @@ bowser "^2.11.0" tslib "^2.5.0" +"@smithy/util-defaults-mode-browser@^3.0.13": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.34.tgz#885312529599cf24b09335cb20439c838e452f9f" + integrity sha512-FumjjF631lR521cX+svMLBj3SwSDh9VdtyynTYDAiBDEf8YPP5xORNXKQ9j0105o5+ARAGnOOP/RqSl40uXddA== + dependencies: + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + bowser "^2.11.0" + tslib "^2.6.2" + "@smithy/util-defaults-mode-browser@^4.0.3": version "4.0.4" resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.4.tgz" @@ -4948,6 +6239,19 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/util-defaults-mode-node@^3.0.13": + version "3.0.34" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.34.tgz#5eb0d97231a34e137980abfb08ea5e3a8f2156f7" + integrity sha512-vN6aHfzW9dVVzkI0wcZoUXvfjkl4CSbM9nE//08lmUMyf00S75uuCpTrqF9uD4bD9eldIXlt53colrlwKAT8Gw== + dependencies: + "@smithy/config-resolver" "^3.0.13" + "@smithy/credential-provider-imds" "^3.2.8" + "@smithy/node-config-provider" "^3.1.12" + "@smithy/property-provider" "^3.1.11" + "@smithy/smithy-client" "^3.7.0" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/util-defaults-mode-node@^4.0.3": version "4.0.4" resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.4.tgz" @@ -4970,6 +6274,15 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/util-endpoints@^2.0.5": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.7.tgz#a088ebfab946a7219dd4763bfced82709894b82d" + integrity sha512-tSfcqKcN/Oo2STEYCABVuKgJ76nyyr6skGl9t15hs+YaiU06sgMkN7QYjo0BbVw+KT26zok3IzbdSOksQ4YzVw== + dependencies: + "@smithy/node-config-provider" "^3.1.12" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/util-endpoints@^3.0.1": version "3.0.1" resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz" @@ -4979,13 +6292,20 @@ "@smithy/types" "^4.1.0" tslib "^2.6.2" -"@smithy/util-hex-encoding@^2.0.0": +"@smithy/util-hex-encoding@2.0.0", "@smithy/util-hex-encoding@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz" integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA== dependencies: tslib "^2.5.0" +"@smithy/util-hex-encoding@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" + integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== + dependencies: + tslib "^2.6.2" + "@smithy/util-hex-encoding@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz" @@ -5001,6 +6321,14 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/util-middleware@^3.0.11", "@smithy/util-middleware@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.11.tgz#2ab5c17266b42c225e62befcffb048afa682b5bf" + integrity sha512-dWpyc1e1R6VoXrwLoLDd57U1z6CwNSdkM69Ie4+6uYh2GC7Vg51Qtan7ITzczuVpqezdDTKJGJB95fFvvjU/ow== + dependencies: + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/util-middleware@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz" @@ -5018,6 +6346,15 @@ "@smithy/types" "^2.4.0" tslib "^2.5.0" +"@smithy/util-retry@^3.0.11", "@smithy/util-retry@^3.0.3": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.11.tgz#d267e5ccb290165cee69732547fea17b695a7425" + integrity sha512-hJUC6W7A3DQgaee3Hp9ZFcOxVDZzmBIRBPlUAk8/fSOEl7pE/aX7Dci0JycNOnm9Mfr0KV2XjIlUOcGWXQUdVQ== + dependencies: + "@smithy/service-error-classification" "^3.0.11" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/util-retry@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz" @@ -5041,6 +6378,20 @@ "@smithy/util-utf8" "^2.0.0" tslib "^2.5.0" +"@smithy/util-stream@^3.1.3", "@smithy/util-stream@^3.3.4": + version "3.3.4" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.3.4.tgz#c506ac41310ebcceb0c3f0ba20755e4fe0a90b8d" + integrity sha512-SGhGBG/KupieJvJSZp/rfHHka8BFgj56eek9px4pp7lZbOF+fRiVr4U7A3y3zJD8uGhxq32C5D96HxsTC9BckQ== + dependencies: + "@smithy/fetch-http-handler" "^4.1.3" + "@smithy/node-http-handler" "^3.3.3" + "@smithy/types" "^3.7.2" + "@smithy/util-base64" "^3.0.0" + "@smithy/util-buffer-from" "^3.0.0" + "@smithy/util-hex-encoding" "^3.0.0" + "@smithy/util-utf8" "^3.0.0" + tslib "^2.6.2" + "@smithy/util-stream@^4.0.2": version "4.0.2" resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.0.2.tgz" @@ -5062,6 +6413,13 @@ dependencies: tslib "^2.5.0" +"@smithy/util-uri-escape@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" + integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== + dependencies: + tslib "^2.6.2" + "@smithy/util-uri-escape@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz" @@ -5069,7 +6427,7 @@ dependencies: tslib "^2.6.2" -"@smithy/util-utf8@^2.0.0": +"@smithy/util-utf8@2.0.0", "@smithy/util-utf8@^2.0.0": version "2.0.0" resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz" integrity sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ== @@ -5077,6 +6435,14 @@ "@smithy/util-buffer-from" "^2.0.0" tslib "^2.5.0" +"@smithy/util-utf8@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" + integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== + dependencies: + "@smithy/util-buffer-from" "^3.0.0" + tslib "^2.6.2" + "@smithy/util-utf8@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz" @@ -5085,6 +6451,15 @@ "@smithy/util-buffer-from" "^4.0.0" tslib "^2.6.2" +"@smithy/util-waiter@^3.1.2": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-3.2.0.tgz#1e52f870e77d2e5572025f7606053e6ff00df93d" + integrity sha512-PpjSboaDUE6yl+1qlg3Si57++e84oXdWGbuFUSAciXsVfEZJJJupR2Nb0QuXHiunt2vGR+1PTizOMvnUPaG2Qg== + dependencies: + "@smithy/abort-controller" "^3.1.9" + "@smithy/types" "^3.7.2" + tslib "^2.6.2" + "@smithy/util-waiter@^4.0.2": version "4.0.2" resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.2.tgz" @@ -5270,6 +6645,11 @@ resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.3.tgz" integrity sha512-0Z6Tr7wjKJIk4OUEjVUQMtyunLDy339vcMaj38Kpj6jM2OE1p3S4kXExKZ7a3uXQAPCoy3sbrP1wibDKaf39oA== +"@types/aws-lambda@^8.10.134": + version "8.10.147" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.147.tgz#dc5c89aa32f47a9b35e52c32630545c83afa6f2f" + integrity sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew== + "@types/babel__core@^7.1.14", "@types/babel__core@^7.20.2": version "7.20.3" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.3.tgz" @@ -5442,6 +6822,11 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz" integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" @@ -5608,6 +6993,11 @@ resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.2.tgz" integrity sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw== +"@types/uuid@^9.0.0": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== + "@types/validator@^13.7.10": version "13.11.5" resolved "https://registry.npmjs.org/@types/validator/-/validator-13.11.5.tgz" @@ -5984,6 +7374,14 @@ "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" +"@xstate/react@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@xstate/react/-/react-3.2.2.tgz#ddf0f9d75e2c19375b1e1b7335e72cb99762aed8" + integrity sha512-feghXWLedyq8JeL13yda3XnHPZKwYDN5HPBLykpLeuNpr9178tQd2/3d0NrH6gSd0sG5mLuLeuD+ck830fgzLQ== + dependencies: + use-isomorphic-layout-effect "^1.1.2" + use-sync-external-store "^1.0.0" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" @@ -6237,7 +7635,7 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-hidden@^1.2.3: +aria-hidden@^1.2.3, aria-hidden@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz" integrity sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A== @@ -6430,6 +7828,20 @@ available-typed-arrays@^1.0.5: resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +aws-amplify@^6.13.5: + version "6.13.5" + resolved "https://registry.yarnpkg.com/aws-amplify/-/aws-amplify-6.13.5.tgz#63184a5f685056782c80223ce4ddacd378b9e92c" + integrity sha512-xmV7Vh15MGEynpqgjrl4cRY8s532d3nLUGrOiYG9pTGthsWorv5F1+HaQba6wULPqA2NJUp/ojSFA4AZ5KdpSw== + dependencies: + "@aws-amplify/analytics" "7.0.74" + "@aws-amplify/api" "6.3.5" + "@aws-amplify/auth" "6.11.5" + "@aws-amplify/core" "6.10.5" + "@aws-amplify/datastore" "5.0.76" + "@aws-amplify/notifications" "2.0.74" + "@aws-amplify/storage" "6.7.15" + tslib "^2.5.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" @@ -6732,13 +8144,6 @@ braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1: version "4.22.1" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" @@ -6864,7 +8269,7 @@ callsites@^3.0.0: resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.3.1: +camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== @@ -7071,6 +8476,15 @@ cli-width@^3.0.0: resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -7379,6 +8793,11 @@ cosmiconfig@^8.1.3, cosmiconfig@^8.2.0: parse-json "^5.2.0" path-type "^4.0.0" +crc-32@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + create-jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz" @@ -7548,7 +8967,7 @@ csstype@^3.0.2: resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz" integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== -csstype@^3.1.2: +csstype@^3.1.1, csstype@^3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -7663,6 +9082,11 @@ debug@^4.3.1: dependencies: ms "^2.1.3" +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + decimal.js@^10.4.3: version "10.4.3" resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" @@ -7809,6 +9233,11 @@ diff@^4.0.1: resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== +dijkstrajs@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -7979,6 +9408,11 @@ emojis-list@^3.0.0: resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" @@ -8646,6 +10080,13 @@ fast-xml-parser@4.4.1: dependencies: strnum "^1.0.5" +fast-xml-parser@^4.4.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz#c54d6b35aa0f23dc1ea60b6c884340c006dc6efb" + integrity sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig== + dependencies: + strnum "^1.1.1" + fastq@^1.6.0: version "1.15.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" @@ -8708,13 +10149,6 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -8986,7 +10420,7 @@ gensync@^1.0.0-beta.2: resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -9205,6 +10639,11 @@ graphemer@^1.4.0: resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +graphql@15.8.0: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + handle-thing@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" @@ -9457,6 +10896,11 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== +idb@5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/idb/-/idb-5.0.6.tgz#8c94624f5a8a026abe3bef3c7166a5febd1cadc1" + integrity sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw== + identity-obj-proxy@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz" @@ -9484,6 +10928,11 @@ image-size@~0.5.0: resolved "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz" integrity sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ== +immer@9.0.6: + version "9.0.6" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73" + integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ== + immutable@^4.0.0: version "4.3.4" resolved "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz" @@ -10370,6 +11819,11 @@ js-cookie@^2.2.1: resolved "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== +js-cookie@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" + integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" @@ -11984,6 +13438,11 @@ pluralize@8.0.0: resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + portfinder@^1.0.28: version "1.0.32" resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz" @@ -12395,6 +13854,16 @@ pure-rand@^6.0.0: resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz" integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== +qrcode@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.0.tgz#95abb8a91fdafd86f8190f2836abbfc500c72d1b" + integrity sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ== + dependencies: + dijkstrajs "^1.0.1" + encode-utf8 "^1.0.3" + pngjs "^5.0.0" + yargs "^15.3.1" + qs@6.10.4: version "6.10.4" resolved "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz" @@ -12490,6 +13959,11 @@ react-focus-lock@^2.9.4: use-callback-ref "^1.3.2" use-sidecar "^1.1.2" +react-hook-form@^7.53.2: + version "7.54.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.54.2.tgz#8c26ed54c71628dff57ccd3c074b1dd377cfb211" + integrity sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg== + react-international-phone@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/react-international-phone/-/react-international-phone-4.5.0.tgz#901da544760da9b23e0a1945053cac977ff2cd97" @@ -12523,6 +13997,14 @@ react-remove-scroll-bar@^2.3.6: react-style-singleton "^2.2.1" tslib "^2.0.0" +react-remove-scroll-bar@^2.3.7: + version "2.3.8" + resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz#99c20f908ee467b385b68a3469b4a3e750012223" + integrity sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q== + dependencies: + react-style-singleton "^2.2.2" + tslib "^2.0.0" + react-remove-scroll@^2.5.6: version "2.6.0" resolved "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz" @@ -12534,6 +14016,17 @@ react-remove-scroll@^2.5.6: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" +react-remove-scroll@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz#df02cde56d5f2731e058531f8ffd7f9adec91ac2" + integrity sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ== + dependencies: + react-remove-scroll-bar "^2.3.7" + react-style-singleton "^2.2.3" + tslib "^2.1.0" + use-callback-ref "^1.3.3" + use-sidecar "^1.1.3" + react-router-dom@^6.15.0: version "6.17.0" resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.17.0.tgz" @@ -12558,6 +14051,14 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" +react-style-singleton@^2.2.2, react-style-singleton@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.2.3.tgz#4265608be69a4d70cfe3047f2c6c88b2c3ace388" + integrity sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ== + dependencies: + get-nonce "^1.0.0" + tslib "^2.0.0" + react@^18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" @@ -12699,6 +14200,11 @@ require-from-string@^2.0.2: resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + requires-port@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" @@ -12825,6 +14331,13 @@ rxjs@7.8.1, rxjs@^7.5.1, rxjs@^7.5.5, rxjs@^7.8.0: dependencies: tslib "^2.1.0" +rxjs@^7.8.1: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz" @@ -13022,6 +14535,11 @@ serve-static@1.15.0: parseurl "~1.3.3" send "0.18.0" +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + set-function-length@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" @@ -13469,6 +14987,11 @@ strnum@^1.0.5: resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== +strnum@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.1.2.tgz#57bca4fbaa6f271081715dbc9ed7cee5493e28e4" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== + strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" @@ -13890,6 +15413,11 @@ tslib@^2.0.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.5.2: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -14041,6 +15569,11 @@ uid@2.0.2: dependencies: "@lukeed/csprng" "^1.0.0" +ulid@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ulid/-/ulid-2.4.0.tgz#9d9ee22e63f4390ee1bcd9ad09fca39d8ae0afed" + integrity sha512-fIRiVTJNcSRmXKPZtGzFQv9WRrZ3M9eoptl/teFJvjOzmpU+/K/JH6HZ8deBfb5vMEpicJcLn7JmvdknlMq7Zg== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" @@ -14146,6 +15679,18 @@ use-callback-ref@^1.3.0, use-callback-ref@^1.3.2: dependencies: tslib "^2.0.0" +use-callback-ref@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" + integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== + dependencies: + tslib "^2.0.0" + +use-isomorphic-layout-effect@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz#afb292eb284c39219e8cb8d3d62d71999361a21d" + integrity sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w== + use-sidecar@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz" @@ -14154,6 +15699,19 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" +use-sidecar@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" + integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + +use-sync-external-store@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" + integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" @@ -14506,6 +16064,11 @@ which-collection@^1.0.1: is-weakmap "^2.0.1" is-weakset "^2.0.1" +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: version "1.1.13" resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz" @@ -14594,11 +16157,21 @@ xmlchars@^2.2.0: resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xstate@^4.33.6: + version "4.38.3" + resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.38.3.tgz#4e15e7ad3aa0ca1eea2010548a5379966d8f1075" + integrity sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw== + xtend@^4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" @@ -14634,11 +16207,36 @@ yargs-parser@21.1.1, yargs-parser@>=21.1.1, yargs-parser@^21.0.1, yargs-parser@^ resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^16.0.0: version "16.2.0" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" From 2011b66a1da04b2df937b6da45d204bd17733139 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Wed, 26 Mar 2025 21:59:52 -0400 Subject: [PATCH 02/22] Added guards for jwt auth --- apps/backend/src/pantries/pantries.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index aa4e41cc..5b0c2451 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -23,7 +23,7 @@ export class PantriesController { @Get('/pending') @UseGuards(AuthGuard('jwt')) async getPendingPantries(@Request() request): Promise { - if (request.user.role !== 'PANTRY') { + if (request.user.role !== 'FOODMANUFACTURER') { throw new ForbiddenException('Access denied'); } return this.pantriesService.getPendingPantries(); From bb180d4aab816b449e973f369a819687c4cfcd2e Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sat, 29 Mar 2025 00:55:17 -0400 Subject: [PATCH 03/22] Updated auth --- apps/backend/src/auth/auth.module.ts | 4 +- apps/backend/src/auth/auth.service.ts | 22 ++++++++-- apps/backend/src/auth/jwt.guard.ts | 5 +++ apps/backend/src/auth/jwt.strategy.ts | 12 ++++-- apps/backend/src/auth/roles.decorator.ts | 5 +++ apps/backend/src/auth/roles.guard.ts | 27 ++++++++++++ apps/backend/src/aws/aws-s3.service.ts | 2 +- .../src/donationItems/donationItems.module.ts | 7 ++- .../backend/src/donations/donations.module.ts | 11 +++-- .../foodManufacturers/manufacturer.module.ts | 3 +- .../src/foodRequests/request.module.ts | 6 +-- .../interceptors/current-user.interceptor.ts | 26 +++++------ .../src/pantries/pantries.controller.ts | 43 ++++++------------- apps/backend/src/pantries/pantries.module.ts | 13 ++---- apps/backend/src/users/user.entity.ts | 4 +- apps/backend/src/users/users.service.ts | 1 - apps/frontend/src/app.tsx | 6 +-- 17 files changed, 116 insertions(+), 81 deletions(-) create mode 100644 apps/backend/src/auth/jwt.guard.ts create mode 100644 apps/backend/src/auth/roles.decorator.ts create mode 100644 apps/backend/src/auth/roles.guard.ts diff --git a/apps/backend/src/auth/auth.module.ts b/apps/backend/src/auth/auth.module.ts index 09f5965c..a62f2109 100644 --- a/apps/backend/src/auth/auth.module.ts +++ b/apps/backend/src/auth/auth.module.ts @@ -7,6 +7,7 @@ import { AuthService } from './auth.service'; import { UsersService } from '../users/users.service'; import { User } from '../users/user.entity'; import { JwtStrategy } from './jwt.strategy'; +import { RolesGuard } from './roles.guard'; @Module({ imports: [ @@ -14,6 +15,7 @@ import { JwtStrategy } from './jwt.strategy'; PassportModule.register({ defaultStrategy: 'jwt' }), ], controllers: [AuthController], - providers: [AuthService, UsersService, JwtStrategy], + providers: [AuthService, UsersService, JwtStrategy, RolesGuard], + exports: [AuthService, JwtStrategy], }) export class AuthModule {} diff --git a/apps/backend/src/auth/auth.service.ts b/apps/backend/src/auth/auth.service.ts index a0bae3ad..d8b5c2bb 100644 --- a/apps/backend/src/auth/auth.service.ts +++ b/apps/backend/src/auth/auth.service.ts @@ -2,7 +2,6 @@ import { Injectable } from '@nestjs/common'; import { AdminDeleteUserCommand, AdminInitiateAuthCommand, - AttributeType, CognitoIdentityProviderClient, ConfirmForgotPasswordCommand, ConfirmSignUpCommand, @@ -47,15 +46,30 @@ export class AuthService { return hmac.digest('base64'); } - async getUser(userSub: string): Promise { + async getUser(userSub: string): Promise<{ email: string; role: string }> { const listUsersCommand = new ListUsersCommand({ UserPoolId: CognitoAuthConfig.userPoolId, Filter: `sub = "${userSub}"`, }); - // TODO need error handling const { Users } = await this.providerClient.send(listUsersCommand); - return Users[0].Attributes; + if (!Users || Users.length === 0) { + throw new Error('User not found'); + } + + const attributes = Users[0].Attributes; + + const email = attributes.find((attr) => attr.Name === 'email')?.Value || ''; + const role = + attributes.find((attr) => attr.Name === 'custom:role')?.Value || + 'VOLUNTEER'; + + return { email, role }; + } + + async getUserRole(userSub: string): Promise { + const { role } = await this.getUser(userSub); + return role as Role; } async signup( diff --git a/apps/backend/src/auth/jwt.guard.ts b/apps/backend/src/auth/jwt.guard.ts new file mode 100644 index 00000000..f65f8455 --- /dev/null +++ b/apps/backend/src/auth/jwt.guard.ts @@ -0,0 +1,5 @@ +import { Injectable } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; + +@Injectable() +export class JwtGuard extends AuthGuard('jwt') {} diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index 44d8789d..ad09bf77 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -1,13 +1,13 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, UnauthorizedException } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { passportJwtSecret } from 'jwks-rsa'; import { ExtractJwt, Strategy } from 'passport-jwt'; - +import { UsersService } from '../users/users.service'; // Import UsersService import CognitoAuthConfig from './aws-exports'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { - constructor() { + constructor(private usersService: UsersService) { const cognitoAuthority = `https://cognito-idp.${CognitoAuthConfig.region}.amazonaws.com/${CognitoAuthConfig.userPoolId}`; super({ @@ -26,6 +26,10 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload) { - return { idUser: payload.sub, email: payload.email }; + const user = await this.usersService.findOne(payload.sub); + if (!user) { + throw new UnauthorizedException(); + } + return user; } } diff --git a/apps/backend/src/auth/roles.decorator.ts b/apps/backend/src/auth/roles.decorator.ts new file mode 100644 index 00000000..a28701d2 --- /dev/null +++ b/apps/backend/src/auth/roles.decorator.ts @@ -0,0 +1,5 @@ +import { SetMetadata } from '@nestjs/common'; +import { Role } from '../users/types'; + +export const ROLES_KEY = 'roles'; +export const Roles = (...roles: Role[]) => SetMetadata(ROLES_KEY, roles); diff --git a/apps/backend/src/auth/roles.guard.ts b/apps/backend/src/auth/roles.guard.ts new file mode 100644 index 00000000..60ca0d33 --- /dev/null +++ b/apps/backend/src/auth/roles.guard.ts @@ -0,0 +1,27 @@ +import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; +import { Reflector } from '@nestjs/core'; +import { Role } from '../users/types'; +import { Observable } from 'rxjs'; +import { ROLES_KEY } from './roles.decorator'; + +@Injectable() +export class RolesGuard implements CanActivate { + constructor(private reflector: Reflector) {} + + canActivate( + context: ExecutionContext, + ): boolean | Promise | Observable { + const requiredRoles = this.reflector.getAllAndOverride(ROLES_KEY, [ + context.getHandler(), + context.getClass(), + ]); + + if (!requiredRoles) { + return true; + } + + const { user } = context.switchToHttp().getRequest(); + + return requiredRoles.some((role) => user.role == role); + } +} diff --git a/apps/backend/src/aws/aws-s3.service.ts b/apps/backend/src/aws/aws-s3.service.ts index 69b2e3e6..86d2f3f5 100644 --- a/apps/backend/src/aws/aws-s3.service.ts +++ b/apps/backend/src/aws/aws-s3.service.ts @@ -42,7 +42,7 @@ export class AWSS3Service { } return uploadedFileUrls; } catch (error) { - throw new Error('File upload to AWS failed'); + throw new Error(`File upload to AWS failed: ${error}`); } } } diff --git a/apps/backend/src/donationItems/donationItems.module.ts b/apps/backend/src/donationItems/donationItems.module.ts index c93e0614..8d087c55 100644 --- a/apps/backend/src/donationItems/donationItems.module.ts +++ b/apps/backend/src/donationItems/donationItems.module.ts @@ -2,13 +2,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { DonationItemsService } from './donationItems.service'; import { DonationItem } from './donationItems.entity'; -import { JwtStrategy } from '../auth/jwt.strategy'; -import { AuthService } from '../auth/auth.service'; import { DonationItemsController } from './donationItems.controller'; +import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([DonationItem])], + imports: [TypeOrmModule.forFeature([DonationItem]), AuthModule], controllers: [DonationItemsController], - providers: [DonationItemsService, AuthService, JwtStrategy], + providers: [DonationItemsService], }) export class DonationItemsModule {} diff --git a/apps/backend/src/donations/donations.module.ts b/apps/backend/src/donations/donations.module.ts index 3d5db4ef..4b7c5660 100644 --- a/apps/backend/src/donations/donations.module.ts +++ b/apps/backend/src/donations/donations.module.ts @@ -1,15 +1,18 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { JwtStrategy } from '../auth/jwt.strategy'; -import { AuthService } from '../auth/auth.service'; import { Donation } from './donations.entity'; import { DonationService } from './donations.service'; import { DonationsController } from './donations.controller'; import { ManufacturerModule } from '../foodManufacturers/manufacturer.module'; +import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([Donation]), ManufacturerModule], + imports: [ + TypeOrmModule.forFeature([Donation]), + ManufacturerModule, + AuthModule, + ], controllers: [DonationsController], - providers: [DonationService, AuthService, JwtStrategy], + providers: [DonationService], }) export class DonationModule {} diff --git a/apps/backend/src/foodManufacturers/manufacturer.module.ts b/apps/backend/src/foodManufacturers/manufacturer.module.ts index 2ba2b117..dcb5a32f 100644 --- a/apps/backend/src/foodManufacturers/manufacturer.module.ts +++ b/apps/backend/src/foodManufacturers/manufacturer.module.ts @@ -1,8 +1,9 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { FoodManufacturer } from './manufacturer.entity'; +import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([FoodManufacturer])], + imports: [TypeOrmModule.forFeature([FoodManufacturer]), AuthModule], }) export class ManufacturerModule {} diff --git a/apps/backend/src/foodRequests/request.module.ts b/apps/backend/src/foodRequests/request.module.ts index ed868bbb..72b4d557 100644 --- a/apps/backend/src/foodRequests/request.module.ts +++ b/apps/backend/src/foodRequests/request.module.ts @@ -3,18 +3,18 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { FoodRequestsController } from './request.controller'; import { FoodRequest } from './request.entity'; import { RequestsService } from './request.service'; -import { JwtStrategy } from '../auth/jwt.strategy'; -import { AuthService } from '../auth/auth.service'; import { AWSS3Module } from '../aws/aws-s3.module'; import { MulterModule } from '@nestjs/platform-express'; +import { AuthModule } from '../auth/auth.module'; @Module({ imports: [ AWSS3Module, MulterModule.register({ dest: './uploads' }), TypeOrmModule.forFeature([FoodRequest]), + AuthModule, ], controllers: [FoodRequestsController], - providers: [RequestsService, AuthService, JwtStrategy], + providers: [RequestsService], }) export class RequestsModule {} diff --git a/apps/backend/src/interceptors/current-user.interceptor.ts b/apps/backend/src/interceptors/current-user.interceptor.ts index 70294c88..685eca51 100644 --- a/apps/backend/src/interceptors/current-user.interceptor.ts +++ b/apps/backend/src/interceptors/current-user.interceptor.ts @@ -16,21 +16,21 @@ export class CurrentUserInterceptor implements NestInterceptor { async intercept(context: ExecutionContext, handler: CallHandler) { const request = context.switchToHttp().getRequest(); - const cognitoUserAttributes = await this.authService.getUser( - request.user.userId, - ); - const userEmail = cognitoUserAttributes.find( - (attribute) => attribute.Name === 'email', - ).Value; - const users = await this.usersService.find(userEmail); - if (users.length > 0) { - const user = users[0]; + // Get user attributes from Cognito (email and role) + // const cognitoUserAttributes = await this.authService.getUser(request.user.userId); - request.user = { - id: user.id, - email: user.email, - role: user.role, + // // If no email or role was found, handle it (optional, log or return an error) (not sure when to use this) + // if (!cognitoUserAttributes.email) { + // console.log('Email not found in Cognito user attributes'); + // return handler.handle(); + // } + + if (request.user) { + request.currentUser = { + id: request.user.userId, + email: request.user.email, + role: request.user.role, }; } diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index 5b0c2451..289fa74c 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -1,79 +1,62 @@ import { Controller, - ForbiddenException, Get, Param, ParseIntPipe, Post, Request, UseGuards, - UseInterceptors, } from '@nestjs/common'; import { Pantry } from './pantries.entity'; import { PantriesService } from './pantries.service'; import { User } from '../users/user.entity'; -import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; -import { AuthGuard } from '@nestjs/passport'; +import { RolesGuard } from '../auth/roles.guard'; +import { Role } from '../users/types'; +import { Roles } from '../auth/roles.decorator'; +import { JwtGuard } from '../auth/jwt.guard'; @Controller('pantries') -@UseInterceptors(CurrentUserInterceptor) +// @UseInterceptors(CurrentUserInterceptor) +// @UseGuards(AuthGuard('jwt')) export class PantriesController { constructor(private pantriesService: PantriesService) {} + @Roles(Role.PANTRY, Role.ADMIN) + @UseGuards(JwtGuard, RolesGuard) @Get('/pending') - @UseGuards(AuthGuard('jwt')) - async getPendingPantries(@Request() request): Promise { - if (request.user.role !== 'FOODMANUFACTURER') { - throw new ForbiddenException('Access denied'); - } + async getPendingPantries(): Promise { return this.pantriesService.getPendingPantries(); } @Get('/:pantryId/ssf-contact') - @UseGuards(AuthGuard('jwt')) async getSSFRep( - @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { - if (request.user.role !== 'PANTRY') { - throw new ForbiddenException('Access denied'); - } return this.pantriesService.findSSFRep(pantryId); } @Get('/:pantryId') - @UseGuards(AuthGuard('jwt')) async getPantry( - @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { - if (request.user.role !== 'PANTRY') { - throw new ForbiddenException('Access denied'); - } return this.pantriesService.findOne(pantryId); } + @Roles(Role.PANTRY, Role.ADMIN) + @UseGuards(JwtGuard, RolesGuard) @Post('/approve/:pantryId') - @UseGuards(AuthGuard('jwt')) async approvePantry( - @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { - if (request.user.role !== 'PANTRY') { - throw new ForbiddenException('Access denied'); - } return this.pantriesService.approve(pantryId); } + @Roles(Role.PANTRY, Role.ADMIN) + @UseGuards(JwtGuard, RolesGuard) @Post('/deny/:pantryId') - @UseGuards(AuthGuard('jwt')) async denyPantry( - @Request() request, @Param('pantryId', ParseIntPipe) pantryId: number, ): Promise { - if (request.user.role !== 'PANTRY') { - throw new ForbiddenException('Access denied'); - } return this.pantriesService.deny(pantryId); } } diff --git a/apps/backend/src/pantries/pantries.module.ts b/apps/backend/src/pantries/pantries.module.ts index 2d51e08f..3cf82324 100644 --- a/apps/backend/src/pantries/pantries.module.ts +++ b/apps/backend/src/pantries/pantries.module.ts @@ -3,20 +3,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { User } from '../users/user.entity'; import { PantriesService } from './pantries.service'; import { PantriesController } from './pantries.controller'; -import { JwtStrategy } from '../auth/jwt.strategy'; -import { AuthService } from '../auth/auth.service'; import { Pantry } from './pantries.entity'; -import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; import { UsersModule } from '../users/users.module'; +import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([Pantry, User]), UsersModule], + imports: [TypeOrmModule.forFeature([Pantry, User]), UsersModule, AuthModule], controllers: [PantriesController], - providers: [ - PantriesService, - AuthService, - JwtStrategy, - CurrentUserInterceptor, - ], + providers: [PantriesService], }) export class PantriesModule {} diff --git a/apps/backend/src/users/user.entity.ts b/apps/backend/src/users/user.entity.ts index 3eb140c6..3b69d52f 100644 --- a/apps/backend/src/users/user.entity.ts +++ b/apps/backend/src/users/user.entity.ts @@ -8,8 +8,8 @@ export class User { id: number; @Column({ - type: 'varchar', - length: 20, + type: 'enum', + enum: Role, default: Role.VOLUNTEER, }) role: Role; diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index be02a837..901b2ee0 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -1,7 +1,6 @@ import { Injectable, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; - import { User } from './user.entity'; import { Role } from './types'; diff --git a/apps/frontend/src/app.tsx b/apps/frontend/src/app.tsx index 7d656493..fa8492a7 100644 --- a/apps/frontend/src/app.tsx +++ b/apps/frontend/src/app.tsx @@ -129,9 +129,9 @@ const router = createBrowserRouter([ { path: '/approve-pantries', element: ( - // - - // + + + ), }, From 1a95f150bc65fb7c1482181c4ea66151126874cf Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sat, 29 Mar 2025 15:14:15 -0400 Subject: [PATCH 04/22] Tried fixing JWT Strategy --- apps/backend/src/auth/auth.service.ts | 16 ++++++++-------- apps/backend/src/auth/aws-exports.ts | 4 ++-- apps/backend/src/auth/jwt.guard.ts | 5 ----- apps/backend/src/auth/jwt.strategy.ts | 6 +++--- apps/backend/src/auth/roles.guard.ts | 15 +++++++++------ .../src/interceptors/current-user.interceptor.ts | 9 --------- apps/backend/src/pantries/pantries.controller.ts | 8 ++++---- apps/backend/src/users/users.service.ts | 4 ++-- 8 files changed, 28 insertions(+), 39 deletions(-) delete mode 100644 apps/backend/src/auth/jwt.guard.ts diff --git a/apps/backend/src/auth/auth.service.ts b/apps/backend/src/auth/auth.service.ts index d8b5c2bb..b31849b8 100644 --- a/apps/backend/src/auth/auth.service.ts +++ b/apps/backend/src/auth/auth.service.ts @@ -42,13 +42,13 @@ export class AuthService { // (see https://docs.aws.amazon.com/cognito/latest/developerguide/signing-up-users-in-your-app.html#cognito-user-pools-computing-secret-hash) calculateHash(username: string): string { const hmac = createHmac('sha256', this.clientSecret); - hmac.update(username + CognitoAuthConfig.clientId); + hmac.update(username + CognitoAuthConfig.userPoolClientId); return hmac.digest('base64'); } async getUser(userSub: string): Promise<{ email: string; role: string }> { const listUsersCommand = new ListUsersCommand({ - UserPoolId: CognitoAuthConfig.userPoolId, + UserPoolId: CognitoAuthConfig.userPoolClientId, Filter: `sub = "${userSub}"`, }); @@ -78,7 +78,7 @@ export class AuthService { ): Promise { // Needs error handling const signUpCommand = new SignUpCommand({ - ClientId: CognitoAuthConfig.clientId, + ClientId: CognitoAuthConfig.userPoolClientId, SecretHash: this.calculateHash(email), Username: email, Password: password, @@ -102,7 +102,7 @@ export class AuthService { async verifyUser(email: string, verificationCode: string): Promise { const confirmCommand = new ConfirmSignUpCommand({ - ClientId: CognitoAuthConfig.clientId, + ClientId: CognitoAuthConfig.userPoolClientId, SecretHash: this.calculateHash(email), Username: email, ConfirmationCode: verificationCode, @@ -114,7 +114,7 @@ export class AuthService { async signin({ email, password }: SignInDto): Promise { const signInCommand = new AdminInitiateAuthCommand({ AuthFlow: 'ADMIN_USER_PASSWORD_AUTH', - ClientId: CognitoAuthConfig.clientId, + ClientId: CognitoAuthConfig.userPoolClientId, UserPoolId: CognitoAuthConfig.userPoolId, AuthParameters: { USERNAME: email, @@ -139,7 +139,7 @@ export class AuthService { }: RefreshTokenDto): Promise { const refreshCommand = new AdminInitiateAuthCommand({ AuthFlow: 'REFRESH_TOKEN_AUTH', - ClientId: CognitoAuthConfig.clientId, + ClientId: CognitoAuthConfig.userPoolClientId, UserPoolId: CognitoAuthConfig.userPoolId, AuthParameters: { REFRESH_TOKEN: refreshToken, @@ -158,7 +158,7 @@ export class AuthService { async forgotPassword(email: string) { const forgotCommand = new ForgotPasswordCommand({ - ClientId: CognitoAuthConfig.clientId, + ClientId: CognitoAuthConfig.userPoolClientId, Username: email, SecretHash: this.calculateHash(email), }); @@ -172,7 +172,7 @@ export class AuthService { newPassword, }: ConfirmPasswordDto) { const confirmComamnd = new ConfirmForgotPasswordCommand({ - ClientId: CognitoAuthConfig.clientId, + ClientId: CognitoAuthConfig.userPoolClientId, SecretHash: this.calculateHash(email), Username: email, ConfirmationCode: confirmationCode, diff --git a/apps/backend/src/auth/aws-exports.ts b/apps/backend/src/auth/aws-exports.ts index 48541a19..97711cea 100644 --- a/apps/backend/src/auth/aws-exports.ts +++ b/apps/backend/src/auth/aws-exports.ts @@ -1,6 +1,6 @@ const CognitoAuthConfig = { - userPoolId: 'us-east-1_oshVQXLX6', - clientId: '42bfm2o2pmk57mpm5399s0e9no', + userPoolClientId: '1kehn2mr64h94mire6os55bib7', + userPoolId: 'us-east-1_StSYXMibq', region: 'us-east-1', }; diff --git a/apps/backend/src/auth/jwt.guard.ts b/apps/backend/src/auth/jwt.guard.ts deleted file mode 100644 index f65f8455..00000000 --- a/apps/backend/src/auth/jwt.guard.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { AuthGuard } from '@nestjs/passport'; - -@Injectable() -export class JwtGuard extends AuthGuard('jwt') {} diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index ad09bf77..fc863c8e 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -2,7 +2,7 @@ import { Injectable, UnauthorizedException } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { passportJwtSecret } from 'jwks-rsa'; import { ExtractJwt, Strategy } from 'passport-jwt'; -import { UsersService } from '../users/users.service'; // Import UsersService +import { UsersService } from '../users/users.service'; import CognitoAuthConfig from './aws-exports'; @Injectable() @@ -13,7 +13,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, - _audience: CognitoAuthConfig.clientId, + _audience: CognitoAuthConfig.userPoolClientId, issuer: cognitoAuthority, algorithms: ['RS256'], secretOrKeyProvider: passportJwtSecret({ @@ -26,7 +26,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload) { - const user = await this.usersService.findOne(payload.sub); + const user = await this.usersService.findByEmail(payload.email); if (!user) { throw new UnauthorizedException(); } diff --git a/apps/backend/src/auth/roles.guard.ts b/apps/backend/src/auth/roles.guard.ts index 60ca0d33..81eeb962 100644 --- a/apps/backend/src/auth/roles.guard.ts +++ b/apps/backend/src/auth/roles.guard.ts @@ -1,16 +1,19 @@ -import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; +import { + Injectable, + CanActivate, + ExecutionContext, + UseInterceptors, +} from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { Role } from '../users/types'; -import { Observable } from 'rxjs'; import { ROLES_KEY } from './roles.decorator'; +import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; @Injectable() export class RolesGuard implements CanActivate { constructor(private reflector: Reflector) {} - canActivate( - context: ExecutionContext, - ): boolean | Promise | Observable { + canActivate(context: ExecutionContext): boolean { const requiredRoles = this.reflector.getAllAndOverride(ROLES_KEY, [ context.getHandler(), context.getClass(), @@ -22,6 +25,6 @@ export class RolesGuard implements CanActivate { const { user } = context.switchToHttp().getRequest(); - return requiredRoles.some((role) => user.role == role); + return requiredRoles.some((role) => user.roles?.includes(role)); } } diff --git a/apps/backend/src/interceptors/current-user.interceptor.ts b/apps/backend/src/interceptors/current-user.interceptor.ts index 685eca51..1eba7799 100644 --- a/apps/backend/src/interceptors/current-user.interceptor.ts +++ b/apps/backend/src/interceptors/current-user.interceptor.ts @@ -17,15 +17,6 @@ export class CurrentUserInterceptor implements NestInterceptor { async intercept(context: ExecutionContext, handler: CallHandler) { const request = context.switchToHttp().getRequest(); - // Get user attributes from Cognito (email and role) - // const cognitoUserAttributes = await this.authService.getUser(request.user.userId); - - // // If no email or role was found, handle it (optional, log or return an error) (not sure when to use this) - // if (!cognitoUserAttributes.email) { - // console.log('Email not found in Cognito user attributes'); - // return handler.handle(); - // } - if (request.user) { request.currentUser = { id: request.user.userId, diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index 289fa74c..3d24f824 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -13,7 +13,7 @@ import { User } from '../users/user.entity'; import { RolesGuard } from '../auth/roles.guard'; import { Role } from '../users/types'; import { Roles } from '../auth/roles.decorator'; -import { JwtGuard } from '../auth/jwt.guard'; +import { AuthGuard } from '@nestjs/passport'; @Controller('pantries') // @UseInterceptors(CurrentUserInterceptor) @@ -22,7 +22,7 @@ export class PantriesController { constructor(private pantriesService: PantriesService) {} @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(JwtGuard, RolesGuard) + @UseGuards(AuthGuard('jwt'), RolesGuard) @Get('/pending') async getPendingPantries(): Promise { return this.pantriesService.getPendingPantries(); @@ -43,7 +43,7 @@ export class PantriesController { } @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(JwtGuard, RolesGuard) + @UseGuards(AuthGuard('jwt'), RolesGuard) @Post('/approve/:pantryId') async approvePantry( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -52,7 +52,7 @@ export class PantriesController { } @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(JwtGuard, RolesGuard) + @UseGuards(AuthGuard('jwt'), RolesGuard) @Post('/deny/:pantryId') async denyPantry( @Param('pantryId', ParseIntPipe) pantryId: number, diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 901b2ee0..af07ef08 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -34,8 +34,8 @@ export class UsersService { return this.repo.findOneBy({ id }); } - find(email: string) { - return this.repo.find({ where: { email } }); + async findByEmail(email: string): Promise { + return this.repo.findOneBy({ email }); } async update(id: number, attrs: Partial) { From 8587514f180925dac94a8e9cb43958a5f777e9c6 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 30 Mar 2025 14:36:27 -0400 Subject: [PATCH 05/22] Updated auth --- apps/backend/src/auth/jwt.strategy.ts | 2 ++ apps/backend/src/auth/roles.guard.ts | 8 +------- apps/backend/src/pantries/pantries.controller.ts | 3 --- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index fc863c8e..c95071fb 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -8,6 +8,7 @@ import CognitoAuthConfig from './aws-exports'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { constructor(private usersService: UsersService) { + console.log('IN THE JWT STRATEGY'); const cognitoAuthority = `https://cognito-idp.${CognitoAuthConfig.region}.amazonaws.com/${CognitoAuthConfig.userPoolId}`; super({ @@ -26,6 +27,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload) { + console.log('THIS IS THE PAYLOAD: ' + payload); const user = await this.usersService.findByEmail(payload.email); if (!user) { throw new UnauthorizedException(); diff --git a/apps/backend/src/auth/roles.guard.ts b/apps/backend/src/auth/roles.guard.ts index 81eeb962..c049eda4 100644 --- a/apps/backend/src/auth/roles.guard.ts +++ b/apps/backend/src/auth/roles.guard.ts @@ -1,13 +1,7 @@ -import { - Injectable, - CanActivate, - ExecutionContext, - UseInterceptors, -} from '@nestjs/common'; +import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { Role } from '../users/types'; import { ROLES_KEY } from './roles.decorator'; -import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; @Injectable() export class RolesGuard implements CanActivate { diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index 3d24f824..7955032c 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -4,7 +4,6 @@ import { Param, ParseIntPipe, Post, - Request, UseGuards, } from '@nestjs/common'; import { Pantry } from './pantries.entity'; @@ -16,8 +15,6 @@ import { Roles } from '../auth/roles.decorator'; import { AuthGuard } from '@nestjs/passport'; @Controller('pantries') -// @UseInterceptors(CurrentUserInterceptor) -// @UseGuards(AuthGuard('jwt')) export class PantriesController { constructor(private pantriesService: PantriesService) {} From 8f251c802d2773574c43118c0454daa9873895ea Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Mon, 31 Mar 2025 01:23:50 -0400 Subject: [PATCH 06/22] Finished general authentication for both frontend and backend pages --- apps/backend/src/auth/auth.service.ts | 2 +- apps/backend/src/auth/jwt.strategy.ts | 16 ++--- apps/backend/src/auth/roles.guard.ts | 2 +- apps/backend/src/config/typeorm.ts | 1 - .../src/foodRequests/request.controller.ts | 12 ++++ .../interceptors/current-user.interceptor.ts | 10 +-- .../src/pantries/pantries.controller.ts | 18 +++-- apps/backend/src/users/users.controller.ts | 2 +- apps/frontend/src/api/apiClient.ts | 68 ++++++++++++++++++- apps/frontend/src/app.tsx | 33 +++++++-- apps/frontend/src/aws-exports.ts | 3 + .../forms/deliveryConfirmationModalButton.tsx | 36 +++------- apps/frontend/src/containers/FormRequests.tsx | 26 +------ .../src/containers/approvePantries.tsx | 4 +- apps/frontend/src/containers/unauthorized.tsx | 10 +++ 15 files changed, 160 insertions(+), 83 deletions(-) create mode 100644 apps/frontend/src/containers/unauthorized.tsx diff --git a/apps/backend/src/auth/auth.service.ts b/apps/backend/src/auth/auth.service.ts index b31849b8..e88d532e 100644 --- a/apps/backend/src/auth/auth.service.ts +++ b/apps/backend/src/auth/auth.service.ts @@ -48,7 +48,7 @@ export class AuthService { async getUser(userSub: string): Promise<{ email: string; role: string }> { const listUsersCommand = new ListUsersCommand({ - UserPoolId: CognitoAuthConfig.userPoolClientId, + UserPoolId: CognitoAuthConfig.userPoolId, Filter: `sub = "${userSub}"`, }); diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index c95071fb..439acf6c 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -4,11 +4,14 @@ import { passportJwtSecret } from 'jwks-rsa'; import { ExtractJwt, Strategy } from 'passport-jwt'; import { UsersService } from '../users/users.service'; import CognitoAuthConfig from './aws-exports'; +import { AuthService } from './auth.service'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { - constructor(private usersService: UsersService) { - console.log('IN THE JWT STRATEGY'); + constructor( + private usersService: UsersService, + private authService: AuthService, + ) { const cognitoAuthority = `https://cognito-idp.${CognitoAuthConfig.region}.amazonaws.com/${CognitoAuthConfig.userPoolId}`; super({ @@ -27,11 +30,8 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload) { - console.log('THIS IS THE PAYLOAD: ' + payload); - const user = await this.usersService.findByEmail(payload.email); - if (!user) { - throw new UnauthorizedException(); - } - return user; + const user = await this.authService.getUser(payload.sub); + const dbUser = await this.usersService.findByEmail(user.email); + return dbUser; } } diff --git a/apps/backend/src/auth/roles.guard.ts b/apps/backend/src/auth/roles.guard.ts index c049eda4..b2e71324 100644 --- a/apps/backend/src/auth/roles.guard.ts +++ b/apps/backend/src/auth/roles.guard.ts @@ -19,6 +19,6 @@ export class RolesGuard implements CanActivate { const { user } = context.switchToHttp().getRequest(); - return requiredRoles.some((role) => user.roles?.includes(role)); + return requiredRoles.some((role) => user.role === role); } } diff --git a/apps/backend/src/config/typeorm.ts b/apps/backend/src/config/typeorm.ts index ea9ddf9d..4130ef83 100644 --- a/apps/backend/src/config/typeorm.ts +++ b/apps/backend/src/config/typeorm.ts @@ -29,7 +29,6 @@ const config = { ReviseTables1737522923066, UpdateUserRole1737816745912, UpdatePantriesTable1737906317154, - UpdateDonations1738697216020, UpdateDonationColTypes1741708808976, UpdatePantriesTable1738172265266, UpdatePantriesTable1739056029076, diff --git a/apps/backend/src/foodRequests/request.controller.ts b/apps/backend/src/foodRequests/request.controller.ts index 7c763daf..f5e27c5d 100644 --- a/apps/backend/src/foodRequests/request.controller.ts +++ b/apps/backend/src/foodRequests/request.controller.ts @@ -7,6 +7,7 @@ import { Body, UploadedFiles, UseInterceptors, + UseGuards, } from '@nestjs/common'; import { ApiBody } from '@nestjs/swagger'; import { RequestsService } from './request.service'; @@ -14,15 +15,22 @@ import { FoodRequest } from './request.entity'; import { AWSS3Service } from '../aws/aws-s3.service'; import { FilesInterceptor } from '@nestjs/platform-express'; import * as multer from 'multer'; +import { AuthGuard } from '@nestjs/passport'; +import { Roles } from '../auth/roles.decorator'; +import { Role } from '../users/types'; +import { RolesGuard } from '../auth/roles.guard'; @Controller('requests') // @UseInterceptors() +@UseGuards(AuthGuard('jwt')) export class FoodRequestsController { constructor( private requestsService: RequestsService, private awsS3Service: AWSS3Service, ) {} + @Roles(Role.PANTRY) + @UseGuards(RolesGuard) @Get('/:pantryId') async getAllPantryRequests( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -30,6 +38,8 @@ export class FoodRequestsController { return this.requestsService.find(pantryId); } + @Roles(Role.PANTRY) + @UseGuards(RolesGuard) @Post('/create') @ApiBody({ description: 'Details for creating a food request', @@ -93,6 +103,8 @@ export class FoodRequestsController { ); } + @Roles(Role.PANTRY) + @UseGuards(RolesGuard) @Post('/:requestId/confirm-delivery') @ApiBody({ description: 'Details for a confirmation form', diff --git a/apps/backend/src/interceptors/current-user.interceptor.ts b/apps/backend/src/interceptors/current-user.interceptor.ts index 1eba7799..02becfde 100644 --- a/apps/backend/src/interceptors/current-user.interceptor.ts +++ b/apps/backend/src/interceptors/current-user.interceptor.ts @@ -18,11 +18,11 @@ export class CurrentUserInterceptor implements NestInterceptor { const request = context.switchToHttp().getRequest(); if (request.user) { - request.currentUser = { - id: request.user.userId, - email: request.user.email, - role: request.user.role, - }; + const user = await this.authService.getUser(request.user.sub); + + const dbUser = await this.usersService.findByEmail(user.email); + console.log(dbUser); + request.currentUser = dbUser; } return handler.handle(); diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index 7955032c..291d046e 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -15,16 +15,20 @@ import { Roles } from '../auth/roles.decorator'; import { AuthGuard } from '@nestjs/passport'; @Controller('pantries') +// @UseInterceptors(CurrentUserInterceptor) +@UseGuards(AuthGuard('jwt')) export class PantriesController { constructor(private pantriesService: PantriesService) {} - @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(AuthGuard('jwt'), RolesGuard) + @Roles(Role.ADMIN) + @UseGuards(RolesGuard) @Get('/pending') async getPendingPantries(): Promise { return this.pantriesService.getPendingPantries(); } + @Roles(Role.PANTRY, Role.ADMIN) + @UseGuards(RolesGuard) @Get('/:pantryId/ssf-contact') async getSSFRep( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -32,6 +36,8 @@ export class PantriesController { return this.pantriesService.findSSFRep(pantryId); } + @Roles(Role.PANTRY, Role.ADMIN) + @UseGuards(RolesGuard) @Get('/:pantryId') async getPantry( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -39,8 +45,8 @@ export class PantriesController { return this.pantriesService.findOne(pantryId); } - @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(AuthGuard('jwt'), RolesGuard) + @Roles(Role.ADMIN) + @UseGuards(RolesGuard) @Post('/approve/:pantryId') async approvePantry( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -48,8 +54,8 @@ export class PantriesController { return this.pantriesService.approve(pantryId); } - @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(AuthGuard('jwt'), RolesGuard) + @Roles(Role.ADMIN) + @UseGuards(RolesGuard) @Post('/deny/:pantryId') async denyPantry( @Param('pantryId', ParseIntPipe) pantryId: number, diff --git a/apps/backend/src/users/users.controller.ts b/apps/backend/src/users/users.controller.ts index 928c8e78..6bb1d83e 100644 --- a/apps/backend/src/users/users.controller.ts +++ b/apps/backend/src/users/users.controller.ts @@ -13,7 +13,7 @@ import { User } from './user.entity'; import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; @Controller('users') -@UseInterceptors(CurrentUserInterceptor) +// @UseInterceptors(CurrentUserInterceptor) export class UsersController { constructor(private usersService: UsersService) {} diff --git a/apps/frontend/src/api/apiClient.ts b/apps/frontend/src/api/apiClient.ts index bbd46f0b..3d81bfea 100644 --- a/apps/frontend/src/api/apiClient.ts +++ b/apps/frontend/src/api/apiClient.ts @@ -1,14 +1,45 @@ -import axios, { type AxiosInstance } from 'axios'; -import { Donation, DonationItem, User, Pantry } from 'types/types'; +import axios, { + AxiosError, + type AxiosInstance, + type InternalAxiosRequestConfig, +} from 'axios'; +import { Donation, DonationItem, User, Pantry, FoodRequest } from 'types/types'; const defaultBaseUrl = import.meta.env.VITE_API_BASE_URL ?? 'http://localhost:3000'; export class ApiClient { private axiosInstance: AxiosInstance; + private accessToken: string | undefined; constructor() { this.axiosInstance = axios.create({ baseURL: defaultBaseUrl }); + + this.axiosInstance.interceptors.request.use( + (config: InternalAxiosRequestConfig) => { + const token = this.accessToken || localStorage.getItem('accessToken'); + if (token) { + config.headers = config.headers || {}; + config.headers['Authorization'] = `Bearer ${token}`; + } + return config; + }, + (error) => Promise.reject(error), + ); + + this.axiosInstance.interceptors.response.use( + (response) => response, + (error: AxiosError) => { + if (error.response?.status === 403) { + window.location.replace('/unauthorized'); + } + return Promise.reject(error); + }, + ); + } + + public setAccessToken(token: string | undefined) { + this.accessToken = token; } public async getHello(): Promise { @@ -99,6 +130,39 @@ export class ApiClient { ) as Promise; } + public async getPantryRequests(pantryId: number): Promise { + try { + const response = await this.axiosInstance.get( + `/api/requests/${pantryId}`, + ); + return response.data; + } catch (error) { + alert('Error fetching food requests: ' + error); + return []; + } + } + + public async confirmDelivery( + requestId: number, + data: FormData, + ): Promise { + try { + const response = await this.axiosInstance.post( + `/api/requests/${requestId}/confirm-delivery`, + data, + ); + + if (response.status === 200) { + alert('Delivery confirmation submitted successfully'); + window.location.href = '/request-form/1'; + } else { + alert(`Failed to submit: ${response.statusText}`); + } + } catch (error) { + alert(`Error submitting delivery confirmation: ${error}`); + } + } + private async delete(path: string): Promise { return this.axiosInstance.delete(path).then((response) => response.data); } diff --git a/apps/frontend/src/app.tsx b/apps/frontend/src/app.tsx index fa8492a7..b690f29b 100644 --- a/apps/frontend/src/app.tsx +++ b/apps/frontend/src/app.tsx @@ -1,7 +1,4 @@ -import { useEffect } from 'react'; import { createBrowserRouter, RouterProvider } from 'react-router-dom'; - -import apiClient from '@api/apiClient'; import Root from '@containers/root'; import NotFound from '@containers/404'; import LandingPage from '@containers/landingPage'; @@ -21,9 +18,26 @@ import { Authenticator } from '@aws-amplify/ui-react'; import { Amplify } from 'aws-amplify'; import CognitoAuthConfig from './aws-exports'; import { Button } from '@chakra-ui/react'; +import { Hub, HubCapsule } from 'aws-amplify/utils'; +import { AuthHubEventData } from '@aws-amplify/core/dist/esm/Hub/types'; +import { fetchAuthSession } from 'aws-amplify/auth'; +import Unauthorized from '@containers/unauthorized'; Amplify.configure(CognitoAuthConfig); +async function signInListener(data: HubCapsule<'auth', AuthHubEventData>) { + if (data.payload.event !== 'signedIn') { + return; + } + + const { tokens } = await fetchAuthSession(); + const b64token = tokens?.accessToken.toString(); + console.log(b64token); + localStorage.setItem('accessToken', b64token || ''); +} + +Hub.listen('auth', signInListener); + const components = { SignUp: { Footer() { @@ -68,6 +82,11 @@ const router = createBrowserRouter([ action: submitPantryApplicationForm, }, + { + path: '/unauthorized', + element: , + }, + // Private routes (protected by auth) { @@ -150,10 +169,10 @@ const router = createBrowserRouter([ ]); export const App: React.FC = () => { - useEffect(() => { - document.title = 'SSF'; - apiClient.getHello().then((res) => console.log(res)); - }, []); + // useEffect(() => { + // document.title = 'SSF'; + // apiClient.getHello().then((res) => console.log(res)); + // }, []); return ( diff --git a/apps/frontend/src/aws-exports.ts b/apps/frontend/src/aws-exports.ts index e27da0b4..ad17bcd3 100644 --- a/apps/frontend/src/aws-exports.ts +++ b/apps/frontend/src/aws-exports.ts @@ -4,6 +4,9 @@ const CognitoAuthConfig = { userPoolClientId: '198bdfe995p1kb4jnopt3sk6i1', userPoolId: 'us-east-1_StSYXMibq', region: 'us-east-1', + loginWith: { + email: true, + }, }, }, }; diff --git a/apps/frontend/src/components/forms/deliveryConfirmationModalButton.tsx b/apps/frontend/src/components/forms/deliveryConfirmationModalButton.tsx index 954b5b05..85226414 100644 --- a/apps/frontend/src/components/forms/deliveryConfirmationModalButton.tsx +++ b/apps/frontend/src/components/forms/deliveryConfirmationModalButton.tsx @@ -17,6 +17,7 @@ import { Text, } from '@chakra-ui/react'; import { Form, ActionFunction, ActionFunctionArgs } from 'react-router-dom'; +import ApiClient from '@api/apiClient'; interface DeliveryConfirmationModalButtonProps { requestId: number; @@ -132,7 +133,6 @@ export const submitDeliveryConfirmationFormModal: ActionFunction = async ({ request, }: ActionFunctionArgs) => { const form = await request.formData(); - const confirmDeliveryData = new FormData(); const requestId = form.get('requestId') as string; @@ -140,9 +140,8 @@ export const submitDeliveryConfirmationFormModal: ActionFunction = async ({ const deliveryDate = form.get('deliveryDate'); if (typeof deliveryDate === 'string') { - const formattedDate = new Date(deliveryDate); - const formattedDateString = formattedDate.toISOString(); - confirmDeliveryData.append('dateReceived', formattedDateString); + const formattedDate = new Date(deliveryDate).toISOString(); + confirmDeliveryData.append('dateReceived', formattedDate); } else { alert('Delivery date is missing or invalid.'); } @@ -150,34 +149,21 @@ export const submitDeliveryConfirmationFormModal: ActionFunction = async ({ confirmDeliveryData.append('feedback', form.get('feedback') as string); if (globalPhotos.length > 0) { - globalPhotos.forEach((photo) => { - confirmDeliveryData.append('photos', photo); - }); + globalPhotos.forEach((photo) => + confirmDeliveryData.append('photos', photo), + ); } try { - const response = await fetch( - `/api/requests/${requestId}/confirm-delivery`, - { - method: 'POST', - body: confirmDeliveryData, - }, + await ApiClient.confirmDelivery( + parseInt(requestId, 10), + confirmDeliveryData, ); - - if (response.ok) { - alert('Delivery confirmation submitted successfully'); - window.location.href = '/request-form/1'; - return null; - } else { - const errorMessage = await response.text(); - alert(`Failed to submit: ${errorMessage}`); - window.location.href = '/request-form/1'; - return null; - } + alert('Delivery confirmation submitted successfully'); + window.location.href = '/request-form/1'; } catch (error) { alert(`Error submitting delivery confirmation: ${error}`); window.location.href = '/request-form/1'; - return null; } }; diff --git a/apps/frontend/src/containers/FormRequests.tsx b/apps/frontend/src/containers/FormRequests.tsx index 9ca4b333..98d6a8ce 100644 --- a/apps/frontend/src/containers/FormRequests.tsx +++ b/apps/frontend/src/containers/FormRequests.tsx @@ -15,6 +15,7 @@ import FoodRequestFormModal from '@components/forms/requestFormModalButton'; import DeliveryConfirmationModalButton from '@components/forms/deliveryConfirmationModalButton'; import { FoodRequest } from 'types/types'; import { formatDate } from '@utils/utils'; +import ApiClient from '@api/apiClient'; const FormRequests: React.FC = () => { const [requests, setRequests] = useState([]); @@ -23,33 +24,10 @@ const FormRequests: React.FC = () => { >(undefined); const { pantryId } = useParams<{ pantryId: string }>(); - const getAllPantryRequests = async ( - pantryId: number, - ): Promise => { - try { - const response = await fetch(`/api/requests/${pantryId}`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }); - - if (response.ok) { - return await response.json(); - } else { - alert('Failed to fetch food requests ' + (await response.text())); - return []; - } - } catch (error) { - alert('Error fetching food requests ' + error); - return []; - } - }; - useEffect(() => { const fetchRequests = async () => { if (pantryId) { - const data = await getAllPantryRequests(parseInt(pantryId, 10)); + const data = await ApiClient.getPantryRequests(parseInt(pantryId, 10)); setRequests(data); if (data.length > 0) { diff --git a/apps/frontend/src/containers/approvePantries.tsx b/apps/frontend/src/containers/approvePantries.tsx index f7a179b3..534d79cb 100644 --- a/apps/frontend/src/containers/approvePantries.tsx +++ b/apps/frontend/src/containers/approvePantries.tsx @@ -13,8 +13,8 @@ const ApprovePantries: React.FC = () => { try { const data = await ApiClient.getAllPendingPantries(); setPendingPantries(data); - } catch (error) { - alert('Error fetching unapproved pantries: ' + error); + } catch (err) { + console.log(err); } }; diff --git a/apps/frontend/src/containers/unauthorized.tsx b/apps/frontend/src/containers/unauthorized.tsx new file mode 100644 index 00000000..83c687b7 --- /dev/null +++ b/apps/frontend/src/containers/unauthorized.tsx @@ -0,0 +1,10 @@ +export const Unauthorized: React.FC = () => { + return ( +
+

Oops!

+

You are not an authorized user for this page!

+
+ ); +}; + +export default Unauthorized; From 89677e3321972b4f52462b9b21cadc43fa96c9d5 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Tue, 1 Apr 2025 17:35:11 -0400 Subject: [PATCH 07/22] Final commit for this branch --- .../src/donationItems/donationItems.controller.ts | 12 +++++++++++- apps/backend/src/donations/donations.controller.ts | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apps/backend/src/donationItems/donationItems.controller.ts b/apps/backend/src/donationItems/donationItems.controller.ts index a6703eeb..4c74fdec 100644 --- a/apps/backend/src/donationItems/donationItems.controller.ts +++ b/apps/backend/src/donationItems/donationItems.controller.ts @@ -1,10 +1,20 @@ -import { Controller, Post, Body, Param, Get, Patch } from '@nestjs/common'; +import { + Controller, + Post, + Body, + Param, + Get, + Patch, + UseGuards, +} from '@nestjs/common'; import { ApiBody } from '@nestjs/swagger'; import { DonationItemsService } from './donationItems.service'; import { DonationItem } from './donationItems.entity'; +import { AuthGuard } from '@nestjs/passport'; @Controller('donation-items') //@UseInterceptors() +@UseGuards(AuthGuard('jwt')) export class DonationItemsController { constructor(private donationItemsService: DonationItemsService) {} diff --git a/apps/backend/src/donations/donations.controller.ts b/apps/backend/src/donations/donations.controller.ts index cdeb268a..d2c52337 100644 --- a/apps/backend/src/donations/donations.controller.ts +++ b/apps/backend/src/donations/donations.controller.ts @@ -6,12 +6,15 @@ import { Patch, Param, NotFoundException, + UseGuards, } from '@nestjs/common'; import { ApiBody } from '@nestjs/swagger'; import { Donation } from './donations.entity'; import { DonationService } from './donations.service'; +import { AuthGuard } from '@nestjs/passport'; @Controller('donations') +@UseGuards(AuthGuard('jwt')) export class DonationsController { constructor(private donationService: DonationService) {} From 267b6ebc14fced2183a11d702a37fde9e0ac02f2 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 10 Aug 2025 16:27:33 -0400 Subject: [PATCH 08/22] Revisions made with Sam!!! --- apps/backend/src/foodRequests/request.controller.ts | 4 +--- apps/backend/src/pantries/pantries.controller.ts | 7 +------ apps/frontend/src/api/apiClient.ts | 1 + apps/frontend/src/components/signOutButton.tsx | 12 ++++++++++++ apps/frontend/src/containers/landingPage.tsx | 3 ++- 5 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 apps/frontend/src/components/signOutButton.tsx diff --git a/apps/backend/src/foodRequests/request.controller.ts b/apps/backend/src/foodRequests/request.controller.ts index f5e27c5d..8377bf47 100644 --- a/apps/backend/src/foodRequests/request.controller.ts +++ b/apps/backend/src/foodRequests/request.controller.ts @@ -22,6 +22,7 @@ import { RolesGuard } from '../auth/roles.guard'; @Controller('requests') // @UseInterceptors() +@UseGuards(RolesGuard) @UseGuards(AuthGuard('jwt')) export class FoodRequestsController { constructor( @@ -30,7 +31,6 @@ export class FoodRequestsController { ) {} @Roles(Role.PANTRY) - @UseGuards(RolesGuard) @Get('/:pantryId') async getAllPantryRequests( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -39,7 +39,6 @@ export class FoodRequestsController { } @Roles(Role.PANTRY) - @UseGuards(RolesGuard) @Post('/create') @ApiBody({ description: 'Details for creating a food request', @@ -104,7 +103,6 @@ export class FoodRequestsController { } @Roles(Role.PANTRY) - @UseGuards(RolesGuard) @Post('/:requestId/confirm-delivery') @ApiBody({ description: 'Details for a confirmation form', diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index 291d046e..caae0b33 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -16,19 +16,17 @@ import { AuthGuard } from '@nestjs/passport'; @Controller('pantries') // @UseInterceptors(CurrentUserInterceptor) -@UseGuards(AuthGuard('jwt')) +@UseGuards(AuthGuard('jwt'), RolesGuard) export class PantriesController { constructor(private pantriesService: PantriesService) {} @Roles(Role.ADMIN) - @UseGuards(RolesGuard) @Get('/pending') async getPendingPantries(): Promise { return this.pantriesService.getPendingPantries(); } @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(RolesGuard) @Get('/:pantryId/ssf-contact') async getSSFRep( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -37,7 +35,6 @@ export class PantriesController { } @Roles(Role.PANTRY, Role.ADMIN) - @UseGuards(RolesGuard) @Get('/:pantryId') async getPantry( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -46,7 +43,6 @@ export class PantriesController { } @Roles(Role.ADMIN) - @UseGuards(RolesGuard) @Post('/approve/:pantryId') async approvePantry( @Param('pantryId', ParseIntPipe) pantryId: number, @@ -55,7 +51,6 @@ export class PantriesController { } @Roles(Role.ADMIN) - @UseGuards(RolesGuard) @Post('/deny/:pantryId') async denyPantry( @Param('pantryId', ParseIntPipe) pantryId: number, diff --git a/apps/frontend/src/api/apiClient.ts b/apps/frontend/src/api/apiClient.ts index 3d81bfea..e7663b52 100644 --- a/apps/frontend/src/api/apiClient.ts +++ b/apps/frontend/src/api/apiClient.ts @@ -31,6 +31,7 @@ export class ApiClient { (response) => response, (error: AxiosError) => { if (error.response?.status === 403) { + // TODO: For a future ticket, figure out a better method than renavigation on failure (or a better place to check than in the api requests) window.location.replace('/unauthorized'); } return Promise.reject(error); diff --git a/apps/frontend/src/components/signOutButton.tsx b/apps/frontend/src/components/signOutButton.tsx new file mode 100644 index 00000000..ccc8bbfa --- /dev/null +++ b/apps/frontend/src/components/signOutButton.tsx @@ -0,0 +1,12 @@ +import { Button } from '@chakra-ui/react'; +import { signOut } from 'aws-amplify/auth'; + +const SignOutButton: React.FC = () => { + const handleSignOut = async () => { + await signOut(); + }; + + return ; +}; + +export default SignOutButton; diff --git a/apps/frontend/src/containers/landingPage.tsx b/apps/frontend/src/containers/landingPage.tsx index f33ceb0b..98bbd7ed 100644 --- a/apps/frontend/src/containers/landingPage.tsx +++ b/apps/frontend/src/containers/landingPage.tsx @@ -1,4 +1,5 @@ import { Button } from '@chakra-ui/react'; +import SignOutButton from '@components/signOutButton'; import { signOut } from 'aws-amplify/auth'; const LandingPage: React.FC = () => { @@ -9,7 +10,7 @@ const LandingPage: React.FC = () => { return ( <> Landing page - + ); }; From a5a7852618d53798a39ce34681e0016adcb61c21 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 18 Jan 2026 21:01:25 -0500 Subject: [PATCH 09/22] Resolved merge conflicts --- apps/backend/src/pantries/pantries.module.ts | 8 +- apps/frontend/src/app.tsx | 3 +- .../components/forms/addNewVolunteerModal.tsx | 193 +++++++++++++----- .../src/containers/volunteerManagement.tsx | 148 ++++++++++---- apps/frontend/src/types/types.ts | 10 +- 5 files changed, 255 insertions(+), 107 deletions(-) diff --git a/apps/backend/src/pantries/pantries.module.ts b/apps/backend/src/pantries/pantries.module.ts index 4314a59f..0c183d6d 100644 --- a/apps/backend/src/pantries/pantries.module.ts +++ b/apps/backend/src/pantries/pantries.module.ts @@ -9,10 +9,14 @@ import { OrdersModule } from '../orders/order.module'; import { User } from '../users/user.entity'; @Module({ - imports: [TypeOrmModule.forFeature([Pantry, User]), OrdersModule, UsersModule, AuthModule], + imports: [ + TypeOrmModule.forFeature([Pantry, User]), + OrdersModule, + UsersModule, + AuthModule, + ], controllers: [PantriesController], providers: [PantriesService], exports: [PantriesService], }) - export class PantriesModule {} diff --git a/apps/frontend/src/app.tsx b/apps/frontend/src/app.tsx index b33e4d19..f70a29a8 100644 --- a/apps/frontend/src/app.tsx +++ b/apps/frontend/src/app.tsx @@ -25,6 +25,7 @@ import { Authenticator } from '@aws-amplify/ui-react'; import { Amplify } from 'aws-amplify'; import CognitoAuthConfig from './aws-exports'; import { Button } from '@chakra-ui/react'; +import Unauthorized from '@containers/unauthorized'; Amplify.configure(CognitoAuthConfig); @@ -221,7 +222,7 @@ const router = createBrowserRouter([ ), }, - + // Actions { path: '/food-request', diff --git a/apps/frontend/src/components/forms/addNewVolunteerModal.tsx b/apps/frontend/src/components/forms/addNewVolunteerModal.tsx index 7c2fa99c..545122da 100644 --- a/apps/frontend/src/components/forms/addNewVolunteerModal.tsx +++ b/apps/frontend/src/components/forms/addNewVolunteerModal.tsx @@ -1,49 +1,52 @@ import { - Dialog, - Button, - Text, - Flex, - Field, - Input, - CloseButton, - Box + Dialog, + Button, + Text, + Flex, + Field, + Input, + CloseButton, + Box, } from '@chakra-ui/react'; import { useState } from 'react'; -import { Role, UserDto } from "../../types/types"; +import { Role, UserDto } from '../../types/types'; import ApiClient from '@api/apiClient'; import { USPhoneInput } from './usPhoneInput'; import { PlusIcon } from 'lucide-react'; interface NewVolunteerModalProps { - onSubmitSuccess?: () => void; - onSubmitFail?: () => void; + onSubmitSuccess?: () => void; + onSubmitFail?: () => void; } -const NewVolunteerModal: React.FC = ({ onSubmitSuccess, onSubmitFail }) => { - const [firstName, setFirstName] = useState(""); - const [lastName, setLastName] = useState(""); - const [email, setEmail] = useState(""); - const [phone, setPhone] = useState(""); +const NewVolunteerModal: React.FC = ({ + onSubmitSuccess, + onSubmitFail, +}) => { + const [firstName, setFirstName] = useState(''); + const [lastName, setLastName] = useState(''); + const [email, setEmail] = useState(''); + const [phone, setPhone] = useState(''); const [isOpen, setIsOpen] = useState(false); - const [error, setError] = useState(""); + const [error, setError] = useState(''); const handleSubmit = async () => { - console.log("RAW phone value:", phone); - if (!firstName || !lastName || !email || !phone || phone === "+1") { - setError("Please fill in all fields. *"); + console.log('RAW phone value:', phone); + if (!firstName || !lastName || !email || !phone || phone === '+1') { + setError('Please fill in all fields. *'); return; } - setError(""); + setError(''); const newVolunteer: UserDto = { firstName, lastName, email, phone, - role: Role.VOLUNTEER + role: Role.VOLUNTEER, }; try { @@ -51,47 +54,63 @@ const NewVolunteerModal: React.FC = ({ onSubmitSuccess, if (onSubmitSuccess) onSubmitSuccess(); handleClear(); } catch (error: unknown) { + let hasEmailError = false; + let hasPhoneError = false; - let hasEmailError = false - let hasPhoneError = false - - if (typeof error === "object" && error !== null) { - const e = error as { response?: { data?: { message?: string | string[] } } }; + if (typeof error === 'object' && error !== null) { + const e = error as { + response?: { data?: { message?: string | string[] } }; + }; const message = e.response?.data?.message; hasEmailError = Array.isArray(message) && - message.some((msg) => typeof msg === "string" && msg.toLowerCase().includes("email")); + message.some( + (msg) => + typeof msg === 'string' && msg.toLowerCase().includes('email'), + ); hasPhoneError = Array.isArray(message) && - message.some((msg) => typeof msg === "string" && msg.toLowerCase().includes("phone")); + message.some( + (msg) => + typeof msg === 'string' && msg.toLowerCase().includes('phone'), + ); } if (hasEmailError) { - setError("Please specify a valid email. *") + setError('Please specify a valid email. *'); } else if (hasPhoneError) { - setError("Please specify a valid phone number. *") + setError('Please specify a valid phone number. *'); } else { if (onSubmitFail) onSubmitFail(); handleClear(); } } - } + }; const handleClear = () => { - setFirstName(""); - setLastName(""); - setEmail(""); - setPhone(""); - setError(""); + setFirstName(''); + setLastName(''); + setEmail(''); + setPhone(''); + setError(''); setIsOpen(false); }; return ( - @@ -100,10 +119,21 @@ const NewVolunteerModal: React.FC = ({ onSubmitSuccess, - + Add New Volunteer - setIsOpen(false)} size="md" position="absolute" top={3} right={3}/> + setIsOpen(false)} + size="md" + position="absolute" + top={3} + right={3} + /> @@ -111,20 +141,54 @@ const NewVolunteerModal: React.FC = ({ onSubmitSuccess, - First Name - setFirstName(e.target.value)}/> + + First Name + + setFirstName(e.target.value)} + /> - Last Name - setLastName(e.target.value)}/> + + Last Name + + setLastName(e.target.value)} + /> - Email - setEmail(e.target.value)}/> + + Email + + setEmail(e.target.value)} + /> - Phone Number + + Phone Number + = ({ onSubmitSuccess, /> {error && ( - + {error} )} - - + + @@ -151,9 +237,4 @@ const NewVolunteerModal: React.FC = ({ onSubmitSuccess, ); }; - - - - - -export default NewVolunteerModal; \ No newline at end of file +export default NewVolunteerModal; diff --git a/apps/frontend/src/containers/volunteerManagement.tsx b/apps/frontend/src/containers/volunteerManagement.tsx index 6f8b4c47..4929767b 100644 --- a/apps/frontend/src/containers/volunteerManagement.tsx +++ b/apps/frontend/src/containers/volunteerManagement.tsx @@ -50,12 +50,12 @@ const VolunteerManagement: React.FC = () => { const filteredVolunteers = volunteers.filter((a) => { const fullName = `${a.firstName} ${a.lastName}`.toLowerCase(); - return (fullName.includes(searchName.toLowerCase())); + return fullName.includes(searchName.toLowerCase()); }); const paginatedVolunteers = filteredVolunteers.slice( (currentPage - 1) * pageSize, - currentPage * pageSize + currentPage * pageSize, ); const handleSearchNameChange = ( @@ -66,11 +66,26 @@ const VolunteerManagement: React.FC = () => { return ( - Volunteer Management + + Volunteer Management + {alertMessage && ( - + - {alertMessage} + + {alertMessage} + )} { overflowY="hidden" whiteSpace="nowrap" > - + - } maxW={200}> + } + maxW={200} + > { fontFamily="ibm" fontWeight="semibold" fontSize="14px" - _focusVisible={{ boxShadow: "none", outline: "none" }} + _focusVisible={{ boxShadow: 'none', outline: 'none' }} /> - { - setAlertMessage("Volunteer added."); + { + setAlertMessage('Volunteer added.'); setSubmitSuccess(true); - setTimeout(() => setAlertMessage(""), 3000); - }} onSubmitFail={() => { - setAlertMessage("Volunteer could not be added."); + setTimeout(() => setAlertMessage(''), 3000); + }} + onSubmitFail={() => { + setAlertMessage('Volunteer could not be added.'); setSubmitSuccess(false); - setTimeout(() => setAlertMessage(""), 3000); + setTimeout(() => setAlertMessage(''), 3000); }} /> @@ -112,10 +132,29 @@ const VolunteerManagement: React.FC = () => { - Volunteer - Email - Actions - + + Volunteer + + + Email + + + Actions + + {paginatedVolunteers?.map((volunteer) => ( @@ -123,31 +162,34 @@ const VolunteerManagement: React.FC = () => { - {volunteer.firstName - .charAt(0) - .toUpperCase()} - {volunteer.lastName - .charAt(0) - .toUpperCase()} - + borderRadius="full" + bg={ + USER_ICON_COLORS[volunteer.id % USER_ICON_COLORS.length] + } + width="33px" + height="33px" + display="flex" + alignItems="center" + justifyContent="center" + color="white" + p={2} + > + {volunteer.firstName.charAt(0).toUpperCase()} + {volunteer.lastName.charAt(0).toUpperCase()} + {volunteer.firstName} {volunteer.lastName} - - {volunteer.email} - + {volunteer.email} - + View Assigned Pantries @@ -156,10 +198,20 @@ const VolunteerManagement: React.FC = () => { - setCurrentPage(page)}> + setCurrentPage(page)} + > - setCurrentPage((prev) => Math.max(prev - 1, 1))}> + + setCurrentPage((prev) => Math.max(prev - 1, 1)) + } + > @@ -167,7 +219,7 @@ const VolunteerManagement: React.FC = () => { ( setCurrentPage(page.value)} > {page.value} @@ -176,7 +228,17 @@ const VolunteerManagement: React.FC = () => { /> - setCurrentPage((prev) => Math.min(prev + 1, Math.ceil(filteredVolunteers.length / pageSize)))}> + + setCurrentPage((prev) => + Math.min( + prev + 1, + Math.ceil(filteredVolunteers.length / pageSize), + ), + ) + } + > diff --git a/apps/frontend/src/types/types.ts b/apps/frontend/src/types/types.ts index c823a22c..0b05cf0f 100644 --- a/apps/frontend/src/types/types.ts +++ b/apps/frontend/src/types/types.ts @@ -146,11 +146,11 @@ export interface User { } export interface UserDto { - email: string, - firstName: string, - lastName: string, - phone: string, - role: Role, + email: string; + firstName: string; + lastName: string; + phone: string; + role: Role; } export interface FoodRequest { From 88f8d3ca4f9fba1590216e25df5b62e042257184 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 18 Jan 2026 21:41:31 -0500 Subject: [PATCH 10/22] Fixed all errors with modules --- apps/backend/src/allocations/allocations.module.ts | 2 +- apps/backend/src/auth/auth.module.ts | 11 ++++++----- apps/backend/src/foodRequests/request.module.ts | 5 ++--- apps/backend/src/orders/order.module.ts | 4 +--- apps/backend/src/pantries/pantries.module.ts | 6 ++---- apps/backend/src/users/users.controller.ts | 3 --- apps/backend/src/users/users.module.ts | 13 ++++++------- 7 files changed, 18 insertions(+), 26 deletions(-) diff --git a/apps/backend/src/allocations/allocations.module.ts b/apps/backend/src/allocations/allocations.module.ts index fed7360b..f6522419 100644 --- a/apps/backend/src/allocations/allocations.module.ts +++ b/apps/backend/src/allocations/allocations.module.ts @@ -9,7 +9,7 @@ import { JwtStrategy } from '../auth/jwt.strategy'; @Module({ imports: [TypeOrmModule.forFeature([Allocation])], controllers: [AllocationsController], - providers: [AllocationsService, AuthService, JwtStrategy], + providers: [AllocationsService], exports: [AllocationsService], }) export class AllocationModule {} diff --git a/apps/backend/src/auth/auth.module.ts b/apps/backend/src/auth/auth.module.ts index e1ca200e..3af03db0 100644 --- a/apps/backend/src/auth/auth.module.ts +++ b/apps/backend/src/auth/auth.module.ts @@ -1,16 +1,17 @@ -import { Module } from '@nestjs/common'; +import { Module, forwardRef } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { JwtStrategy } from './jwt.strategy'; -import { RolesGuard } from './roles.guard'; import { UsersModule } from '../users/users.module'; -import { UsersService } from '../users/users.service'; @Module({ - imports: [UsersModule, PassportModule.register({ defaultStrategy: 'jwt' })], + imports: [ + forwardRef(() => UsersModule), + PassportModule.register({ defaultStrategy: 'jwt' }), + ], controllers: [AuthController], - providers: [AuthService, UsersService, JwtStrategy, RolesGuard], + providers: [AuthService, JwtStrategy], exports: [AuthService, JwtStrategy], }) export class AuthModule {} diff --git a/apps/backend/src/foodRequests/request.module.ts b/apps/backend/src/foodRequests/request.module.ts index 18a88ab2..0e5dc280 100644 --- a/apps/backend/src/foodRequests/request.module.ts +++ b/apps/backend/src/foodRequests/request.module.ts @@ -9,16 +9,15 @@ import { AuthModule } from '../auth/auth.module'; import { OrdersService } from '../orders/order.service'; import { Order } from '../orders/order.entity'; import { Pantry } from '../pantries/pantries.entity'; -import { AuthService } from '../auth/auth.service'; -import { JwtStrategy } from '../auth/jwt.strategy'; @Module({ imports: [ AWSS3Module, MulterModule.register({ dest: './uploads' }), TypeOrmModule.forFeature([FoodRequest, Order, Pantry]), + AuthModule, ], controllers: [RequestsController], - providers: [RequestsService, OrdersService, AuthService, JwtStrategy], + providers: [RequestsService, OrdersService], }) export class RequestsModule {} diff --git a/apps/backend/src/orders/order.module.ts b/apps/backend/src/orders/order.module.ts index c6b307a0..2e8b07a7 100644 --- a/apps/backend/src/orders/order.module.ts +++ b/apps/backend/src/orders/order.module.ts @@ -3,14 +3,12 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { OrdersController } from './order.controller'; import { Order } from './order.entity'; import { OrdersService } from './order.service'; -import { JwtStrategy } from '../auth/jwt.strategy'; -import { AuthService } from '../auth/auth.service'; import { AllocationModule } from '../allocations/allocations.module'; @Module({ imports: [TypeOrmModule.forFeature([Order]), AllocationModule], controllers: [OrdersController], - providers: [OrdersService, AuthService, JwtStrategy], + providers: [OrdersService], exports: [OrdersService], }) export class OrdersModule {} diff --git a/apps/backend/src/pantries/pantries.module.ts b/apps/backend/src/pantries/pantries.module.ts index 0c183d6d..5e60b78d 100644 --- a/apps/backend/src/pantries/pantries.module.ts +++ b/apps/backend/src/pantries/pantries.module.ts @@ -1,9 +1,8 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { PantriesService } from './pantries.service'; import { PantriesController } from './pantries.controller'; import { Pantry } from './pantries.entity'; -import { UsersModule } from '../users/users.module'; import { AuthModule } from '../auth/auth.module'; import { OrdersModule } from '../orders/order.module'; import { User } from '../users/user.entity'; @@ -12,8 +11,7 @@ import { User } from '../users/user.entity'; imports: [ TypeOrmModule.forFeature([Pantry, User]), OrdersModule, - UsersModule, - AuthModule, + forwardRef(() => AuthModule), ], controllers: [PantriesController], providers: [PantriesService], diff --git a/apps/backend/src/users/users.controller.ts b/apps/backend/src/users/users.controller.ts index 39512a3f..41716e89 100644 --- a/apps/backend/src/users/users.controller.ts +++ b/apps/backend/src/users/users.controller.ts @@ -16,14 +16,11 @@ import { import { UsersService } from './users.service'; import { AuthGuard } from '@nestjs/passport'; import { User } from './user.entity'; -import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; import { Role } from './types'; import { userSchemaDto } from './dtos/userSchema.dto'; import { Pantry } from '../pantries/pantries.entity'; -//import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; @Controller('users') -// @UseInterceptors(CurrentUserInterceptor) export class UsersController { constructor(private usersService: UsersService) {} diff --git a/apps/backend/src/users/users.module.ts b/apps/backend/src/users/users.module.ts index f9ca2f84..5c8dd303 100644 --- a/apps/backend/src/users/users.module.ts +++ b/apps/backend/src/users/users.module.ts @@ -1,18 +1,17 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { UsersController } from './users.controller'; import { UsersService } from './users.service'; import { User } from './user.entity'; -import { JwtStrategy } from '../auth/jwt.strategy'; -import { CurrentUserInterceptor } from '../interceptors/current-user.interceptor'; -import { AuthService } from '../auth/auth.service'; import { PantriesModule } from '../pantries/pantries.module'; @Module({ - imports: [TypeOrmModule.forFeature([User]), PantriesModule], - exports: [UsersService], + imports: [ + TypeOrmModule.forFeature([User]), + forwardRef(() => PantriesModule), + ], controllers: [UsersController], - providers: [UsersService, AuthService, JwtStrategy, CurrentUserInterceptor], + providers: [UsersService], exports: [UsersService], }) export class UsersModule {} From 5421fe63ff49ba37c90e3a4b5e4bfe824ece00ea Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 18 Jan 2026 21:42:05 -0500 Subject: [PATCH 11/22] prettier --- apps/backend/src/users/users.module.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/backend/src/users/users.module.ts b/apps/backend/src/users/users.module.ts index 5c8dd303..e2de40ea 100644 --- a/apps/backend/src/users/users.module.ts +++ b/apps/backend/src/users/users.module.ts @@ -6,10 +6,7 @@ import { User } from './user.entity'; import { PantriesModule } from '../pantries/pantries.module'; @Module({ - imports: [ - TypeOrmModule.forFeature([User]), - forwardRef(() => PantriesModule), - ], + imports: [TypeOrmModule.forFeature([User]), forwardRef(() => PantriesModule)], controllers: [UsersController], providers: [UsersService], exports: [UsersService], From 6aea768ce5a2f9c74a61acc2997728d30f1bd92e Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 18 Jan 2026 22:13:20 -0500 Subject: [PATCH 12/22] Fixed module importing --- apps/backend/src/allocations/allocations.module.ts | 7 +++---- apps/backend/src/orders/order.module.ts | 5 +++-- apps/backend/src/users/users.module.ts | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/backend/src/allocations/allocations.module.ts b/apps/backend/src/allocations/allocations.module.ts index f6522419..61c45d7b 100644 --- a/apps/backend/src/allocations/allocations.module.ts +++ b/apps/backend/src/allocations/allocations.module.ts @@ -1,13 +1,12 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Allocation } from './allocations.entity'; import { AllocationsController } from './allocations.controller'; import { AllocationsService } from './allocations.service'; -import { AuthService } from '../auth/auth.service'; -import { JwtStrategy } from '../auth/jwt.strategy'; +import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([Allocation])], + imports: [TypeOrmModule.forFeature([Allocation]), forwardRef(() => AuthModule)], controllers: [AllocationsController], providers: [AllocationsService], exports: [AllocationsService], diff --git a/apps/backend/src/orders/order.module.ts b/apps/backend/src/orders/order.module.ts index 2e8b07a7..bfbce8bd 100644 --- a/apps/backend/src/orders/order.module.ts +++ b/apps/backend/src/orders/order.module.ts @@ -1,12 +1,13 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { OrdersController } from './order.controller'; import { Order } from './order.entity'; import { OrdersService } from './order.service'; import { AllocationModule } from '../allocations/allocations.module'; +import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([Order]), AllocationModule], + imports: [TypeOrmModule.forFeature([Order]), AllocationModule, forwardRef(() => AuthModule)], controllers: [OrdersController], providers: [OrdersService], exports: [OrdersService], diff --git a/apps/backend/src/users/users.module.ts b/apps/backend/src/users/users.module.ts index e2de40ea..88a45919 100644 --- a/apps/backend/src/users/users.module.ts +++ b/apps/backend/src/users/users.module.ts @@ -4,9 +4,10 @@ import { UsersController } from './users.controller'; import { UsersService } from './users.service'; import { User } from './user.entity'; import { PantriesModule } from '../pantries/pantries.module'; +import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([User]), forwardRef(() => PantriesModule)], + imports: [TypeOrmModule.forFeature([User]), forwardRef(() => PantriesModule), forwardRef(() => AuthModule)], controllers: [UsersController], providers: [UsersService], exports: [UsersService], From caa33e977c9aabf3796465a6f693eb2ba225d473 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 18 Jan 2026 22:14:50 -0500 Subject: [PATCH 13/22] prettier --- apps/backend/src/allocations/allocations.module.ts | 5 ++++- apps/backend/src/orders/order.module.ts | 6 +++++- apps/backend/src/users/users.module.ts | 6 +++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/backend/src/allocations/allocations.module.ts b/apps/backend/src/allocations/allocations.module.ts index 61c45d7b..3284e1af 100644 --- a/apps/backend/src/allocations/allocations.module.ts +++ b/apps/backend/src/allocations/allocations.module.ts @@ -6,7 +6,10 @@ import { AllocationsService } from './allocations.service'; import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([Allocation]), forwardRef(() => AuthModule)], + imports: [ + TypeOrmModule.forFeature([Allocation]), + forwardRef(() => AuthModule), + ], controllers: [AllocationsController], providers: [AllocationsService], exports: [AllocationsService], diff --git a/apps/backend/src/orders/order.module.ts b/apps/backend/src/orders/order.module.ts index bfbce8bd..ca2c5ddd 100644 --- a/apps/backend/src/orders/order.module.ts +++ b/apps/backend/src/orders/order.module.ts @@ -7,7 +7,11 @@ import { AllocationModule } from '../allocations/allocations.module'; import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([Order]), AllocationModule, forwardRef(() => AuthModule)], + imports: [ + TypeOrmModule.forFeature([Order]), + AllocationModule, + forwardRef(() => AuthModule), + ], controllers: [OrdersController], providers: [OrdersService], exports: [OrdersService], diff --git a/apps/backend/src/users/users.module.ts b/apps/backend/src/users/users.module.ts index 88a45919..23177621 100644 --- a/apps/backend/src/users/users.module.ts +++ b/apps/backend/src/users/users.module.ts @@ -7,7 +7,11 @@ import { PantriesModule } from '../pantries/pantries.module'; import { AuthModule } from '../auth/auth.module'; @Module({ - imports: [TypeOrmModule.forFeature([User]), forwardRef(() => PantriesModule), forwardRef(() => AuthModule)], + imports: [ + TypeOrmModule.forFeature([User]), + forwardRef(() => PantriesModule), + forwardRef(() => AuthModule), + ], controllers: [UsersController], providers: [UsersService], exports: [UsersService], From 390b380f83398cde388dec9fa529fac8e49bf75e Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 18 Jan 2026 22:24:21 -0500 Subject: [PATCH 14/22] Added back in donation migration --- apps/backend/src/config/typeorm.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/backend/src/config/typeorm.ts b/apps/backend/src/config/typeorm.ts index 933d6ca1..b467c967 100644 --- a/apps/backend/src/config/typeorm.ts +++ b/apps/backend/src/config/typeorm.ts @@ -47,6 +47,7 @@ const config = { UpdateUserRole1737816745912, UpdatePantriesTable1737906317154, UpdateDonationColTypes1741708808976, + UpdateDonations1738697216020, UpdatePantriesTable1738172265266, UpdatePantriesTable1739056029076, AssignmentsPantryIdNotUnique1758384669652, From f1bad91c2d97309be8bdcbc03c95b93881182343 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Mon, 19 Jan 2026 13:10:52 -0500 Subject: [PATCH 15/22] Full implementation of backend role-based auth --- apps/backend/src/auth/auth.service.ts | 4 ++-- apps/backend/src/auth/jwt.strategy.ts | 4 +++- .../src/donations/donations.controller.ts | 1 - .../src/foodRequests/request.controller.ts | 1 - .../src/pantries/pantries.controller.ts | 5 ++--- apps/backend/src/users/users.controller.ts | 6 ------ apps/frontend/src/api/apiClient.ts | 3 +++ apps/frontend/src/app.tsx | 1 - apps/frontend/src/aws-exports.ts | 2 +- apps/frontend/src/containers/root.tsx | 4 ++++ apps/frontend/src/hooks/useAuth.ts | 21 +++++++++++++++++++ 11 files changed, 36 insertions(+), 16 deletions(-) create mode 100644 apps/frontend/src/hooks/useAuth.ts diff --git a/apps/backend/src/auth/auth.service.ts b/apps/backend/src/auth/auth.service.ts index e88d532e..8d40956c 100644 --- a/apps/backend/src/auth/auth.service.ts +++ b/apps/backend/src/auth/auth.service.ts @@ -28,8 +28,8 @@ export class AuthService { this.providerClient = new CognitoIdentityProviderClient({ region: CognitoAuthConfig.region, credentials: { - accessKeyId: process.env.NX_AWS_ACCESS_KEY, - secretAccessKey: process.env.NX_AWS_SECRET_ACCESS_KEY, + accessKeyId: process.env.AWS_ACCESS_KEY_ID, + secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }, }); diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index 439acf6c..4d2d0822 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -31,7 +31,9 @@ export class JwtStrategy extends PassportStrategy(Strategy) { async validate(payload) { const user = await this.authService.getUser(payload.sub); + console.log('Cognito user retrieved:', user); const dbUser = await this.usersService.findByEmail(user.email); + console.log('Database user retrieved:', dbUser); return dbUser; } -} +} \ No newline at end of file diff --git a/apps/backend/src/donations/donations.controller.ts b/apps/backend/src/donations/donations.controller.ts index c0050c45..ad09b322 100644 --- a/apps/backend/src/donations/donations.controller.ts +++ b/apps/backend/src/donations/donations.controller.ts @@ -17,7 +17,6 @@ import { AuthGuard } from '@nestjs/passport'; import { DonationStatus } from './types'; @Controller('donations') -@UseGuards(AuthGuard('jwt')) export class DonationsController { constructor(private donationService: DonationService) {} diff --git a/apps/backend/src/foodRequests/request.controller.ts b/apps/backend/src/foodRequests/request.controller.ts index a34e6cb3..1162329e 100644 --- a/apps/backend/src/foodRequests/request.controller.ts +++ b/apps/backend/src/foodRequests/request.controller.ts @@ -28,7 +28,6 @@ import { OrderStatus } from '../orders/types'; @Controller('requests') // @UseInterceptors() @UseGuards(RolesGuard) -@UseGuards(AuthGuard('jwt')) export class RequestsController { constructor( private requestsService: RequestsService, diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index 54765cdc..fda6d732 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -27,16 +27,15 @@ import { import { Order } from '../orders/order.entity'; import { OrdersService } from '../orders/order.service'; -@Controller('pantries') -// @UseInterceptors(CurrentUserInterceptor) @UseGuards(AuthGuard('jwt'), RolesGuard) +@Controller('pantries') export class PantriesController { constructor( private pantriesService: PantriesService, private ordersService: OrdersService, ) {} - @Roles(Role.ADMIN) + @Roles(Role.VOLUNTEER) @Get('/pending') async getPendingPantries(): Promise { return this.pantriesService.getPendingPantries(); diff --git a/apps/backend/src/users/users.controller.ts b/apps/backend/src/users/users.controller.ts index 41716e89..7040fc37 100644 --- a/apps/backend/src/users/users.controller.ts +++ b/apps/backend/src/users/users.controller.ts @@ -4,17 +4,12 @@ import { Get, Param, ParseIntPipe, - UseGuards, - UseInterceptors, Put, Post, BadRequestException, Body, - //UseGuards, - //UseInterceptors, } from '@nestjs/common'; import { UsersService } from './users.service'; -import { AuthGuard } from '@nestjs/passport'; import { User } from './user.entity'; import { Role } from './types'; import { userSchemaDto } from './dtos/userSchema.dto'; @@ -31,7 +26,6 @@ export class UsersController { return this.usersService.getVolunteersAndPantryAssignments(); } - // @UseGuards(AuthGuard('jwt')) @Get('/:id') async getUser(@Param('id', ParseIntPipe) userId: number): Promise { return this.usersService.findOne(userId); diff --git a/apps/frontend/src/api/apiClient.ts b/apps/frontend/src/api/apiClient.ts index fd45e7a9..d2ecb224 100644 --- a/apps/frontend/src/api/apiClient.ts +++ b/apps/frontend/src/api/apiClient.ts @@ -29,9 +29,12 @@ export class ApiClient { constructor() { this.axiosInstance = axios.create({ baseURL: defaultBaseUrl }); + // Attach the access token to each request if available + // All API requests will go through this interceptor, making the user required to login this.axiosInstance.interceptors.request.use( (config: InternalAxiosRequestConfig) => { const token = this.accessToken || localStorage.getItem('accessToken'); + console.log('Attaching token to request:', token); if (token) { config.headers = config.headers || {}; config.headers['Authorization'] = `Bearer ${token}`; diff --git a/apps/frontend/src/app.tsx b/apps/frontend/src/app.tsx index 3527142a..9490cc78 100644 --- a/apps/frontend/src/app.tsx +++ b/apps/frontend/src/app.tsx @@ -197,7 +197,6 @@ const router = createBrowserRouter([ ), - loader: pantryIdLoader, }, { path: '/donation-management', diff --git a/apps/frontend/src/aws-exports.ts b/apps/frontend/src/aws-exports.ts index ad17bcd3..02899587 100644 --- a/apps/frontend/src/aws-exports.ts +++ b/apps/frontend/src/aws-exports.ts @@ -10,4 +10,4 @@ const CognitoAuthConfig = { }, }, }; -export default CognitoAuthConfig; +export default CognitoAuthConfig; \ No newline at end of file diff --git a/apps/frontend/src/containers/root.tsx b/apps/frontend/src/containers/root.tsx index dea053b1..d179353f 100644 --- a/apps/frontend/src/containers/root.tsx +++ b/apps/frontend/src/containers/root.tsx @@ -1,6 +1,10 @@ import { Outlet } from 'react-router-dom'; import Header from '../components/Header'; +import { useAuth } from '../hooks/useAuth'; + const Root: React.FC = () => { + useAuth(); + return (
diff --git a/apps/frontend/src/hooks/useAuth.ts b/apps/frontend/src/hooks/useAuth.ts new file mode 100644 index 00000000..52f9c6bd --- /dev/null +++ b/apps/frontend/src/hooks/useAuth.ts @@ -0,0 +1,21 @@ +import { useEffect } from 'react'; +import { fetchAuthSession } from 'aws-amplify/auth'; +import apiClient from '@api/apiClient'; + +// Hook to manage authentication state and set the API client's access token +export function useAuth() { + useEffect(() => { + const updateToken = async () => { + try { + const session = await fetchAuthSession(); + const idToken = session.tokens?.idToken?.toString(); + apiClient.setAccessToken(idToken); + } catch (error) { + console.error('Error fetching auth session:', error); + apiClient.setAccessToken(undefined); + } + }; + + updateToken(); + }, []); +} \ No newline at end of file From f7621f5c110f19aa7ececbca1fe1ec8b4e8ed4b3 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Mon, 19 Jan 2026 13:13:34 -0500 Subject: [PATCH 16/22] prettier --- apps/backend/src/auth/jwt.strategy.ts | 2 +- apps/frontend/src/aws-exports.ts | 2 +- apps/frontend/src/hooks/useAuth.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index 4d2d0822..53b84df3 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -36,4 +36,4 @@ export class JwtStrategy extends PassportStrategy(Strategy) { console.log('Database user retrieved:', dbUser); return dbUser; } -} \ No newline at end of file +} diff --git a/apps/frontend/src/aws-exports.ts b/apps/frontend/src/aws-exports.ts index 02899587..ad17bcd3 100644 --- a/apps/frontend/src/aws-exports.ts +++ b/apps/frontend/src/aws-exports.ts @@ -10,4 +10,4 @@ const CognitoAuthConfig = { }, }, }; -export default CognitoAuthConfig; \ No newline at end of file +export default CognitoAuthConfig; diff --git a/apps/frontend/src/hooks/useAuth.ts b/apps/frontend/src/hooks/useAuth.ts index 52f9c6bd..e9793761 100644 --- a/apps/frontend/src/hooks/useAuth.ts +++ b/apps/frontend/src/hooks/useAuth.ts @@ -8,7 +8,7 @@ export function useAuth() { const updateToken = async () => { try { const session = await fetchAuthSession(); - const idToken = session.tokens?.idToken?.toString(); + const idToken = session.tokens?.idToken?.toString(); apiClient.setAccessToken(idToken); } catch (error) { console.error('Error fetching auth session:', error); @@ -18,4 +18,4 @@ export function useAuth() { updateToken(); }, []); -} \ No newline at end of file +} From 1331bbb4afd71b2de6e439f2917a271a850bf6be Mon Sep 17 00:00:00 2001 From: Dalton Burkhart <137221425+dburkhart07@users.noreply.github.com> Date: Wed, 21 Jan 2026 15:52:28 -0500 Subject: [PATCH 17/22] [SSF 17] - environment variables updates (#44) --- .env.example | 9 ++++++++- apps/backend/README.md | 41 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index c0ee816e..1c2d9c96 100644 --- a/.env.example +++ b/.env.example @@ -2,4 +2,11 @@ DATABASE_HOST=localhost DATABASE_PORT=5432 DATABASE_NAME=securing-safe-food DATABASE_USERNAME=postgres -DATABASE_PASSWORD=PLACEHOLDER_PASSWORD \ No newline at end of file +DATABASE_PASSWORD=PLACEHOLDER_PASSWORD + +AWS_ACCESS_KEY_ID = PLACEHOLDER_AWS_ACCESS_KEY +AWS_SECRET_ACCESS_KEY = PLACEHOLDER_AWS_SECRET_KEY +AWS_REGION = PLACEHOLDER_AWS_REGION +COGNITO_CLIENT_SECRET = PLACEHOLDER_COGNITO_CLIENT_SECRET + +AWS_BUCKET_NAME = 'confirm-delivery-photos' \ No newline at end of file diff --git a/apps/backend/README.md b/apps/backend/README.md index 8e4e513c..9cb8488f 100644 --- a/apps/backend/README.md +++ b/apps/backend/README.md @@ -25,4 +25,43 @@ You can check that your database connection details are correct by running `nx s "LOG 🚀 Application is running on: http://localhost:3000/api" ``` -Finally, run `yarn run typeorm:migrate` to load all the tables into your database. If everything is set up correctly, you should see "Migration ... has been executed successfully." in the terminal. \ No newline at end of file +Finally, run `yarn run typeorm:migrate` to load all the tables into your database. If everything is set up correctly, you should see "Migration ... has been executed successfully." in the terminal. + +# AWS Setup + +We have a few environment variables that we utilize to access several AWS services throughout the application. Below is a list of each of them and how to access each after logging in to AWS + +1. `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`: + - Click on your username in the top right corner, and navigate to Security Credentials + - Scroll down to access keys, and create a new key + - Select "Local code" as the purpose for the key, and add an optional description + - Replace both the public and secret keys in the .env file to those values. Note that the secret key will not be accessible after you leave this page + - Click done + +2. `AWS_REGION`: +This can be found next to your profile name when you login to the main page. Some accounts may be different, but we generally use us-east-1 or us-east-2. +This is the region that you find on the right side after clicking on the location dropdown, usually saying "United States (*some region*)". +For example, if we want to use Ohio as the region, we would put `AWS_REGION="us-east2"` + +3. `AWS_BUCKET_NAME`: +This one is already given to you. As of right now, we only use one bucket, confirm-delivery-photos to store photos in a public S3 Bucket. This may be subject to change as we use S3 more in the project. + +4. `COGNITO_CLIENT_SECRET`: +This is used to help authenticate you with AWS Cognito and allow you to properly sign in using proper credential. To find this: + - Navigate to AWS Cognito + - Make sure you are on "United States (N. Virginia) as your region + - Go into User pools and click on the one that says "ssf" (NOTE: You can also validate the User pool id in the `auth/aws_exports.ts` file) + - Go to App Clients, and click on 'ssf client w secret' + - There, you can validate the information in `auth/aws_exports.ts` (the `userPoolClientId`), as well as copy the client secret into your env file + +5. Creating a new user within AWS Cognito + There are 2 ways you can create a new user in AWS Cognito. The simplest, is through loading the up, going to the landing page, and creating a new account there. If you choose to do it alternatively through the console, follow these steps: + - Navigate to AWS Cognito + - Make sure you are on "United States (N. Virginia) as your region + - Go into User pools and click on the one that says "ssf" + - Go to Users + - If you do not already see your email there, create a new User, setting an email in password (this will be what you login with on the frontend) + - Click 'Create User' + - Load up the app, and go to the landing page + - Verify you are able to login with these new credentials you created + \ No newline at end of file From d69b3c8c5238ed86b7231991e4d170bc403df2b3 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Fri, 23 Jan 2026 12:51:25 -0500 Subject: [PATCH 18/22] Fixed user flow to use a cognito id hardcoded into the database --- apps/backend/src/auth/auth.service.ts | 26 ------------------- apps/backend/src/auth/jwt.strategy.ts | 5 +--- apps/backend/src/config/typeorm.ts | 2 ++ .../interceptors/current-user.interceptor.ts | 4 +-- .../migrations/1769189327767-AddUserPoolId.ts | 18 +++++++++++++ apps/backend/src/users/user.entity.ts | 8 ++++++ apps/backend/src/users/users.service.ts | 10 ++++++- 7 files changed, 39 insertions(+), 34 deletions(-) create mode 100644 apps/backend/src/migrations/1769189327767-AddUserPoolId.ts diff --git a/apps/backend/src/auth/auth.service.ts b/apps/backend/src/auth/auth.service.ts index 8d40956c..5ebb427e 100644 --- a/apps/backend/src/auth/auth.service.ts +++ b/apps/backend/src/auth/auth.service.ts @@ -46,32 +46,6 @@ export class AuthService { return hmac.digest('base64'); } - async getUser(userSub: string): Promise<{ email: string; role: string }> { - const listUsersCommand = new ListUsersCommand({ - UserPoolId: CognitoAuthConfig.userPoolId, - Filter: `sub = "${userSub}"`, - }); - - const { Users } = await this.providerClient.send(listUsersCommand); - if (!Users || Users.length === 0) { - throw new Error('User not found'); - } - - const attributes = Users[0].Attributes; - - const email = attributes.find((attr) => attr.Name === 'email')?.Value || ''; - const role = - attributes.find((attr) => attr.Name === 'custom:role')?.Value || - 'VOLUNTEER'; - - return { email, role }; - } - - async getUserRole(userSub: string): Promise { - const { role } = await this.getUser(userSub); - return role as Role; - } - async signup( { firstName, lastName, email, password }: SignUpDto, role: Role = Role.VOLUNTEER, diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index 53b84df3..8e040e81 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -10,7 +10,6 @@ import { AuthService } from './auth.service'; export class JwtStrategy extends PassportStrategy(Strategy) { constructor( private usersService: UsersService, - private authService: AuthService, ) { const cognitoAuthority = `https://cognito-idp.${CognitoAuthConfig.region}.amazonaws.com/${CognitoAuthConfig.userPoolId}`; @@ -30,9 +29,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload) { - const user = await this.authService.getUser(payload.sub); - console.log('Cognito user retrieved:', user); - const dbUser = await this.usersService.findByEmail(user.email); + const dbUser = await this.usersService.findUserByCognitoId(payload.sub); console.log('Database user retrieved:', dbUser); return dbUser; } diff --git a/apps/backend/src/config/typeorm.ts b/apps/backend/src/config/typeorm.ts index b467c967..d1de2d1f 100644 --- a/apps/backend/src/config/typeorm.ts +++ b/apps/backend/src/config/typeorm.ts @@ -27,6 +27,7 @@ import { RemoveMultipleVolunteerTypes1764811878152 } from '../migrations/1764811 import { RemoveUnusedStatuses1764816885341 } from '../migrations/1764816885341-RemoveUnusedStatuses'; import { UpdatePantryFields1763762628431 } from '../migrations/1763762628431-UpdatePantryFields'; import { PopulateDummyData1768501812134 } from '../migrations/1768501812134-populateDummyData'; +import { AddUserPoolId1769189327767 } from '../migrations/1769189327767-AddUserPoolId'; const config = { type: 'postgres', @@ -67,6 +68,7 @@ const config = { RemoveMultipleVolunteerTypes1764811878152, RemoveUnusedStatuses1764816885341, PopulateDummyData1768501812134, + AddUserPoolId1769189327767, ], }; diff --git a/apps/backend/src/interceptors/current-user.interceptor.ts b/apps/backend/src/interceptors/current-user.interceptor.ts index 02becfde..d395b47a 100644 --- a/apps/backend/src/interceptors/current-user.interceptor.ts +++ b/apps/backend/src/interceptors/current-user.interceptor.ts @@ -18,9 +18,7 @@ export class CurrentUserInterceptor implements NestInterceptor { const request = context.switchToHttp().getRequest(); if (request.user) { - const user = await this.authService.getUser(request.user.sub); - - const dbUser = await this.usersService.findByEmail(user.email); + const dbUser = await this.usersService.findUserByCognitoId(request.user.sub); console.log(dbUser); request.currentUser = dbUser; } diff --git a/apps/backend/src/migrations/1769189327767-AddUserPoolId.ts b/apps/backend/src/migrations/1769189327767-AddUserPoolId.ts new file mode 100644 index 00000000..379d0506 --- /dev/null +++ b/apps/backend/src/migrations/1769189327767-AddUserPoolId.ts @@ -0,0 +1,18 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddUserPoolId1769189327767 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE users + ADD COLUMN IF NOT EXISTS user_cognito_sub VARCHAR(255) NOT NULL DEFAULT '';` + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE users DROP COLUMN IF EXISTS user_cognito_sub;` + ); + } + +} diff --git a/apps/backend/src/users/user.entity.ts b/apps/backend/src/users/user.entity.ts index 746484ce..4481b22d 100644 --- a/apps/backend/src/users/user.entity.ts +++ b/apps/backend/src/users/user.entity.ts @@ -38,6 +38,14 @@ export class User { }) phone: string; + @Column({ + type: 'varchar', + length: 255, + name: 'user_cognito_sub', + default: '', + }) + userCognitoSub: string; + @ManyToMany(() => Pantry, (pantry) => pantry.volunteers) @JoinTable({ name: 'volunteer_assignments', diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 5d4e359d..0c57f3ea 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -138,4 +138,12 @@ export class UsersService { volunteer.pantries = [...volunteer.pantries, ...newPantries]; return this.repo.save(volunteer); } -} + + async findUserByCognitoId(cognitoId: string): Promise { + const user = await this.repo.findOneBy({ userCognitoSub: cognitoId }); + if (!user) { + throw new NotFoundException(`User with cognitoId ${cognitoId} not found`); + } + return user; + } +} \ No newline at end of file From fe466d58b76bc586392f80a640a731f2b385b720 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Fri, 23 Jan 2026 12:51:45 -0500 Subject: [PATCH 19/22] prettier --- apps/backend/src/auth/jwt.strategy.ts | 4 +-- .../interceptors/current-user.interceptor.ts | 4 ++- .../migrations/1769189327767-AddUserPoolId.ts | 26 +++++++++---------- apps/backend/src/users/users.service.ts | 2 +- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index 8e040e81..57df6367 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -8,9 +8,7 @@ import { AuthService } from './auth.service'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { - constructor( - private usersService: UsersService, - ) { + constructor(private usersService: UsersService) { const cognitoAuthority = `https://cognito-idp.${CognitoAuthConfig.region}.amazonaws.com/${CognitoAuthConfig.userPoolId}`; super({ diff --git a/apps/backend/src/interceptors/current-user.interceptor.ts b/apps/backend/src/interceptors/current-user.interceptor.ts index d395b47a..f5682ca6 100644 --- a/apps/backend/src/interceptors/current-user.interceptor.ts +++ b/apps/backend/src/interceptors/current-user.interceptor.ts @@ -18,7 +18,9 @@ export class CurrentUserInterceptor implements NestInterceptor { const request = context.switchToHttp().getRequest(); if (request.user) { - const dbUser = await this.usersService.findUserByCognitoId(request.user.sub); + const dbUser = await this.usersService.findUserByCognitoId( + request.user.sub, + ); console.log(dbUser); request.currentUser = dbUser; } diff --git a/apps/backend/src/migrations/1769189327767-AddUserPoolId.ts b/apps/backend/src/migrations/1769189327767-AddUserPoolId.ts index 379d0506..7763af07 100644 --- a/apps/backend/src/migrations/1769189327767-AddUserPoolId.ts +++ b/apps/backend/src/migrations/1769189327767-AddUserPoolId.ts @@ -1,18 +1,16 @@ -import { MigrationInterface, QueryRunner } from "typeorm"; +import { MigrationInterface, QueryRunner } from 'typeorm'; export class AddUserPoolId1769189327767 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE users + ADD COLUMN IF NOT EXISTS user_cognito_sub VARCHAR(255) NOT NULL DEFAULT '';`, + ); + } - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE users - ADD COLUMN IF NOT EXISTS user_cognito_sub VARCHAR(255) NOT NULL DEFAULT '';` - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE users DROP COLUMN IF EXISTS user_cognito_sub;` - ); - } - + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE users DROP COLUMN IF EXISTS user_cognito_sub;`, + ); + } } diff --git a/apps/backend/src/users/users.service.ts b/apps/backend/src/users/users.service.ts index 0c57f3ea..21b31b05 100644 --- a/apps/backend/src/users/users.service.ts +++ b/apps/backend/src/users/users.service.ts @@ -146,4 +146,4 @@ export class UsersService { } return user; } -} \ No newline at end of file +} From 3267bb5c2ecb25679d309239b9064fc0b42f9c38 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 25 Jan 2026 19:44:02 -0500 Subject: [PATCH 20/22] Added requested changes --- apps/backend/src/app.module.ts | 10 +- .../backend/src/auth/jwt-payload.interface.ts | 9 + apps/backend/src/auth/jwt.strategy.ts | 15 +- apps/backend/src/auth/roles.decorator.ts | 2 + apps/backend/src/auth/roles.guard.ts | 23 +- apps/backend/src/config/typeorm.ts | 2 +- .../src/foodRequests/request.controller.ts | 4 - .../src/pantries/pantries.controller.ts | 5 +- .../frontend/src/components/signOutButton.tsx | 2 + apps/frontend/src/containers/landingPage.tsx | 6 - package.json | 1 + yarn.lock | 1743 +++++++++-------- 12 files changed, 1026 insertions(+), 796 deletions(-) create mode 100644 apps/backend/src/auth/jwt-payload.interface.ts diff --git a/apps/backend/src/app.module.ts b/apps/backend/src/app.module.ts index 3c0ce87a..60901567 100644 --- a/apps/backend/src/app.module.ts +++ b/apps/backend/src/app.module.ts @@ -14,6 +14,8 @@ import { ManufacturerModule } from './foodManufacturers/manufacturer.module'; import { DonationModule } from './donations/donations.module'; import { DonationItemsModule } from './donationItems/donationItems.module'; import { AllocationModule } from './allocations/allocations.module'; +import { APP_GUARD } from '@nestjs/core'; +import { RolesGuard } from './auth/roles.guard'; @Module({ imports: [ @@ -40,6 +42,12 @@ import { AllocationModule } from './allocations/allocations.module'; AllocationModule, ], controllers: [AppController], - providers: [AppService], + providers: [ + AppService, + { + provide: APP_GUARD, + useClass: RolesGuard, + }, + ], }) export class AppModule {} diff --git a/apps/backend/src/auth/jwt-payload.interface.ts b/apps/backend/src/auth/jwt-payload.interface.ts new file mode 100644 index 00000000..4134cc5a --- /dev/null +++ b/apps/backend/src/auth/jwt-payload.interface.ts @@ -0,0 +1,9 @@ +export interface CognitoJwtPayload { + sub: string; + email?: string; + username?: string; + aud?: string; + iss?: string; + exp?: number; + iat?: number; +} \ No newline at end of file diff --git a/apps/backend/src/auth/jwt.strategy.ts b/apps/backend/src/auth/jwt.strategy.ts index 57df6367..979897db 100644 --- a/apps/backend/src/auth/jwt.strategy.ts +++ b/apps/backend/src/auth/jwt.strategy.ts @@ -1,10 +1,11 @@ -import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { passportJwtSecret } from 'jwks-rsa'; import { ExtractJwt, Strategy } from 'passport-jwt'; import { UsersService } from '../users/users.service'; import CognitoAuthConfig from './aws-exports'; -import { AuthService } from './auth.service'; +import { CognitoJwtPayload } from './jwt-payload.interface'; +import { User } from '../users/user.entity'; @Injectable() export class JwtStrategy extends PassportStrategy(Strategy) { @@ -14,21 +15,23 @@ export class JwtStrategy extends PassportStrategy(Strategy) { super({ jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), ignoreExpiration: false, - _audience: CognitoAuthConfig.userPoolClientId, + audience: CognitoAuthConfig.userPoolClientId, issuer: cognitoAuthority, algorithms: ['RS256'], secretOrKeyProvider: passportJwtSecret({ cache: true, rateLimit: true, jwksRequestsPerMinute: 5, - jwksUri: cognitoAuthority + '/.well-known/jwks.json', + jwksUri: `${cognitoAuthority}/.well-known/jwks.json`, }), }); } - async validate(payload) { + // This function is natively called when we validate a JWT token + // Afer confirming that our jwt is valid and our payload is signed, + // we use the sub field in the payload to find the user in our database + async validate(payload: CognitoJwtPayload): Promise { const dbUser = await this.usersService.findUserByCognitoId(payload.sub); - console.log('Database user retrieved:', dbUser); return dbUser; } } diff --git a/apps/backend/src/auth/roles.decorator.ts b/apps/backend/src/auth/roles.decorator.ts index a28701d2..fb7eeb91 100644 --- a/apps/backend/src/auth/roles.decorator.ts +++ b/apps/backend/src/auth/roles.decorator.ts @@ -1,5 +1,7 @@ import { SetMetadata } from '@nestjs/common'; import { Role } from '../users/types'; +// Key used to store roles metadata export const ROLES_KEY = 'roles'; +// Custom decorator to set roles metadata on route handlers for proper parsing by RolesGuard export const Roles = (...roles: Role[]) => SetMetadata(ROLES_KEY, roles); diff --git a/apps/backend/src/auth/roles.guard.ts b/apps/backend/src/auth/roles.guard.ts index b2e71324..2dd54868 100644 --- a/apps/backend/src/auth/roles.guard.ts +++ b/apps/backend/src/auth/roles.guard.ts @@ -3,22 +3,35 @@ import { Reflector } from '@nestjs/core'; import { Role } from '../users/types'; import { ROLES_KEY } from './roles.decorator'; +// Guard to enforce role-based access control on route handlers +// Applies logic to get us our user, and compare it with the required roles +// Interacts with the metadata that we attach in the @Roles() decorator @Injectable() export class RolesGuard implements CanActivate { constructor(private reflector: Reflector) {} + // If this returns false, Nest will deny access to the route handler + // Automatically throwing a Forbidden Exception (403 status code) canActivate(context: ExecutionContext): boolean { + // Look for the metadata we set with the @Roles() decorator + // Checks in the route handler, then the controller, and makes it undefined if nothing found + // Routes take priority over controllers in terms of overriding const requiredRoles = this.reflector.getAllAndOverride(ROLES_KEY, [ - context.getHandler(), - context.getClass(), + context.getHandler(), // method-level + context.getClass(), // controller-level ]); - if (!requiredRoles) { + if (!requiredRoles || requiredRoles.length === 0) { return true; } - const { user } = context.switchToHttp().getRequest(); + const request = context.switchToHttp().getRequest(); + const user = request.user; - return requiredRoles.some((role) => user.role === role); + if (!user || !user.role) { + return false; + } + + return requiredRoles.includes(user.role); } } diff --git a/apps/backend/src/config/typeorm.ts b/apps/backend/src/config/typeorm.ts index d1de2d1f..a15ced74 100644 --- a/apps/backend/src/config/typeorm.ts +++ b/apps/backend/src/config/typeorm.ts @@ -47,8 +47,8 @@ const config = { ReviseTables1737522923066, UpdateUserRole1737816745912, UpdatePantriesTable1737906317154, - UpdateDonationColTypes1741708808976, UpdateDonations1738697216020, + UpdateDonationColTypes1741708808976, UpdatePantriesTable1738172265266, UpdatePantriesTable1739056029076, AssignmentsPantryIdNotUnique1758384669652, diff --git a/apps/backend/src/foodRequests/request.controller.ts b/apps/backend/src/foodRequests/request.controller.ts index f98b3b90..b71cbd8f 100644 --- a/apps/backend/src/foodRequests/request.controller.ts +++ b/apps/backend/src/foodRequests/request.controller.ts @@ -7,7 +7,6 @@ import { Body, UploadedFiles, UseInterceptors, - UseGuards, BadRequestException, NotFoundException, } from '@nestjs/common'; @@ -17,10 +16,8 @@ import { FoodRequest } from './request.entity'; import { AWSS3Service } from '../aws/aws-s3.service'; import { FilesInterceptor } from '@nestjs/platform-express'; import * as multer from 'multer'; -import { AuthGuard } from '@nestjs/passport'; import { Roles } from '../auth/roles.decorator'; import { Role } from '../users/types'; -import { RolesGuard } from '../auth/roles.guard'; import { OrdersService } from '../orders/order.service'; import { RequestSize } from './types'; import { OrderStatus } from '../orders/types'; @@ -28,7 +25,6 @@ import { OrderDetailsDto } from './dtos/order-details.dto'; @Controller('requests') // @UseInterceptors() -@UseGuards(RolesGuard) export class RequestsController { constructor( private requestsService: RequestsService, diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index fda6d732..d20e344c 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -5,14 +5,11 @@ import { Param, ParseIntPipe, Post, - UseGuards, } from '@nestjs/common'; import { Pantry } from './pantries.entity'; import { PantriesService } from './pantries.service'; -import { RolesGuard } from '../auth/roles.guard'; import { Role } from '../users/types'; import { Roles } from '../auth/roles.decorator'; -import { AuthGuard } from '@nestjs/passport'; import { ValidationPipe } from '@nestjs/common'; import { PantryApplicationDto } from './dtos/pantry-application.dto'; import { ApiBody } from '@nestjs/swagger'; @@ -27,7 +24,6 @@ import { import { Order } from '../orders/order.entity'; import { OrdersService } from '../orders/order.service'; -@UseGuards(AuthGuard('jwt'), RolesGuard) @Controller('pantries') export class PantriesController { constructor( @@ -221,6 +217,7 @@ export class PantriesController { return this.pantriesService.addPantry(pantryData); } + @Roles(Role.ADMIN) @Post('/approve/:pantryId') async approvePantry( @Param('pantryId', ParseIntPipe) pantryId: number, diff --git a/apps/frontend/src/components/signOutButton.tsx b/apps/frontend/src/components/signOutButton.tsx index 1467ed25..8b2596b5 100644 --- a/apps/frontend/src/components/signOutButton.tsx +++ b/apps/frontend/src/components/signOutButton.tsx @@ -1,3 +1,4 @@ +import apiClient from '@api/apiClient'; import { Button, ButtonProps } from '@chakra-ui/react'; import { signOut } from 'aws-amplify/auth'; import { useNavigate } from 'react-router-dom'; @@ -9,6 +10,7 @@ const SignOutButton: React.FC = (props) => { const handleSignOut = async () => { await signOut(); + apiClient.setAccessToken(undefined); navigate('/'); }; diff --git a/apps/frontend/src/containers/landingPage.tsx b/apps/frontend/src/containers/landingPage.tsx index 98bbd7ed..b6d55552 100644 --- a/apps/frontend/src/containers/landingPage.tsx +++ b/apps/frontend/src/containers/landingPage.tsx @@ -1,12 +1,6 @@ -import { Button } from '@chakra-ui/react'; import SignOutButton from '@components/signOutButton'; -import { signOut } from 'aws-amplify/auth'; const LandingPage: React.FC = () => { - const handleSignOut = async () => { - await signOut(); - }; - return ( <> Landing page diff --git a/package.json b/package.json index 3dca5a34..59ddecc7 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "@types/jest": "^29.4.0", "@types/multer": "^1.4.12", "@types/node": "^18.14.2", + "@types/passport-jwt": "^4.0.1", "@types/react": "^18.2.14", "@types/react-dom": "^18.2.6", "@typescript-eslint/eslint-plugin": "^8.23.0", diff --git a/yarn.lock b/yarn.lock index 0f6ccee4..6caf7885 100644 --- a/yarn.lock +++ b/yarn.lock @@ -112,10 +112,10 @@ "@zag-js/types" "1.31.1" "@zag-js/utils" "1.31.1" -"@aws-amplify/analytics@7.0.91": - version "7.0.91" - resolved "https://registry.yarnpkg.com/@aws-amplify/analytics/-/analytics-7.0.91.tgz#abd6550f0200df1ba9c0177d1f2c58f8b2c427b7" - integrity sha512-klLc2BH/R/7XrvW5Tuq6w6i/oFKKsQjPdz7iMPsIGgcQFJEpZxKEACTdd4tjTYlDEpu8e8g2rc9ItH/QEu0fnQ== +"@aws-amplify/analytics@7.0.92": + version "7.0.92" + resolved "https://registry.yarnpkg.com/@aws-amplify/analytics/-/analytics-7.0.92.tgz#a45bbeef4b3dc271132d3fc8085210624cc16cc6" + integrity sha512-W5n9CVa7uAMwDSfSZ9Ted8ypvRK8/zduLZOn7Ffwm7CDFQqPg2ccDsP4hbVWFJiExgaH13NC8l4vHIHLxMxtSQ== dependencies: "@aws-sdk/client-firehose" "3.723.0" "@aws-sdk/client-kinesis" "3.723.0" @@ -123,13 +123,13 @@ "@smithy/util-utf8" "2.0.0" tslib "^2.5.0" -"@aws-amplify/api-graphql@4.8.3": - version "4.8.3" - resolved "https://registry.yarnpkg.com/@aws-amplify/api-graphql/-/api-graphql-4.8.3.tgz#73f41c3733015b802b20fd7d8372428bb141698c" - integrity sha512-09CQzEwZIz8s9lrFc/WKUtKmLENp3pPVIen7a3ecHmGnA+ViogDefu1ef94XdwL2N8oI88qh49/tXIeoDLsOPw== +"@aws-amplify/api-graphql@4.8.4": + version "4.8.4" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-graphql/-/api-graphql-4.8.4.tgz#f6810cdd059fb40a421a4795d4e9079f0f12c21a" + integrity sha512-VYVLalN/apnh2dTe2qjc0iMcpHjs5eQur41Ya8VDE2i1Gyfuuf+TXL7Hmf9VhkaXzUPVUTJqjyZalE4FkcA0uA== dependencies: - "@aws-amplify/api-rest" "4.6.1" - "@aws-amplify/core" "6.15.1" + "@aws-amplify/api-rest" "4.6.2" + "@aws-amplify/core" "6.16.0" "@aws-amplify/data-schema" "^1.7.0" "@aws-sdk/types" "3.723.0" graphql "15.8.0" @@ -137,37 +137,37 @@ tslib "^2.5.0" uuid "^11.0.0" -"@aws-amplify/api-rest@4.6.1": - version "4.6.1" - resolved "https://registry.yarnpkg.com/@aws-amplify/api-rest/-/api-rest-4.6.1.tgz#dfc08337f3e7da3a6ba1c8ca91565428ba26baa9" - integrity sha512-bkw3OrlDyIBkFCnulQzgwWgGLEbUl9hNg4hypDuxVzZ26AvF8FRDv7joVk8Tip4mnsOCNk9z0h39HsVwDV+1dw== +"@aws-amplify/api-rest@4.6.2": + version "4.6.2" + resolved "https://registry.yarnpkg.com/@aws-amplify/api-rest/-/api-rest-4.6.2.tgz#6172b7342d265a21ca677f6f7138f51f20d98ce0" + integrity sha512-lEUCe8P9lZgTKZY9HxdI0sZiwZRvKFFQnU4gLioHbT0quQZ5xYr3gO3oBh1aPPK2WncIglrSlb/qZa/vbijH9A== dependencies: tslib "^2.5.0" -"@aws-amplify/api@6.3.22": - version "6.3.22" - resolved "https://registry.yarnpkg.com/@aws-amplify/api/-/api-6.3.22.tgz#0eadabdd8b78678261a316cd516552774e036810" - integrity sha512-Uw9/zaM+RmnvtW0LS29R1inWD3uRQ5yfJJJ4f95+trRSq5eD1AUogcpjU0dhEyx3INEIivL357d8VjIg8M9IfA== +"@aws-amplify/api@6.3.23": + version "6.3.23" + resolved "https://registry.yarnpkg.com/@aws-amplify/api/-/api-6.3.23.tgz#a5dfa9cdefe0a386cf5d59c93f0ca83760294c92" + integrity sha512-b+xOGQ/OQggZZ5NqkDM9UI5w281Gtp0ZELbUEEBa2jg4mk2U1Urpi8Sb2Stop9sOogElP4z+LQWB3T3c8/mpsQ== dependencies: - "@aws-amplify/api-graphql" "4.8.3" - "@aws-amplify/api-rest" "4.6.1" + "@aws-amplify/api-graphql" "4.8.4" + "@aws-amplify/api-rest" "4.6.2" "@aws-amplify/data-schema" "^1.7.0" rxjs "^7.8.1" tslib "^2.5.0" -"@aws-amplify/auth@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@aws-amplify/auth/-/auth-6.17.2.tgz#88d76dbc68495df43f7fe38b8d17af7b6f78143e" - integrity sha512-fnG6rwyJI7aBiTvOiZu/Id+HtlHS36H9b6pO4gk0suVIRs6aipMRrMV3nNPrOg43MXF8Dzh03KGvYYTuvwW8dA== +"@aws-amplify/auth@6.18.0": + version "6.18.0" + resolved "https://registry.yarnpkg.com/@aws-amplify/auth/-/auth-6.18.0.tgz#40409f789d60748029370afa98b4e6fb4f75da8f" + integrity sha512-m2ZHfEyN6xDEP5yC0KAYDS0CxtA9eaTpNm5LWPd1GbN/Qqwnzld7tagdc9HZViCkPkZy8Bnwlm9cw24wqQz8pQ== dependencies: "@aws-crypto/sha256-js" "5.2.0" "@smithy/types" "^3.3.0" tslib "^2.5.0" -"@aws-amplify/core@6.15.1": - version "6.15.1" - resolved "https://registry.yarnpkg.com/@aws-amplify/core/-/core-6.15.1.tgz#0534e5e412ab85e4045777b0f4cc9f3f64848887" - integrity sha512-d/A3TBKu6pC7oJvGt2lWExANdhy5A7us8PeQLfm6QWYARzpWvOnk2gC2YCl2KdmteC+xblwnRLogmlY3/3QROQ== +"@aws-amplify/core@6.16.0": + version "6.16.0" + resolved "https://registry.yarnpkg.com/@aws-amplify/core/-/core-6.16.0.tgz#d3a41d722a09b77d916f9397e5803ffc2652eecd" + integrity sha512-YpEtvdXcC06/j3PEsQiN/AYiJh3yLK5aPijFY1SbE0rgSLt9iPPalCOh65vDjybe7SW8qdIlctcR/rROMA88ag== dependencies: "@aws-crypto/sha256-js" "5.2.0" "@aws-sdk/types" "3.723.0" @@ -197,32 +197,32 @@ "@types/json-schema" "^7.0.15" rxjs "^7.8.1" -"@aws-amplify/datastore@5.1.3": - version "5.1.3" - resolved "https://registry.yarnpkg.com/@aws-amplify/datastore/-/datastore-5.1.3.tgz#d496da09e04e5ae01e18858fb4a92097173954a9" - integrity sha512-RxWGwRsQ6U9WR94YwXRUmVKRdfLwR6XNm+mtDpyMhqhd87XINGfLMV3omyTy1wmqn+JprWVHzAb9OfjgclAABQ== +"@aws-amplify/datastore@5.1.4": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@aws-amplify/datastore/-/datastore-5.1.4.tgz#b5d67fcf93d442d78db749b239048c7541950f33" + integrity sha512-bx4aJAPLGtGiaKzIqX3ZSZr/lYgSxyhgCbaN48IFCYMlnFZ67qR/y7XnbRBaqkhTTtYhIT1mALIVDq2Hfzgo7Q== dependencies: - "@aws-amplify/api" "6.3.22" - "@aws-amplify/api-graphql" "4.8.3" + "@aws-amplify/api" "6.3.23" + "@aws-amplify/api-graphql" "4.8.4" buffer "4.9.2" idb "5.0.6" immer "9.0.6" rxjs "^7.8.1" ulid "^2.3.0" -"@aws-amplify/notifications@2.0.91": - version "2.0.91" - resolved "https://registry.yarnpkg.com/@aws-amplify/notifications/-/notifications-2.0.91.tgz#b8b521efa014010601cf06018cb52fc282bb552e" - integrity sha512-TvxOSa0J5hGzhrK0aGyxBW789QKAJCt7nN7TgYHlvA7/QriheIYuY2va9JXqQ31QnfQmo6Bdu0bcoEv6Fq8Q+w== +"@aws-amplify/notifications@2.0.92": + version "2.0.92" + resolved "https://registry.yarnpkg.com/@aws-amplify/notifications/-/notifications-2.0.92.tgz#3d9731e7797153ef0decc5100cadf3b6d14c46e7" + integrity sha512-RSG/IpHhKJHrCTceLeg5F0piMDcQRt6Dm8NQJmTZO2619nIv2bSQsOfrhlElgG3HC4thtEgJzipnJA+XGpQFDA== dependencies: "@aws-sdk/types" "3.723.0" lodash "^4.17.21" tslib "^2.5.0" -"@aws-amplify/storage@6.11.1": - version "6.11.1" - resolved "https://registry.yarnpkg.com/@aws-amplify/storage/-/storage-6.11.1.tgz#8103b2eb3ab32b7a4d20a0f5985269e164df09b7" - integrity sha512-E0aoRNH35GS+wJSHeKyHw/aNlcDUniKiXPeWzeHr/4cAfE4A9fp4sp8NKoMfkJjoLx2M6T6BUuzp8Z3PTjQZHw== +"@aws-amplify/storage@6.12.0": + version "6.12.0" + resolved "https://registry.yarnpkg.com/@aws-amplify/storage/-/storage-6.12.0.tgz#295293975c04fe03646a4a3d9ba262620b4bc980" + integrity sha512-3Y0myIgsaQ93xwGSbN+s0aXZG7whx2BlGSZAptU5jpAVgR0uYDrYCk3w3ANRXBVU0j9WuwqMDaeteXF1xhFq2w== dependencies: "@aws-sdk/types" "3.723.0" "@smithy/md5-js" "2.0.7" @@ -353,44 +353,44 @@ tslib "^1.11.1" "@aws-sdk/client-cognito-identity-provider@^3.410.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.971.0.tgz#f2859cd529fe647f40fcd771d6b86fcd02b5d694" - integrity sha512-9A5Vue2Q0DYZ6eTty+zv3scsxJoQQcPDezHabINgJ3eZHNmfaVaIVcpGjPLGkrRYU/EGqQWl3kn8dwmDkPW88g== + version "3.975.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity-provider/-/client-cognito-identity-provider-3.975.0.tgz#abc7f6e76f98ce03516055d6cf2755d24808db5e" + integrity sha512-iRH8niCd7PdmJofnvrZTS+jBHCZ6+Ent/L0Yc0OVhcmGfSfpOOdhRhpkj9nFiOkd5VPBcKtodk3eveWKyPpHvQ== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.970.0" - "@aws-sdk/credential-provider-node" "3.971.0" - "@aws-sdk/middleware-host-header" "3.969.0" - "@aws-sdk/middleware-logger" "3.969.0" - "@aws-sdk/middleware-recursion-detection" "3.969.0" - "@aws-sdk/middleware-user-agent" "3.970.0" - "@aws-sdk/region-config-resolver" "3.969.0" - "@aws-sdk/types" "3.969.0" - "@aws-sdk/util-endpoints" "3.970.0" - "@aws-sdk/util-user-agent-browser" "3.969.0" - "@aws-sdk/util-user-agent-node" "3.971.0" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/credential-provider-node" "^3.972.1" + "@aws-sdk/middleware-host-header" "^3.972.1" + "@aws-sdk/middleware-logger" "^3.972.1" + "@aws-sdk/middleware-recursion-detection" "^3.972.1" + "@aws-sdk/middleware-user-agent" "^3.972.2" + "@aws-sdk/region-config-resolver" "^3.972.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.1" + "@aws-sdk/util-user-agent-node" "^3.972.1" "@smithy/config-resolver" "^4.4.6" - "@smithy/core" "^3.20.6" + "@smithy/core" "^3.21.1" "@smithy/fetch-http-handler" "^5.3.9" "@smithy/hash-node" "^4.2.8" "@smithy/invalid-dependency" "^4.2.8" "@smithy/middleware-content-length" "^4.2.8" - "@smithy/middleware-endpoint" "^4.4.7" - "@smithy/middleware-retry" "^4.4.23" + "@smithy/middleware-endpoint" "^4.4.11" + "@smithy/middleware-retry" "^4.4.27" "@smithy/middleware-serde" "^4.2.9" "@smithy/middleware-stack" "^4.2.8" "@smithy/node-config-provider" "^4.3.8" "@smithy/node-http-handler" "^4.4.8" "@smithy/protocol-http" "^5.3.8" - "@smithy/smithy-client" "^4.10.8" + "@smithy/smithy-client" "^4.10.12" "@smithy/types" "^4.12.0" "@smithy/url-parser" "^4.2.8" "@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.22" - "@smithy/util-defaults-mode-node" "^4.2.25" + "@smithy/util-defaults-mode-browser" "^4.3.26" + "@smithy/util-defaults-mode-node" "^4.2.29" "@smithy/util-endpoints" "^3.2.8" "@smithy/util-middleware" "^4.2.8" "@smithy/util-retry" "^4.2.8" @@ -543,33 +543,33 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.735.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.971.0.tgz#2e12e17e75b186d563c2e203fb4b213b3a973942" - integrity sha512-BBUne390fKa4C4QvZlUZ5gKcu+Uyid4IyQ20N4jl0vS7SK2xpfXlJcgKqPW5ts6kx6hWTQBk6sH5Lf12RvuJxg== + version "3.975.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.975.0.tgz#58a7b3c7097a73b2ee37c3e6eb534078ddf49ba1" + integrity sha512-aF1M/iMD29BPcpxjqoym0YFa4WR9Xie1/IhVumwOGH6TB45DaqYO7vLwantDBcYNRn/cZH6DFHksO7RmwTFBhw== dependencies: "@aws-crypto/sha1-browser" "5.2.0" "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.970.0" - "@aws-sdk/credential-provider-node" "3.971.0" - "@aws-sdk/middleware-bucket-endpoint" "3.969.0" - "@aws-sdk/middleware-expect-continue" "3.969.0" - "@aws-sdk/middleware-flexible-checksums" "3.971.0" - "@aws-sdk/middleware-host-header" "3.969.0" - "@aws-sdk/middleware-location-constraint" "3.969.0" - "@aws-sdk/middleware-logger" "3.969.0" - "@aws-sdk/middleware-recursion-detection" "3.969.0" - "@aws-sdk/middleware-sdk-s3" "3.970.0" - "@aws-sdk/middleware-ssec" "3.971.0" - "@aws-sdk/middleware-user-agent" "3.970.0" - "@aws-sdk/region-config-resolver" "3.969.0" - "@aws-sdk/signature-v4-multi-region" "3.970.0" - "@aws-sdk/types" "3.969.0" - "@aws-sdk/util-endpoints" "3.970.0" - "@aws-sdk/util-user-agent-browser" "3.969.0" - "@aws-sdk/util-user-agent-node" "3.971.0" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/credential-provider-node" "^3.972.1" + "@aws-sdk/middleware-bucket-endpoint" "^3.972.1" + "@aws-sdk/middleware-expect-continue" "^3.972.1" + "@aws-sdk/middleware-flexible-checksums" "^3.972.1" + "@aws-sdk/middleware-host-header" "^3.972.1" + "@aws-sdk/middleware-location-constraint" "^3.972.1" + "@aws-sdk/middleware-logger" "^3.972.1" + "@aws-sdk/middleware-recursion-detection" "^3.972.1" + "@aws-sdk/middleware-sdk-s3" "^3.972.2" + "@aws-sdk/middleware-ssec" "^3.972.1" + "@aws-sdk/middleware-user-agent" "^3.972.2" + "@aws-sdk/region-config-resolver" "^3.972.1" + "@aws-sdk/signature-v4-multi-region" "3.972.0" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.1" + "@aws-sdk/util-user-agent-node" "^3.972.1" "@smithy/config-resolver" "^4.4.6" - "@smithy/core" "^3.20.6" + "@smithy/core" "^3.21.1" "@smithy/eventstream-serde-browser" "^4.2.8" "@smithy/eventstream-serde-config-resolver" "^4.3.8" "@smithy/eventstream-serde-node" "^4.2.8" @@ -580,21 +580,21 @@ "@smithy/invalid-dependency" "^4.2.8" "@smithy/md5-js" "^4.2.8" "@smithy/middleware-content-length" "^4.2.8" - "@smithy/middleware-endpoint" "^4.4.7" - "@smithy/middleware-retry" "^4.4.23" + "@smithy/middleware-endpoint" "^4.4.11" + "@smithy/middleware-retry" "^4.4.27" "@smithy/middleware-serde" "^4.2.9" "@smithy/middleware-stack" "^4.2.8" "@smithy/node-config-provider" "^4.3.8" "@smithy/node-http-handler" "^4.4.8" "@smithy/protocol-http" "^5.3.8" - "@smithy/smithy-client" "^4.10.8" + "@smithy/smithy-client" "^4.10.12" "@smithy/types" "^4.12.0" "@smithy/url-parser" "^4.2.8" "@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.22" - "@smithy/util-defaults-mode-node" "^4.2.25" + "@smithy/util-defaults-mode-browser" "^4.3.26" + "@smithy/util-defaults-mode-node" "^4.2.29" "@smithy/util-endpoints" "^3.2.8" "@smithy/util-middleware" "^4.2.8" "@smithy/util-retry" "^4.2.8" @@ -692,44 +692,44 @@ "@smithy/util-utf8" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.971.0.tgz#0f81795a66ce4369676489f219d05472c05f49e7" - integrity sha512-Xx+w6DQqJxDdymYyIxyKJnRzPvVJ4e/Aw0czO7aC9L/iraaV7AG8QtRe93OGW6aoHSh72CIiinnpJJfLsQqP4g== +"@aws-sdk/client-sso@3.974.0": + version "3.974.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.974.0.tgz#48b748556c14117106a858730aa9bddc638a78c7" + integrity sha512-ci+GiM0c4ULo4D79UMcY06LcOLcfvUfiyt8PzNY0vbt5O8BfCPYf4QomwVgkNcLLCYmroO4ge2Yy1EsLUlcD6g== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.970.0" - "@aws-sdk/middleware-host-header" "3.969.0" - "@aws-sdk/middleware-logger" "3.969.0" - "@aws-sdk/middleware-recursion-detection" "3.969.0" - "@aws-sdk/middleware-user-agent" "3.970.0" - "@aws-sdk/region-config-resolver" "3.969.0" - "@aws-sdk/types" "3.969.0" - "@aws-sdk/util-endpoints" "3.970.0" - "@aws-sdk/util-user-agent-browser" "3.969.0" - "@aws-sdk/util-user-agent-node" "3.971.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/middleware-host-header" "^3.972.1" + "@aws-sdk/middleware-logger" "^3.972.1" + "@aws-sdk/middleware-recursion-detection" "^3.972.1" + "@aws-sdk/middleware-user-agent" "^3.972.1" + "@aws-sdk/region-config-resolver" "^3.972.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.1" + "@aws-sdk/util-user-agent-node" "^3.972.1" "@smithy/config-resolver" "^4.4.6" - "@smithy/core" "^3.20.6" + "@smithy/core" "^3.21.0" "@smithy/fetch-http-handler" "^5.3.9" "@smithy/hash-node" "^4.2.8" "@smithy/invalid-dependency" "^4.2.8" "@smithy/middleware-content-length" "^4.2.8" - "@smithy/middleware-endpoint" "^4.4.7" - "@smithy/middleware-retry" "^4.4.23" + "@smithy/middleware-endpoint" "^4.4.10" + "@smithy/middleware-retry" "^4.4.26" "@smithy/middleware-serde" "^4.2.9" "@smithy/middleware-stack" "^4.2.8" "@smithy/node-config-provider" "^4.3.8" "@smithy/node-http-handler" "^4.4.8" "@smithy/protocol-http" "^5.3.8" - "@smithy/smithy-client" "^4.10.8" + "@smithy/smithy-client" "^4.10.11" "@smithy/types" "^4.12.0" "@smithy/url-parser" "^4.2.8" "@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.22" - "@smithy/util-defaults-mode-node" "^4.2.25" + "@smithy/util-defaults-mode-browser" "^4.3.25" + "@smithy/util-defaults-mode-node" "^4.2.28" "@smithy/util-endpoints" "^3.2.8" "@smithy/util-middleware" "^4.2.8" "@smithy/util-retry" "^4.2.8" @@ -799,13 +799,13 @@ fast-xml-parser "4.4.1" tslib "^2.6.2" -"@aws-sdk/core@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.970.0.tgz#3dbd978d39de680b03bf00354032fec7df397f3b" - integrity sha512-klpzObldOq8HXzDjDlY6K8rMhYZU6mXRz6P9F9N+tWnjoYFfeBMra8wYApydElTUYQKP1O7RLHwH1OKFfKcqIA== +"@aws-sdk/core@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.972.0.tgz#20d9c47fc3ad1bed4c1866eb6f6488bcc5d31754" + integrity sha512-nEeUW2M9F+xdIaD98F5MBcQ4ITtykj3yKbgFZ6J0JtL3bq+Z90szQ6Yy8H/BLPYXTs3V4n9ifnBo8cprRDiE6A== dependencies: - "@aws-sdk/types" "3.969.0" - "@aws-sdk/xml-builder" "3.969.0" + "@aws-sdk/types" "3.972.0" + "@aws-sdk/xml-builder" "3.972.0" "@smithy/core" "^3.20.6" "@smithy/node-config-provider" "^4.3.8" "@smithy/property-provider" "^4.2.8" @@ -818,10 +818,29 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/crc64-nvme@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme/-/crc64-nvme-3.969.0.tgz#1c7d9ffb550c26d26376e3e6129ad9f77c473802" - integrity sha512-IGNkP54HD3uuLnrPCYsv3ZD478UYq+9WwKrIVJ9Pdi3hxPg8562CH3ZHf8hEgfePN31P9Kj+Zu9kq2Qcjjt61A== +"@aws-sdk/core@^3.973.0", "@aws-sdk/core@^3.973.1": + version "3.973.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.973.1.tgz#adcfb29776db599e03b6111d8228b3d1e6400358" + integrity sha512-Ocubx42QsMyVs9ANSmFpRm0S+hubWljpPLjOi9UFrtcnVJjrVJTzQ51sN0e5g4e8i8QZ7uY73zosLmgYL7kZTQ== + dependencies: + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/xml-builder" "^3.972.1" + "@smithy/core" "^3.21.1" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/property-provider" "^4.2.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/signature-v4" "^5.3.8" + "@smithy/smithy-client" "^4.10.12" + "@smithy/types" "^4.12.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/crc64-nvme@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/crc64-nvme/-/crc64-nvme-3.972.0.tgz#c5e6d14428c9fb4e6bb0646b73a0fa68e6007e24" + integrity sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw== dependencies: "@smithy/types" "^4.12.0" tslib "^2.6.2" @@ -837,13 +856,13 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.970.0.tgz#c8d97b001d896db418b905cb1f3564a855f73d44" - integrity sha512-rtVzXzEtAfZBfh+lq3DAvRar4c3jyptweOAJR2DweyXx71QSMY+O879hjpMwES7jl07a3O1zlnFIDo4KP/96kQ== +"@aws-sdk/credential-provider-env@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.1.tgz#203a02b4a9d31418a1db5dff369a2d65aa67c872" + integrity sha512-/etNHqnx96phy/SjI0HRC588o4vKH5F0xfkZ13yAATV7aNrb+5gYGNE6ePWafP+FuZ3HkULSSlJFj0AxgrAqYw== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/types" "^3.973.0" "@smithy/property-provider" "^4.2.8" "@smithy/types" "^4.12.0" tslib "^2.6.2" @@ -864,18 +883,18 @@ "@smithy/util-stream" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.970.0.tgz#e4f17105d9a7908342defe91e2c616db9ea646be" - integrity sha512-CjDbWL7JxjLc9ZxQilMusWSw05yRvUJKRpz59IxDpWUnSMHC9JMMUUkOy5Izk8UAtzi6gupRWArp4NG4labt9Q== +"@aws-sdk/credential-provider-http@^3.972.1": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.2.tgz#40c00a344b4cf0d9a4e20a4d18c62bc6e611dde9" + integrity sha512-mXgdaUfe5oM+tWKyeZ7Vh/iQ94FrkMky1uuzwTOmFADiRcSk5uHy/e3boEFedXiT/PRGzgBmqvJVK4F6lUISCg== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/types" "^3.973.0" "@smithy/fetch-http-handler" "^5.3.9" "@smithy/node-http-handler" "^4.4.8" "@smithy/property-provider" "^4.2.8" "@smithy/protocol-http" "^5.3.8" - "@smithy/smithy-client" "^4.10.8" + "@smithy/smithy-client" "^4.10.12" "@smithy/types" "^4.12.0" "@smithy/util-stream" "^4.5.10" tslib "^2.6.2" @@ -898,34 +917,34 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.971.0.tgz#470055fe0d575ab7edeadc0ff6adc127d2f75166" - integrity sha512-c0TGJG4xyfTZz3SInXfGU8i5iOFRrLmy4Bo7lMyH+IpngohYMYGYl61omXqf2zdwMbDv+YJ9AviQTcCaEUKi8w== - dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/credential-provider-env" "3.970.0" - "@aws-sdk/credential-provider-http" "3.970.0" - "@aws-sdk/credential-provider-login" "3.971.0" - "@aws-sdk/credential-provider-process" "3.970.0" - "@aws-sdk/credential-provider-sso" "3.971.0" - "@aws-sdk/credential-provider-web-identity" "3.971.0" - "@aws-sdk/nested-clients" "3.971.0" - "@aws-sdk/types" "3.969.0" +"@aws-sdk/credential-provider-ini@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.1.tgz#63a242d11fe0ae0c159d97ed2ab9a8d7a3db6d4c" + integrity sha512-OdbJA3v+XlNDsrYzNPRUwr8l7gw1r/nR8l4r96MDzSBDU8WEo8T6C06SvwaXR8SpzsjO3sq5KMP86wXWg7Rj4g== + dependencies: + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/credential-provider-env" "^3.972.1" + "@aws-sdk/credential-provider-http" "^3.972.1" + "@aws-sdk/credential-provider-login" "^3.972.1" + "@aws-sdk/credential-provider-process" "^3.972.1" + "@aws-sdk/credential-provider-sso" "^3.972.1" + "@aws-sdk/credential-provider-web-identity" "^3.972.1" + "@aws-sdk/nested-clients" "3.974.0" + "@aws-sdk/types" "^3.973.0" "@smithy/credential-provider-imds" "^4.2.8" "@smithy/property-provider" "^4.2.8" "@smithy/shared-ini-file-loader" "^4.4.3" "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-login@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.971.0.tgz#ac9c405402d235ab7da134b53190fad78d4fe9d9" - integrity sha512-yhbzmDOsk0RXD3rTPhZra4AWVnVAC4nFWbTp+sUty1hrOPurUmhuz8bjpLqYTHGnlMbJp+UqkQONhS2+2LzW2g== +"@aws-sdk/credential-provider-login@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.1.tgz#ea0bba6fd40696dd0e065f3817b41627abd894a8" + integrity sha512-CccqDGL6ZrF3/EFWZefvKW7QwwRdxlHUO8NVBKNVcNq6womrPDvqB6xc9icACtE0XB0a7PLoSTkAg8bQVkTO2w== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/nested-clients" "3.971.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/nested-clients" "3.974.0" + "@aws-sdk/types" "^3.973.0" "@smithy/property-provider" "^4.2.8" "@smithy/protocol-http" "^5.3.8" "@smithy/shared-ini-file-loader" "^4.4.3" @@ -950,18 +969,18 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.971.0.tgz#817fe3b4730837fb970d7465106ec5b764c8dc8e" - integrity sha512-epUJBAKivtJqalnEBRsYIULKYV063o/5mXNJshZfyvkAgNIzc27CmmKRXTN4zaNOZg8g/UprFp25BGsi19x3nQ== - dependencies: - "@aws-sdk/credential-provider-env" "3.970.0" - "@aws-sdk/credential-provider-http" "3.970.0" - "@aws-sdk/credential-provider-ini" "3.971.0" - "@aws-sdk/credential-provider-process" "3.970.0" - "@aws-sdk/credential-provider-sso" "3.971.0" - "@aws-sdk/credential-provider-web-identity" "3.971.0" - "@aws-sdk/types" "3.969.0" +"@aws-sdk/credential-provider-node@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.1.tgz#6cdb367e2828d9b9ce34b69f97fd4eef4a514232" + integrity sha512-DwXPk9GfuU/xG9tmCyXFVkCr6X3W8ZCoL5Ptb0pbltEx1/LCcg7T+PBqDlPiiinNCD6ilIoMJDWsnJ8ikzZA7Q== + dependencies: + "@aws-sdk/credential-provider-env" "^3.972.1" + "@aws-sdk/credential-provider-http" "^3.972.1" + "@aws-sdk/credential-provider-ini" "^3.972.1" + "@aws-sdk/credential-provider-process" "^3.972.1" + "@aws-sdk/credential-provider-sso" "^3.972.1" + "@aws-sdk/credential-provider-web-identity" "^3.972.1" + "@aws-sdk/types" "^3.973.0" "@smithy/credential-provider-imds" "^4.2.8" "@smithy/property-provider" "^4.2.8" "@smithy/shared-ini-file-loader" "^4.4.3" @@ -980,13 +999,13 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.970.0.tgz#b4eddf6a544bf174b79f009a21ffea0e74cb8c12" - integrity sha512-0XeT8OaT9iMA62DFV9+m6mZfJhrD0WNKf4IvsIpj2Z7XbaYfz3CoDDvNoALf3rPY9NzyMHgDxOspmqdvXP00mw== +"@aws-sdk/credential-provider-process@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.1.tgz#9eb226dea12a1a9e4a14534946961c82c49cecdf" + integrity sha512-bi47Zigu3692SJwdBvo8y1dEwE6B61stCwCFnuRWJVTfiM84B+VTSCV661CSWJmIZzmcy7J5J3kWyxL02iHj0w== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/types" "^3.973.0" "@smithy/property-provider" "^4.2.8" "@smithy/shared-ini-file-loader" "^4.4.3" "@smithy/types" "^4.12.0" @@ -1006,15 +1025,15 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.971.0.tgz#b67232e3055dcc798b4aeeb75364a3d548aee4d8" - integrity sha512-dY0hMQ7dLVPQNJ8GyqXADxa9w5wNfmukgQniLxGVn+dMRx3YLViMp5ZpTSQpFhCWNF0oKQrYAI5cHhUJU1hETw== +"@aws-sdk/credential-provider-sso@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.1.tgz#c5a461fb714668b9e1ce268ff4da174bf1e1b45e" + integrity sha512-dLZVNhM7wSgVUFsgVYgI5hb5Z/9PUkT46pk/SHrSmUqfx6YDvoV4YcPtaiRqviPpEGGiRtdQMEadyOKIRqulUQ== dependencies: - "@aws-sdk/client-sso" "3.971.0" - "@aws-sdk/core" "3.970.0" - "@aws-sdk/token-providers" "3.971.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/client-sso" "3.974.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/token-providers" "3.974.0" + "@aws-sdk/types" "^3.973.0" "@smithy/property-provider" "^4.2.8" "@smithy/shared-ini-file-loader" "^4.4.3" "@smithy/types" "^4.12.0" @@ -1031,66 +1050,66 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.971.0.tgz#6d27da9193835ddd3c2c681827f9ed96a706e534" - integrity sha512-F1AwfNLr7H52T640LNON/h34YDiMuIqW/ZreGzhRR6vnFGaSPtNSKAKB2ssAMkLM8EVg8MjEAYD3NCUiEo+t/w== +"@aws-sdk/credential-provider-web-identity@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.1.tgz#e85aba05a81a1998acc1c24c49baa8b733ac392a" + integrity sha512-YMDeYgi0u687Ay0dAq/pFPKuijrlKTgsaB/UATbxCs/FzZfMiG4If5ksywHmmW7MiYUF8VVv+uou3TczvLrN4w== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/nested-clients" "3.971.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/nested-clients" "3.974.0" + "@aws-sdk/types" "^3.973.0" "@smithy/property-provider" "^4.2.8" "@smithy/shared-ini-file-loader" "^4.4.3" "@smithy/types" "^4.12.0" tslib "^2.6.2" "@aws-sdk/lib-storage@^3.735.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.971.0.tgz#92761be9ccf0d09b639b9e421bb72df97b0cc68b" - integrity sha512-THTCXZiYjuAU2kPD8rIuvtYRT83BxEzbv4uayPlQJ8v5bybLTYDbNEbpfZGilyAqUAdSGTMOkoLu9ROryCJ3/g== + version "3.975.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/lib-storage/-/lib-storage-3.975.0.tgz#3be458b88ad64e1987633ca441b8135e4c7f34c4" + integrity sha512-F6vrnZ3F7oqr3oONCIpx+uZDTwXWfh8sBoNNJollDn5pIn7TI+R+7WxVIXAMq/JWLXE6N8T3M6ogWk4Y4JWPPw== dependencies: "@smithy/abort-controller" "^4.2.8" - "@smithy/middleware-endpoint" "^4.4.7" - "@smithy/smithy-client" "^4.10.8" + "@smithy/middleware-endpoint" "^4.4.11" + "@smithy/smithy-client" "^4.10.12" buffer "5.6.0" events "3.3.0" stream-browserify "3.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.969.0.tgz#806dd79c406a689332c6f8b3d9b948eb8dae9bb8" - integrity sha512-MlbrlixtkTVhYhoasblKOkr7n2yydvUZjjxTnBhIuHmkyBS1619oGnTfq/uLeGYb4NYXdeQ5OYcqsRGvmWSuTw== +"@aws-sdk/middleware-bucket-endpoint@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.972.1.tgz#767727df16d049966d84f455d8afdf041d0c74f0" + integrity sha512-YVvoitBdE8WOpHqIXvv49efT73F4bJ99XH2bi3Dn3mx7WngI4RwHwn/zF5i0q1Wdi5frGSCNF3vuh+pY817//w== dependencies: - "@aws-sdk/types" "3.969.0" - "@aws-sdk/util-arn-parser" "3.968.0" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-arn-parser" "^3.972.1" "@smithy/node-config-provider" "^4.3.8" "@smithy/protocol-http" "^5.3.8" "@smithy/types" "^4.12.0" "@smithy/util-config-provider" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.969.0.tgz#b040eca51f73681280ea9c39e20728558355e1e8" - integrity sha512-qXygzSi8osok7tH9oeuS3HoKw6jRfbvg5Me/X5RlHOvSSqQz8c5O9f3MjUApaCUSwbAU92KrbZWasw2PKiaVHg== +"@aws-sdk/middleware-expect-continue@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.972.1.tgz#ff498018c80acc23ce442b50c6e37d0820d6de5a" + integrity sha512-6lfl2/J/kutzw/RLu1kjbahsz4vrGPysrdxWaw8fkjLYG+6M6AswocIAZFS/LgAVi/IWRwPTx9YC0/NH2wDrSw== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "^3.973.0" "@smithy/protocol-http" "^5.3.8" "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.971.0.tgz#8cb3a29bd0569e086c8c2393827b9b8682f845d3" - integrity sha512-+hGUDUxeIw8s2kkjfeXym0XZxdh0cqkHkDpEanWYdS1gnWkIR+gf9u/DKbKqGHXILPaqHXhWpLTQTVlaB4sI7Q== +"@aws-sdk/middleware-flexible-checksums@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.972.1.tgz#c36109384e7db469e46bff9240588e89d09f0651" + integrity sha512-kjVVREpqeUkYQsXr78AcsJbEUlxGH7+H6yS7zkjrnu6HyEVxbdSndkKX6VpKneFOihjCAhIXlk4wf3butDHkNQ== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.970.0" - "@aws-sdk/crc64-nvme" "3.969.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/crc64-nvme" "3.972.0" + "@aws-sdk/types" "^3.973.0" "@smithy/is-array-buffer" "^4.2.0" "@smithy/node-config-provider" "^4.3.8" "@smithy/protocol-http" "^5.3.8" @@ -1110,22 +1129,22 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.969.0.tgz#e9f09254c7c4122cd846b7a679823a6643f1fefc" - integrity sha512-AWa4rVsAfBR4xqm7pybQ8sUNJYnjyP/bJjfAw34qPuh3M9XrfGbAHG0aiAfQGrBnmS28jlO6Kz69o+c6PRw1dw== +"@aws-sdk/middleware-host-header@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.1.tgz#83afa4340bd9294688426f9a0eca992a392faf6e" + integrity sha512-/R82lXLPmZ9JaUGSUdKtBp2k/5xQxvBT3zZWyKiBOhyulFotlfvdlrO8TnqstBimsl4lYEYySDL+W6ldFh6ALg== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "^3.973.0" "@smithy/protocol-http" "^5.3.8" "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@aws-sdk/middleware-location-constraint@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.969.0.tgz#6530b94097d22b5ef69fffda8d194a2f55f6980a" - integrity sha512-zH7pDfMLG/C4GWMOpvJEoYcSpj7XsNP9+irlgqwi667sUQ6doHQJ3yyDut3yiTk0maq1VgmriPFELyI9lrvH/g== +"@aws-sdk/middleware-location-constraint@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.972.1.tgz#c84bad6c3af560c27d305a4e573ee34511f0990b" + integrity sha512-YisPaCbvBk9gY5aUI8jDMDKXsLZ9Fet0WYj1MviK8tZYMgxBIYHM6l3O/OHaAIujojZvamd9F3haYYYWp5/V3w== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "^3.973.0" "@smithy/types" "^4.12.0" tslib "^2.6.2" @@ -1138,12 +1157,12 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.969.0.tgz#9beec897cc10611ffda8d25da5fde7364d9e9cc1" - integrity sha512-xwrxfip7Y2iTtCMJ+iifN1E1XMOuhxIHY9DreMCvgdl4r7+48x2S1bCYPWH3eNY85/7CapBWdJ8cerpEl12sQQ== +"@aws-sdk/middleware-logger@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.972.1.tgz#aa0f53cc90c4fc46cf96c4d9197366ba006b71eb" + integrity sha512-JGgFl6cHg9G2FHu4lyFIzmFN8KESBiRr84gLC3Aeni0Gt1nKm+KxWLBuha/RPcXxJygGXCcMM4AykkIwxor8RA== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "^3.973.0" "@smithy/types" "^4.12.0" tslib "^2.6.2" @@ -1157,25 +1176,25 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.969.0.tgz#68fcfcde8f2fce448d754b45b2a0bec7158da0f8" - integrity sha512-2r3PuNquU3CcS1Am4vn/KHFwLi8QFjMdA/R+CRDXT4AFO/0qxevF/YStW3gAKntQIgWgQV8ZdEtKAoJvLI4UWg== +"@aws-sdk/middleware-recursion-detection@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.1.tgz#0a10c64960a45378ee586a1f3532ed5f608b27f8" + integrity sha512-taGzNRe8vPHjnliqXIHp9kBgIemLE/xCaRTMH1NH0cncHeaPcjxtnCroAAM9aOlPuKvBe2CpZESyvM1+D8oI7Q== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "^3.973.0" "@aws/lambda-invoke-store" "^0.2.2" "@smithy/protocol-http" "^5.3.8" "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.970.0.tgz#90aba70362f367e588d1e6735846056d94dce626" - integrity sha512-v/Y5F1lbFFY7vMeG5yYxuhnn0CAshz6KMxkz1pDyPxejNE9HtA0w8R6OTBh/bVdIm44QpjhbI7qeLdOE/PLzXQ== +"@aws-sdk/middleware-sdk-s3@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.0.tgz#2b0d89ecad90a90c7f4a3acd75966b9321ed2a66" + integrity sha512-0bcKFXWx+NZ7tIlOo7KjQ+O2rydiHdIQahrq+fN6k9Osky29v17guy68urUKfhTobR6iY6KvxkroFWaFtTgS5w== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/types" "3.969.0" - "@aws-sdk/util-arn-parser" "3.968.0" + "@aws-sdk/core" "3.972.0" + "@aws-sdk/types" "3.972.0" + "@aws-sdk/util-arn-parser" "3.972.0" "@smithy/core" "^3.20.6" "@smithy/node-config-provider" "^4.3.8" "@smithy/protocol-http" "^5.3.8" @@ -1188,12 +1207,32 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-ssec@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.971.0.tgz#71586813a653af64241ad850323f21ab687e7721" - integrity sha512-QGVhvRveYG64ZhnS/b971PxXM6N2NU79Fxck4EfQ7am8v1Br0ctoeDDAn9nXNblLGw87we9Z65F7hMxxiFHd3w== +"@aws-sdk/middleware-sdk-s3@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.2.tgz#f678501d472366eb4734e0f21c36c48b0cdf076d" + integrity sha512-5f9x9/G+StE8+7wd9EVDF3d+J74xK+WBA3FhZwLSkf3pHFGLKzlmUfxJJE1kkXkbj/j/H+Dh3zL/hrtQE9hNsg== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-arn-parser" "^3.972.1" + "@smithy/core" "^3.21.1" + "@smithy/node-config-provider" "^4.3.8" + "@smithy/protocol-http" "^5.3.8" + "@smithy/signature-v4" "^5.3.8" + "@smithy/smithy-client" "^4.10.12" + "@smithy/types" "^4.12.0" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-middleware" "^4.2.8" + "@smithy/util-stream" "^4.5.10" + "@smithy/util-utf8" "^4.2.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.972.1.tgz#c8ad550d82c9deb5637343cc3c0ca75c934540b4" + integrity sha512-fLtRTPd/MxJT2drJKft2GVGKm35PiNEeQ1Dvz1vc/WhhgAteYrp4f1SfSgjgLaYWGMExESJL4bt8Dxqp6tVsog== + dependencies: + "@aws-sdk/types" "^3.973.0" "@smithy/types" "^4.12.0" tslib "^2.6.2" @@ -1210,57 +1249,57 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.970.0.tgz#ebaa023ac89e91200dc5f0218c3c6bfa8ffba478" - integrity sha512-dnSJGGUGSFGEX2NzvjwSefH+hmZQ347AwbLhAsi0cdnISSge+pcGfOFrJt2XfBIypwFe27chQhlfuf/gWdzpZg== +"@aws-sdk/middleware-user-agent@^3.972.1", "@aws-sdk/middleware-user-agent@^3.972.2": + version "3.972.2" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.2.tgz#569648066796ace1545b3ae2896c2e9a3c58f577" + integrity sha512-d+Exq074wy0X6wvShg/kmZVtkah+28vMuqCtuY3cydg8LUZOJBtbAolCpEJizSyb8mJJZF9BjWaTANXL4OYnkg== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/types" "3.969.0" - "@aws-sdk/util-endpoints" "3.970.0" - "@smithy/core" "^3.20.6" + "@aws-sdk/core" "^3.973.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@smithy/core" "^3.21.1" "@smithy/protocol-http" "^5.3.8" "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.971.0.tgz#391fe4c91357f088a4f2c301b9b58c117482a36a" - integrity sha512-TWaILL8GyYlhGrxxnmbkazM4QsXatwQgoWUvo251FXmUOsiXDFDVX3hoGIfB3CaJhV2pJPfebHUNJtY6TjZ11g== +"@aws-sdk/nested-clients@3.974.0": + version "3.974.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.974.0.tgz#61f31582e743e15f9088cfbfad1f5bcc62c36cef" + integrity sha512-k3dwdo/vOiHMJc9gMnkPl1BA5aQfTrZbz+8fiDkWrPagqAioZgmo5oiaOaeX0grObfJQKDtcpPFR4iWf8cgl8Q== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.970.0" - "@aws-sdk/middleware-host-header" "3.969.0" - "@aws-sdk/middleware-logger" "3.969.0" - "@aws-sdk/middleware-recursion-detection" "3.969.0" - "@aws-sdk/middleware-user-agent" "3.970.0" - "@aws-sdk/region-config-resolver" "3.969.0" - "@aws-sdk/types" "3.969.0" - "@aws-sdk/util-endpoints" "3.970.0" - "@aws-sdk/util-user-agent-browser" "3.969.0" - "@aws-sdk/util-user-agent-node" "3.971.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/middleware-host-header" "^3.972.1" + "@aws-sdk/middleware-logger" "^3.972.1" + "@aws-sdk/middleware-recursion-detection" "^3.972.1" + "@aws-sdk/middleware-user-agent" "^3.972.1" + "@aws-sdk/region-config-resolver" "^3.972.1" + "@aws-sdk/types" "^3.973.0" + "@aws-sdk/util-endpoints" "3.972.0" + "@aws-sdk/util-user-agent-browser" "^3.972.1" + "@aws-sdk/util-user-agent-node" "^3.972.1" "@smithy/config-resolver" "^4.4.6" - "@smithy/core" "^3.20.6" + "@smithy/core" "^3.21.0" "@smithy/fetch-http-handler" "^5.3.9" "@smithy/hash-node" "^4.2.8" "@smithy/invalid-dependency" "^4.2.8" "@smithy/middleware-content-length" "^4.2.8" - "@smithy/middleware-endpoint" "^4.4.7" - "@smithy/middleware-retry" "^4.4.23" + "@smithy/middleware-endpoint" "^4.4.10" + "@smithy/middleware-retry" "^4.4.26" "@smithy/middleware-serde" "^4.2.9" "@smithy/middleware-stack" "^4.2.8" "@smithy/node-config-provider" "^4.3.8" "@smithy/node-http-handler" "^4.4.8" "@smithy/protocol-http" "^5.3.8" - "@smithy/smithy-client" "^4.10.8" + "@smithy/smithy-client" "^4.10.11" "@smithy/types" "^4.12.0" "@smithy/url-parser" "^4.2.8" "@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.22" - "@smithy/util-defaults-mode-node" "^4.2.25" + "@smithy/util-defaults-mode-browser" "^4.3.25" + "@smithy/util-defaults-mode-node" "^4.2.28" "@smithy/util-endpoints" "^3.2.8" "@smithy/util-middleware" "^4.2.8" "@smithy/util-retry" "^4.2.8" @@ -1279,24 +1318,24 @@ "@smithy/util-middleware" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.969.0.tgz#fecbbeb688050a4ec59f32353f679a29c61f8e70" - integrity sha512-scj9OXqKpcjJ4jsFLtqYWz3IaNvNOQTFFvEY8XMJXTv+3qF5I7/x9SJtKzTRJEBF3spjzBUYPtGFbs9sj4fisQ== +"@aws-sdk/region-config-resolver@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.1.tgz#650ac559f159aa9ca4ffd82514536a4bef897058" + integrity sha512-voIY8RORpxLAEgEkYaTFnkaIuRwVBEc+RjVZYcSSllPV+ZEKAacai6kNhJeE3D70Le+JCfvRb52tng/AVHY+jQ== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "^3.973.0" "@smithy/config-resolver" "^4.4.6" "@smithy/node-config-provider" "^4.3.8" "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.970.0.tgz#f785fb5ff9f9914cbcbcbe8f9745d92f8d85a185" - integrity sha512-z3syXfuK/x/IsKf/AeYmgc2NT7fcJ+3fHaGO+fkghkV9WEba3fPyOwtTBX4KpFMNb2t50zDGZwbzW1/5ighcUQ== +"@aws-sdk/signature-v4-multi-region@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.972.0.tgz#159662f1f0b26fc178ef1c8c92cbd37e79ddbdc0" + integrity sha512-2udiRijmjpN81Pvajje4TsjbXDZNP6K9bYUanBYH8hXa/tZG5qfGCySD+TyX0sgDxCQmEDMg3LaQdfjNHBDEgQ== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.970.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/middleware-sdk-s3" "3.972.0" + "@aws-sdk/types" "3.972.0" "@smithy/protocol-http" "^5.3.8" "@smithy/signature-v4" "^5.3.8" "@smithy/types" "^4.12.0" @@ -1313,14 +1352,14 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/token-providers@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.971.0.tgz#7d0ae8c0ca50ea5ef8cfbfeba180044e5d569603" - integrity sha512-4hKGWZbmuDdONMJV0HJ+9jwTDb0zLfKxcCLx2GEnBY31Gt9GeyIQ+DZ97Bb++0voawj6pnZToFikXTyrEq2x+w== +"@aws-sdk/token-providers@3.974.0": + version "3.974.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.974.0.tgz#e396b236fde11a738b66c8af94f5957124afc4f5" + integrity sha512-cBykL0LiccKIgNhGWvQRTPvsBLPZxnmJU3pYxG538jpFX8lQtrCy1L7mmIHNEdxIdIGEPgAEHF8/JQxgBToqUQ== dependencies: - "@aws-sdk/core" "3.970.0" - "@aws-sdk/nested-clients" "3.971.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/core" "^3.973.0" + "@aws-sdk/nested-clients" "3.974.0" + "@aws-sdk/types" "^3.973.0" "@smithy/property-provider" "^4.2.8" "@smithy/shared-ini-file-loader" "^4.4.3" "@smithy/types" "^4.12.0" @@ -1334,18 +1373,33 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/types@3.969.0", "@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.969.0.tgz#d991e5d15b68a815e5cf739b7fab59212306a19c" - integrity sha512-7IIzM5TdiXn+VtgPdVLjmE6uUBUtnga0f4RiSEI1WW10RPuNvZ9U+pL3SwDiRDAdoGrOF9tSLJOFZmfuwYuVYQ== +"@aws-sdk/types@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.972.0.tgz#2c8ddf7fa63038da2e27d888c1bd5817b62e30fa" + integrity sha512-U7xBIbLSetONxb2bNzHyDgND3oKGoIfmknrEVnoEU4GUSs+0augUOIn9DIWGUO2ETcRFdsRUnmx9KhPT9Ojbug== dependencies: "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@aws-sdk/util-arn-parser@3.968.0": - version "3.968.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.968.0.tgz#ca8d7d26ffafa340a9e441a40db886ddb587743f" - integrity sha512-gqqvYcitIIM2K4lrDX9de9YvOfXBcVdxfT/iLnvHJd4YHvSXlt+gs+AsL4FfPCxG4IG9A+FyulP9Sb1MEA75vw== +"@aws-sdk/types@^3.1.0", "@aws-sdk/types@^3.222.0", "@aws-sdk/types@^3.973.0": + version "3.973.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.973.0.tgz#4e7428dbaac37797a81339f646f40f41cc22a1fe" + integrity sha512-jYIdB7a7jhRTvyb378nsjyvJh1Si+zVduJ6urMNGpz8RjkmHZ+9vM2H07XaIB2Cfq0GhJRZYOfUCH8uqQhqBkQ== + dependencies: + "@smithy/types" "^4.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.0.tgz#24a29435e1d8ad6a3c2282f62521fe9961346c54" + integrity sha512-RM5Mmo/KJ593iMSrALlHEOcc9YOIyOsDmS5x2NLOMdEmzv1o00fcpAkCQ02IGu1eFneBFT7uX0Mpag0HI+Cz2g== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.1.tgz#134a5dc123cb786446d7b6121f8895a333b25446" + integrity sha512-XnNit6H9PPHhqUXW/usjX6JeJ6Pm8ZNqivTjmNjgWHeOfVpblUc/MTic02UmCNR0jJLPjQ3mBKiMen0tnkNQjQ== dependencies: tslib "^2.6.2" @@ -1359,21 +1413,21 @@ "@smithy/util-endpoints" "^3.0.0" tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.970.0": - version "3.970.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.970.0.tgz#3c94f9482091b35b0497962c6d03e2d6e7f8f86a" - integrity sha512-TZNZqFcMUtjvhZoZRtpEGQAdULYiy6rcGiXAbLU7e9LSpIYlRqpLa207oMNfgbzlL2PnHko+eVg8rajDiSOYCg== +"@aws-sdk/util-endpoints@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.972.0.tgz#0c483aa4853ea3858024bc502454ba395e533cb0" + integrity sha512-6JHsl1V/a1ZW8D8AFfd4R52fwZPnZ5H4U6DS8m/bWT8qad72NvbOFAC7U2cDtFs2TShqUO3TEiX/EJibtY3ijg== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "3.972.0" "@smithy/types" "^4.12.0" "@smithy/url-parser" "^4.2.8" "@smithy/util-endpoints" "^3.2.8" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.965.2" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.965.2.tgz#e3fde1227b2f76b94e33650cb4bfa391738a26dc" - integrity sha512-qKgO7wAYsXzhwCHhdbaKFyxd83Fgs8/1Ka+jjSPrv2Ll7mB55Wbwlo0kkfMLh993/yEc8aoDIAc1Fz9h4Spi4Q== + version "3.965.3" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.965.3.tgz#07f98caac26b51442e4ee4e7d66b87a07be267ea" + integrity sha512-FNUqAjlKAGA7GM05kywE99q8wiPHPZqrzhq3wXRga6PRD6A0kzT85Pb0AzYBVTBRpSrKyyr6M92Y6bnSBVp2BA== dependencies: tslib "^2.6.2" @@ -1387,12 +1441,12 @@ bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.969.0.tgz#5d86cbf8346b93427a4e1d7dddc1237c4fbe3f75" - integrity sha512-bpJGjuKmFr0rA6UKUCmN8D19HQFMLXMx5hKBXqBlPFdalMhxJSjcxzX9DbQh0Fn6bJtxCguFmRGOBdQqNOt49g== +"@aws-sdk/util-user-agent-browser@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.1.tgz#56ead0d350fc7790dd0e29f01f140672a04c4dc9" + integrity sha512-IgF55NFmJX8d9Wql9M0nEpk2eYbuD8G4781FN4/fFgwTXBn86DvlZJuRWDCMcMqZymnBVX7HW9r+3r9ylqfW0w== dependencies: - "@aws-sdk/types" "3.969.0" + "@aws-sdk/types" "^3.973.0" "@smithy/types" "^4.12.0" bowser "^2.11.0" tslib "^2.6.2" @@ -1408,13 +1462,13 @@ "@smithy/types" "^4.0.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.971.0": - version "3.971.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.971.0.tgz#ba1bcd65fa6bb66e3dd896805ebdcfdb58f7f0a8" - integrity sha512-Eygjo9mFzQYjbGY3MYO6CsIhnTwAMd3WmuFalCykqEmj2r5zf0leWrhPaqvA5P68V5JdGfPYgj7vhNOd6CtRBQ== +"@aws-sdk/util-user-agent-node@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.972.1.tgz#4d7e57a43a9c0965d0623133b8fa53e527309f2e" + integrity sha512-oIs4JFcADzoZ0c915R83XvK2HltWupxNsXUIuZse2rgk7b97zTpkxaqXiH0h9ylh31qtgo/t8hp4tIqcsMrEbQ== dependencies: - "@aws-sdk/middleware-user-agent" "3.970.0" - "@aws-sdk/types" "3.969.0" + "@aws-sdk/middleware-user-agent" "^3.972.1" + "@aws-sdk/types" "^3.973.0" "@smithy/node-config-provider" "^4.3.8" "@smithy/types" "^4.12.0" tslib "^2.6.2" @@ -1426,10 +1480,19 @@ dependencies: tslib "^2.3.1" -"@aws-sdk/xml-builder@3.969.0": - version "3.969.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.969.0.tgz#907de7ca729c80351de4e5837fd30926fd84366f" - integrity sha512-BSe4Lx/qdRQQdX8cSSI7Et20vqBspzAjBy8ZmXVoyLkol3y4sXBXzn+BiLtR+oh60ExQn6o2DU4QjdOZbXaKIQ== +"@aws-sdk/xml-builder@3.972.0": + version "3.972.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.0.tgz#8ae8f6f6e0a63d518c8c8ce9f40f3c94d9b67884" + integrity sha512-POaGMcXnozzqBUyJM3HLUZ9GR6OKJWPGJEmhtTnxZXt8B6JcJ/6K3xRJ5H/j8oovVLz8Wg6vFxAHv8lvuASxMg== + dependencies: + "@smithy/types" "^4.12.0" + fast-xml-parser "5.2.5" + tslib "^2.6.2" + +"@aws-sdk/xml-builder@^3.972.1": + version "3.972.1" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.972.1.tgz#5fa96ab8cf7b975ff3f0a0d3c0a46aeb88c7ce46" + integrity sha512-6zZGlPOqn7Xb+25MAXGb1JhgvaC5HjZj6GzszuVrnEgbhvzBRFGKYemuHBV4bho+dtqeYKPgaZUv7/e80hIGNg== dependencies: "@smithy/types" "^4.12.0" fast-xml-parser "5.2.5" @@ -1449,7 +1512,7 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.6": +"@babel/compat-data@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c" integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg== @@ -1493,7 +1556,7 @@ dependencies: "@babel/types" "^7.27.3" -"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2", "@babel/helper-compilation-targets@^7.28.6": +"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== @@ -1526,16 +1589,16 @@ regexpu-core "^6.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.5": - version "0.6.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" - integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== +"@babel/helper-define-polyfill-provider@^0.6.5", "@babel/helper-define-polyfill-provider@^0.6.6": + version "0.6.6" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.6.tgz#714dfe33d8bd710f556df59953720f6eeb6c1a14" + integrity sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA== dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - debug "^4.4.1" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + debug "^4.4.3" lodash.debounce "^4.0.8" - resolve "^1.22.10" + resolve "^1.22.11" "@babel/helper-globals@^7.28.0": version "7.28.0" @@ -3250,21 +3313,107 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jsonjoy.com/base64@17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-17.65.0.tgz#ba3b023c69ab311e5b706289414a44ee46117824" + integrity sha512-Xrh7Fm/M0QAYpekSgmskdZYnFdSGnsxJ/tHaolA4bNwWdG9i65S8m83Meh7FOxyJyQAdo4d4J97NOomBLEfkDQ== + "@jsonjoy.com/base64@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578" integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== +"@jsonjoy.com/buffers@17.65.0", "@jsonjoy.com/buffers@^17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-17.65.0.tgz#d6890737d9cbc49c17e2c5d1a2d796c57205152c" + integrity sha512-eBrIXd0/Ld3p9lpDDlMaMn6IEfWqtHMD+z61u0JrIiPzsV1r7m6xDZFRxJyvIFTEO+SWdYF9EiQbXZGd8BzPfA== + "@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": version "1.2.1" resolved "https://registry.yarnpkg.com/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz#8d99c7f67eaf724d3428dfd9826c6455266a5c83" integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== +"@jsonjoy.com/codegen@17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-17.65.0.tgz#531524f37fd3e1d1189de18fef346e998eee8952" + integrity sha512-7MXcRYe7n3BG+fo3jicvjB0+6ypl2Y/bQp79Sp7KeSiiCgLqw4Oled6chVv07/xLVTdo3qa1CD0VCCnPaw+RGA== + "@jsonjoy.com/codegen@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz#5c23f796c47675f166d23b948cdb889184b93207" integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== +"@jsonjoy.com/fs-core@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz#320728b4b7bef63abb60e7630351623899237411" + integrity sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + thingies "^2.5.0" + +"@jsonjoy.com/fs-fsa@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz#02bac88c4968ddf2effbd7452861aaed60ba3557" + integrity sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + thingies "^2.5.0" + +"@jsonjoy.com/fs-node-builtins@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz#a32a5bcb093f8b34a99aa8957e993a52ec316662" + integrity sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw== + +"@jsonjoy.com/fs-node-to-fsa@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz#33fc503e50d283ac5fc510e3accced7fccecf2f4" + integrity sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw== + dependencies: + "@jsonjoy.com/fs-fsa" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + +"@jsonjoy.com/fs-node-utils@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz#788e95052aa99744f6e8e55b5098afc203df2b9e" + integrity sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg== + dependencies: + "@jsonjoy.com/fs-node-builtins" "4.56.10" + +"@jsonjoy.com/fs-node@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz#70b18bfaf14544a9820d2016e913dde12c6de991" + integrity sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/fs-print" "4.56.10" + "@jsonjoy.com/fs-snapshot" "4.56.10" + glob-to-regex.js "^1.0.0" + thingies "^2.5.0" + +"@jsonjoy.com/fs-print@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz#7c181b9aefcc1b268be0e6233bff26310c355335" + integrity sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw== + dependencies: + "@jsonjoy.com/fs-node-utils" "4.56.10" + tree-dump "^1.1.0" + +"@jsonjoy.com/fs-snapshot@4.56.10": + version "4.56.10" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz#05aadd2c0eaa855b13d6cb17d29b7c8cee239c8c" + integrity sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g== + dependencies: + "@jsonjoy.com/buffers" "^17.65.0" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/json-pack" "^17.65.0" + "@jsonjoy.com/util" "^17.65.0" + "@jsonjoy.com/json-pack@^1.11.0": version "1.21.0" resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz#93f8dd57fe3a3a92132b33d1eb182dcd9e7629fa" @@ -3279,6 +3428,27 @@ thingies "^2.5.0" tree-dump "^1.1.0" +"@jsonjoy.com/json-pack@^17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-17.65.0.tgz#4ea06dd0aee1c29954bd978c4f107401dbf713fb" + integrity sha512-e0SG/6qUCnVhHa0rjDJHgnXnbsacooHVqQHxspjvlYQSkHm+66wkHw6Gql+3u/WxI/b1VsOdUi0M+fOtkgKGdQ== + dependencies: + "@jsonjoy.com/base64" "17.65.0" + "@jsonjoy.com/buffers" "17.65.0" + "@jsonjoy.com/codegen" "17.65.0" + "@jsonjoy.com/json-pointer" "17.65.0" + "@jsonjoy.com/util" "17.65.0" + hyperdyperid "^1.2.0" + thingies "^2.5.0" + tree-dump "^1.1.0" + +"@jsonjoy.com/json-pointer@17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-17.65.0.tgz#4bad42d86c9ee0ad1758c082b065bd5e16f8dc36" + integrity sha512-uhTe+XhlIZpWOxgPcnO+iSCDgKKBpwkDVTyYiXX9VayGV8HSFVJM67M6pUE71zdnXF1W0Da21AvnhlmdwYPpow== + dependencies: + "@jsonjoy.com/util" "17.65.0" + "@jsonjoy.com/json-pointer@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz#049cb530ac24e84cba08590c5e36b431c4843408" @@ -3287,6 +3457,14 @@ "@jsonjoy.com/codegen" "^1.0.0" "@jsonjoy.com/util" "^1.9.0" +"@jsonjoy.com/util@17.65.0", "@jsonjoy.com/util@^17.65.0": + version "17.65.0" + resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-17.65.0.tgz#b27832bdf7aeaf4a36f9cb8721cb4ffb086f06a1" + integrity sha512-cWiEHZccQORf96q2y6zU3wDeIVPeidmGqd9cNKJRYoVHTV0S1eHPy5JTbHpMnGfDvtvujQwQozOqgO9ABu6h0w== + dependencies: + "@jsonjoy.com/buffers" "17.65.0" + "@jsonjoy.com/codegen" "17.65.0" + "@jsonjoy.com/util@^1.9.0": version "1.9.0" resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.9.0.tgz#7ee95586aed0a766b746cd8d8363e336c3c47c46" @@ -3318,9 +3496,9 @@ integrity sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw== "@mongodb-js/saslprep@^1.3.0": - version "1.4.4" - resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.4.4.tgz#34a946ff6ae142e8f2259b87f2935f8284ba874d" - integrity sha512-p7X/ytJDIdwUfFL/CLOhKgdfJe1Fa8uw9seJYvdOmnP9JBWGWHW69HkOixXS6Wy9yvGf1MbhcS6lVmrhy4jm2g== + version "1.4.5" + resolved "https://registry.yarnpkg.com/@mongodb-js/saslprep/-/saslprep-1.4.5.tgz#0f53a6c5a350fbe4bfa12cc80b69e8d358f1bbc0" + integrity sha512-k64Lbyb7ycCSXHSLzxVdb2xsKGPMvYZfCICXvDsI8Z65CeWQzTEKS4YmGbnqw+U9RBvLPTsB6UCmwkgsDTGWIw== dependencies: sparse-bitfield "^3.0.3" @@ -3869,70 +4047,70 @@ resolved "https://registry.yarnpkg.com/@pandacss/is-valid-prop/-/is-valid-prop-1.8.1.tgz#8d23dd897a006c21f5ce0bcb66759b1b625d3b9a" integrity sha512-gf2HTBCOboc65Jlb9swAjbffXSIv+A4vzSQ9iHyTCDLMcXTHYjPOQNliI36WkuQgR0pNXggBbQXGNaT9wKcrAw== -"@parcel/watcher-android-arm64@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.4.tgz#88c67bde2c3efa997a0b1fea540080c6ade0322c" - integrity sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g== - -"@parcel/watcher-darwin-arm64@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.4.tgz#d9dc037cff8a4ab7839a79c5287a6e6660f7ab27" - integrity sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw== - -"@parcel/watcher-darwin-x64@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.4.tgz#da0e13e16ee6d378242e2cfb469d72667624383a" - integrity sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg== - -"@parcel/watcher-freebsd-x64@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.4.tgz#feb7cc9ec680bae3e91dddcdb4fe1c399ed52cc1" - integrity sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q== - -"@parcel/watcher-linux-arm-glibc@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.4.tgz#fa4e9cf8228c8c433e2f035e8b16aa299d892a78" - integrity sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw== - -"@parcel/watcher-linux-arm-musl@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.4.tgz#9ee6792e2d8810af9871ee5bbc2aa04e0b079d62" - integrity sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ== - -"@parcel/watcher-linux-arm64-glibc@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.4.tgz#624c6d874d99afa79305720f96a0c233d4ad7fde" - integrity sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw== - -"@parcel/watcher-linux-arm64-musl@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.4.tgz#5341e88b9e645d31c015ed40f384e60e49bd74d2" - integrity sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ== - -"@parcel/watcher-linux-x64-glibc@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.4.tgz#be5bcc49d3f6d21cc81bb531970a05d3721e385c" - integrity sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA== - -"@parcel/watcher-linux-x64-musl@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.4.tgz#bffd3895b1f0cc8fd1436e409fd65d0a901281c0" - integrity sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg== - -"@parcel/watcher-win32-arm64@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.4.tgz#7fb8aedea5b34ba97a01e1555929d01f4eb72fe4" - integrity sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ== - -"@parcel/watcher-win32-ia32@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.4.tgz#f7f94ebdb21dedf37b12e030a82d4211798a1c26" - integrity sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg== - -"@parcel/watcher-win32-x64@2.5.4": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.4.tgz#8d895c9723f7fffdf4b360fd1becf1b6bcb571df" - integrity sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw== +"@parcel/watcher-android-arm64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz#5f32e0dba356f4ac9a11068d2a5c134ca3ba6564" + integrity sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A== + +"@parcel/watcher-darwin-arm64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz#88d3e720b59b1eceffce98dac46d7c40e8be5e8e" + integrity sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA== + +"@parcel/watcher-darwin-x64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz#bf05d76a78bc15974f15ec3671848698b0838063" + integrity sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg== + +"@parcel/watcher-freebsd-x64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz#8bc26e9848e7303ac82922a5ae1b1ef1bdb48a53" + integrity sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng== + +"@parcel/watcher-linux-arm-glibc@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz#1328fee1deb0c2d7865079ef53a2ba4cc2f8b40a" + integrity sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ== + +"@parcel/watcher-linux-arm-musl@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz#bad0f45cb3e2157746db8b9d22db6a125711f152" + integrity sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg== + +"@parcel/watcher-linux-arm64-glibc@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz#b75913fbd501d9523c5f35d420957bf7d0204809" + integrity sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA== + +"@parcel/watcher-linux-arm64-musl@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz#da5621a6a576070c8c0de60dea8b46dc9c3827d4" + integrity sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA== + +"@parcel/watcher-linux-x64-glibc@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz#ce437accdc4b30f93a090b4a221fd95cd9b89639" + integrity sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ== + +"@parcel/watcher-linux-x64-musl@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz#02400c54b4a67efcc7e2327b249711920ac969e2" + integrity sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg== + +"@parcel/watcher-win32-arm64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz#caae3d3c7583ca0a7171e6bd142c34d20ea1691e" + integrity sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q== + +"@parcel/watcher-win32-ia32@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz#9ac922550896dfe47bfc5ae3be4f1bcaf8155d6d" + integrity sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g== + +"@parcel/watcher-win32-x64@2.5.6": + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz#73fdafba2e21c448f0e456bbe13178d8fe11739d" + integrity sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw== "@parcel/watcher@2.0.4": version "2.0.4" @@ -3943,28 +4121,28 @@ node-gyp-build "^4.3.0" "@parcel/watcher@^2.4.1": - version "2.5.4" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.4.tgz#a6575b0a018b4e263589c1e7bc2ceb73c1ee84de" - integrity sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ== + version "2.5.6" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.6.tgz#3f932828c894f06d0ad9cfefade1756ecc6ef1f1" + integrity sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ== dependencies: detect-libc "^2.0.3" is-glob "^4.0.3" node-addon-api "^7.0.0" picomatch "^4.0.3" optionalDependencies: - "@parcel/watcher-android-arm64" "2.5.4" - "@parcel/watcher-darwin-arm64" "2.5.4" - "@parcel/watcher-darwin-x64" "2.5.4" - "@parcel/watcher-freebsd-x64" "2.5.4" - "@parcel/watcher-linux-arm-glibc" "2.5.4" - "@parcel/watcher-linux-arm-musl" "2.5.4" - "@parcel/watcher-linux-arm64-glibc" "2.5.4" - "@parcel/watcher-linux-arm64-musl" "2.5.4" - "@parcel/watcher-linux-x64-glibc" "2.5.4" - "@parcel/watcher-linux-x64-musl" "2.5.4" - "@parcel/watcher-win32-arm64" "2.5.4" - "@parcel/watcher-win32-ia32" "2.5.4" - "@parcel/watcher-win32-x64" "2.5.4" + "@parcel/watcher-android-arm64" "2.5.6" + "@parcel/watcher-darwin-arm64" "2.5.6" + "@parcel/watcher-darwin-x64" "2.5.6" + "@parcel/watcher-freebsd-x64" "2.5.6" + "@parcel/watcher-linux-arm-glibc" "2.5.6" + "@parcel/watcher-linux-arm-musl" "2.5.6" + "@parcel/watcher-linux-arm64-glibc" "2.5.6" + "@parcel/watcher-linux-arm64-musl" "2.5.6" + "@parcel/watcher-linux-x64-glibc" "2.5.6" + "@parcel/watcher-linux-x64-musl" "2.5.6" + "@parcel/watcher-win32-arm64" "2.5.6" + "@parcel/watcher-win32-ia32" "2.5.6" + "@parcel/watcher-win32-x64" "2.5.6" "@peculiar/asn1-cms@^2.6.0": version "2.6.0" @@ -4366,130 +4544,130 @@ resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz#47d2bf4cef6d470b22f5831b420f8964e0bf755f" integrity sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA== -"@rollup/rollup-android-arm-eabi@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz#76e0fef6533b3ce313f969879e61e8f21f0eeb28" - integrity sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg== - -"@rollup/rollup-android-arm64@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz#d3cfc675a40bbdec97bda6d7fe3b3b05f0e1cd93" - integrity sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg== - -"@rollup/rollup-darwin-arm64@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz#eb912b8f59dd47c77b3c50a78489013b1d6772b4" - integrity sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg== - -"@rollup/rollup-darwin-x64@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz#e7d0839fdfd1276a1d34bc5ebbbd0dfd7d0b81a0" - integrity sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ== - -"@rollup/rollup-freebsd-arm64@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz#7ff8118760f7351e48fd0cd3717ff80543d6aac8" - integrity sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg== - -"@rollup/rollup-freebsd-x64@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz#49d330dadbda1d4e9b86b4a3951b59928a9489a9" - integrity sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw== - -"@rollup/rollup-linux-arm-gnueabihf@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz#98c5f1f8b9776b4a36e466e2a1c9ed1ba52ef1b6" - integrity sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ== - -"@rollup/rollup-linux-arm-musleabihf@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz#b9acecd3672e742f70b0c8a94075c816a91ff040" - integrity sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg== - -"@rollup/rollup-linux-arm64-gnu@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz#7a6ab06651bc29e18b09a50ed1a02bc972977c9b" - integrity sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ== - -"@rollup/rollup-linux-arm64-musl@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz#3c8c9072ba4a4d4ef1156b85ab9a2cbb57c1fad0" - integrity sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA== - -"@rollup/rollup-linux-loong64-gnu@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz#17a7af13530f4e4a7b12cd26276c54307a84a8b0" - integrity sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g== - -"@rollup/rollup-linux-loong64-musl@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz#5cd7a900fd7b077ecd753e34a9b7ff1157fe70c1" - integrity sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw== - -"@rollup/rollup-linux-ppc64-gnu@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz#03a097e70243ddf1c07b59d3c20f38e6f6800539" - integrity sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw== - -"@rollup/rollup-linux-ppc64-musl@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz#a5389873039d4650f35b4fa060d286392eb21a94" - integrity sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw== - -"@rollup/rollup-linux-riscv64-gnu@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz#789e60e7d6e2b76132d001ffb24ba80007fb17d0" - integrity sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw== - -"@rollup/rollup-linux-riscv64-musl@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz#3556fa88d139282e9a73c337c9a170f3c5fe7aa4" - integrity sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg== - -"@rollup/rollup-linux-s390x-gnu@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz#c085995b10143c16747a67f1a5487512b2ff04b2" - integrity sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg== - -"@rollup/rollup-linux-x64-gnu@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz#9563a5419dd2604841bad31a39ccfdd2891690fb" - integrity sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg== - -"@rollup/rollup-linux-x64-musl@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz#691bb06e6269a8959c13476b0cd2aa7458facb31" - integrity sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w== - -"@rollup/rollup-openbsd-x64@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz#223e71224746a59ce6d955bbc403577bb5a8be9d" - integrity sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg== - -"@rollup/rollup-openharmony-arm64@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz#0817e5d8ecbfeb8b7939bf58f8ce3c9dd67fce77" - integrity sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw== - -"@rollup/rollup-win32-arm64-msvc@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz#de56d8f2013c84570ef5fb917aae034abda93e4a" - integrity sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g== - -"@rollup/rollup-win32-ia32-msvc@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz#659aff5244312475aeea2c9479a6c7d397b517bf" - integrity sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA== - -"@rollup/rollup-win32-x64-gnu@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz#2cb09549cbb66c1b979f9238db6dd454cac14a88" - integrity sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg== - -"@rollup/rollup-win32-x64-msvc@4.55.1": - version "4.55.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz#f79437939020b83057faf07e98365b1fa51c458b" - integrity sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw== +"@rollup/rollup-android-arm-eabi@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.56.0.tgz#067cfcd81f1c1bfd92aefe3ad5ef1523549d5052" + integrity sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw== + +"@rollup/rollup-android-arm64@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.56.0.tgz#85e39a44034d7d4e4fee2a1616f0bddb85a80517" + integrity sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q== + +"@rollup/rollup-darwin-arm64@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.56.0.tgz#17d92fe98f2cc277b91101eb1528b7c0b6c00c54" + integrity sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w== + +"@rollup/rollup-darwin-x64@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.56.0.tgz#89ae6c66b1451609bd1f297da9384463f628437d" + integrity sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g== + +"@rollup/rollup-freebsd-arm64@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.56.0.tgz#cdbdb9947b26e76c188a31238c10639347413628" + integrity sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ== + +"@rollup/rollup-freebsd-x64@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.56.0.tgz#9b1458d07b6e040be16ee36d308a2c9520f7f7cc" + integrity sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg== + +"@rollup/rollup-linux-arm-gnueabihf@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.56.0.tgz#1d50ded7c965d5f125f5832c971ad5b287befef7" + integrity sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A== + +"@rollup/rollup-linux-arm-musleabihf@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.56.0.tgz#53597e319b7e65990d3bc2a5048097384814c179" + integrity sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw== + +"@rollup/rollup-linux-arm64-gnu@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.56.0.tgz#597002909dec198ca4bdccb25f043d32db3d6283" + integrity sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ== + +"@rollup/rollup-linux-arm64-musl@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.56.0.tgz#286f0e0f799545ce288bdc5a7c777261fcba3d54" + integrity sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA== + +"@rollup/rollup-linux-loong64-gnu@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.56.0.tgz#1fab07fa1a4f8d3697735b996517f1bae0ba101b" + integrity sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg== + +"@rollup/rollup-linux-loong64-musl@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.56.0.tgz#efc2cb143d6c067f95205482afb177f78ed9ea3d" + integrity sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA== + +"@rollup/rollup-linux-ppc64-gnu@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.56.0.tgz#e8de8bd3463f96b92b7dfb7f151fd80ffe8a937c" + integrity sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw== + +"@rollup/rollup-linux-ppc64-musl@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.56.0.tgz#8c508fe28a239da83b3a9da75bcf093186e064b4" + integrity sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg== + +"@rollup/rollup-linux-riscv64-gnu@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.56.0.tgz#ff6d51976e0830732880770a9e18553136b8d92b" + integrity sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew== + +"@rollup/rollup-linux-riscv64-musl@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.56.0.tgz#325fb35eefc7e81d75478318f0deee1e4a111493" + integrity sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ== + +"@rollup/rollup-linux-s390x-gnu@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.56.0.tgz#37410fabb5d3ba4ad34abcfbe9ba9b6288413f30" + integrity sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ== + +"@rollup/rollup-linux-x64-gnu@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.56.0.tgz#8ef907a53b2042068fc03fcc6a641e2b02276eca" + integrity sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw== + +"@rollup/rollup-linux-x64-musl@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.56.0.tgz#61b9ba09ea219e0174b3f35a6ad2afc94bdd5662" + integrity sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA== + +"@rollup/rollup-openbsd-x64@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.56.0.tgz#fc4e54133134c1787d0b016ffdd5aeb22a5effd3" + integrity sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA== + +"@rollup/rollup-openharmony-arm64@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.56.0.tgz#959ae225b1eeea0cc5b7c9f88e4834330fb6cd09" + integrity sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ== + +"@rollup/rollup-win32-arm64-msvc@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.56.0.tgz#842acd38869fa1cbdbc240c76c67a86f93444c27" + integrity sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing== + +"@rollup/rollup-win32-ia32-msvc@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.56.0.tgz#7ab654def4042df44cb29f8ed9d5044e850c66d5" + integrity sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg== + +"@rollup/rollup-win32-x64-gnu@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.56.0.tgz#7426cdec1b01d2382ffd5cda83cbdd1c8efb3ca6" + integrity sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ== + +"@rollup/rollup-win32-x64-msvc@4.56.0": + version "4.56.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.56.0.tgz#9eec0212732a432c71bde0350bc40b673d15b2db" + integrity sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -4502,9 +4680,9 @@ integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sinclair/typebox@^0.34.0": - version "0.34.47" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.47.tgz#61b684d8a20d2890b9f1f7b0d4f76b4b39f5bc0d" - integrity sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw== + version "0.34.48" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.34.48.tgz#75b0ead87e59e1adbd6dccdc42bad4fddee73b59" + integrity sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA== "@sinonjs/commons@^3.0.0", "@sinonjs/commons@^3.0.1": version "3.0.1" @@ -4562,10 +4740,10 @@ "@smithy/util-middleware" "^4.2.8" tslib "^2.6.2" -"@smithy/core@^3.0.0", "@smithy/core@^3.20.6", "@smithy/core@^3.20.7": - version "3.20.7" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.20.7.tgz#98a64db764c3fad60926c75ae6eebe407b90f2b3" - integrity sha512-aO7jmh3CtrmPsIJxUwYIzI5WVlMK8BMCPQ4D4nTzqTqBhbzvxHNzBMGcEg13yg/z9R2Qsz49NUFl0F0lVbTVFw== +"@smithy/core@^3.0.0", "@smithy/core@^3.20.6", "@smithy/core@^3.21.0", "@smithy/core@^3.21.1": + version "3.21.1" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.21.1.tgz#37e851fa28dbc0a16748507f579d6463049d9127" + integrity sha512-NUH8R4O6FkN8HKMojzbGg/5pNjsfTjlMmeFclyPfPaXXUrbr5TzhWgbf7t92wfrpCHRgpjyz7ffASIS3wX28aA== dependencies: "@smithy/middleware-serde" "^4.2.9" "@smithy/protocol-http" "^5.3.8" @@ -4730,12 +4908,12 @@ "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.0.0", "@smithy/middleware-endpoint@^4.4.7", "@smithy/middleware-endpoint@^4.4.8": - version "4.4.8" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.8.tgz#86aef87c2e0d5f727f172a663b9d31be9919e66a" - integrity sha512-TV44qwB/T0OMMzjIuI+JeS0ort3bvlPJ8XIH0MSlGADraXpZqmyND27ueuAL3E14optleADWqtd7dUgc2w+qhQ== +"@smithy/middleware-endpoint@^4.0.0", "@smithy/middleware-endpoint@^4.4.10", "@smithy/middleware-endpoint@^4.4.11": + version "4.4.11" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.11.tgz#943731f77d9afdba52fd629d9b01996a8b3e31b3" + integrity sha512-/WqsrycweGGfb9sSzME4CrsuayjJF6BueBmkKlcbeU5q18OhxRrvvKlmfw3tpDsK5ilx2XUJvoukwxHB0nHs/Q== dependencies: - "@smithy/core" "^3.20.7" + "@smithy/core" "^3.21.1" "@smithy/middleware-serde" "^4.2.9" "@smithy/node-config-provider" "^4.3.8" "@smithy/shared-ini-file-loader" "^4.4.3" @@ -4744,15 +4922,15 @@ "@smithy/util-middleware" "^4.2.8" tslib "^2.6.2" -"@smithy/middleware-retry@^4.0.0", "@smithy/middleware-retry@^4.4.23": - version "4.4.24" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.24.tgz#5b9c2ab9e64844bb19bdd2e2cac036e9a2d00bb1" - integrity sha512-yiUY1UvnbUFfP5izoKLtfxDSTRv724YRRwyiC/5HYY6vdsVDcDOXKSXmkJl/Hovcxt5r+8tZEUAdrOaCJwrl9Q== +"@smithy/middleware-retry@^4.0.0", "@smithy/middleware-retry@^4.4.26", "@smithy/middleware-retry@^4.4.27": + version "4.4.27" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.27.tgz#15cb596969a7d6a0881daac4bd5a8feb07992643" + integrity sha512-xFUYCGRVsfgiN5EjsJJSzih9+yjStgMTCLANPlf0LVQkPDYCe0hz97qbdTZosFOiYlGBlHYityGRxrQ/hxhfVQ== dependencies: "@smithy/node-config-provider" "^4.3.8" "@smithy/protocol-http" "^5.3.8" "@smithy/service-error-classification" "^4.2.8" - "@smithy/smithy-client" "^4.10.9" + "@smithy/smithy-client" "^4.10.12" "@smithy/types" "^4.12.0" "@smithy/util-middleware" "^4.2.8" "@smithy/util-retry" "^4.2.8" @@ -4859,13 +5037,13 @@ "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.0.0", "@smithy/smithy-client@^4.10.8", "@smithy/smithy-client@^4.10.9": - version "4.10.9" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.10.9.tgz#fc19348ff77749ebb40f948d7f1b09daa14c313f" - integrity sha512-Je0EvGXVJ0Vrrr2lsubq43JGRIluJ/hX17aN/W/A0WfE+JpoMdI8kwk2t9F0zTX9232sJDGcoH4zZre6m6f/sg== +"@smithy/smithy-client@^4.0.0", "@smithy/smithy-client@^4.10.11", "@smithy/smithy-client@^4.10.12", "@smithy/smithy-client@^4.10.8": + version "4.10.12" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.10.12.tgz#6632bf67284b9224c268eae7447720146255aaab" + integrity sha512-VKO/HKoQ5OrSHW6AJUmEnUKeXI1/5LfCwO9cwyao7CmLvGnZeM1i36Lyful3LK1XU7HwTVieTqO1y2C/6t3qtA== dependencies: - "@smithy/core" "^3.20.7" - "@smithy/middleware-endpoint" "^4.4.8" + "@smithy/core" "^3.21.1" + "@smithy/middleware-endpoint" "^4.4.11" "@smithy/middleware-stack" "^4.2.8" "@smithy/protocol-http" "^5.3.8" "@smithy/types" "^4.12.0" @@ -4965,26 +5143,26 @@ dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^4.0.0", "@smithy/util-defaults-mode-browser@^4.3.22": - version "4.3.23" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.23.tgz#3b6ff9939b1fd54fb3d95a57ca0f6b341c497096" - integrity sha512-mMg+r/qDfjfF/0psMbV4zd7F/i+rpyp7Hjh0Wry7eY15UnzTEId+xmQTGDU8IdZtDfbGQxuWNfgBZKBj+WuYbA== +"@smithy/util-defaults-mode-browser@^4.0.0", "@smithy/util-defaults-mode-browser@^4.3.25", "@smithy/util-defaults-mode-browser@^4.3.26": + version "4.3.26" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.26.tgz#f7fa31e4a02bbea020ea37d6b45a60f0f5c489c5" + integrity sha512-vva0dzYUTgn7DdE0uaha10uEdAgmdLnNFowKFjpMm6p2R0XDk5FHPX3CBJLzWQkQXuEprsb0hGz9YwbicNWhjw== dependencies: "@smithy/property-provider" "^4.2.8" - "@smithy/smithy-client" "^4.10.9" + "@smithy/smithy-client" "^4.10.12" "@smithy/types" "^4.12.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^4.0.0", "@smithy/util-defaults-mode-node@^4.2.25": - version "4.2.26" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.26.tgz#310da280a7168847aff4d0317ae2591f44caf61c" - integrity sha512-EQqe/WkbCinah0h1lMWh9ICl0Ob4lyl20/10WTB35SC9vDQfD8zWsOT+x2FIOXKAoZQ8z/y0EFMoodbcqWJY/w== +"@smithy/util-defaults-mode-node@^4.0.0", "@smithy/util-defaults-mode-node@^4.2.28", "@smithy/util-defaults-mode-node@^4.2.29": + version "4.2.29" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.29.tgz#2f52f19e51df19c9044ddb3c4864c96dde7e93f4" + integrity sha512-c6D7IUBsZt/aNnTBHMTf+OVh+h/JcxUUgfTcIJaWRe6zhOum1X+pNKSZtZ+7fbOn5I99XVFtmrnXKv8yHHErTQ== dependencies: "@smithy/config-resolver" "^4.4.6" "@smithy/credential-provider-imds" "^4.2.8" "@smithy/node-config-provider" "^4.3.8" "@smithy/property-provider" "^4.2.8" - "@smithy/smithy-client" "^4.10.9" + "@smithy/smithy-client" "^4.10.12" "@smithy/types" "^4.12.0" tslib "^2.6.2" @@ -5288,9 +5466,9 @@ integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== "@types/aws-lambda@^8.10.134": - version "8.10.159" - resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.159.tgz#0ab559f4519e42732a393b28c21564da9763c5aa" - integrity sha512-SAP22WSGNN12OQ8PlCzGzRCZ7QDCwI85dQZbmpz7+mAk+L7j+wI7qnvmdKh+o7A5LaOp6QnOZ2NJphAZQTTHQg== + version "8.10.160" + resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.160.tgz#7a3afdd919d730e4e2be7239d0af5f36a8b0ce1e" + integrity sha512-uoO4QVQNWFPJMh26pXtmtrRfGshPUSpMZGUyUQY20FhfHEElEBOPKgVmFs1z+kbpyBsRs2JnoOPT7++Z4GA9pA== "@types/babel__core@^7.1.14", "@types/babel__core@^7.20.5": version "7.20.5" @@ -5476,7 +5654,7 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/jsonwebtoken@^9.0.4": +"@types/jsonwebtoken@*", "@types/jsonwebtoken@^9.0.4": version "9.0.10" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== @@ -5502,9 +5680,9 @@ "@types/express" "*" "@types/node@*": - version "25.0.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.9.tgz#81ce3579ddf67cae812a9d49c8a0ab90c82e7782" - integrity sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw== + version "25.0.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.10.tgz#4864459c3c9459376b8b75fd051315071c8213e7" + integrity sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg== dependencies: undici-types "~7.16.0" @@ -5520,6 +5698,29 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== +"@types/passport-jwt@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/passport-jwt/-/passport-jwt-4.0.1.tgz#080fbe934fb9f6954fb88ec4cdf4bb2cc7c4d435" + integrity sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ== + dependencies: + "@types/jsonwebtoken" "*" + "@types/passport-strategy" "*" + +"@types/passport-strategy@*": + version "0.2.38" + resolved "https://registry.yarnpkg.com/@types/passport-strategy/-/passport-strategy-0.2.38.tgz#482abba0b165cd4553ec8b748f30b022bd6c04d3" + integrity sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA== + dependencies: + "@types/express" "*" + "@types/passport" "*" + +"@types/passport@*": + version "1.0.17" + resolved "https://registry.yarnpkg.com/@types/passport/-/passport-1.0.17.tgz#718a8d1f7000ebcf6bbc0853da1bc8c4bc7ea5e6" + integrity sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg== + dependencies: + "@types/express" "*" + "@types/prop-types@*": version "15.7.15" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7" @@ -5668,37 +5869,37 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^8.23.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.0.tgz#afb966c66a2fdc6158cf81118204a971a36d0fc5" - integrity sha512-eEXsVvLPu8Z4PkFibtuFJLJOTAV/nPdgtSjkGoPpddpFk3/ym2oy97jynY6ic2m6+nc5M8SE1e9v/mHKsulcJg== + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz#f6640f6f8749b71d9ab457263939e8932a3c6b46" + integrity sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag== dependencies: "@eslint-community/regexpp" "^4.12.2" - "@typescript-eslint/scope-manager" "8.53.0" - "@typescript-eslint/type-utils" "8.53.0" - "@typescript-eslint/utils" "8.53.0" - "@typescript-eslint/visitor-keys" "8.53.0" + "@typescript-eslint/scope-manager" "8.53.1" + "@typescript-eslint/type-utils" "8.53.1" + "@typescript-eslint/utils" "8.53.1" + "@typescript-eslint/visitor-keys" "8.53.1" ignore "^7.0.5" natural-compare "^1.4.0" ts-api-utils "^2.4.0" "@typescript-eslint/parser@^8.23.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.53.0.tgz#d8bed6f12dc74e03751e5f947510ff2b165990c6" - integrity sha512-npiaib8XzbjtzS2N4HlqPvlpxpmZ14FjSJrteZpPxGUaYPlvhzlzUZ4mZyABo0EFrOWnvyd0Xxroq//hKhtAWg== - dependencies: - "@typescript-eslint/scope-manager" "8.53.0" - "@typescript-eslint/types" "8.53.0" - "@typescript-eslint/typescript-estree" "8.53.0" - "@typescript-eslint/visitor-keys" "8.53.0" + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.53.1.tgz#58d4a70cc2daee2becf7d4521d65ea1782d6ec68" + integrity sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg== + dependencies: + "@typescript-eslint/scope-manager" "8.53.1" + "@typescript-eslint/types" "8.53.1" + "@typescript-eslint/typescript-estree" "8.53.1" + "@typescript-eslint/visitor-keys" "8.53.1" debug "^4.4.3" -"@typescript-eslint/project-service@8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.53.0.tgz#327c67c61c16a1c8b12a440b0779b41eb77cc7df" - integrity sha512-Bl6Gdr7NqkqIP5yP9z1JU///Nmes4Eose6L1HwpuVHwScgDPPuEWbUVhvlZmb8hy0vX9syLk5EGNL700WcBlbg== +"@typescript-eslint/project-service@8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.53.1.tgz#4e47856a0b14a1ceb28b0294b4badef3be1e9734" + integrity sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.53.0" - "@typescript-eslint/types" "^8.53.0" + "@typescript-eslint/tsconfig-utils" "^8.53.1" + "@typescript-eslint/types" "^8.53.1" debug "^4.4.3" "@typescript-eslint/scope-manager@5.62.0": @@ -5709,27 +5910,27 @@ "@typescript-eslint/types" "5.62.0" "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/scope-manager@8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.53.0.tgz#f922fcbf0d42e72f065297af31779ccf19de9a97" - integrity sha512-kWNj3l01eOGSdVBnfAF2K1BTh06WS0Yet6JUgb9Cmkqaz3Jlu0fdVUjj9UI8gPidBWSMqDIglmEXifSgDT/D0g== +"@typescript-eslint/scope-manager@8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz#6c4b8c82cd45ae3b365afc2373636e166743a8fa" + integrity sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ== dependencies: - "@typescript-eslint/types" "8.53.0" - "@typescript-eslint/visitor-keys" "8.53.0" + "@typescript-eslint/types" "8.53.1" + "@typescript-eslint/visitor-keys" "8.53.1" -"@typescript-eslint/tsconfig-utils@8.53.0", "@typescript-eslint/tsconfig-utils@^8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.0.tgz#105279d7969a7abdc8345cc9c57cff83cf910f8f" - integrity sha512-K6Sc0R5GIG6dNoPdOooQ+KtvT5KCKAvTcY8h2rIuul19vxH5OTQk7ArKkd4yTzkw66WnNY0kPPzzcmWA+XRmiA== +"@typescript-eslint/tsconfig-utils@8.53.1", "@typescript-eslint/tsconfig-utils@^8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz#efe80b8d019cd49e5a1cf46c2eb0cd2733076424" + integrity sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA== -"@typescript-eslint/type-utils@8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.53.0.tgz#81a0de5c01fc68f6df0591d03cd8226bda01c91f" - integrity sha512-BBAUhlx7g4SmcLhn8cnbxoxtmS7hcq39xKCgiutL3oNx1TaIp+cny51s8ewnKMpVUKQUGb41RAUWZ9kxYdovuw== +"@typescript-eslint/type-utils@8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz#95de2651a96d580bf5c6c6089ddd694284d558ad" + integrity sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w== dependencies: - "@typescript-eslint/types" "8.53.0" - "@typescript-eslint/typescript-estree" "8.53.0" - "@typescript-eslint/utils" "8.53.0" + "@typescript-eslint/types" "8.53.1" + "@typescript-eslint/typescript-estree" "8.53.1" + "@typescript-eslint/utils" "8.53.1" debug "^4.4.3" ts-api-utils "^2.4.0" @@ -5748,10 +5949,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/types@8.53.0", "@typescript-eslint/types@^8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.53.0.tgz#1adcad3fa32bc2c4cbf3785ba07a5e3151819efb" - integrity sha512-Bmh9KX31Vlxa13+PqPvt4RzKRN1XORYSLlAE+sO1i28NkisGbTtSLFVB3l7PWdHtR3E0mVMuC7JilWJ99m2HxQ== +"@typescript-eslint/types@8.53.1", "@typescript-eslint/types@^8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.53.1.tgz#101f203f0807a63216cceceedb815fabe21d5793" + integrity sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" @@ -5766,15 +5967,15 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.0.tgz#7805b46b7a8ce97e91b7bb56fc8b1ba26ca8ef52" - integrity sha512-pw0c0Gdo7Z4xOG987u3nJ8akL9093yEEKv8QTJ+Bhkghj1xyj8cgPaavlr9rq8h7+s6plUJ4QJYw2gCZodqmGw== +"@typescript-eslint/typescript-estree@8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz#b6dce2303c9e27e95b8dcd8c325868fff53e488f" + integrity sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg== dependencies: - "@typescript-eslint/project-service" "8.53.0" - "@typescript-eslint/tsconfig-utils" "8.53.0" - "@typescript-eslint/types" "8.53.0" - "@typescript-eslint/visitor-keys" "8.53.0" + "@typescript-eslint/project-service" "8.53.1" + "@typescript-eslint/tsconfig-utils" "8.53.1" + "@typescript-eslint/types" "8.53.1" + "@typescript-eslint/visitor-keys" "8.53.1" debug "^4.4.3" minimatch "^9.0.5" semver "^7.7.3" @@ -5795,15 +5996,15 @@ eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/utils@8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.53.0.tgz#bf0a4e2edaf1afc9abce209fc02f8cab0b74af13" - integrity sha512-XDY4mXTez3Z1iRDI5mbRhH4DFSt46oaIFsLg+Zn97+sYrXACziXSQcSelMybnVZ5pa1P6xYkPr5cMJyunM1ZDA== +"@typescript-eslint/utils@8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.53.1.tgz#81fe6c343de288701b774f4d078382f567e6edaa" + integrity sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg== dependencies: "@eslint-community/eslint-utils" "^4.9.1" - "@typescript-eslint/scope-manager" "8.53.0" - "@typescript-eslint/types" "8.53.0" - "@typescript-eslint/typescript-estree" "8.53.0" + "@typescript-eslint/scope-manager" "8.53.1" + "@typescript-eslint/types" "8.53.1" + "@typescript-eslint/typescript-estree" "8.53.1" "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" @@ -5813,12 +6014,12 @@ "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@8.53.0": - version "8.53.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.0.tgz#9a785664ddae7e3f7e570ad8166e48dbc9c6cf02" - integrity sha512-LZ2NqIHFhvFwxG0qZeLL9DvdNAHPGCY5dIRwBhyYeU+LfLhcStE1ImjsuTG/WaVh3XysGaeLW8Rqq7cGkPCFvw== +"@typescript-eslint/visitor-keys@8.53.1": + version "8.53.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz#405f04959be22b9be364939af8ac19c3649b6eb7" + integrity sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg== dependencies: - "@typescript-eslint/types" "8.53.0" + "@typescript-eslint/types" "8.53.1" eslint-visitor-keys "^4.2.1" "@ungap/structured-clone@^1.2.0", "@ungap/structured-clone@^1.3.0": @@ -6837,7 +7038,7 @@ abab@^2.0.5, abab@^2.0.6: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -accepts@~1.3.4, accepts@~1.3.8: +accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -7241,17 +7442,17 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" aws-amplify@^6.15.10: - version "6.15.10" - resolved "https://registry.yarnpkg.com/aws-amplify/-/aws-amplify-6.15.10.tgz#6e72488eafd7160a828dcea6cdf725807d9f1ec8" - integrity sha512-OKph1YS3pRCCc2OC8O7VgCks08F2eJg87Es7z6rBVo4SyfunMNPthzLbIcOnnKilkEsJSsVBFbthmL7kEXLEDA== - dependencies: - "@aws-amplify/analytics" "7.0.91" - "@aws-amplify/api" "6.3.22" - "@aws-amplify/auth" "6.17.2" - "@aws-amplify/core" "6.15.1" - "@aws-amplify/datastore" "5.1.3" - "@aws-amplify/notifications" "2.0.91" - "@aws-amplify/storage" "6.11.1" + version "6.16.0" + resolved "https://registry.yarnpkg.com/aws-amplify/-/aws-amplify-6.16.0.tgz#2e36832932443ade27bf80bb9bb78e1469866984" + integrity sha512-4DIUtlgLJ7PIZZI30rNdd8EIuvMLbvCrT2Td4WaidsCekgZhJbekR10onnDKFmbDSw4Q8O4yoy2bRP4Qb1hRnQ== + dependencies: + "@aws-amplify/analytics" "7.0.92" + "@aws-amplify/api" "6.3.23" + "@aws-amplify/auth" "6.18.0" + "@aws-amplify/core" "6.16.0" + "@aws-amplify/datastore" "5.1.4" + "@aws-amplify/notifications" "2.0.92" + "@aws-amplify/storage" "6.12.0" tslib "^2.5.0" aws-sign2@~0.7.0: @@ -7270,9 +7471,9 @@ axe-core@^4.10.0: integrity sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A== axios@^1.0.0, axios@^1.6.0, axios@^1.8.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" - integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA== + version "1.13.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.3.tgz#f123e77356630a22b0163920662556944f2be1a1" + integrity sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g== dependencies: follow-redirects "^1.15.6" form-data "^4.0.4" @@ -7364,12 +7565,12 @@ babel-plugin-macros@^3.1.0: resolve "^1.19.0" babel-plugin-polyfill-corejs2@^0.4.14: - version "0.4.14" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" - integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== + version "0.4.15" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.15.tgz#808fa349686eea4741807cfaaa2aa3aa57ce120a" + integrity sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw== dependencies: - "@babel/compat-data" "^7.27.7" - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/compat-data" "^7.28.6" + "@babel/helper-define-polyfill-provider" "^0.6.6" semver "^6.3.1" babel-plugin-polyfill-corejs3@^0.13.0: @@ -7381,11 +7582,11 @@ babel-plugin-polyfill-corejs3@^0.13.0: core-js-compat "^3.43.0" babel-plugin-polyfill-regenerator@^0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" - integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== + version "0.6.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.6.tgz#69f5dd263cab933c42fe5ea05e83443b374bd4bf" + integrity sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/helper-define-polyfill-provider" "^0.6.6" babel-plugin-transform-typescript-metadata@^0.3.1: version "0.3.2" @@ -7434,9 +7635,9 @@ base64-js@^1.0.2, base64-js@^1.3.1: integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== baseline-browser-mapping@^2.9.0: - version "2.9.15" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.15.tgz#6baaa0069883f50a99cdb31b56646491f47c05d7" - integrity sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg== + version "2.9.18" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz#c8281693035a9261b10d662a5379650a6c2d1ff7" + integrity sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA== basic-auth@^2.0.1: version "2.0.1" @@ -7544,7 +7745,7 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.0, browserslist@^4.28.1: +browserslist@^4.0.0, browserslist@^4.21.4, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.28.1: version "4.28.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== @@ -7708,9 +7909,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: - version "1.0.30001765" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001765.tgz#4a78d8a797fd4124ebaab2043df942eb091648ee" - integrity sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ== + version "1.0.30001766" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz#b6f6b55cb25a2d888d9393104d14751c6a7d6f7a" + integrity sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA== caseless@~0.12.0: version "0.12.0" @@ -8104,11 +8305,11 @@ copy-webpack-plugin@^10.2.4: serialize-javascript "^6.0.0" core-js-compat@^3.43.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" - integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== + version "3.48.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.48.0.tgz#7efbe1fc1cbad44008190462217cc5558adaeaa6" + integrity sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q== dependencies: - browserslist "^4.28.0" + browserslist "^4.28.1" core-util-is@1.0.2: version "1.0.2" @@ -8442,7 +8643,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6, debug@^4.3.7, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.6, debug@^4.3.7, debug@^4.4.0, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -8612,9 +8813,9 @@ diff-sequences@^29.4.3, diff-sequences@^29.6.3: integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + version "4.0.4" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.4.tgz#7a6dbfda325f25f07517e9b518f897c08332e07d" + integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== dijkstrajs@^1.0.1: version "1.0.3" @@ -8776,9 +8977,9 @@ ejs@^3.1.7: jake "^10.8.5" electron-to-chromium@^1.5.263: - version "1.5.267" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" - integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== + version "1.5.278" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.278.tgz#807a5e321f012a41bfd64e653f35993c9af95493" + integrity sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw== emittery@^0.13.1: version "0.13.1" @@ -9320,9 +9521,9 @@ eventemitter3@^4.0.0: integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + version "5.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.4.tgz#a86d66170433712dde814707ac52b5271ceb1feb" + integrity sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw== events@3.3.0, events@^3.2.0: version "3.3.0" @@ -9984,7 +10185,7 @@ glob-parent@^6.0.1, glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" -glob-to-regex.js@^1.0.1: +glob-to-regex.js@^1.0.0, glob-to-regex.js@^1.0.1: version "1.2.0" resolved "https://registry.yarnpkg.com/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz#2b323728271d133830850e32311f40766c5f6413" integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== @@ -10061,9 +10262,9 @@ globby@^12.0.2: slash "^4.0.0" google-libphonenumber@^3.2.40: - version "3.2.43" - resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.43.tgz#c1e5107ab9c6e3848dc2108e380bde08da80931c" - integrity sha512-TbIX/UC3BFRJwCxbBeCPwuRC4Qws9Jz/CECmfTM1t9RFoI3X6eRThurv6AYr9wSrt640IA9KFIHuAD/vlyjqRw== + version "3.2.44" + resolved "https://registry.yarnpkg.com/google-libphonenumber/-/google-libphonenumber-3.2.44.tgz#694ec9d5581f013b881c4c2937791e973a45f420" + integrity sha512-9p2TghluF2LTChFMLWsDRD5N78SZDsILdUk4gyqYxBXluCyxoPiOq+Fqt7DKM+LUd33+OgRkdrc+cPR93AypCQ== gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" @@ -10201,15 +10402,16 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== +http-errors@~1.8.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" http-errors@~2.0.0, http-errors@~2.0.1: version "2.0.1" @@ -10404,12 +10606,7 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -11599,9 +11796,9 @@ jwa@^1.4.2: safe-buffer "^5.0.1" jwks-rsa@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-3.2.1.tgz#53672c9ac89b70dbf13e1126733f92b8fefcf7f3" - integrity sha512-r7QdN9TdqI6aFDFZt+GpAqj5yRtMUv23rL2I01i7B8P2/g8F0ioEN6VeSObKgTLs4GmmNJwP9J7Fyp/AYDBGRg== + version "3.2.2" + resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-3.2.2.tgz#f6d528306befacdbc62c8c0272761faac55ffbb3" + integrity sha512-BqTyEDV+lS8F2trk3A+qJnxV5Q9EqKCBJOPti3W97r7qTympCZjb7h2X6f2kc+0K3rsSTY1/6YG2eaXKoj497w== dependencies: "@types/jsonwebtoken" "^9.0.4" debug "^4.3.4" @@ -11697,9 +11894,9 @@ levn@^0.4.1: type-check "~0.4.0" libphonenumber-js@^1.11.1: - version "1.12.34" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.34.tgz#20ed9da39e930e98eff4b6e24a8d8480303658af" - integrity sha512-v/Ip8k8eYdp7bINpzqDh46V/PaQ8sK+qi97nMQgjZzFlb166YFqlR/HVI+MzsI9JqcyyVWCOipmmretiaSyQyw== + version "1.12.35" + resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.12.35.tgz#149d4a66b2a7a518998c430c6d33465abaed23c4" + integrity sha512-T/Cz6iLcsZdb5jDncDcUNhSAJ0VlSC9TnsqtBNdpkaAmy24/R1RhErtNWVWBrcUZKs9hSgaVsBkc7HxYnazIfw== license-webpack-plugin@^4.0.2: version "4.0.2" @@ -11865,11 +12062,16 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@4.17.21, lodash@^4.17.21: +lodash@4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lodash@^4.17.21: + version "4.17.23" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== + log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -12031,10 +12233,18 @@ memfs@^3.4.1: fs-monkey "^1.0.4" memfs@^4.43.1: - version "4.54.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.54.0.tgz#fd4b04a3a9b268e94fb8cff2e0ac0f83b673e150" - integrity sha512-wiJ9YYUj2bVcpdJgIv6y1KrStknSdNhfM4+4+ttt0cHHMxVLZ3aOBoER8krt9lGY5HkR2ustUXiihhNPeNxXaQ== - dependencies: + version "4.56.10" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.56.10.tgz#eaf2f6556db10f91f1e9ad9f1274fd988c646202" + integrity sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w== + dependencies: + "@jsonjoy.com/fs-core" "4.56.10" + "@jsonjoy.com/fs-fsa" "4.56.10" + "@jsonjoy.com/fs-node" "4.56.10" + "@jsonjoy.com/fs-node-builtins" "4.56.10" + "@jsonjoy.com/fs-node-to-fsa" "4.56.10" + "@jsonjoy.com/fs-node-utils" "4.56.10" + "@jsonjoy.com/fs-print" "4.56.10" + "@jsonjoy.com/fs-snapshot" "4.56.10" "@jsonjoy.com/json-pack" "^1.11.0" "@jsonjoy.com/util" "^1.9.0" glob-to-regex.js "^1.0.1" @@ -12085,7 +12295,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34, mime-types@~2.1.35: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -12776,7 +12986,7 @@ parse5@^7.1.2: dependencies: entities "^6.0.0" -parseurl@~1.3.2, parseurl@~1.3.3: +parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -12886,10 +13096,10 @@ pg-cloudflare@^1.3.0: resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz#386035d4bfcf1a7045b026f8b21acf5353f14d65" integrity sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ== -pg-connection-string@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.10.0.tgz#5570fd4837bd813a2b3938cd1744586c7df4a5f1" - integrity sha512-ur/eoPKzDx2IjPaYyXS6Y8NSblxM7X64deV2ObV57vhjsWiwLvUD6meukAzogiOsu60GO8m/3Cb6FdJsWNjwXg== +pg-connection-string@^2.10.1: + version "2.10.1" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.10.1.tgz#34e0bf60333551ae1e76caf47cce633a5b2e4b70" + integrity sha512-iNzslsoeSH2/gmDDKiyMqF64DATUCWj3YJ0wP14kqcsf2TUklwimd+66yYojKwZCA7h2yRNLGug71hCBA2a4sw== pg-int8@1.0.1: version "1.0.1" @@ -12918,11 +13128,11 @@ pg-types@2.2.0: postgres-interval "^1.1.0" pg@^8.12.0: - version "8.17.1" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.17.1.tgz#cecf0c96d3f5004951ccbafaaa230779ebc89d35" - integrity sha512-EIR+jXdYNSMOrpRp7g6WgQr7SaZNZfS7IzZIO0oTNEeibq956JxeD15t3Jk3zZH0KH8DmOIx38qJfQenoE8bXQ== + version "8.17.2" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.17.2.tgz#8df8c039c36bb97016be276094fc4991e8683963" + integrity sha512-vjbKdiBJRqzcYw1fNU5KuHyYvdJ1qpcQg1CeBrHFqV1pWgHeVR6j/+kX0E1AAXfyuLUGY1ICrN2ELKA/z2HWzw== dependencies: - pg-connection-string "^2.10.0" + pg-connection-string "^2.10.1" pg-pool "^3.11.0" pg-protocol "^1.11.0" pg-types "2.2.0" @@ -13529,9 +13739,9 @@ react-hook-form@7.53.2: integrity sha512-YVel6fW5sOeedd1524pltpHX+jgU2u3DSDtXEaBORNdqiNrsX/nUI/iGXONegttg0mJVnfrIkiV0cmTU6Oo2xw== react-international-phone@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/react-international-phone/-/react-international-phone-4.6.1.tgz#9c04da4e0c1191dc1336cf074756437d4ef21785" - integrity sha512-Hfm8r5+yGObrqg+R2S17fhmrHpZQHNsPmREZ6XAFHHspvGvvPdYX3fRfvE800hYMJoBPRYpoFCdClH2V32FPWg== + version "4.7.0" + resolved "https://registry.yarnpkg.com/react-international-phone/-/react-international-phone-4.7.0.tgz#4aaf3a57970baae9234ceb1941427db3b91d0c68" + integrity sha512-PMC8bGDkNOdRQSMxtz8XL4tlKb5nCB5SpbBc4QkDx9NZs+eLtgfGUBlwF8fEE0uB3W6CShgpWA5zl9niwHUVpA== react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" @@ -13774,7 +13984,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== -resolve@^1.1.7, resolve@^1.12.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.10, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.12.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.11, resolve@^1.22.4: version "1.22.11" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== @@ -13831,37 +14041,37 @@ rimraf@^3.0.2: glob "^7.1.3" rollup@^4.20.0: - version "4.55.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.55.1.tgz#4ec182828be440648e7ee6520dc35e9f20e05144" - integrity sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A== + version "4.56.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.56.0.tgz#65959d13cfbd7e48b8868c05165b1738f0143862" + integrity sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.55.1" - "@rollup/rollup-android-arm64" "4.55.1" - "@rollup/rollup-darwin-arm64" "4.55.1" - "@rollup/rollup-darwin-x64" "4.55.1" - "@rollup/rollup-freebsd-arm64" "4.55.1" - "@rollup/rollup-freebsd-x64" "4.55.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.55.1" - "@rollup/rollup-linux-arm-musleabihf" "4.55.1" - "@rollup/rollup-linux-arm64-gnu" "4.55.1" - "@rollup/rollup-linux-arm64-musl" "4.55.1" - "@rollup/rollup-linux-loong64-gnu" "4.55.1" - "@rollup/rollup-linux-loong64-musl" "4.55.1" - "@rollup/rollup-linux-ppc64-gnu" "4.55.1" - "@rollup/rollup-linux-ppc64-musl" "4.55.1" - "@rollup/rollup-linux-riscv64-gnu" "4.55.1" - "@rollup/rollup-linux-riscv64-musl" "4.55.1" - "@rollup/rollup-linux-s390x-gnu" "4.55.1" - "@rollup/rollup-linux-x64-gnu" "4.55.1" - "@rollup/rollup-linux-x64-musl" "4.55.1" - "@rollup/rollup-openbsd-x64" "4.55.1" - "@rollup/rollup-openharmony-arm64" "4.55.1" - "@rollup/rollup-win32-arm64-msvc" "4.55.1" - "@rollup/rollup-win32-ia32-msvc" "4.55.1" - "@rollup/rollup-win32-x64-gnu" "4.55.1" - "@rollup/rollup-win32-x64-msvc" "4.55.1" + "@rollup/rollup-android-arm-eabi" "4.56.0" + "@rollup/rollup-android-arm64" "4.56.0" + "@rollup/rollup-darwin-arm64" "4.56.0" + "@rollup/rollup-darwin-x64" "4.56.0" + "@rollup/rollup-freebsd-arm64" "4.56.0" + "@rollup/rollup-freebsd-x64" "4.56.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.56.0" + "@rollup/rollup-linux-arm-musleabihf" "4.56.0" + "@rollup/rollup-linux-arm64-gnu" "4.56.0" + "@rollup/rollup-linux-arm64-musl" "4.56.0" + "@rollup/rollup-linux-loong64-gnu" "4.56.0" + "@rollup/rollup-linux-loong64-musl" "4.56.0" + "@rollup/rollup-linux-ppc64-gnu" "4.56.0" + "@rollup/rollup-linux-ppc64-musl" "4.56.0" + "@rollup/rollup-linux-riscv64-gnu" "4.56.0" + "@rollup/rollup-linux-riscv64-musl" "4.56.0" + "@rollup/rollup-linux-s390x-gnu" "4.56.0" + "@rollup/rollup-linux-x64-gnu" "4.56.0" + "@rollup/rollup-linux-x64-musl" "4.56.0" + "@rollup/rollup-openbsd-x64" "4.56.0" + "@rollup/rollup-openharmony-arm64" "4.56.0" + "@rollup/rollup-win32-arm64-msvc" "4.56.0" + "@rollup/rollup-win32-ia32-msvc" "4.56.0" + "@rollup/rollup-win32-x64-gnu" "4.56.0" + "@rollup/rollup-win32-x64-msvc" "4.56.0" fsevents "~2.3.2" rrweb-cssom@^0.6.0: @@ -13957,9 +14167,9 @@ sass-loader@^12.2.0: neo-async "^2.6.2" sass@^1.42.1: - version "1.97.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.2.tgz#e515a319092fd2c3b015228e3094b40198bff0da" - integrity sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw== + version "1.97.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.97.3.tgz#9cb59339514fa7e2aec592b9700953ac6e331ab2" + integrity sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg== dependencies: chokidar "^4.0.0" immutable "^5.0.2" @@ -14060,17 +14270,17 @@ serialize-javascript@^6.0.0, serialize-javascript@^6.0.1, serialize-javascript@^ randombytes "^2.1.0" serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + version "1.9.2" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.2.tgz#2988e3612106d78a5e4849ddff552ce7bd3d9bcb" + integrity sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ== dependencies: - accepts "~1.3.4" + accepts "~1.3.8" batch "0.6.1" debug "2.6.9" escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" + http-errors "~1.8.0" + mime-types "~2.1.35" + parseurl "~1.3.3" serve-static@~1.16.2: version "1.16.3" @@ -14118,11 +14328,6 @@ set-proto@^1.0.0: es-errors "^1.3.0" es-object-atoms "^1.0.0" -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -14409,7 +14614,7 @@ stackback@0.0.2: resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.5.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== @@ -14882,7 +15087,7 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@~1.0.1: +toidentifier@1.0.1, toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== From 34f86e00fdaa159198621d257b3350f0bb70cbc1 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 25 Jan 2026 23:48:00 -0500 Subject: [PATCH 21/22] Added in decorator and guard for a bypass gaurd --- apps/backend/src/app.module.ts | 5 ++++ apps/backend/src/auth/jwt-auth.guard.ts | 25 +++++++++++++++++++ .../backend/src/auth/jwt-payload.interface.ts | 2 +- apps/backend/src/auth/public.decorator.ts | 4 +++ .../src/donations/donations.controller.ts | 2 -- .../src/pantries/pantries.controller.ts | 4 ++- apps/frontend/src/app.tsx | 7 +++--- 7 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 apps/backend/src/auth/jwt-auth.guard.ts create mode 100644 apps/backend/src/auth/public.decorator.ts diff --git a/apps/backend/src/app.module.ts b/apps/backend/src/app.module.ts index 60901567..b92ca630 100644 --- a/apps/backend/src/app.module.ts +++ b/apps/backend/src/app.module.ts @@ -16,6 +16,7 @@ import { DonationItemsModule } from './donationItems/donationItems.module'; import { AllocationModule } from './allocations/allocations.module'; import { APP_GUARD } from '@nestjs/core'; import { RolesGuard } from './auth/roles.guard'; +import { JwtAuthGuard } from './auth/jwt-auth.guard'; @Module({ imports: [ @@ -48,6 +49,10 @@ import { RolesGuard } from './auth/roles.guard'; provide: APP_GUARD, useClass: RolesGuard, }, + { + provide: APP_GUARD, + useClass: JwtAuthGuard, + } ], }) export class AppModule {} diff --git a/apps/backend/src/auth/jwt-auth.guard.ts b/apps/backend/src/auth/jwt-auth.guard.ts new file mode 100644 index 00000000..5823c8c3 --- /dev/null +++ b/apps/backend/src/auth/jwt-auth.guard.ts @@ -0,0 +1,25 @@ +import { Injectable, ExecutionContext } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; +import { Reflector } from '@nestjs/core'; +import { IS_PUBLIC_KEY } from './public.decorator'; + +// Extension onto AuthGuard to add public route handling +@Injectable() +export class JwtAuthGuard extends AuthGuard('jwt') { + constructor(private reflector: Reflector) { + super(); + } + + canActivate(context: ExecutionContext) { + const isPublic = this.reflector.getAllAndOverride( + IS_PUBLIC_KEY, + [context.getHandler(), context.getClass()], + ); + + if (isPublic) { + return true; + } + + return super.canActivate(context); + } +} diff --git a/apps/backend/src/auth/jwt-payload.interface.ts b/apps/backend/src/auth/jwt-payload.interface.ts index 4134cc5a..cf1ca846 100644 --- a/apps/backend/src/auth/jwt-payload.interface.ts +++ b/apps/backend/src/auth/jwt-payload.interface.ts @@ -6,4 +6,4 @@ export interface CognitoJwtPayload { iss?: string; exp?: number; iat?: number; -} \ No newline at end of file +} diff --git a/apps/backend/src/auth/public.decorator.ts b/apps/backend/src/auth/public.decorator.ts new file mode 100644 index 00000000..b3845e12 --- /dev/null +++ b/apps/backend/src/auth/public.decorator.ts @@ -0,0 +1,4 @@ +import { SetMetadata } from '@nestjs/common'; + +export const IS_PUBLIC_KEY = 'isPublic'; +export const Public = () => SetMetadata(IS_PUBLIC_KEY, true); diff --git a/apps/backend/src/donations/donations.controller.ts b/apps/backend/src/donations/donations.controller.ts index ad09b322..6bcd2a7e 100644 --- a/apps/backend/src/donations/donations.controller.ts +++ b/apps/backend/src/donations/donations.controller.ts @@ -6,14 +6,12 @@ import { Patch, Param, NotFoundException, - UseGuards, ParseIntPipe, BadRequestException, } from '@nestjs/common'; import { ApiBody } from '@nestjs/swagger'; import { Donation } from './donations.entity'; import { DonationService } from './donations.service'; -import { AuthGuard } from '@nestjs/passport'; import { DonationStatus } from './types'; @Controller('donations') diff --git a/apps/backend/src/pantries/pantries.controller.ts b/apps/backend/src/pantries/pantries.controller.ts index d20e344c..8aa2c3ed 100644 --- a/apps/backend/src/pantries/pantries.controller.ts +++ b/apps/backend/src/pantries/pantries.controller.ts @@ -23,6 +23,7 @@ import { } from './types'; import { Order } from '../orders/order.entity'; import { OrdersService } from '../orders/order.service'; +import { Public } from '../auth/public.decorator'; @Controller('pantries') export class PantriesController { @@ -31,7 +32,7 @@ export class PantriesController { private ordersService: OrdersService, ) {} - @Roles(Role.VOLUNTEER) + @Roles(Role.ADMIN) @Get('/pending') async getPendingPantries(): Promise { return this.pantriesService.getPendingPantries(); @@ -209,6 +210,7 @@ export class PantriesController { ], }, }) + @Public() @Post() async submitPantryApplication( @Body(new ValidationPipe()) diff --git a/apps/frontend/src/app.tsx b/apps/frontend/src/app.tsx index 9490cc78..2035f183 100644 --- a/apps/frontend/src/app.tsx +++ b/apps/frontend/src/app.tsx @@ -193,9 +193,10 @@ const router = createBrowserRouter([ { path: '/approve-pantries', element: ( - - - + // + // + // + ), }, { From 99c018a0f1265f498063248b0fd8f7ad5c35eb95 Mon Sep 17 00:00:00 2001 From: Dalton Burkhart Date: Sun, 25 Jan 2026 23:50:07 -0500 Subject: [PATCH 22/22] Final commit --- apps/backend/src/app.module.ts | 2 +- apps/backend/src/auth/jwt-auth.guard.ts | 8 ++++---- apps/frontend/src/app.tsx | 7 +++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/backend/src/app.module.ts b/apps/backend/src/app.module.ts index b92ca630..3d314819 100644 --- a/apps/backend/src/app.module.ts +++ b/apps/backend/src/app.module.ts @@ -52,7 +52,7 @@ import { JwtAuthGuard } from './auth/jwt-auth.guard'; { provide: APP_GUARD, useClass: JwtAuthGuard, - } + }, ], }) export class AppModule {} diff --git a/apps/backend/src/auth/jwt-auth.guard.ts b/apps/backend/src/auth/jwt-auth.guard.ts index 5823c8c3..8ab6454e 100644 --- a/apps/backend/src/auth/jwt-auth.guard.ts +++ b/apps/backend/src/auth/jwt-auth.guard.ts @@ -11,10 +11,10 @@ export class JwtAuthGuard extends AuthGuard('jwt') { } canActivate(context: ExecutionContext) { - const isPublic = this.reflector.getAllAndOverride( - IS_PUBLIC_KEY, - [context.getHandler(), context.getClass()], - ); + const isPublic = this.reflector.getAllAndOverride(IS_PUBLIC_KEY, [ + context.getHandler(), + context.getClass(), + ]); if (isPublic) { return true; diff --git a/apps/frontend/src/app.tsx b/apps/frontend/src/app.tsx index 2035f183..9490cc78 100644 --- a/apps/frontend/src/app.tsx +++ b/apps/frontend/src/app.tsx @@ -193,10 +193,9 @@ const router = createBrowserRouter([ { path: '/approve-pantries', element: ( - // - // - // - + + + ), }, {