diff --git a/.github/workflows/auto-assign.yaml b/.github/workflows/auto-assign.yaml index be0a7689..a882dfc4 100644 --- a/.github/workflows/auto-assign.yaml +++ b/.github/workflows/auto-assign.yaml @@ -15,7 +15,40 @@ jobs: const comment = context.payload.comment; const issue = context.issue; const owner = "keyshade-xyz"; - const repo = "keyshade" + const repo = "keyshade"; + + async function updateProjectStatus(issueNumber) { + const projectsResponse = await github.rest.projects.listForRepo({ + owner, + repo, + per_page: 100, + }); + + for (const project of projectsResponse.data) { + const columnsResponse = await github.rest.projects.listColumns({ + project_id: project.id, + per_page: 100, + }); + + const inProgressColumn = columnsResponse.data.find(column => column.name === "In Progress"); + if (!inProgressColumn) continue; + + const cardsResponse = await github.rest.projects.listCards({ + column_id: inProgressColumn.id, + per_page: 100, + }); + + const issueCardExists = cardsResponse.data.some(card => card.content_id === issueNumber && card.content_type === "Issue"); + + if (!issueCardExists) { + await github.rest.projects.createCard({ + column_id: inProgressColumn.id, + content_id: issueNumber, + content_type: "Issue", + }); + } + } + } if (comment.body.startsWith('/attempt')) { if (!issue.assignee) { @@ -23,20 +56,23 @@ jobs: owner, repo, issue_number: issue.number, - assignees: [comment.user.login] + assignees: [comment.user.login], }); + await github.rest.issues.createComment({ owner, repo, issue_number: issue.number, - body: `Assigned the issue to @${comment.user.login}!` + body: `Assigned the issue to @${comment.user.login}!`, }); + + await updateProjectStatus(issue.number); } else { await github.rest.issues.createComment({ owner, repo, issue_number: issue.number, - body: 'This issue is already assigned. Tag a maintainer if you need to take over.' + body: 'This issue is already assigned. Tag a maintainer if you need to take over.', }); } } diff --git a/.github/workflows/docker-ci.yml b/.github/workflows/docker-ci.yml new file mode 100644 index 00000000..08ecf7ca --- /dev/null +++ b/.github/workflows/docker-ci.yml @@ -0,0 +1,22 @@ +name: Docker Check + +on: + push: + paths: + - '**Dockerfile' + pull_request: + paths: + - '**Dockerfile' +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Build Docker Image + run: | + for dir in app/*/ ; do + if [ -f "$dir/Dockerfile" ]; then + docker build -f "$dir/Dockerfile" "$dir" + fi + done diff --git a/.github/workflows/validate-api-client.yaml b/.github/workflows/validate-api-client.yaml index a5246a5a..796504a3 100644 --- a/.github/workflows/validate-api-client.yaml +++ b/.github/workflows/validate-api-client.yaml @@ -52,6 +52,10 @@ jobs: run: | pnpm run lint:api-client + - name: Build + run: | + pnpm run build:api-client + - name: Test run: | pnpm run test:api-client diff --git a/.github/workflows/validate-cli.yaml b/.github/workflows/validate-cli.yaml index 34577cc2..81ac44d1 100644 --- a/.github/workflows/validate-cli.yaml +++ b/.github/workflows/validate-cli.yaml @@ -1,4 +1,4 @@ -name: Validate Cli +name: Validate CLI on: push: @@ -58,4 +58,8 @@ jobs: - name: Lint run: | - pnpm run lint:cli \ No newline at end of file + pnpm run lint:cli + + - name: Build + run: | + pnpm run build:cli diff --git a/.husky/pre-commit b/.husky/pre-commit index f1fdd725..ed3f04a6 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" -pnpm lint && pnpm format && pnpm test:api && pnpm test:api-client \ No newline at end of file +pnpm lint && pnpm format && pnpm test:api && pnpm test:api-client diff --git a/CHANGELOG.md b/CHANGELOG.md index ef833e58..85c33727 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,64 @@ +## [2.3.0](https://github.com/keyshade-xyz/keyshade/compare/v2.2.0...v2.3.0) (2024-07-29) + +### 🚀 Features + +* **api:** Add pagination metadata to Environment module ([#382](https://github.com/keyshade-xyz/keyshade/issues/382)) ([9baa344](https://github.com/keyshade-xyz/keyshade/commit/9baa344e662e8034ab184f9db2218b8d8b279c61)) +* **api:** Add pagination metadata to Event module ([#394](https://github.com/keyshade-xyz/keyshade/issues/394)) ([60010b4](https://github.com/keyshade-xyz/keyshade/commit/60010b434a15082b90b9b858e0dd9c09748661fb)) +* **api:** Add pagination metadata to Integration module ([#391](https://github.com/keyshade-xyz/keyshade/issues/391)) ([0372e36](https://github.com/keyshade-xyz/keyshade/commit/0372e3629d4d96df7d7263215f866ad8a3e70bc0)) +* **api:** Add pagination metadata to Project module ([#393](https://github.com/keyshade-xyz/keyshade/issues/393)) ([bc274fd](https://github.com/keyshade-xyz/keyshade/commit/bc274fdc241395c022fd6f209c0e951ab4c7694f)) +* **api:** Add pagination metadata to Secret module ([#389](https://github.com/keyshade-xyz/keyshade/issues/389)) ([c4cc667](https://github.com/keyshade-xyz/keyshade/commit/c4cc6676f566c6216ba2e196834aea164c682e51)) +* **api:** Add pagination metadata to Variable module ([#390](https://github.com/keyshade-xyz/keyshade/issues/390)) ([be6aabf](https://github.com/keyshade-xyz/keyshade/commit/be6aabfe218b039d65b62aa01518240487bb5836)) +* **api:** Add pagination metadata to Workspace module ([#387](https://github.com/keyshade-xyz/keyshade/issues/387)) ([a08c924](https://github.com/keyshade-xyz/keyshade/commit/a08c924dbc52ea45e793d639170333f8824eae2c)) +* **api:** Add pagination metadata to Workspace Role module ([#388](https://github.com/keyshade-xyz/keyshade/issues/388)) ([d8e8f49](https://github.com/keyshade-xyz/keyshade/commit/d8e8f491d966cb794057536922c7469ed4f8f448)) +* **api:** Create a paginate method ([#379](https://github.com/keyshade-xyz/keyshade/issues/379)) ([09576f1](https://github.com/keyshade-xyz/keyshade/commit/09576f130900ea8d89454332bef9353bfe09a0b2)) +* **api:** Create endpoint for fetching all revisions of a [secure] ([#303](https://github.com/keyshade-xyz/keyshade/issues/303)) ([de2b602](https://github.com/keyshade-xyz/keyshade/commit/de2b602dcd5bdab104d910b12761a6ec778103b8)) +* **api:** Create endpoint for fetching all revisions of a variable ([#304](https://github.com/keyshade-xyz/keyshade/issues/304)) ([9abddc1](https://github.com/keyshade-xyz/keyshade/commit/9abddc11691146045e727078b3b963f8b9c2e990)) +* **cli:** Improved the DX for list profile ([#334](https://github.com/keyshade-xyz/keyshade/issues/334)) ([6bff496](https://github.com/keyshade-xyz/keyshade/commit/6bff4964493f9919b221a5dc6fcc578bc47b2832)) +* **platform:** Add warning sonner toast for invalid otp ([#335](https://github.com/keyshade-xyz/keyshade/issues/335)) ([21513f5](https://github.com/keyshade-xyz/keyshade/commit/21513f5be6d36b308cd5926e7ad1b475f96cb668)) + +### 🐛 Bug Fixes + +* **cli:** Added parent directory check ([#359](https://github.com/keyshade-xyz/keyshade/issues/359)) ([538ea7f](https://github.com/keyshade-xyz/keyshade/commit/538ea7f2654e4f3ea06fde9fe653342ca769ce44)) +* **platform:** Platform types fixes ([#374](https://github.com/keyshade-xyz/keyshade/issues/374)) ([8e9d9ff](https://github.com/keyshade-xyz/keyshade/commit/8e9d9ffac0af1f93bb5513bf94aa3a75fb3c31c6)) + +### 📚 Documentation + +* Added docker details in setting-things-up.md ([#358](https://github.com/keyshade-xyz/keyshade/issues/358)) ([ed5093a](https://github.com/keyshade-xyz/keyshade/commit/ed5093ac5df17f8dbf4c7e286af739121b51a692)) +* Update postman workspace link ([d6aba27](https://github.com/keyshade-xyz/keyshade/commit/d6aba270a97f03f16e35b5cde75ff472641fe1a7)) +* Updated env and cli docs ([1213d2a](https://github.com/keyshade-xyz/keyshade/commit/1213d2a9b5689d44a260eff9c2e0eb8e6968c7da)) + +### 🔧 Miscellaneous Chores + +* Added next backend url in .env.example ([5695254](https://github.com/keyshade-xyz/keyshade/commit/5695254b64d3c504f7ca7cd17681f42947fef232)) +* **api-client:** Added pagination structure ([a70e957](https://github.com/keyshade-xyz/keyshade/commit/a70e957afc828be1e72d0ea958de8ba860a04b9c)) +* **api-client:** Fixed test script ([ad70819](https://github.com/keyshade-xyz/keyshade/commit/ad708190771f40596646b54fdda49a01c4742644)) +* **api-client:** Removed try-catch from tests in environment ([a64e48c](https://github.com/keyshade-xyz/keyshade/commit/a64e48cb171b3996bddb74f2cf256d4760e3ccb3)) +* **api:** Add user cache for optimization ([#386](https://github.com/keyshade-xyz/keyshade/issues/386)) ([8d730b5](https://github.com/keyshade-xyz/keyshade/commit/8d730b58830a8a0e6be6bf0fe86b3021a2d473eb)) +* **api:** Alter cache rehydration interval ([f5f9eec](https://github.com/keyshade-xyz/keyshade/commit/f5f9eec5c81b29d7f8eb1e233c4e80e4d36eb0cf)) +* **api:** Fixed naming error in variable controller ([0c5a380](https://github.com/keyshade-xyz/keyshade/commit/0c5a380fba843a2eb8a84753cfbe8b3ef86b6e31)) +* **api:** Improve handling of edge cases for paginate module ([#402](https://github.com/keyshade-xyz/keyshade/issues/402)) ([8591487](https://github.com/keyshade-xyz/keyshade/commit/8591487623c5e817ff31aedd6e8cd15074bcfc1c)) +* **api:** Minor updates to user service ([249d778](https://github.com/keyshade-xyz/keyshade/commit/249d778b94a5587b6c7da6d7afe04b9bfee5c0d6)) +* **api:** Skip workspace creation when user is admin ([#376](https://github.com/keyshade-xyz/keyshade/issues/376)) ([13f6c59](https://github.com/keyshade-xyz/keyshade/commit/13f6c59fda07e4a8b6f991e670ab055964fb2fb1)) +* **ci:** Add docker check ([#383](https://github.com/keyshade-xyz/keyshade/issues/383)) ([3119001](https://github.com/keyshade-xyz/keyshade/commit/311900177b85035d777acb6d86549cfffc71dbef)) +* **ci:** Add names to CI files ([1a7e5f6](https://github.com/keyshade-xyz/keyshade/commit/1a7e5f6c2b4e4a5aced5955a2a394f0540776cb1)) +* **ci:** Add validate CLI pipeline ([#373](https://github.com/keyshade-xyz/keyshade/issues/373)) ([a91df6c](https://github.com/keyshade-xyz/keyshade/commit/a91df6c6eedbb3e79dd77cbe42ca4836a714e8a3)) +* **ci:** Adding validate pipeline ([#372](https://github.com/keyshade-xyz/keyshade/issues/372)) ([23cf3b3](https://github.com/keyshade-xyz/keyshade/commit/23cf3b3b12719297ac00c07a20d0b57462440fef)) +* **ci:** Disabled platform and api deployments ([74d601a](https://github.com/keyshade-xyz/keyshade/commit/74d601a576986f6436314dd6631f86ee49185109)) +* **ci:** Fixed deployment scripts ([12e35db](https://github.com/keyshade-xyz/keyshade/commit/12e35db8a5d454db59c8eadaa6bd0fa0525b90b5)) +* **ci:** Fixed platform script ([d783f2a](https://github.com/keyshade-xyz/keyshade/commit/d783f2ab16c63c711a8022b145e0af085cc011de)) +* **CI:** Include migration deployment in API deploy pipeline ([dbd5222](https://github.com/keyshade-xyz/keyshade/commit/dbd5222a5081d769e47cd32231cc515bb311666b)) +* **CI:** Separated deployment and docker build jobs ([090e193](https://github.com/keyshade-xyz/keyshade/commit/090e193cb4af3771e523dd371364f2d21dd3cd03)) +* **CI:** Setup inter-job dependency ([1756727](https://github.com/keyshade-xyz/keyshade/commit/1756727849a2bfabf9d58a81e95d7b6f6c159f4a)) +* **ci:** Update auto-assign.yaml ([#375](https://github.com/keyshade-xyz/keyshade/issues/375)) ([91e0ec1](https://github.com/keyshade-xyz/keyshade/commit/91e0ec12da8c22b8b2ecec8a35aef48fc5fecc9d)) +* **cli:** Changed objects to classes ([#306](https://github.com/keyshade-xyz/keyshade/issues/306)) ([c83f2db](https://github.com/keyshade-xyz/keyshade/commit/c83f2db56ddc3256ed4df35169325cc5427b4978)) +* Removed Minio config ([8feb83a](https://github.com/keyshade-xyz/keyshade/commit/8feb83aae23b5817d5038235a3d0e59c5d12a0ff)) +* Updated deployment scripts and added health check in platform ([fcc1c3f](https://github.com/keyshade-xyz/keyshade/commit/fcc1c3fb50679073c7d3791fedafe25b1287ad0a)) + +### 🔨 Code Refactoring + +* **api:** Updated path of some endpoints in project controller ([9502678](https://github.com/keyshade-xyz/keyshade/commit/95026787df5156147a209c7f6e6b8970b33df5aa)) +* **api:** Updated Redis provider ([33491a1](https://github.com/keyshade-xyz/keyshade/commit/33491a199c5ae7f822e44936eebab964f7f93ac5)) + ## [2.2.0](https://github.com/keyshade-xyz/keyshade/compare/v2.1.0...v2.2.0) (2024-07-11) ### 🚀 Features diff --git a/apps/api/package.json b/apps/api/package.json index 52cb963d..2bba3faf 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -16,7 +16,7 @@ "db:format": "pnpm dlx prisma format --schema=src/prisma/schema.prisma", "db:reset": "pnpx dotenv-cli -e ../../.env -- pnpm dlx prisma migrate reset --force --schema=src/prisma/schema.prisma", "sourcemaps": "sentry-cli sourcemaps inject ./dist && sentry-cli sourcemaps upload ./dist || echo 'Failed to upload source maps to Sentry'", - "e2e:prepare": "cd ../../ && docker compose down && docker compose -f docker-compose-test.yml up -d && cd apps/api && pnpm db:generate-types && cross-env NODE_ENV='e2e' DATABASE_URL='postgresql://prisma:prisma@localhost:5432/tests' pnpm run db:deploy-migrations", + "e2e:prepare": "cd ../../ && docker compose down && docker compose -f docker-compose-test.yml up -d && sleep 3 && cd apps/api && pnpm db:generate-types && cross-env NODE_ENV='e2e' DATABASE_URL='postgresql://prisma:prisma@localhost:5432/tests' pnpm run db:deploy-migrations", "e2e": "pnpm run e2e:prepare && cross-env NODE_ENV='e2e' DATABASE_URL='postgresql://prisma:prisma@localhost:5432/tests' jest --runInBand --config=jest.e2e-config.ts --coverage --coverageDirectory=../../coverage-e2e/api --coverageReporters=json && pnpm run e2e:teardown", "e2e:teardown": "cd ../../ && docker compose -f docker-compose-test.yml down", "unit": "pnpm db:generate-types && jest --config=jest.config.ts" diff --git a/apps/api/src/api-key/service/api-key.service.ts b/apps/api/src/api-key/service/api-key.service.ts index d049b520..2e0be932 100644 --- a/apps/api/src/api-key/service/api-key.service.ts +++ b/apps/api/src/api-key/service/api-key.service.ts @@ -11,6 +11,7 @@ import { generateApiKey } from '../../common/api-key-generator' import { toSHA256 } from '../../common/to-sha256' import { UpdateApiKey } from '../dto/update.api-key/update.api-key' import { ApiKey, User } from '@prisma/client' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class ApiKeyService { @@ -146,7 +147,7 @@ export class ApiKeyService { } }, skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), orderBy: { [sort]: order }, diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 2f492558..0bc84ee0 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -23,6 +23,7 @@ import { ScheduleModule } from '@nestjs/schedule' import { EnvSchema } from '../common/env/env.schema' import { IntegrationModule } from '../integration/integration.module' import { FeedbackModule } from '../feedback/feedback.module' +import { CacheModule } from '../cache/cache.module' @Module({ controllers: [AppController], @@ -53,7 +54,8 @@ import { FeedbackModule } from '../feedback/feedback.module' SocketModule, ProviderModule, IntegrationModule, - FeedbackModule + FeedbackModule, + CacheModule ], providers: [ { diff --git a/apps/api/src/auth/controller/auth.controller.spec.ts b/apps/api/src/auth/controller/auth.controller.spec.ts index d51abbd4..a8721683 100644 --- a/apps/api/src/auth/controller/auth.controller.spec.ts +++ b/apps/api/src/auth/controller/auth.controller.spec.ts @@ -10,6 +10,8 @@ import { ConfigService } from '@nestjs/config' import { GithubOAuthStrategyFactory } from '../../config/factory/github/github-strategy.factory' import { GoogleOAuthStrategyFactory } from '../../config/factory/google/google-strategy.factory' import { GitlabOAuthStrategyFactory } from '../../config/factory/gitlab/gitlab-strategy.factory' +import { CacheService } from '../../cache/cache.service' +import { REDIS_CLIENT } from '../../provider/redis.provider' describe('AuthController', () => { let controller: AuthController @@ -25,7 +27,20 @@ describe('AuthController', () => { ConfigService, { provide: MAIL_SERVICE, useClass: MockMailService }, JwtService, - PrismaService + PrismaService, + CacheService, + { + provide: REDIS_CLIENT, + useValue: { + publisher: { + setEx: jest.fn(), + set: jest.fn(), + get: jest.fn(), + del: jest.fn(), + keys: jest.fn() + } + } + } ] }) .overrideProvider(PrismaService) diff --git a/apps/api/src/auth/guard/auth/auth.guard.spec.ts b/apps/api/src/auth/guard/auth/auth.guard.spec.ts index 2da36533..c018193d 100644 --- a/apps/api/src/auth/guard/auth/auth.guard.spec.ts +++ b/apps/api/src/auth/guard/auth/auth.guard.spec.ts @@ -2,6 +2,6 @@ import { AuthGuard } from './auth.guard' describe('AuthGuard', () => { it('should be defined', () => { - expect(new AuthGuard(null, null, null)).toBeDefined() + expect(new AuthGuard(null, null, null, null)).toBeDefined() }) }) diff --git a/apps/api/src/auth/guard/auth/auth.guard.ts b/apps/api/src/auth/guard/auth/auth.guard.ts index ffdff70a..c0248c55 100644 --- a/apps/api/src/auth/guard/auth/auth.guard.ts +++ b/apps/api/src/auth/guard/auth/auth.guard.ts @@ -13,6 +13,7 @@ import { ONBOARDING_BYPASSED } from '../../../decorators/bypass-onboarding.decor import { AuthenticatedUserContext } from '../../auth.types' import { toSHA256 } from '../../../common/to-sha256' import { EnvSchema } from '../../../common/env/env.schema' +import { CacheService } from '../../../cache/cache.service' const X_E2E_USER_EMAIL = 'x-e2e-user-email' const X_KEYSHADE_TOKEN = 'x-keyshade-token' @@ -24,7 +25,8 @@ export class AuthGuard implements CanActivate { constructor( private readonly jwtService: JwtService, private readonly prisma: PrismaService, - private reflector: Reflector + private reflector: Reflector, + private cache: CacheService ) {} async canActivate(context: ExecutionContext): Promise { @@ -104,11 +106,15 @@ export class AuthGuard implements CanActivate { secret: process.env.JWT_SECRET }) - user = await this.prisma.user.findUnique({ - where: { - id: payload['id'] - } - }) + const cachedUser = await this.cache.getUser(payload['id']) + if (cachedUser) user = cachedUser + else { + user = await this.prisma.user.findUnique({ + where: { + id: payload['id'] + } + }) + } } catch { throw new ForbiddenException() } diff --git a/apps/api/src/auth/service/auth.service.spec.ts b/apps/api/src/auth/service/auth.service.spec.ts index 57c89764..34cd05dc 100644 --- a/apps/api/src/auth/service/auth.service.spec.ts +++ b/apps/api/src/auth/service/auth.service.spec.ts @@ -5,6 +5,8 @@ import { MAIL_SERVICE } from '../../mail/services/interface.service' import { JwtService } from '@nestjs/jwt' import { PrismaService } from '../../prisma/prisma.service' import { mockDeep } from 'jest-mock-extended' +import { CacheService } from '../../cache/cache.service' +import { REDIS_CLIENT } from '../../provider/redis.provider' describe('AuthService', () => { let service: AuthService @@ -15,7 +17,20 @@ describe('AuthService', () => { AuthService, { provide: MAIL_SERVICE, useClass: MockMailService }, JwtService, - PrismaService + PrismaService, + CacheService, + { + provide: REDIS_CLIENT, + useValue: { + publisher: { + setEx: jest.fn(), + set: jest.fn(), + get: jest.fn(), + del: jest.fn(), + keys: jest.fn() + } + } + } ] }) .overrideProvider(PrismaService) diff --git a/apps/api/src/auth/service/auth.service.ts b/apps/api/src/auth/service/auth.service.ts index 5dac0e89..1c82a738 100644 --- a/apps/api/src/auth/service/auth.service.ts +++ b/apps/api/src/auth/service/auth.service.ts @@ -18,6 +18,7 @@ import { PrismaService } from '../../prisma/prisma.service' import createUser from '../../common/create-user' import { AuthProvider } from '@prisma/client' import generateOtp from '../../common/generate-otp' +import { CacheService } from '../../cache/cache.service' @Injectable() export class AuthService { @@ -26,7 +27,8 @@ export class AuthService { constructor( @Inject(MAIL_SERVICE) private mailService: IMailService, private readonly prisma: PrismaService, - private jwt: JwtService + private jwt: JwtService, + private cache: CacheService ) { this.logger = new Logger(AuthService.name) } @@ -82,7 +84,7 @@ export class AuthService { } } }) - + this.cache.setUser(user) // Save user to cache this.logger.log(`User logged in: ${email}`) const token = await this.generateToken(user.id) diff --git a/apps/api/src/cache/cache.module.ts b/apps/api/src/cache/cache.module.ts new file mode 100644 index 00000000..c8dddd24 --- /dev/null +++ b/apps/api/src/cache/cache.module.ts @@ -0,0 +1,9 @@ +import { Global, Module } from '@nestjs/common' +import { CacheService } from './cache.service' + +@Global() +@Module({ + exports: [CacheService], + providers: [CacheService] +}) +export class CacheModule {} diff --git a/apps/api/src/cache/cache.service.spec.ts b/apps/api/src/cache/cache.service.spec.ts new file mode 100644 index 00000000..de3d09bd --- /dev/null +++ b/apps/api/src/cache/cache.service.spec.ts @@ -0,0 +1,34 @@ +import { Test, TestingModule } from '@nestjs/testing' +import { CacheService } from './cache.service' +import { REDIS_CLIENT } from '../provider/redis.provider' + +describe('CacheService', () => { + let service: CacheService + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + CacheService, + { + provide: REDIS_CLIENT, + useValue: { + publisher: { + // Add minimal mock methods as needed + setEx: jest.fn(), + set: jest.fn(), + get: jest.fn(), + del: jest.fn(), + keys: jest.fn() + } + } + } + ] + }).compile() + + service = module.get(CacheService) + }) + + it('should be defined', () => { + expect(service).toBeDefined() + }) +}) diff --git a/apps/api/src/cache/cache.service.ts b/apps/api/src/cache/cache.service.ts new file mode 100644 index 00000000..d5ecced3 --- /dev/null +++ b/apps/api/src/cache/cache.service.ts @@ -0,0 +1,54 @@ +import { Inject, Injectable, OnModuleDestroy } from '@nestjs/common' +import { RedisClientType } from 'redis' +import { User } from '@prisma/client' +import { REDIS_CLIENT } from '../provider/redis.provider' + +@Injectable() +export class CacheService implements OnModuleDestroy { + private static readonly USER_PREFIX = 'user-' + + constructor( + @Inject(REDIS_CLIENT) private redisClient: { publisher: RedisClientType } + ) {} + + private getUserKey(userId: string): string { + return `${CacheService.USER_PREFIX}${userId}` + } + + async setUser(user: User, expirationInSeconds?: number): Promise { + const key = this.getUserKey(user.id) + const userJson = JSON.stringify(user) + if (expirationInSeconds) { + await this.redisClient.publisher.setEx(key, expirationInSeconds, userJson) + } else { + await this.redisClient.publisher.set(key, userJson) + } + } + + async getUser(userId: string): Promise { + const key = this.getUserKey(userId) + const userData = await this.redisClient.publisher.get(key) + if (userData) { + return JSON.parse(userData) as User + } + return null + } + + async deleteUser(userId: string): Promise { + const key = this.getUserKey(userId) + return await this.redisClient.publisher.del(key) + } + + async clearAllUserCache(): Promise { + const keys = await this.redisClient.publisher.keys( + `${CacheService.USER_PREFIX}*` + ) + if (keys.length > 0) { + await this.redisClient.publisher.del(keys) + } + } + + async onModuleDestroy() { + await this.redisClient.publisher.quit() + } +} diff --git a/apps/api/src/common/create-user.ts b/apps/api/src/common/create-user.ts index 032d167d..89632822 100644 --- a/apps/api/src/common/create-user.ts +++ b/apps/api/src/common/create-user.ts @@ -7,11 +7,7 @@ import { Logger } from '@nestjs/common' const createUser = async ( dto: Partial & { authProvider: AuthProvider }, prisma: PrismaService -): Promise< - User & { - defaultWorkspace: Workspace - } -> => { +): Promise => { const logger = new Logger('createUser') // Create the user @@ -27,6 +23,11 @@ const createUser = async ( } }) + if (user.isAdmin) { + logger.log(`Created admin user ${user.id}`) + return user + } + // Create the user's default workspace const workspace = await createWorkspace( user, diff --git a/apps/api/src/common/limit-max-items-per-page.ts b/apps/api/src/common/limit-max-items-per-page.ts new file mode 100644 index 00000000..296d73bc --- /dev/null +++ b/apps/api/src/common/limit-max-items-per-page.ts @@ -0,0 +1,6 @@ +export function limitMaxItemsPerPage( + limit: number, + maxlimit: number = 30 +): number { + return Math.min(limit, maxlimit) +} diff --git a/apps/api/src/common/paginate.spec.ts b/apps/api/src/common/paginate.spec.ts index 6269f9e2..6c06b844 100644 --- a/apps/api/src/common/paginate.spec.ts +++ b/apps/api/src/common/paginate.spec.ts @@ -81,13 +81,24 @@ describe('paginate', () => { expect(result.links.last).toEqual('/items?page=0&limit=10') }) - it('should not be able to paginate when limit is 0 or undefined', () => { + it('should receive empty object when page is greater than maximum page limit', () => { + const totalCount = 4 + const relativeUrl = '/items' + const query = { page: 3, limit: 2 } + + const result = paginate(totalCount, relativeUrl, query) + + expect(result).toBeDefined() + expect(result).toEqual({}) + }) + + it('should receive empty object when limit is 0 or undefined', () => { const totalCount = 10 const relativeUrl = '/items' const query = { page: 0, limit: 0 } + const result = paginate(totalCount, relativeUrl, query) - expect(() => paginate(totalCount, relativeUrl, query)).toThrow( - 'Limit is required' - ) + expect(result).toBeDefined() + expect(result).toEqual({}) }) }) diff --git a/apps/api/src/common/paginate.ts b/apps/api/src/common/paginate.ts index 18a2243e..b25f43c3 100644 --- a/apps/api/src/common/paginate.ts +++ b/apps/api/src/common/paginate.ts @@ -33,8 +33,7 @@ export const paginate = ( query: QueryOptions, defaultQuery?: Record ) => { - //query.limit cannot be 0 or undefined - if (!query.limit) throw new Error('Limit is required') + if (!query.limit) return {} as PaginatedMetadata let defaultQueryStr = '' if (defaultQuery) { //sorting entries to make sure the order is consistent and predictable during tests @@ -56,6 +55,8 @@ export const paginate = ( metadata.pageCount = Math.ceil(totalCount / query.limit) metadata.totalCount = totalCount + if (query.page >= metadata.pageCount) return {} as PaginatedMetadata + //create links from relativeUrl , defalutQueryStr and query of type QueryOptions metadata.links = { self: `${relativeUrl}?${defaultQueryStr + getQueryString(query)}`, diff --git a/apps/api/src/environment/controller/environment.controller.ts b/apps/api/src/environment/controller/environment.controller.ts index f0f09f52..31d5be19 100644 --- a/apps/api/src/environment/controller/environment.controller.ts +++ b/apps/api/src/environment/controller/environment.controller.ts @@ -57,7 +57,7 @@ export class EnvironmentController { async getEnvironmentsOfProject( @CurrentUser() user: User, @Param('projectId') projectId: string, - @Query('page') page: number = 1, + @Query('page') page: number = 0, @Query('limit') limit: number = 10, @Query('sort') sort: string = 'name', @Query('order') order: string = 'asc', diff --git a/apps/api/src/environment/environment.e2e.spec.ts b/apps/api/src/environment/environment.e2e.spec.ts index 02279063..af8504d5 100644 --- a/apps/api/src/environment/environment.e2e.spec.ts +++ b/apps/api/src/environment/environment.e2e.spec.ts @@ -27,6 +27,7 @@ import { EventService } from '../event/service/event.service' import { EnvironmentService } from './service/environment.service' import { UserModule } from '../user/user.module' import { UserService } from '../user/service/user.service' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Environment Controller Tests', () => { let app: NestFastifyApplication @@ -64,6 +65,8 @@ describe('Environment Controller Tests', () => { environmentService = moduleRef.get(EnvironmentService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -235,7 +238,7 @@ describe('Environment Controller Tests', () => { EventSource.ENVIRONMENT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.ENVIRONMENT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -344,7 +347,7 @@ describe('Environment Controller Tests', () => { EventSource.ENVIRONMENT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.ENVIRONMENT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -399,13 +402,27 @@ describe('Environment Controller Tests', () => { it('should be able to fetch all environments of a project', async () => { const response = await app.inject({ method: 'GET', - url: `/environment/all/${project1.id}`, + url: `/environment/all/${project1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(2) + expect(metadata.links.self).toBe( + `/environment/all/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toBe( + `/environment/all/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toBe( + `/environment/all/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all environments of a project that does not exist', async () => { @@ -459,7 +476,7 @@ describe('Environment Controller Tests', () => { EventSource.ENVIRONMENT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.ENVIRONMENT) expect(event.triggerer).toBe(EventTriggerer.USER) diff --git a/apps/api/src/environment/service/environment.service.ts b/apps/api/src/environment/service/environment.service.ts index 4ae10629..9d084473 100644 --- a/apps/api/src/environment/service/environment.service.ts +++ b/apps/api/src/environment/service/environment.service.ts @@ -17,6 +17,8 @@ import { UpdateEnvironment } from '../dto/update.environment/update.environment' import { PrismaService } from '../../prisma/prisma.service' import createEvent from '../../common/create-event' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class EnvironmentService { @@ -171,8 +173,8 @@ export class EnvironmentService { prisma: this.prisma }) - // Get the environments - return await this.prisma.environment.findMany({ + // Get the environments for the required page + const items = await this.prisma.environment.findMany({ where: { projectId, name: { @@ -195,11 +197,29 @@ export class EnvironmentService { } }, skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), orderBy: { [sort]: order } }) + // Calculate metadata for pagination + const totalCount = await this.prisma.environment.count({ + where: { + projectId, + name: { + contains: search + } + } + }) + const metadata = paginate(totalCount, `/environment/all/${projectId}`, { + page, + limit: limitMaxItemsPerPage(limit), + sort, + order, + search + }) + + return { items, metadata } } async deleteEnvironment(user: User, environmentId: Environment['id']) { diff --git a/apps/api/src/event/event.e2e.spec.ts b/apps/api/src/event/event.e2e.spec.ts index 3ee3aa4a..747a3d71 100644 --- a/apps/api/src/event/event.e2e.spec.ts +++ b/apps/api/src/event/event.e2e.spec.ts @@ -35,6 +35,7 @@ import { EnvironmentModule } from '../environment/environment.module' import createEvent from '../common/create-event' import { VariableService } from '../variable/service/variable.service' import { VariableModule } from '../variable/variable.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Event Controller Tests', () => { let app: NestFastifyApplication @@ -80,6 +81,8 @@ describe('Event Controller Tests', () => { secretService = moduleRef.get(SecretService) variableService = moduleRef.get(VariableService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() @@ -115,9 +118,8 @@ describe('Event Controller Tests', () => { 'x-e2e-user-email': user.email } }) - expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -129,6 +131,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newWorkspace.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(newWorkspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${newWorkspace.id}?source=WORKSPACE&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${newWorkspace.id}?source=WORKSPACE&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${newWorkspace.id}?source=WORKSPACE&page=0&limit=10&search=` + ) }) it('should be able to fetch a project event', async () => { @@ -152,7 +169,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -164,6 +181,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newProject.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=PROJECT&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=PROJECT&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=PROJECT&page=0&limit=10&search=` + ) }) it('should be able to fetch an environment event', async () => { @@ -188,7 +220,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -200,6 +232,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newEnvironment.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=ENVIRONMENT&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=ENVIRONMENT&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=ENVIRONMENT&page=0&limit=10&search=` + ) }) it('should be able to fetch a secret event', async () => { @@ -230,7 +277,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -242,6 +289,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newSecret.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=SECRET&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=SECRET&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=SECRET&page=0&limit=10&search=` + ) }) it('should be able to fetch a variable event', async () => { @@ -272,7 +334,7 @@ describe('Event Controller Tests', () => { expect(response.statusCode).toBe(200) // expect(response.json()).toBe({}) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -284,6 +346,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newVariable.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=VARIABLE&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=VARIABLE&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=VARIABLE&page=0&limit=10&search=` + ) }) it('should be able to fetch a workspace role event', async () => { @@ -310,7 +387,7 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - const event = response.json()[0] + const event = response.json().items[0] expect(event.id).toBeDefined() expect(event.title).toBeDefined() @@ -322,6 +399,21 @@ describe('Event Controller Tests', () => { expect(event.itemId).toBe(newWorkspaceRole.id) expect(event.userId).toBe(user.id) expect(event.workspaceId).toBe(workspace.id) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?source=WORKSPACE_ROLE&page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?source=WORKSPACE_ROLE&page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?source=WORKSPACE_ROLE&page=0&limit=10&search=` + ) }) it('should be able to fetch all events', async () => { @@ -334,7 +426,52 @@ describe('Event Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toHaveLength(6) + expect(response.json().items).toHaveLength(6) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(6) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?page=0&limit=10&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?page=0&limit=10&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?page=0&limit=10&search=` + ) + }) + + it('should be able to fetch 2nd page of all events', async () => { + const response = await app.inject({ + method: 'GET', + url: `/event/${workspace.id}?page=1&limit=3&`, + headers: { + 'x-e2e-user-email': user.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().items).toHaveLength(3) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(6) + expect(metadata.links.self).toEqual( + `/event/${workspace.id}?page=1&limit=3&search=` + ) + expect(metadata.links.first).toEqual( + `/event/${workspace.id}?page=0&limit=3&search=` + ) + expect(metadata.links.previous).toEqual( + `/event/${workspace.id}?page=0&limit=3&search=` + ) + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/event/${workspace.id}?page=1&limit=3&search=` + ) }) it('should throw an error with wrong severity value', async () => { diff --git a/apps/api/src/event/service/event.service.ts b/apps/api/src/event/service/event.service.ts index 9f540d9c..814f9f35 100644 --- a/apps/api/src/event/service/event.service.ts +++ b/apps/api/src/event/service/event.service.ts @@ -2,6 +2,8 @@ import { BadRequestException, Injectable } from '@nestjs/common' import { Authority, EventSeverity, EventSource, User } from '@prisma/client' import { PrismaService } from '../../prisma/prisma.service' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class EventService { @@ -43,7 +45,8 @@ export class EventService { } }, skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), + orderBy: { timestamp: 'desc' } @@ -54,6 +57,24 @@ export class EventService { } // @ts-expect-error - Prisma does not have a type for severity - return await this.prisma.event.findMany(query) + const items = await this.prisma.event.findMany(query) + + //calculate metadata for pagination + const totalCount = await this.prisma.event.count({ + where: query.where + }) + + const metadata = paginate( + totalCount, + `/event/${workspaceId}`, + { + page, + limit: limitMaxItemsPerPage(limit), + search + }, + { source } + ) + + return { items, metadata } } } diff --git a/apps/api/src/integration/controller/integration.controller.ts b/apps/api/src/integration/controller/integration.controller.ts index ef6abd6e..8aa1c2de 100644 --- a/apps/api/src/integration/controller/integration.controller.ts +++ b/apps/api/src/integration/controller/integration.controller.ts @@ -66,13 +66,12 @@ export class IntegrationController { } /* istanbul ignore next */ - // The e2e tests are not working, but the API calls work as expected @Get('all/:workspaceId') @RequiredApiKeyAuthorities(Authority.READ_INTEGRATION) async getAllIntegrations( @CurrentUser() user: User, @Param('workspaceId') workspaceId: string, - @Query('page') page: number = 1, + @Query('page') page: number = 0, @Query('limit') limit: number = 10, @Query('sort') sort: string = 'name', @Query('order') order: string = 'asc', diff --git a/apps/api/src/integration/integration.e2e.spec.ts b/apps/api/src/integration/integration.e2e.spec.ts index 1e5b4dc9..ec15adaa 100644 --- a/apps/api/src/integration/integration.e2e.spec.ts +++ b/apps/api/src/integration/integration.e2e.spec.ts @@ -26,6 +26,7 @@ import { MAIL_SERVICE } from '../mail/services/interface.service' import { MockMailService } from '../mail/services/mock.service' import { EnvironmentModule } from '../environment/environment.module' import { EnvironmentService } from '../environment/service/environment.service' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Integration Controller Tests', () => { let app: NestFastifyApplication @@ -66,6 +67,8 @@ describe('Integration Controller Tests', () => { projectService = moduleRef.get(ProjectService) environmentService = moduleRef.get(EnvironmentService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -599,6 +602,34 @@ describe('Integration Controller Tests', () => { expect(result.json().id).toEqual(integration1.id) }) + it('should be able to fetch all integrations on first page', async () => { + const result = await app.inject({ + method: 'GET', + url: `/integration/all/${workspace1.id}?page=0&limit=10`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(result.statusCode).toEqual(200) + expect(result.json().items).toHaveLength(1) + + //check metadata + const metadata = result.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/integration/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/integration/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/integration/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + }) + it('should not be able to fetch an integration that does not exist', async () => { const result = await app.inject({ method: 'GET', diff --git a/apps/api/src/integration/service/integration.service.ts b/apps/api/src/integration/service/integration.service.ts index d1f7bab2..be956c59 100644 --- a/apps/api/src/integration/service/integration.service.ts +++ b/apps/api/src/integration/service/integration.service.ts @@ -18,6 +18,8 @@ import { UpdateIntegration } from '../dto/update.integration/update.integration' import { AuthorityCheckerService } from '../../common/authority-checker.service' import createEvent from '../../common/create-event' import IntegrationFactory from '../plugins/factory/integration.factory' +import { paginate } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class IntegrationService { @@ -296,13 +298,41 @@ export class IntegrationService { ] }, skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), + orderBy: { [sort]: order } }) - return integrations + //calculate metadata for pagination + const totalCount = await this.prisma.integration.count({ + where: { + name: { + contains: search + }, + workspaceId, + OR: [ + { + projectId: null + }, + { + projectId: { + in: projectIds + } + } + ] + } + }) + const metadata = paginate(totalCount, `/integration/all/${workspaceId}`, { + page, + limit: limitMaxItemsPerPage(limit), + sort, + order, + search + }) + + return { items: integrations, metadata } } async deleteIntegration(user: User, integrationId: Integration['id']) { diff --git a/apps/api/src/project/project.e2e.spec.ts b/apps/api/src/project/project.e2e.spec.ts index 4bbb40c2..1869bc06 100644 --- a/apps/api/src/project/project.e2e.spec.ts +++ b/apps/api/src/project/project.e2e.spec.ts @@ -38,6 +38,7 @@ import { VariableService } from '../variable/service/variable.service' import { VariableModule } from '../variable/variable.module' import { SecretModule } from '../secret/secret.module' import { EnvironmentModule } from '../environment/environment.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Project Controller Tests', () => { let app: NestFastifyApplication @@ -86,6 +87,8 @@ describe('Project Controller Tests', () => { secretService = moduleRef.get(SecretService) variableService = moduleRef.get(VariableService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -222,7 +225,7 @@ describe('Project Controller Tests', () => { EventSource.PROJECT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.PROJECT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -398,7 +401,7 @@ describe('Project Controller Tests', () => { EventSource.PROJECT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.PROJECT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -463,14 +466,29 @@ describe('Project Controller Tests', () => { it('should be able to fetch all projects of a workspace', async () => { const response = await app.inject({ method: 'GET', - url: `/project/all/${workspace1.id}?page=0`, + url: `/project/all/${workspace1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toEqual(2) + expect(response.json().items.length).toEqual(2) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(2) + expect(metadata.links.self).toBe( + `/project/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toBe( + `/project/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toEqual(null) + expect(metadata.links.next).toEqual(null) + expect(metadata.links.last).toBe( + `/project/all/${workspace1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all projects of a non existing workspace', async () => { @@ -632,7 +650,7 @@ describe('Project Controller Tests', () => { EventSource.PROJECT ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.PROJECT) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -1722,9 +1740,22 @@ describe('Project Controller Tests', () => { 'x-e2e-user-email': user2.email } }) - expect(response.statusCode).toBe(200) - expect(response.json()).toHaveLength(1) + expect(response.json().items).toHaveLength(1) + + //check metadata + const metadata = response.json().metadata + expect(metadata.links.self).toBe( + `/project/${project3.id}/forks?page=0&limit=10` + ) + expect(metadata.links.first).toBe( + `/project/${project3.id}/forks?page=0&limit=10` + ) + expect(metadata.links.previous).toEqual(null) + expect(metadata.links.next).toEqual(null) + expect(metadata.links.last).toBe( + `/project/${project3.id}/forks?page=0&limit=10` + ) }) it('should not contain a forked project that has access level other than GLOBAL', async () => { @@ -1754,7 +1785,7 @@ describe('Project Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toHaveLength(1) + expect(response.json().items).toHaveLength(1) }) }) }) diff --git a/apps/api/src/project/service/project.service.ts b/apps/api/src/project/service/project.service.ts index 18253372..ceac5ec3 100644 --- a/apps/api/src/project/service/project.service.ts +++ b/apps/api/src/project/service/project.service.ts @@ -2,7 +2,9 @@ import { BadRequestException, ConflictException, Injectable, - Logger + Logger, + NotFoundException, + UnauthorizedException } from '@nestjs/common' import { Authority, @@ -29,6 +31,8 @@ import createEvent from '../../common/create-event' import { ProjectWithSecrets } from '../project.types' import { AuthorityCheckerService } from '../../common/authority-checker.service' import { ForkProject } from '../dto/fork.project/fork.project' +import { paginate } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class ProjectService { @@ -335,13 +339,27 @@ export class ProjectService { projectId: Project['id'], forkMetadata: ForkProject ) { - const project = - await this.authorityCheckerService.checkAuthorityOverProject({ - userId: user.id, - entity: { id: projectId }, - authority: Authority.READ_PROJECT, - prisma: this.prisma - }) + const project = await this.prisma.project.findUnique({ + where: { id: projectId }, + select: { + id: true, + name: true, + description: true, + storePrivateKey: true, + accessLevel: true, + privateKey: true + } + }) + + if (!project) { + throw new NotFoundException(`Project with id ${projectId} not found`) + } + + if (project.accessLevel !== ProjectAccessLevel.GLOBAL) { + throw new UnauthorizedException( + `User with id ${user.id} does not have the authority in the project with id ${project.id}` + ) + } let workspaceId = forkMetadata.workspaceId @@ -593,19 +611,30 @@ export class ProjectService { } }) - return forks - .slice(page * limit, (page + 1) * limit) - .filter(async (fork) => { - const allowed = - (await this.authorityCheckerService.checkAuthorityOverProject({ - userId: user.id, - entity: { id: fork.id }, - authority: Authority.READ_PROJECT, - prisma: this.prisma - })) != null - - return allowed - }) + const forksAllowed = forks.filter(async (fork) => { + const allowed = + (await this.authorityCheckerService.checkAuthorityOverProject({ + userId: user.id, + entity: { id: fork.id }, + authority: Authority.READ_PROJECT, + prisma: this.prisma + })) != null + + return allowed + }) + + const items = forksAllowed.slice(page * limit, (page + 1) * limit) + //calculate metadata + const metadata = paginate( + forksAllowed.length, + `/project/${projectId}/forks`, + { + page, + limit: limitMaxItemsPerPage(limit) + } + ) + + return { items, metadata } } async getProjectById(user: User, projectId: Project['id']) { @@ -638,10 +667,12 @@ export class ProjectService { prisma: this.prisma }) - return ( + //fetch projects with required properties + const items = ( await this.prisma.project.findMany({ skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), + orderBy: { [sort]: order }, @@ -669,6 +700,42 @@ export class ProjectService { } }) ).map((project) => excludeFields(project, 'privateKey', 'publicKey')) + + //calculate metadata + const totalCount = await this.prisma.project.count({ + where: { + workspaceId, + OR: [ + { + name: { + contains: search + } + }, + { + description: { + contains: search + } + } + ], + workspace: { + members: { + some: { + userId: user.id + } + } + } + } + }) + + const metadata = paginate(totalCount, `/project/all/${workspaceId}`, { + page, + limit, + sort, + order, + search + }) + + return { items, metadata } } private async projectExists( diff --git a/apps/api/src/secret/controller/secret.controller.ts b/apps/api/src/secret/controller/secret.controller.ts index 59f36993..16274f11 100644 --- a/apps/api/src/secret/controller/secret.controller.ts +++ b/apps/api/src/secret/controller/secret.controller.ts @@ -101,4 +101,24 @@ export class SecretController { environmentId ) } + + @Get(':secretId/revisions/:environmentId') + @RequiredApiKeyAuthorities(Authority.READ_SECRET) + async getRevisionsOfSecret( + @CurrentUser() user: User, + @Param('secretId') secretId: string, + @Param('environmentId') environmentId: string, + @Query('page') page: number = 0, + @Query('limit') limit: number = 10, + @Query('order') order: string = 'desc' + ) { + return await this.secretService.getRevisionsOfSecret( + user, + secretId, + environmentId, + page, + limit, + order + ) + } } diff --git a/apps/api/src/secret/secret.e2e.spec.ts b/apps/api/src/secret/secret.e2e.spec.ts index dec86537..96a8eff3 100644 --- a/apps/api/src/secret/secret.e2e.spec.ts +++ b/apps/api/src/secret/secret.e2e.spec.ts @@ -36,6 +36,7 @@ import { RedisClientType } from 'redis' import { mockDeep } from 'jest-mock-extended' import { UserService } from '../user/service/user.service' import { UserModule } from '../user/user.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Secret Controller Tests', () => { let app: NestFastifyApplication @@ -81,6 +82,8 @@ describe('Secret Controller Tests', () => { eventService = moduleRef.get(EventService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -288,7 +291,7 @@ describe('Secret Controller Tests', () => { EventSource.SECRET ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.SECRET) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -407,7 +410,7 @@ describe('Secret Controller Tests', () => { EventSource.SECRET ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.SECRET) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -596,16 +599,16 @@ describe('Secret Controller Tests', () => { it('should be able to fetch all secrets', async () => { const response = await app.inject({ method: 'GET', - url: `/secret/${project1.id}`, + url: `/secret/${project1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toBe(1) + expect(response.json().items.length).toBe(1) - const { secret, values } = response.json()[0] + const { secret, values } = response.json().items[0] expect(secret.id).toBeDefined() expect(secret.name).toBeDefined() expect(secret.note).toBeDefined() @@ -615,21 +618,36 @@ describe('Secret Controller Tests', () => { const value = values[0] expect(value.environment).toBeDefined() expect(value.value).not.toEqual('Secret 1 value') + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/secret/${project1.id}?decryptValue=false&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/secret/${project1.id}?decryptValue=false&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/secret/${project1.id}?decryptValue=false&page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should be able to fetch all secrets decrypted', async () => { const response = await app.inject({ method: 'GET', - url: `/secret/${project1.id}?decryptValue=true`, + url: `/secret/${project1.id}?decryptValue=true&page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toBe(1) + expect(response.json().items.length).toBe(1) - const { secret, values } = response.json()[0] + const { secret, values } = response.json().items[0] expect(secret.id).toBeDefined() expect(secret.name).toBeDefined() expect(secret.note).toBeDefined() @@ -639,6 +657,21 @@ describe('Secret Controller Tests', () => { const value = values[0] expect(value.environment).toBeDefined() expect(value.value).toEqual('Secret 1 value') + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/secret/${project1.id}?decryptValue=true&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/secret/${project1.id}?decryptValue=true&page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/secret/${project1.id}?decryptValue=true&page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all secrets decrypted if the project does not store the private key', async () => { @@ -878,7 +911,7 @@ describe('Secret Controller Tests', () => { EventSource.SECRET ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.SECRET) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -887,4 +920,108 @@ describe('Secret Controller Tests', () => { expect(event.workspaceId).toBe(workspace1.id) expect(event.itemId).toBe(secret1.id) }) + + //revisions test + it('should be able to fetch all revisions of secrets', async () => { + // create two more entries,totalling three versions + // checks if its able to fetch multiple revisions + await secretService.updateSecret(user1, secret1.id, { + entries: [ + { + value: 'Updated Secret 1 value', + environmentId: environment1.id + } + ] + }) + + await secretService.updateSecret(user1, secret1.id, { + entries: [ + { + value: 'Updated Secret 1 value 2', + environmentId: environment1.id + } + ] + }) + + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(3) + }) + + it('should return [] if the secret has no revision', async () => { + //returns [] if secret has no revision + await prisma.secretVersion.deleteMany({ + where: { + secretId: secret1.id + } + }) + + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(0) + }) + + it('should return error if secret doesnt exist', async () => { + //return error if secret doesnt exist + const secretid = 'nonexistentsecret' + const response = await app.inject({ + method: 'GET', + url: `/secret/${secretid}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Secret with id ${secretid} not found` + ) + }) + + it('should return error if environment doesnt exist', async () => { + //return error if environment doesnt exist + const environmentid = 'nonexistentenv' + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environmentid}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Environment with id ${environmentid} not found` + ) + }) + + it('returns error if secret isnt accessible', async () => { + //return error if user has no access to secret + const response = await app.inject({ + method: 'GET', + url: `/secret/${secret1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user2.email + } + }) + + expect(response.statusCode).toBe(401) + expect(response.json().message).toEqual( + `User ${user2.id} does not have the required authorities` + ) + }) }) diff --git a/apps/api/src/secret/service/secret.service.ts b/apps/api/src/secret/service/secret.service.ts index 2b38d3bf..04dcb118 100644 --- a/apps/api/src/secret/service/secret.service.ts +++ b/apps/api/src/secret/service/secret.service.ts @@ -31,6 +31,8 @@ import { ChangeNotification, ChangeNotificationEvent } from 'src/socket/socket.types' +import { paginate } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class SecretService { @@ -491,6 +493,45 @@ export class SecretService { return response } + async getRevisionsOfSecret( + user: User, + secretId: Secret['id'], + environmentId: Environment['id'], + page: number, + limit: number, + order: string + ) { + // assign order to variable dynamically + const sortOrder = order === 'asc' ? 'asc' : 'desc' + //check access to secret + await this.authorityCheckerService.checkAuthorityOverSecret({ + userId: user.id, + entity: { id: secretId }, + authority: Authority.READ_SECRET, + prisma: this.prisma + }) + + await this.authorityCheckerService.checkAuthorityOverEnvironment({ + userId: user.id, + entity: { id: environmentId }, + authority: Authority.READ_ENVIRONMENT, + prisma: this.prisma + }) + + // get the revisions + const revisions = await this.prisma.secretVersion.findMany({ + where: { + secretId: secretId, + environmentId: environmentId + }, + skip: page * limit, + take: limitMaxItemsPerPage(limit), + orderBy: { + version: sortOrder + } + }) + return revisions + } async getAllSecretsOfProject( user: User, @@ -530,7 +571,8 @@ export class SecretService { } }, skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), + orderBy: { [sort]: order } @@ -615,7 +657,32 @@ export class SecretService { } } - return Array.from(secretsWithEnvironmentalValues.values()) + const items = Array.from(secretsWithEnvironmentalValues.values()) + + //Calculate pagination metadata + const totalCount = await this.prisma.secret.count({ + where: { + projectId, + name: { + contains: search + } + } + }) + + const metadata = paginate( + totalCount, + `/secret/${projectId}`, + { + page, + limit: limitMaxItemsPerPage(limit), + sort, + order, + search + }, + { decryptValue } + ) + + return { items, metadata } } private async secretExists( diff --git a/apps/api/src/user/service/user.service.ts b/apps/api/src/user/service/user.service.ts index 2b1437e6..5e7cf60f 100644 --- a/apps/api/src/user/service/user.service.ts +++ b/apps/api/src/user/service/user.service.ts @@ -16,6 +16,7 @@ import { import createUser from '../../common/create-user' import generateOtp from '../../common/generate-otp' import { EnvSchema } from '../../common/env/env.schema' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class UserService { @@ -216,7 +217,7 @@ export class UserService { ): Promise { return this.prisma.user.findMany({ skip: (page - 1) * limit, - take: limit, + take: limitMaxItemsPerPage(limit), orderBy: { [sort]: order }, diff --git a/apps/api/src/user/user.e2e.spec.ts b/apps/api/src/user/user.e2e.spec.ts index 2550153c..aef66a6d 100644 --- a/apps/api/src/user/user.e2e.spec.ts +++ b/apps/api/src/user/user.e2e.spec.ts @@ -130,6 +130,26 @@ describe('User Controller Tests', () => { expect(workspace.ownerId).toEqual(createUserResponse.id) }) + it('should skip workspace creation for admin users', async () => { + const createAdminUserResponse = await userService.createUser({ + email: '', + isAdmin: true, + isOnboardingFinished: true, + profilePictureUrl: null + }) + + expect(createAdminUserResponse.defaultWorkspace).toBeUndefined() + + const workspace = await prisma.workspace.findFirst({ + where: { + ownerId: createAdminUserResponse.id, + isDefault: true + } + }) + + expect(workspace).toBeNull() + }) + test('regular user should not be able to access other routes if onboarding is not finished', async () => { // Flip the user's onboarding status to false await prisma.user.update({ diff --git a/apps/api/src/variable/controller/variable.controller.ts b/apps/api/src/variable/controller/variable.controller.ts index 3a784fc2..a890813a 100644 --- a/apps/api/src/variable/controller/variable.controller.ts +++ b/apps/api/src/variable/controller/variable.controller.ts @@ -99,4 +99,24 @@ export class VariableController { environmentId ) } + + @Get('/:variableId/revisions/:environmentId') + @RequiredApiKeyAuthorities(Authority.READ_VARIABLE) + async getRevisionsOfVariable( + @CurrentUser() user: User, + @Param('variableId') variableId: string, + @Param('environmentId') environmentId: string, + @Query('page') page: number = 0, + @Query('limit') limit: number = 10, + @Query('order') order: 'asc' | 'desc' = 'desc' + ) { + return await this.variableService.getRevisionsOfVariable( + user, + variableId, + environmentId, + page, + limit, + order + ) + } } diff --git a/apps/api/src/variable/service/variable.service.ts b/apps/api/src/variable/service/variable.service.ts index 32981ff1..cc151756 100644 --- a/apps/api/src/variable/service/variable.service.ts +++ b/apps/api/src/variable/service/variable.service.ts @@ -28,6 +28,8 @@ import { ChangeNotification, ChangeNotificationEvent } from 'src/socket/socket.types' +import { paginate } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class VariableService { @@ -520,7 +522,8 @@ export class VariableService { } }, skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), + orderBy: { [sort]: order } @@ -601,7 +604,65 @@ export class VariableService { } } - return Array.from(variablesWithEnvironmentalValues.values()) + const items = Array.from(variablesWithEnvironmentalValues.values()) + + //calculate metadata + const totalCount = await this.prisma.variable.count({ + where: { + projectId, + name: { + contains: search + } + } + }) + + const metadata = paginate(totalCount, `/variable/${projectId}`, { + page, + limit: limitMaxItemsPerPage(limit), + sort, + order, + search + }) + + return { items, metadata } + } + + async getRevisionsOfVariable( + user: User, + variableId: Variable['id'], + environmentId: Environment['id'], + page: number, + limit: number, + order: 'asc' | 'desc' + ) { + await this.authorityCheckerService.checkAuthorityOverVariable({ + userId: user.id, + entity: { id: variableId }, + authority: Authority.READ_VARIABLE, + prisma: this.prisma + }) + + await this.authorityCheckerService.checkAuthorityOverEnvironment({ + userId: user.id, + entity: { id: environmentId }, + authority: Authority.READ_ENVIRONMENT, + prisma: this.prisma + }) + + const revisions = await this.prisma.variableVersion.findMany({ + where: { + variableId: variableId, + environmentId: environmentId + }, + skip: page * limit, + take: limitMaxItemsPerPage(limit), + + orderBy: { + version: order + } + }) + + return revisions } private async variableExists( diff --git a/apps/api/src/variable/variable.e2e.spec.ts b/apps/api/src/variable/variable.e2e.spec.ts index adcd6f3b..e999b58a 100644 --- a/apps/api/src/variable/variable.e2e.spec.ts +++ b/apps/api/src/variable/variable.e2e.spec.ts @@ -36,6 +36,7 @@ import { mockDeep } from 'jest-mock-extended' import { RedisClientType } from 'redis' import { UserService } from '../user/service/user.service' import { UserModule } from '../user/user.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Variable Controller Tests', () => { let app: NestFastifyApplication @@ -83,6 +84,8 @@ describe('Variable Controller Tests', () => { eventService = moduleRef.get(EventService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -289,7 +292,7 @@ describe('Variable Controller Tests', () => { EventSource.VARIABLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.VARIABLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -427,7 +430,7 @@ describe('Variable Controller Tests', () => { EventSource.VARIABLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.VARIABLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -553,7 +556,7 @@ describe('Variable Controller Tests', () => { ) }) - it('should not create a secret version entity if value-environmentId is not provided during creation', async () => { + it('should not create a variable version entity if value-environmentId is not provided during creation', async () => { const variable = await variableService.createVariable( user1, { @@ -575,16 +578,16 @@ describe('Variable Controller Tests', () => { it('should be able to fetch all variables', async () => { const response = await app.inject({ method: 'GET', - url: `/variable/${project1.id}`, + url: `/variable/${project1.id}?page=0&limit=10`, headers: { 'x-e2e-user-email': user1.email } }) expect(response.statusCode).toBe(200) - expect(response.json().length).toBe(1) + expect(response.json().items.length).toBe(1) - const { variable, values } = response.json()[0] + const { variable, values } = response.json().items[0] expect(variable).toBeDefined() expect(values).toBeDefined() expect(values.length).toBe(1) @@ -592,6 +595,21 @@ describe('Variable Controller Tests', () => { expect(values[0].environment.id).toBe(environment1.id) expect(variable.id).toBe(variable1.id) expect(variable.name).toBe('Variable 1') + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/variable/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/variable/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/variable/${project1.id}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all variables if the user has no access to the project', async () => { @@ -737,7 +755,7 @@ describe('Variable Controller Tests', () => { EventSource.VARIABLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.VARIABLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -746,4 +764,108 @@ describe('Variable Controller Tests', () => { expect(event.workspaceId).toBe(workspace1.id) expect(event.itemId).toBeDefined() }) + + //revisions test + it('should be able to fetch all revisions of variables', async () => { + // create two more entries,totalling three versions + // checks if its able to fetch multiple revisions + await variableService.updateVariable(user1, variable1.id, { + entries: [ + { + value: 'Updated Variable 1 value', + environmentId: environment1.id + } + ] + }) + + await variableService.updateVariable(user1, variable1.id, { + entries: [ + { + value: 'Updated variable 1 value 2', + environmentId: environment1.id + } + ] + }) + + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(3) + }) + + it('should return [] if the variable has no revision', async () => { + //returns [] if variable has no revision + await prisma.variableVersion.deleteMany({ + where: { + variableId: variable1.id + } + }) + + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(200) + expect(response.json().length).toBe(0) + }) + + it('should return error if variable doesnt exist', async () => { + //return error if variable doesnt exist + const variableid = 'nonexistentvariable' + const response = await app.inject({ + method: 'GET', + url: `/variable/${variableid}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Variable with id ${variableid} not found` + ) + }) + + it('should return error if environment doesnt exist', async () => { + //return error if environment doesnt exist + const environmentid = 'nonexistentenvironment' + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environmentid}`, + headers: { + 'x-e2e-user-email': user1.email + } + }) + + expect(response.statusCode).toBe(404) + expect(response.json().message).toEqual( + `Environment with id ${environmentid} not found` + ) + }) + + it('returns error if variable isnt accessible', async () => { + //return error if user has no access to variable + const response = await app.inject({ + method: 'GET', + url: `/variable/${variable1.id}/revisions/${environment1.id}`, + headers: { + 'x-e2e-user-email': user2.email + } + }) + + expect(response.statusCode).toBe(401) + expect(response.json().message).toEqual( + `User ${user2.id} does not have the required authorities` + ) + }) }) diff --git a/apps/api/src/workspace-role/service/workspace-role.service.ts b/apps/api/src/workspace-role/service/workspace-role.service.ts index 164fc496..2e5489fb 100644 --- a/apps/api/src/workspace-role/service/workspace-role.service.ts +++ b/apps/api/src/workspace-role/service/workspace-role.service.ts @@ -22,6 +22,8 @@ import createEvent from '../../common/create-event' import { WorkspaceRoleWithProjects } from '../workspace-role.types' import { v4 } from 'uuid' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate, PaginatedMetadata } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class WorkspaceRoleService { @@ -303,28 +305,52 @@ export class WorkspaceRoleService { sort: string, order: string, search: string - ): Promise { + ): Promise<{ items: WorkspaceRole[]; metadata: PaginatedMetadata }> { await this.authorityCheckerService.checkAuthorityOverWorkspace({ userId: user.id, entity: { id: workspaceId }, authority: Authority.READ_WORKSPACE_ROLE, prisma: this.prisma }) - - return await this.prisma.workspaceRole.findMany({ + //get workspace roles of a workspace for given page and limit + const items = await this.prisma.workspaceRole.findMany({ where: { workspaceId, name: { contains: search } }, - skip: page * limit, - take: limit, + take: limitMaxItemsPerPage(limit), + orderBy: { [sort]: order } }) + + //calculate metadata + const totalCount = await this.prisma.workspaceRole.count({ + where: { + workspaceId, + name: { + contains: search + } + } + }) + + const metadata = paginate( + totalCount, + `/workspace-role/${workspaceId}/all`, + { + page, + limit: limitMaxItemsPerPage(limit), + sort, + order, + search + } + ) + + return { items, metadata } } private async getWorkspaceRoleWithAuthority( diff --git a/apps/api/src/workspace-role/workspace-role.e2e.spec.ts b/apps/api/src/workspace-role/workspace-role.e2e.spec.ts index 95eefeca..c110cbf8 100644 --- a/apps/api/src/workspace-role/workspace-role.e2e.spec.ts +++ b/apps/api/src/workspace-role/workspace-role.e2e.spec.ts @@ -26,6 +26,7 @@ import { EventModule } from '../event/event.module' import { WorkspaceRoleService } from './service/workspace-role.service' import { UserService } from '../user/service/user.service' import { UserModule } from '../user/user.module' +import { QueryTransformPipe } from '../common/query.transform.pipe' describe('Workspace Role Controller Tests', () => { let app: NestFastifyApplication @@ -58,6 +59,8 @@ describe('Workspace Role Controller Tests', () => { workspaceRoleService = moduleRef.get(WorkspaceRoleService) userService = moduleRef.get(UserService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -250,7 +253,7 @@ describe('Workspace Role Controller Tests', () => { EventSource.WORKSPACE_ROLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.WORKSPACE_ROLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -404,7 +407,7 @@ describe('Workspace Role Controller Tests', () => { EventSource.WORKSPACE_ROLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.WORKSPACE_ROLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -625,7 +628,7 @@ describe('Workspace Role Controller Tests', () => { EventSource.WORKSPACE_ROLE ) - const event = response[0] + const event = response.items[0] expect(event.source).toBe(EventSource.WORKSPACE_ROLE) expect(event.triggerer).toBe(EventTriggerer.USER) @@ -725,7 +728,22 @@ describe('Workspace Role Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toEqual(expect.arrayContaining(roles)) + expect(response.json().items).toEqual(expect.arrayContaining(roles)) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toBe(roles.length) + expect(metadata.links.self).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should be able to fetch all the roles of a workspace with READ_WORKSPACE_ROLE role', async () => { @@ -766,7 +784,22 @@ describe('Workspace Role Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toEqual(expect.arrayContaining(roles)) + expect(response.json().items).toEqual(expect.arrayContaining(roles)) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toBe(roles.length) + expect(metadata.links.self).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace-role/${workspaceAlice.id}/all?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to fetch all the roles of a workspace without READ_WORKSPACE_ROLE role', async () => { diff --git a/apps/api/src/workspace/service/workspace.service.ts b/apps/api/src/workspace/service/workspace.service.ts index 2a6b9319..90535149 100644 --- a/apps/api/src/workspace/service/workspace.service.ts +++ b/apps/api/src/workspace/service/workspace.service.ts @@ -31,6 +31,8 @@ import { v4 } from 'uuid' import createEvent from '../../common/create-event' import createWorkspace from '../../common/create-workspace' import { AuthorityCheckerService } from '../../common/authority-checker.service' +import { paginate } from '../../common/paginate' +import { limitMaxItemsPerPage } from '../../common/limit-max-items-per-page' @Injectable() export class WorkspaceService { @@ -412,6 +414,17 @@ export class WorkspaceService { } }) + const invalidRoles = await this.findInvalidWorkspaceRoles( + workspace.id, + roleIds + ) + + if (invalidRoles.length > 0) { + throw new NotFoundException( + `Workspace ${workspace.name} (${workspace.id}) does not have roles ${invalidRoles.join(', ')}` + ) + } + // Create new associations const createNewAssociations = this.prisma.workspaceMemberRoleAssociation.createMany({ @@ -464,8 +477,8 @@ export class WorkspaceService { authority: Authority.READ_USERS, prisma: this.prisma }) - - return this.prisma.workspaceMember.findMany({ + //get all members of workspace for page with limit + const items = await this.prisma.workspaceMember.findMany({ skip: page * limit, take: limit, orderBy: { @@ -514,6 +527,37 @@ export class WorkspaceService { } } }) + + //calculate metadata for pagination + const totalCount = await this.prisma.workspaceMember.count({ + where: { + workspaceId, + user: { + OR: [ + { + name: { + contains: search + } + }, + { + email: { + contains: search + } + } + ] + } + } + }) + + const metadata = paginate(totalCount, `/workspace/${workspaceId}/members`, { + page, + limit: limitMaxItemsPerPage(limit), + sort, + order, + search + }) + + return { items, metadata } } async acceptInvitation( @@ -728,9 +772,10 @@ export class WorkspaceService { order: string, search: string ) { - return this.prisma.workspace.findMany({ + //get all workspaces of user for page with limit + const items = await this.prisma.workspace.findMany({ skip: page * limit, - take: limit, + take: Number(limit), orderBy: { [sort]: order }, @@ -754,6 +799,40 @@ export class WorkspaceService { ] } }) + + // get total count of workspaces of the user + const totalCount = await this.prisma.workspace.count({ + where: { + members: { + some: { + userId: user.id + } + }, + OR: [ + { + name: { + contains: search + } + }, + { + description: { + contains: search + } + } + ] + } + }) + + //calculate metadata for pagination + const metadata = paginate(totalCount, `/workspace`, { + page, + limit: limitMaxItemsPerPage(limit), + sort, + order, + search + }) + + return { items, metadata } } async exportData(user: User, workspaceId: Workspace['id']) { @@ -912,6 +991,17 @@ export class WorkspaceService { ) } + const invalidRoles = await this.findInvalidWorkspaceRoles( + workspace.id, + member.roleIds + ) + + if (invalidRoles.length > 0) { + throw new NotFoundException( + `Workspace ${workspace.name} (${workspace.id}) does not have roles ${invalidRoles.join(', ')}` + ) + } + // Create the workspace membership const createMembership = this.prisma.workspaceMember.create({ data: { @@ -977,6 +1067,26 @@ export class WorkspaceService { } } + private async findInvalidWorkspaceRoles( + workspaceId: string, + roleIds: string[] + ) { + const roles = await this.prisma.workspaceRole.findMany({ + where: { + id: { + in: roleIds + }, + workspaceId: workspaceId + } + }) + + const roleIdSet = new Set(roles.map((role) => role.id)) + + const invalidRoles = roleIds.filter((id) => !roleIdSet.has(id)) + + return invalidRoles + } + private async memberExistsInWorkspace( workspaceId: string, userId: string diff --git a/apps/api/src/workspace/workspace.e2e.spec.ts b/apps/api/src/workspace/workspace.e2e.spec.ts index e40c546c..c50e34aa 100644 --- a/apps/api/src/workspace/workspace.e2e.spec.ts +++ b/apps/api/src/workspace/workspace.e2e.spec.ts @@ -24,6 +24,7 @@ import { EventModule } from '../event/event.module' import { UserModule } from '../user/user.module' import { UserService } from '../user/service/user.service' import { WorkspaceService } from './service/workspace.service' +import { QueryTransformPipe } from '../common/query.transform.pipe' const createMembership = async ( adminRoleId: string, @@ -75,6 +76,8 @@ describe('Workspace Controller Tests', () => { userService = moduleRef.get(UserService) workspaceService = moduleRef.get(WorkspaceService) + app.useGlobalPipes(new QueryTransformPipe()) + await app.init() await app.getHttpAdapter().getInstance().ready() }) @@ -222,7 +225,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -340,7 +343,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -485,7 +488,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -563,7 +566,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -641,7 +644,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -719,7 +722,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -831,7 +834,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -895,7 +898,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -964,7 +967,7 @@ describe('Workspace Controller Tests', () => { EventSource.WORKSPACE ) - const event = response[0] + const event = response.items[0] expect(event).toBeDefined() expect(event.source).toBe(EventSource.WORKSPACE) @@ -1033,8 +1036,23 @@ describe('Workspace Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json()).toBeInstanceOf(Array) - expect(response.json()).toHaveLength(1) + expect(response.json().items).toBeInstanceOf(Array) + expect(response.json().items).toHaveLength(1) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(1) + expect(metadata.links.self).toEqual( + `/workspace/${workspace1.id}/members?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace/${workspace1.id}/members?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace/${workspace1.id}/members?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should not be able to get all the members of the workspace if user is not a member', async () => { @@ -1150,7 +1168,53 @@ describe('Workspace Controller Tests', () => { }) expect(response.statusCode).toBe(200) - expect(response.json().length).toEqual(2) + expect(response.json().items.length).toEqual(2) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toBe(2) + expect(metadata.links.self).toEqual( + `/workspace?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toBeNull() + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace?page=0&limit=10&sort=name&order=asc&search=` + ) + }) + + it('should be able to fetch the 2nd page of the workspaces the user is a member of', async () => { + await createMembership(memberRole.id, user2.id, workspace1.id, prisma) + const response = await app.inject({ + method: 'GET', + headers: { + 'x-e2e-user-email': user2.email + }, + url: '/workspace?page=1&limit=1' + }) + + expect(response.statusCode).toBe(200) + expect(response.json().items).toHaveLength(1) + + //check metadata + const metadata = response.json().metadata + expect(metadata.totalCount).toEqual(2) + expect(metadata.links.self).toEqual( + `/workspace?page=1&limit=1&sort=name&order=asc&search=` + ) + expect(metadata.links.first).toEqual( + `/workspace?page=0&limit=1&sort=name&order=asc&search=` + ) + expect(metadata.links.previous).toEqual( + `/workspace?page=0&limit=1&sort=name&order=asc&search=` + ) + expect(metadata.links.next).toBeNull() + expect(metadata.links.last).toEqual( + `/workspace?page=1&limit=1&sort=name&order=asc&search=` + ) }) it('should be able to transfer the ownership of the workspace', async () => { diff --git a/apps/cli/package.json b/apps/cli/package.json index e7a62c7c..ab079628 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "CLI for keyshade", "main": "index.js", + "private": false, "type": "commonjs", "scripts": { "build": "swc src --out-dir dist", @@ -19,16 +20,19 @@ "cli-table": "^0.3.11", "colors": "^1.4.0", "commander": "^12.1.0", + "eccrypto": "^1.1.6", "figlet": "^1.7.0", "fs": "0.0.1-security", "nodemon": "^3.1.4", - "socket.io-client": "^4.7.5" + "socket.io-client": "^4.7.5", + "@keyshade/api-client": "workspace:../../packages/api-client" }, "devDependencies": { "@swc/cli": "^0.4.0", "@swc/core": "^1.6.13", "@types/cli-table": "^0.3.4", "@types/figlet": "^1.5.8", + "@types/eccrypto": "^1.1.6", "@types/node": "^20.14.10", "eslint-config-standard-with-typescript": "^43.0.1" } diff --git a/apps/cli/src/commands/environment.command.ts b/apps/cli/src/commands/environment.command.ts new file mode 100644 index 00000000..27cd7f47 --- /dev/null +++ b/apps/cli/src/commands/environment.command.ts @@ -0,0 +1,26 @@ +import BaseCommand from './base.command' +import { CreateEnvironment } from './environment/create.environment' +import { DeleteEnvironment } from './environment/delete.environment' +import { GetEnvironment } from './environment/get.environment' +import { ListEnvironment } from './environment/list.environment' +import { UpdateEnvironment } from './environment/update.environment' + +export default class EnvironmentCommand extends BaseCommand { + getName(): string { + return 'environment' + } + + getDescription(): string { + return 'Manage your environments in keyshade.' + } + + getSubCommands(): BaseCommand[] { + return [ + new CreateEnvironment(), + new DeleteEnvironment(), + new GetEnvironment(), + new ListEnvironment(), + new UpdateEnvironment() + ] + } +} diff --git a/apps/cli/src/commands/environment/create.environment.ts b/apps/cli/src/commands/environment/create.environment.ts new file mode 100644 index 00000000..b5e8882f --- /dev/null +++ b/apps/cli/src/commands/environment/create.environment.ts @@ -0,0 +1,97 @@ +import BaseCommand from '../base.command' +import { text } from '@clack/prompts' +import { + type CommandActionData, + type CommandArgument, + type CommandOption +} from 'src/types/command/command.types' +import { EnvironmentController } from '@keyshade/api-client' +import { Logger } from '@/util/logger' +export class CreateEnvironment extends BaseCommand { + getName(): string { + return 'create' + } + + getDescription(): string { + return 'Create a new environment' + } + + getOptions(): CommandOption[] { + return [ + { + short: '-n', + long: '--name ', + description: 'Name of the Environment' + }, + { + short: '-d', + long: '--description ', + description: 'Description about the Environment' + } + ] + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: + 'ID of the project under which you want to add the environment' + } + ] + } + + async action({ options, args }: CommandActionData): Promise { + const [projectId] = args + const { name, description } = await this.parseInput(options) + + if (!projectId) { + Logger.error('Project ID is required') + return + } + + const apiKey = this.apiKey + + const environmentData = { + name, + description, + projectId + } + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Creating Environment...') + + const { + data: environment, + error, + success + } = await environmentController.createEnvironment(environmentData, headers) + + if (success) { + Logger.info(`Environment created:${environment.name} (${environment.id})`) + } else { + Logger.error(`Failed to create environment: ${error.message}`) + } + } + + private async parseInput(options: CommandActionData['options']): Promise<{ + name: string + description?: string + }> { + let { name } = options + const { description } = options + + if (!name) { + name = await text({ + message: 'Enter the name of the Environment', + placeholder: 'env' + }) + } + + return { name, description } + } +} diff --git a/apps/cli/src/commands/environment/delete.environment.ts b/apps/cli/src/commands/environment/delete.environment.ts new file mode 100644 index 00000000..a4874360 --- /dev/null +++ b/apps/cli/src/commands/environment/delete.environment.ts @@ -0,0 +1,55 @@ +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument +} from 'src/types/command/command.types' +import { Logger } from '@/util/logger' + +export class DeleteEnvironment extends BaseCommand { + getName(): string { + return 'delete' + } + + getDescription(): string { + return 'Delete an environment' + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the environment which you want to delete.' + } + ] + } + + async action({ args }: CommandActionData): Promise { + const [environmentId] = args + + if (!environmentId) { + Logger.error('Environment ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Deleting Environment...') + + const { success, error } = await environmentController.deleteEnvironment( + { id: environmentId }, + headers + ) + + if (success) { + Logger.info('Environment deleted successfully') + } else { + Logger.error(error.message) + } + } +} diff --git a/apps/cli/src/commands/environment/get.environment.ts b/apps/cli/src/commands/environment/get.environment.ts new file mode 100644 index 00000000..8e543725 --- /dev/null +++ b/apps/cli/src/commands/environment/get.environment.ts @@ -0,0 +1,62 @@ +import { Logger } from '@/util/logger' +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument +} from 'src/types/command/command.types' + +export class GetEnvironment extends BaseCommand { + getName(): string { + return 'get' + } + + getDescription(): string { + return 'Get an environment' + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the environment which you want to fetch.' + } + ] + } + + async action({ args }: CommandActionData): Promise { + const [environmentId] = args + + if (!environmentId) { + Logger.error('Environment ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Fetching Environment...') + + const { + success, + error, + data: environment + } = await environmentController.getEnvironmentById( + { id: environmentId }, + headers + ) + + if (success) { + Logger.info('Environment fetched successfully:') + Logger.info( + `Environment ID: ${environment.id}, Name: ${environment.name}, Description: ${environment.description}` + ) + } else { + Logger.error(error.message) + } + } +} diff --git a/apps/cli/src/commands/environment/list.environment.ts b/apps/cli/src/commands/environment/list.environment.ts new file mode 100644 index 00000000..85adcec6 --- /dev/null +++ b/apps/cli/src/commands/environment/list.environment.ts @@ -0,0 +1,69 @@ +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument +} from 'src/types/command/command.types' +import { Logger } from '@/util/logger' + +export class ListEnvironment extends BaseCommand { + getName(): string { + return 'list' + } + + getDescription(): string { + return 'List all environments under a project' + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the project whose environments you want.' + } + ] + } + + async action({ args }: CommandActionData): Promise { + const [projectId] = args + + if (!projectId) { + Logger.error('Project ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + if (!apiKey) { + Logger.error('Base URL and API Key must be set as environment variables') + return + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Fetching all environments...') + + const { + success, + data: environments, + error + } = await environmentController.getAllEnvironmentsOfProject( + { projectId }, + headers + ) + + if (success) { + Logger.info('Fetched environments:') + environments.items.forEach((environment) => { + Logger.info( + `- ID: ${environment.id}, Name: ${environment.name}, Description: ${environment.description}` + ) + }) + } else { + Logger.error(`Failed to fetch environments: ${error.message}`) + } + } +} diff --git a/apps/cli/src/commands/environment/update.environment.ts b/apps/cli/src/commands/environment/update.environment.ts new file mode 100644 index 00000000..b1638ba6 --- /dev/null +++ b/apps/cli/src/commands/environment/update.environment.ts @@ -0,0 +1,82 @@ +import { Logger } from '@/util/logger' +import BaseCommand from '../base.command' +import { EnvironmentController } from '@keyshade/api-client' +import { + type CommandActionData, + type CommandArgument, + type CommandOption +} from 'src/types/command/command.types' + +export class UpdateEnvironment extends BaseCommand { + getName(): string { + return 'update' + } + + getDescription(): string { + return 'Update a environment' + } + + getOptions(): CommandOption[] { + return [ + { + short: '-n', + long: '--name ', + description: 'Name of the Environment' + }, + { + short: '-d', + long: '--description ', + description: 'Description about the Environment' + } + ] + } + + getArguments(): CommandArgument[] { + return [ + { + name: '', + description: 'ID of the environment which you want to update.' + } + ] + } + + async action({ options, args }: CommandActionData): Promise { + const [environmentId] = args + const { name, description } = options + + if (!environmentId) { + Logger.error('Environment ID is required') + return + } + + const apiKey = this.apiKey + + const headers = { + 'x-keyshade-token': apiKey + } + + const environmentData = { + name, + description, + id: environmentId + } + + const environmentController = new EnvironmentController(this.baseUrl) + Logger.info('Updating Environment...') + + const { + success, + error, + data: environment + } = await environmentController.updateEnvironment(environmentData, headers) + + if (success) { + Logger.info('Environment updated successfully') + Logger.info( + `Environment ID: ${environment.id}, Name: ${environment.name}, Description: ${environment.description}` + ) + } else { + Logger.error(error.message) + } + } +} diff --git a/apps/cli/src/commands/init.command.ts b/apps/cli/src/commands/init.command.ts index 5f9806ab..d422c0a4 100644 --- a/apps/cli/src/commands/init.command.ts +++ b/apps/cli/src/commands/init.command.ts @@ -38,6 +38,12 @@ export default class InitCommand extends BaseCommand { long: '--overwrite', description: 'Overwrite existing configuration', defaultValue: false + }, + { + short: '-q', + long: '--quit-on-decryption-failure', + description: 'Quit on decryption failure', + defaultValue: false } ] } @@ -52,7 +58,7 @@ export default class InitCommand extends BaseCommand { async action({ options }: CommandActionData): Promise { let { workspace, project, environment, privateKey } = options - const { overwrite } = options + const { overwrite, quitOnDecryptionFailure } = options intro('Configure the project for live-updates') @@ -85,7 +91,8 @@ export default class InitCommand extends BaseCommand { await writeProjectRootConfig({ workspace, project, - environment + environment, + quitOnDecryptionFailure }) await writePrivateKeyConfig({ diff --git a/apps/cli/src/commands/run.command.ts b/apps/cli/src/commands/run.command.ts index a1e9e867..0feda2bf 100644 --- a/apps/cli/src/commands/run.command.ts +++ b/apps/cli/src/commands/run.command.ts @@ -15,9 +15,12 @@ import { import { Logger } from '@/util/logger' import type { ClientRegisteredResponse, - Configuration + Configuration, + RunData } from '@/types/command/run.types' +import { decrypt } from '@/util/decrypt' + export default class RunCommand extends BaseCommand { private processEnvironmentalVariables = {} @@ -51,10 +54,9 @@ export default class RunCommand extends BaseCommand { await this.executeCommand(args[0]) } - private async fetchConfigurations(): Promise< - ProjectRootConfig & { privateKey: string } - > { - const { environment, project, workspace } = await fetchProjectRootConfig() + private async fetchConfigurations(): Promise { + const { environment, project, workspace, quitOnDecryptionFailure } = + await fetchProjectRootConfig() const privateKeyConfig = await fetchPrivateKeyConfig() const privateKey = privateKeyConfig[`${workspace}_${project}_${environment}`] @@ -67,7 +69,8 @@ export default class RunCommand extends BaseCommand { environment, project, workspace, - privateKey + privateKey, + quitOnDecryptionFailure } } @@ -78,10 +81,12 @@ export default class RunCommand extends BaseCommand { return 'ws' } - private async connectToSocket(data: ProjectRootConfig) { + private async connectToSocket(data: RunData) { Logger.info('Connecting to socket...') const host = this.baseUrl.substring(this.baseUrl.lastIndexOf('/') + 1) const websocketUrl = `${this.getWebsocketType(this.baseUrl)}://${host}/change-notifier` + const privateKey = data.privateKey + const quitOnDecryptionFailure = data.quitOnDecryptionFailure const ioClient = io(websocketUrl, { autoConnect: false, @@ -102,8 +107,27 @@ export default class RunCommand extends BaseCommand { ioClient.on('configuration-updated', async (data: Configuration) => { Logger.info( - `Configuration change received from API (name: ${data.name}, value: ${data.value})` + `Configuration change received from API (name: ${data.name})` ) + + if (!data.isPlaintext) { + try { + data.value = await decrypt(privateKey, data.value) + } catch (error) { + if (quitOnDecryptionFailure) { + Logger.error( + `Decryption failed for ${data.name}. Stopping the process.` + ) + process.exit(1) + } else { + Logger.warn( + `Decryption failed for ${data.name}. Skipping this configuration.` + ) + return + } + } + } + this.processEnvironmentalVariables[data.name] = data.value this.shouldRestart = true }) diff --git a/apps/cli/src/http/auth.ts b/apps/cli/src/http/auth.ts index bd8d9b41..d53108f7 100644 --- a/apps/cli/src/http/auth.ts +++ b/apps/cli/src/http/auth.ts @@ -1,7 +1,10 @@ import { Logger } from '@/util/logger' -const AuthController = { - async checkApiKeyValidity(baseUrl: string, apiKey: string): Promise { +class AuthController { + static async checkApiKeyValidity( + baseUrl: string, + apiKey: string + ): Promise { Logger.info('Checking API key validity...') const response = await fetch(`${baseUrl}/api/api-key/access/live-updates`, { headers: { diff --git a/apps/cli/src/http/project.ts b/apps/cli/src/http/project.ts new file mode 100644 index 00000000..e69de29b diff --git a/apps/cli/src/http/secret.ts b/apps/cli/src/http/secret.ts index 80eabf09..a5a9d0e6 100644 --- a/apps/cli/src/http/secret.ts +++ b/apps/cli/src/http/secret.ts @@ -1,7 +1,7 @@ import type { Configuration } from '@/types/command/run.types' -const SecretController = { - async fetchSecrets( +class SecretController { + static async fetchSecrets( baseUrl: string, apiKey: string, projectId: string, diff --git a/apps/cli/src/http/variable.ts b/apps/cli/src/http/variable.ts index 03e0d210..cc3a4363 100644 --- a/apps/cli/src/http/variable.ts +++ b/apps/cli/src/http/variable.ts @@ -1,7 +1,7 @@ import type { Configuration } from '@/types/command/run.types' -const VariableController = { - async fetchVariables( +class VariableController { + static async fetchVariables( baseUrl: string, apiKey: string, projectId: string, diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 38bb159c..f1a78a03 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -3,6 +3,7 @@ import type BaseCommand from '@/commands/base.command' import ProfileCommand from '@/commands/profile.command' import InitCommand from '@/commands/init.command' import RunCommand from '@/commands/run.command' +import EnvironmentCommand from '@/commands/environment.command' const program = new Command() @@ -13,7 +14,8 @@ program.option('--base-url ', 'The base URL to use') const COMMANDS: BaseCommand[] = [ new RunCommand(), new InitCommand(), - new ProfileCommand() + new ProfileCommand(), + new EnvironmentCommand() ] COMMANDS.forEach((command) => { diff --git a/apps/cli/src/types/command/run.types.d.ts b/apps/cli/src/types/command/run.types.d.ts index 79da8314..3bb79469 100644 --- a/apps/cli/src/types/command/run.types.d.ts +++ b/apps/cli/src/types/command/run.types.d.ts @@ -1,3 +1,5 @@ +import { ProjectRootConfig } from '../index.types' + export interface Configuration { name: string value: string @@ -9,3 +11,7 @@ export interface ClientRegisteredResponse { projectId: string environmentId: string } + +export interface RunData extends ProjectRootConfig { + privateKey: string +} diff --git a/apps/cli/src/types/index.types.d.ts b/apps/cli/src/types/index.types.d.ts index 5ec40ef6..561e65ef 100644 --- a/apps/cli/src/types/index.types.d.ts +++ b/apps/cli/src/types/index.types.d.ts @@ -2,6 +2,7 @@ export interface ProjectRootConfig { workspace: string project: string environment: string + quitOnDecryptionFailure: boolean } export interface ProfileConfig { @@ -12,4 +13,21 @@ export interface ProfileConfig { } } +export interface Page { + items: T[] + metadata: { + page: number + perPage: number + pageCount: number + totalCount: number + links: { + self: string + first: string + previous: string | null + next: string | null + last: string + } + } +} + export type PrivateKeyConfig = Record diff --git a/apps/cli/src/util/configuration.ts b/apps/cli/src/util/configuration.ts index bedb2a47..241667ee 100644 --- a/apps/cli/src/util/configuration.ts +++ b/apps/cli/src/util/configuration.ts @@ -4,7 +4,7 @@ import type { ProjectRootConfig } from '@/types/index.types' import { existsSync } from 'fs' -import { readFile, readdir, writeFile } from 'fs/promises' +import { readFile, readdir, writeFile, mkdir } from 'fs/promises' export const getOsType = (): 'unix' | 'windows' => { return process.platform === 'win32' ? 'windows' : 'unix' @@ -59,6 +59,7 @@ export const writeProfileConfig = async ( config: ProfileConfig ): Promise => { const path = getProfileConfigurationFilePath() + await ensureDirectoryExists(path) await writeFile(path, JSON.stringify(config, null, 2), 'utf8') } @@ -66,6 +67,7 @@ export const writePrivateKeyConfig = async ( config: PrivateKeyConfig ): Promise => { const path = getPrivateKeyConfigurationFilePath() + await ensureDirectoryExists(path) await writeFile(path, JSON.stringify(config, null, 2), 'utf8') } @@ -82,3 +84,11 @@ export const fetchUserRootConfigurationFiles = async (): Promise => { const files = await readdir(path) return `- ${files.join('\n- ')}` } + +const ensureDirectoryExists = async (path: string) => { + // Create the parent directory if it doesn't exist + const parentDirectory = path.split('/').slice(0, -1).join('/') + if (!existsSync(parentDirectory)) { + await mkdir(parentDirectory, { recursive: true }) + } +} diff --git a/apps/cli/src/util/decrypt.ts b/apps/cli/src/util/decrypt.ts new file mode 100644 index 00000000..6db7932e --- /dev/null +++ b/apps/cli/src/util/decrypt.ts @@ -0,0 +1,23 @@ +/* eslint-disable @typescript-eslint/no-unsafe-argument */ +import * as eccrypto from 'eccrypto' + +export const decrypt = async ( + privateKey: string, + data: string +): Promise => { + const parsed = JSON.parse(data) + + const eicesData = { + iv: Buffer.from(parsed.iv), + ephemPublicKey: Buffer.from(parsed.ephemPublicKey), + ciphertext: Buffer.from(parsed.ciphertext), + mac: Buffer.from(parsed.mac) + } + + const decrypted = await eccrypto.decrypt( + Buffer.from(privateKey, 'hex'), + eicesData + ) + + return decrypted.toString() +} diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json index 44e151f6..3867967a 100644 --- a/apps/cli/tsconfig.json +++ b/apps/cli/tsconfig.json @@ -11,7 +11,8 @@ "outDir": "./dist", "baseUrl": ".", "paths": { - "@/*": ["./src/*"] + "@/*": ["./src/*"], + "@keyshade/api-client": ["../../packages/api-client/src/index.ts"] }, "incremental": true, "skipLibCheck": true, @@ -21,6 +22,9 @@ "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true }, + "ts-node": { + "require": ["tsconfig-paths/register"] + }, "include": ["src/**/*.ts"], "exclude": ["node_modules"] } diff --git a/apps/platform/src/app/api/health/route.ts b/apps/platform/src/app/api/health/route.ts index 9b1fdf11..19e7ced4 100644 --- a/apps/platform/src/app/api/health/route.ts +++ b/apps/platform/src/app/api/health/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server' -export function GET(): unknown { +export function GET(): NextResponse { return NextResponse.json({ message: 'Hello World' }, { status: 200 }) } diff --git a/apps/platform/src/components/ui/command.tsx b/apps/platform/src/components/ui/command.tsx index 9203ee20..3757984e 100644 --- a/apps/platform/src/components/ui/command.tsx +++ b/apps/platform/src/components/ui/command.tsx @@ -5,18 +5,19 @@ import { Search } from 'lucide-react' import { cn } from '@/lib/utils' import { Dialog, DialogContent } from '@/components/ui/dialog' -const Command = React.forwardRef>( - ({ className, ...props }, ref) => ( - - ) -) +const Command = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) Command.displayName = CommandPrimitive.displayName export type CommandDialogProps = DialogProps @@ -37,7 +38,8 @@ function CommandDialog({ } const CommandInput = React.forwardRef< - React.ElementRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => (
+ React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( @@ -73,7 +73,8 @@ const CommandList = React.forwardRef< CommandList.displayName = CommandPrimitive.List.displayName const CommandEmpty = React.forwardRef< - React.ElementRef + React.ElementRef, + React.ComponentPropsWithoutRef >((props, ref) => ( + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( @@ -114,12 +114,13 @@ const CommandSeparator = React.forwardRef< CommandSeparator.displayName = CommandPrimitive.Separator.displayName const CommandItem = React.forwardRef< - React.ElementRef + React.ElementRef, + React.ComponentPropsWithoutRef >(({ className, ...props }, ref) => ( - ): Promise { - return this.apiClient.post( + ): Promise> { + const response = await this.apiClient.post( `/api/environment/${request.projectId}`, request, headers ) + + return await parseResponse(response) } - static async updateEnvironment( + async updateEnvironment( request: UpdateEnvironmentRequest, headers?: Record - ): Promise { - return this.apiClient.put( + ): Promise> { + const response = await this.apiClient.put( `/api/environment/${request.id}`, request, headers ) + + return await parseResponse(response) } - static async getEnvironmentById( + async getEnvironmentById( request: GetEnvironmentByIdRequest, - headers?: Record - ): Promise { - return this.apiClient.get( + ): Promise> { + const response = await this.apiClient.get( `/api/environment/${request.id}`, headers ) + + return await parseResponse(response) } - static async getAllEnvironmentsOfProject( + async getAllEnvironmentsOfProject( request: GetAllEnvironmentsOfProjectRequest, headers?: Record - ): Promise { + ): Promise> { let url = `/api/environment/all/${request.projectId}?` request.page && (url += `page=${request.page}&`) request.limit && (url += `limit=${request.limit}&`) @@ -59,16 +70,20 @@ export default class EnvironmentController { request.order && (url += `order=${request.order}&`) request.search && (url += `search=${request.search}&`) - return this.apiClient.get(url, headers) + const response = await this.apiClient.get(url, headers) + + return await parseResponse(response) } - static async deleteEnvironment( + async deleteEnvironment( request: DeleteEnvironmentRequest, headers?: Record - ): Promise { - return this.apiClient.delete( + ): Promise> { + const response = await this.apiClient.delete( `/api/environment/${request.id}`, headers ) + + return await parseResponse(response) } } diff --git a/packages/api-client/src/controllers/event.ts b/packages/api-client/src/controllers/event.ts new file mode 100644 index 00000000..f35e5a3d --- /dev/null +++ b/packages/api-client/src/controllers/event.ts @@ -0,0 +1,24 @@ +import { GetEventsRequest, GetEventsResponse } from '../types/event.types' +import { APIClient } from '../core/client' +import { ClientResponse } from '../types/index.types' +import { parseResponse } from '../core/response-parser' + +export default class EventController { + private apiClient: APIClient + + constructor(private readonly backendUrl: string) { + this.apiClient = new APIClient(this.backendUrl) + } + + async getEvents( + request: GetEventsRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.get( + `/api/event/${request.workspaceId}?source=${request.source}`, + headers + ) + + return await parseResponse(response) + } +} diff --git a/packages/api-client/src/controllers/integration.ts b/packages/api-client/src/controllers/integration.ts new file mode 100644 index 00000000..d0c128c9 --- /dev/null +++ b/packages/api-client/src/controllers/integration.ts @@ -0,0 +1,84 @@ +import { + CreateIntegrationRequest, + CreateIntegrationResponse, + DeleteIntegrationRequest, + DeleteIntegrationResponse, + GetAllIntegrationRequest, + GetAllIntegrationResponse, + GetIntegrationRequest, + GetIntegrationResponse, + UpdateIntegrationRequest, + UpdateIntegrationResponse +} from '../types/integration.types' +import { APIClient } from '../core/client' +import { ClientResponse } from '../types/index.types' +import { parseResponse } from '../core/response-parser' + +export default class IntegrationController { + private apiClient: APIClient + + constructor(private readonly backendUrl: string) { + this.apiClient = new APIClient(this.backendUrl) + } + + async createIntegration( + request: CreateIntegrationRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.post( + `/api/integration/${request.workspaceId}`, + request, + headers + ) + return await parseResponse(response) + } + + async updateIntegration( + request: UpdateIntegrationRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.put( + `/api/integration/${request.integrationId}`, + request, + headers + ) + return await parseResponse(response) + } + + async getIntegration( + request: GetIntegrationRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.get( + `/api/integration/${request.integrationId}`, + headers + ) + return await parseResponse(response) + } + + async getAllIntegrations( + request: GetAllIntegrationRequest, + headers?: Record + ): Promise> { + let url = `/api/integration/all/${request.workspaceId}` + request.page && (url += `page=${request.page}&`) + request.limit && (url += `limit=${request.limit}&`) + request.sort && (url += `sort=${request.sort}&`) + request.order && (url += `order=${request.order}&`) + request.search && (url += `search=${request.search}&`) + + const response = await this.apiClient.get(url, headers) + return await parseResponse(response) + } + + async deleteIntegration( + request: DeleteIntegrationRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.delete( + `/api/integration/${request.integrationId}`, + headers + ) + return await parseResponse(response) + } +} diff --git a/packages/api-client/src/controllers/secret.ts b/packages/api-client/src/controllers/secret.ts new file mode 100644 index 00000000..0cf22058 --- /dev/null +++ b/packages/api-client/src/controllers/secret.ts @@ -0,0 +1,106 @@ +import { APIClient } from '../core/client' +import { ClientResponse } from '../types/index.types' +import { parseResponse } from '../core/response-parser' +import { + CreateSecretRequest, + CreateSecretResponse, + DeleteSecretRequest, + DeleteSecretResponse, + GetAllSecretsOfEnvironmentRequest, + GetAllSecretsOfEnvironmentResponse, + GetAllSecretsOfProjectRequest, + GetAllSecretsOfProjectResponse, + RollBackSecretRequest, + RollBackSecretResponse, + UpdateSecretRequest, + UpdateSecretResponse +} from '../types/secret.types' + +export default class SecretController { + private apiClient: APIClient + + constructor(private readonly backendUrl: string) { + this.apiClient = new APIClient(this.backendUrl) + } + + async createSecret( + request: CreateSecretRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.post( + `/api/secret/${request.projectId}`, + request, + headers + ) + + return await parseResponse(response) + } + + async updateSecret( + request: UpdateSecretRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.put( + `/api/secret/${request.secretId}`, + request, + headers + ) + + return await parseResponse(response) + } + + async rollbackSecret( + request: RollBackSecretRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.put( + `/api/secret/${request.secretId}/rollback/${request.version}?environmentId=${request.environmentId}`, + request, + headers + ) + + return await parseResponse(response) + } + + async deleteSecret( + request: DeleteSecretRequest, + headers?: Record + ): Promise> { + const response = await this.apiClient.delete( + `/api/secret/${request.secretId}`, + headers + ) + + return await parseResponse(response) + } + + async getAllSecretsOfProject( + request: GetAllSecretsOfProjectRequest, + headers?: Record + ): Promise> { + let url = `/api/secret/${request.projectId}?decryptValue=true` + request.page && (url += `page=${request.page}&`) + request.limit && (url += `limit=${request.limit}&`) + request.sort && (url += `sort=${request.sort}&`) + request.order && (url += `order=${request.order}&`) + request.search && (url += `search=${request.search}&`) + const response = await this.apiClient.get(url, headers) + + return await parseResponse(response) + } + + async getAllSecretsOfEnvironment( + request: GetAllSecretsOfEnvironmentRequest, + headers?: Record + ): Promise> { + let url = `/api/secret/${request.projectId}/${request.environmentId}` + request.page && (url += `page=${request.page}&`) + request.limit && (url += `limit=${request.limit}&`) + request.sort && (url += `sort=${request.sort}&`) + request.order && (url += `order=${request.order}&`) + request.search && (url += `search=${request.search}&`) + const response = await this.apiClient.get(url, headers) + + return await parseResponse(response) + } +} diff --git a/packages/api-client/src/controllers/variable.ts b/packages/api-client/src/controllers/variable.ts new file mode 100644 index 00000000..65a83404 --- /dev/null +++ b/packages/api-client/src/controllers/variable.ts @@ -0,0 +1,105 @@ +import { APIClient } from '../core/client' +import { parseResponse } from '../core/response-parser' +import { ClientResponse } from '../types/index.types' +import { + CreateVariableRequest, + CreateVariableResponse, + DeleteVariableRequest, + DeleteVariableResponse, + GetAllVariablesOfEnvironmentRequest, + GetAllVariablesOfEnvironmentResponse, + GetAllVariablesOfProjectRequest, + GetAllVariablesOfProjectResponse, + RollBackVariableRequest, + RollBackVariableResponse, + UpdateVariableRequest, + UpdateVariableResponse +} from '../types/variable.types' + +export default class VariableController { + private apiClient: APIClient + + constructor(private readonly backendUrl: string) { + this.apiClient = new APIClient(this.backendUrl) + } + + async createVariable( + request: CreateVariableRequest, + headers: Record + ): Promise> { + const response = await this.apiClient.post( + `/api/variable/${request.projectId}`, + request, + headers + ) + return await parseResponse(response) + } + + async updateVariable( + request: UpdateVariableRequest, + headers: Record + ): Promise> { + const response = await this.apiClient.put( + `/api/variable/${request.variableId}`, + request, + headers + ) + + return await parseResponse(response) + } + + async rollbackVariable( + request: RollBackVariableRequest, + headers: Record + ): Promise> { + const response = await this.apiClient.put( + `/api/variable/${request.variableId}/rollback/${request.version}?environmentId=${request.environmentId}`, + request, + headers + ) + + return await parseResponse(response) + } + + async deleteVariable( + request: DeleteVariableRequest, + headers: Record + ): Promise> { + const response = await this.apiClient.delete( + `/api/variable/${request.variableId}`, + headers + ) + + return await parseResponse(response) + } + + async getAllVariablesOfProject( + request: GetAllVariablesOfProjectRequest, + headers: Record + ): Promise> { + let url = `/api/variable/${request.projectId}` + request.page && (url += `page=${request.page}&`) + request.limit && (url += `limit=${request.limit}&`) + request.sort && (url += `sort=${request.sort}&`) + request.order && (url += `order=${request.order}&`) + request.search && (url += `search=${request.search}&`) + const response = await this.apiClient.get(url, headers) + + return await parseResponse(response) + } + + async getAllVariablesOfEnvironment( + request: GetAllVariablesOfEnvironmentRequest, + headers: Record + ): Promise> { + let url = `/api/variable/${request.projectId}/${request.environmentId}` + request.page && (url += `page=${request.page}&`) + request.limit && (url += `limit=${request.limit}&`) + request.sort && (url += `sort=${request.sort}&`) + request.order && (url += `order=${request.order}&`) + request.search && (url += `search=${request.search}&`) + const response = await this.apiClient.get(url, headers) + + return await parseResponse(response) + } +} diff --git a/packages/api-client/src/client.ts b/packages/api-client/src/core/client.ts similarity index 56% rename from packages/api-client/src/client.ts rename to packages/api-client/src/core/client.ts index aa724dd1..3ff85d6c 100644 --- a/packages/api-client/src/client.ts +++ b/packages/api-client/src/core/client.ts @@ -1,38 +1,8 @@ -interface ErrorWithResponse extends Error { - status: number - response: Record -} - -class APIClient { - private baseUrl: string +export class APIClient { + constructor(private readonly baseUrl: string) {} - private static instance: APIClient | null = null - - constructor(baseUrl: string) { - this.baseUrl = baseUrl - } - - static getInstance(): APIClient { - if (!this.instance) { - this.instance = new APIClient(process.env.BACKEND_URL as string) - } - return this.instance - } - - async request(url: string, options: RequestInit): Promise { - const response = await fetch(`${this.baseUrl}${url}`, options) - if (!response.ok) { - const error = new Error(response.statusText) as ErrorWithResponse - error.status = response.status - error.response = (await response.json()) as Record - throw error - } - - try { - return (await response.json()) as T - } catch (e) { - return response as T - } + async request(url: string, options: RequestInit): Promise { + return await fetch(`${this.baseUrl}${url}`, options) } /** @@ -40,8 +10,8 @@ class APIClient { * @param url - The URL to send the GET request to. * @returns A Promise that resolves to the response data. */ - get(url: string, headers?: Record): Promise { - return this.request(url, { + get(url: string, headers?: Record): Promise { + return this.request(url, { method: 'GET', headers: { 'Content-Type': 'application/json', @@ -58,12 +28,12 @@ class APIClient { * @param data - The data to send in the request body. * @returns A Promise that resolves to the response data. */ - post( + post( url: string, data: any, headers?: Record - ): Promise { - return this.request(url, { + ): Promise { + return this.request(url, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -81,8 +51,12 @@ class APIClient { * @param data - The data to be sent in the request body. * @returns A Promise that resolves to the response data. */ - put(url: string, data: any, headers?: Record): Promise { - return this.request(url, { + put( + url: string, + data: any, + headers?: Record + ): Promise { + return this.request(url, { method: 'PUT', headers: { 'Content-Type': 'application/json', @@ -99,8 +73,8 @@ class APIClient { * @param url - The URL to send the DELETE request to. * @returns A Promise that resolves to the response data. */ - delete(url: string, headers?: Record): Promise { - return this.request(url, { + delete(url: string, headers?: Record): Promise { + return this.request(url, { method: 'DELETE', headers: { 'Content-Type': 'application/json', @@ -110,7 +84,3 @@ class APIClient { }) } } - -const client = APIClient.getInstance() - -export default client diff --git a/packages/api-client/src/core/response-parser.ts b/packages/api-client/src/core/response-parser.ts new file mode 100644 index 00000000..ce17508d --- /dev/null +++ b/packages/api-client/src/core/response-parser.ts @@ -0,0 +1,26 @@ +import { ClientResponse, ResponseError } from '../types/index.types' + +export async function parseResponse( + response: Response +): Promise> { + if (!response.ok) { + const error = (await response.json()) as ResponseError + return { + success: false, + data: null, + error + } as ClientResponse + } + + let data: any = null + + try { + data = await response.json() + } catch (error) {} + + return { + success: true, + data, + error: null + } as ClientResponse +} diff --git a/packages/api-client/src/index.ts b/packages/api-client/src/index.ts index e69de29b..e87c54ba 100644 --- a/packages/api-client/src/index.ts +++ b/packages/api-client/src/index.ts @@ -0,0 +1,11 @@ +import EnvironmentController from './controllers/environment' +import SecretController from './controllers/secret' +import EventController from './controllers/event' +import IntegrationController from './controllers/integration' + +export { + EnvironmentController, + SecretController, + EventController, + IntegrationController +} diff --git a/packages/api-client/src/types/environment.types.d.ts b/packages/api-client/src/types/environment.types.d.ts index 14b44839..ed140704 100644 --- a/packages/api-client/src/types/environment.types.d.ts +++ b/packages/api-client/src/types/environment.types.d.ts @@ -1,3 +1,5 @@ +import { Page } from '../../../../apps/cli/src/types/index.types' + export interface CreateEnvironmentRequest { name: string description?: string @@ -53,8 +55,8 @@ export interface GetAllEnvironmentsOfProjectRequest { search?: string } -export interface GetAllEnvironmentsOfProjectResponse { - items: { +export interface GetAllEnvironmentsOfProjectResponse + extends Page<{ id: string name: string description: string | null @@ -66,8 +68,7 @@ export interface GetAllEnvironmentsOfProjectResponse { email: string profilePictureUrl: string | null } - }[] -} + }> {} export interface DeleteEnvironmentRequest { id: string diff --git a/packages/api-client/src/types/event.types.d.ts b/packages/api-client/src/types/event.types.d.ts new file mode 100644 index 00000000..30eee490 --- /dev/null +++ b/packages/api-client/src/types/event.types.d.ts @@ -0,0 +1,82 @@ +import { Page } from '../../../../apps/cli/src/types/index.types' + +export enum EventSource { + SECRET, + VARIABLE, + ENVIRONMENT, + PROJECT, + WORKSPACE, + WORKSPACE_ROLE, + INTEGRATION +} + +export enum EventTriggerer { + USER, + SYSTEM +} + +export enum EventSeverity { + INFO, + WARN, + ERROR +} + +export enum EventType { + INVITED_TO_WORKSPACE, + REMOVED_FROM_WORKSPACE, + ACCEPTED_INVITATION, + DECLINED_INVITATION, + CANCELLED_INVITATION, + LEFT_WORKSPACE, + WORKSPACE_MEMBERSHIP_UPDATED, + WORKSPACE_UPDATED, + WORKSPACE_CREATED, + WORKSPACE_ROLE_CREATED, + WORKSPACE_ROLE_UPDATED, + WORKSPACE_ROLE_DELETED, + PROJECT_CREATED, + PROJECT_UPDATED, + PROJECT_DELETED, + SECRET_UPDATED, + SECRET_DELETED, + SECRET_ADDED, + VARIABLE_UPDATED, + VARIABLE_DELETED, + VARIABLE_ADDED, + ENVIRONMENT_UPDATED, + ENVIRONMENT_DELETED, + ENVIRONMENT_ADDED, + INTEGRATION_ADDED, + INTEGRATION_UPDATED, + INTEGRATION_DELETED +} + +export interface GetEventsRequest { + workspaceId: string + source: string +} + +export interface GetEventsResponse + extends Page<{ + id: string + source: EventSource + triggerer: EventTriggerer + severity: EventSeverity + type: EventType + timestamp: string + metadata: { + name: string + projectName: string + projectId?: string + variableId?: string + environmentId?: string + secretId?: string + workspaceId?: string + workspaceName?: string + } + title: string + description: string + itemId: string + userId: string + workspaceId: string + }> {} diff --git a/packages/api-client/src/types/index.types.d.ts b/packages/api-client/src/types/index.types.d.ts new file mode 100644 index 00000000..3b787f86 --- /dev/null +++ b/packages/api-client/src/types/index.types.d.ts @@ -0,0 +1,28 @@ +export interface Page { + items: T[] + metadata: { + page: number + perPage: number + pageCount: number + totalCount: number + links: { + self: string + first: string + previous: string | null + next: string | null + last: string + } + } +} + +export interface ResponseError { + message: string + error: string + statusCode: number +} + +export interface ClientResponse { + success: boolean + error: ResponseError | null + data: T | null +} diff --git a/packages/api-client/src/types/integration.types.d.ts b/packages/api-client/src/types/integration.types.d.ts new file mode 100644 index 00000000..3c225ccf --- /dev/null +++ b/packages/api-client/src/types/integration.types.d.ts @@ -0,0 +1,129 @@ +import { Page } from '../../../../apps/cli/src/types/index.types' +export enum IntegrationType { + DISCORD, + SLACK, + GITHUB, + GITLAB +} + +export enum EventType { + INVITED_TO_WORKSPACE, + REMOVED_FROM_WORKSPACE, + ACCEPTED_INVITATION, + DECLINED_INVITATION, + CANCELLED_INVITATION, + LEFT_WORKSPACE, + WORKSPACE_MEMBERSHIP_UPDATED, + WORKSPACE_UPDATED, + WORKSPACE_CREATED, + WORKSPACE_ROLE_CREATED, + WORKSPACE_ROLE_UPDATED, + WORKSPACE_ROLE_DELETED, + PROJECT_CREATED, + PROJECT_UPDATED, + PROJECT_DELETED, + SECRET_UPDATED, + SECRET_DELETED, + SECRET_ADDED, + VARIABLE_UPDATED, + VARIABLE_DELETED, + VARIABLE_ADDED, + ENVIRONMENT_UPDATED, + ENVIRONMENT_DELETED, + ENVIRONMENT_ADDED, + INTEGRATION_ADDED, + INTEGRATION_UPDATED, + INTEGRATION_DELETED +} +export interface CreateIntegrationRequest { + workspaceId?: string + projectId?: string + name: string + type: string + notifyOn: [string] + metadata: Record + environmentId: string +} + +export interface CreateIntegrationResponse { + id: string + name: string + metadata: Record + createdAt: string + updatedAt: string + type: IntegrationType + notifyOn: EventType[] + workspaceId: string + projectId: string + environmentId: string +} + +export interface UpdateIntegrationRequest { + integrationId: string + workspaceId?: string + projectId?: string + name?: string + type?: IntegrationType + notifyOn?: EventType[] + metadata?: Record + environmentId?: string +} + +export interface UpdateIntegrationResponse { + id: string + name: string + metadata: Record + createdAt: string + updatedAt: string + type: IntegrationType + notifyOn: EventType[] + workspaceId: string + projectId: string + environmentId: string +} + +export interface DeleteIntegrationResponse {} + +export interface DeleteIntegrationRequest { + integrationId: string +} + +export interface GetIntegrationRequest { + integrationId: string +} + +export interface GetIntegrationResponse { + id: string + name: string + metadata: Record + createdAt: string + updatedAt: string + type: IntegrationType + notifyOn: EventType[] + workspaceId: string + projectId: string + environmentId: string +} + +export interface GetAllIntegrationRequest { + page?: number + limit?: number + sort?: string + order?: string + search?: string + workspaceId: string +} + +export interface GetAllIntegrationResponse + extends Page<{ + id: string + name: string + metadata: Record + createdAt: string + updatedAt: string + type: IntegrationType + notifyOn: EventType[] + workspaceId: string + projectId: string + environmentId: string + }> {} diff --git a/packages/api-client/src/types/secret.types.d.ts b/packages/api-client/src/types/secret.types.d.ts new file mode 100644 index 00000000..20f00fad --- /dev/null +++ b/packages/api-client/src/types/secret.types.d.ts @@ -0,0 +1,127 @@ +import { Page } from '../../../../apps/cli/src/types/index.types' + +export interface CreateSecretRequest { + projectId: string + name: string + note?: string + rotateAfter?: '24' | '168' | '720' | '8760' | 'never' + entries?: [ + { + value: string + environmentId: string + } + ] +} + +export interface CreateSecretResponse { + id: string + name: string + createdAt: string + updatedAt: string + rotateAt: string | null + note: string | null + lastUpdatedById: string + projectId: string + project: { + workspaceId: string + } + versions: [ + { + value: string + environmentId: string + } + ] +} + +export interface UpdateSecretRequest { + secretId: string + name?: string + note?: string + rotateAfter?: '24' | '168' | '720' | '8760' | 'never' + entries?: [ + { + value: string + environmentId: string + } + ] +} + +export interface UpdateSecretResponse { + secret: { + id: string + name: string + note: string + } + updatedVersions: [ + { + id?: string + environmentId: string + value: string + } + ] +} + +export interface DeleteSecretRequest { + secretId: string +} + +export interface DeleteSecretResponse {} + +export interface RollBackSecretRequest { + environmentId: string + version: number + secretId: string +} +export interface RollBackSecretResponse { + count: string +} + +export interface GetAllSecretsOfProjectRequest { + projectId: string + page?: number + limit?: number + sort?: string + order?: string + search?: string +} +export interface GetAllSecretsOfProjectResponse + extends Page<{ + secret: { + id: string + name: string + createdAt: string + updatedAt: string + rotateAt: string + note: string | null + lastUpdatedById: string + projectId: string + lastUpdatedBy: { + id: string + name: string + } + } + values: { + environment: { + id: string + name: string + } + value: string + version: number + } + }> {} + +export interface GetAllSecretsOfEnvironmentRequest { + projectId: string + environmentId: string + page?: number + limit?: number + sort?: string + order?: string + search?: string +} +export interface GetAllSecretsOfEnvironmentResponse + extends Page<{ + name: string + value: string + isPlaintext: boolean + }> {} diff --git a/packages/api-client/src/types/variable.types.d.ts b/packages/api-client/src/types/variable.types.d.ts new file mode 100644 index 00000000..a6b97091 --- /dev/null +++ b/packages/api-client/src/types/variable.types.d.ts @@ -0,0 +1,122 @@ +import { Page } from '../../../../apps/cli/src/types/index.types' + +export interface CreateVariableRequest { + projectId: string + name: string + note?: string + entries?: [ + { + value: string + environmentId: string + } + ] +} + +export interface CreateVariableResponse { + id: string + name: string + createdAt: string + updatedAt: string + note: string | null + lastUpdatedById: string + projectId: string + project: { + workspaceId: string + } + versions: [ + { + value: string + environmentId: string + } + ] +} +export interface UpdateVariableRequest { + variableId: string + name?: string + entries?: [ + { + value: string + environmentId: string + } + ] +} +export interface UpdateVariableResponse { + variable: { + id: string + name: string + note: string + } + updatedVersions: [ + { + value: string + environmentId: string + } + ] +} + +export interface RollBackVariableRequest { + variableId: string + version: number + environmentId: string +} + +export interface RollBackVariableResponse { + count: string +} + +export interface DeleteVariableRequest { + variableId: string +} + +export interface DeleteVariableResponse {} + +export interface GetAllVariablesOfProjectRequest { + projectId: string + page?: number + limit?: number + sort?: string + order?: string + search?: string +} + +export interface GetAllVariablesOfProjectResponse + extends Page<{ + variable: { + id: string + name: string + createdAt: string + updatedAt: string + note: string | null + lastUpdatedById: string + projectId: string + lastUpdatedBy: { + id: string + name: string + } + } + values: { + environment: { + id: string + name: string + } + value: string + version: number + } + }> {} + +export interface GetAllVariablesOfEnvironmentRequest { + projectId: string + environmentId: string + page?: number + limit?: number + sort?: string + order?: string + search?: string +} + +export interface GetAllVariablesOfEnvironmentResponse + extends Page<{ + name: string + value: string + isPlaintext: boolean + }> {} diff --git a/packages/api-client/tests/environment.spec.ts b/packages/api-client/tests/environment.spec.ts index 4b0e68b6..b3b3875e 100644 --- a/packages/api-client/tests/environment.spec.ts +++ b/packages/api-client/tests/environment.spec.ts @@ -1,37 +1,46 @@ -import client from '@package/client' -import EnvironmentController from '@package/controllers/environment/environment' +import { APIClient } from '../src/core/client' +import EnvironmentController from '../src/controllers/environment' + +describe('Environments Controller Tests', () => { + const backendUrl = process.env.BACKEND_URL + + const client = new APIClient(backendUrl) + const environmentController = new EnvironmentController(backendUrl) -describe('Get Environments Tests', () => { const email = 'johndoe@example.com' let projectId: string | null let workspaceId: string | null - let environment: any + let environmentId: string | null beforeAll(async () => { //Create the user's workspace - const workspaceResponse = (await client.post( - '/api/workspace', - { - name: 'My Workspace' - }, - { - 'x-e2e-user-email': email - } - )) as any + const workspaceResponse = (await ( + await client.post( + '/api/workspace', + { + name: 'My Workspace' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any workspaceId = workspaceResponse.id // Create a project - const projectResponse = (await client.post( - `/api/project/${workspaceId}`, - { - name: 'Project', - storePrivateKey: true - }, - { - 'x-e2e-user-email': email - } - )) as any + const projectResponse = (await ( + await client.post( + `/api/project/${workspaceId}`, + { + name: 'Project', + storePrivateKey: true + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any projectId = projectResponse.id }) @@ -45,58 +54,79 @@ describe('Get Environments Tests', () => { beforeEach(async () => { // Create an environment - const createEnvironmentResponse = await client.post( - `/api/environment/${projectId}`, - { - name: 'Dev' - }, - { - 'x-e2e-user-email': email - } - ) + const createEnvironmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Dev' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any - environment = createEnvironmentResponse + environmentId = createEnvironmentResponse.id }) afterEach(async () => { // Delete the environment - await client.delete(`/api/environment/${environment.id}`, { + await client.delete(`/api/environment/${environmentId}`, { 'x-e2e-user-email': email }) }) it('should return a list of environments', async () => { - const environments = - await EnvironmentController.getAllEnvironmentsOfProject( + const environments = ( + await environmentController.getAllEnvironmentsOfProject( { - projectId + projectId, + page: 0, + limit: 10 }, { 'x-e2e-user-email': email } ) + ).data + + expect(environments.items).toHaveLength(2) + expect(environments.items[0].name).toBe('Default') - expect(environments).toHaveLength(2) - expect(environments[0].name).toBe('Default') + //check metadata + expect(environments.metadata.totalCount).toEqual(2) + expect(environments.metadata.links.self).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.first).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.previous).toBeNull() + expect(environments.metadata.links.next).toBeNull() + expect(environments.metadata.links.last).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) }) it('should be able to fetch environment by ID', async () => { - const environmentResponse = await EnvironmentController.getEnvironmentById( - { - id: environment.id - }, - { - 'x-e2e-user-email': email - } - ) + const environmentResponse = ( + await environmentController.getEnvironmentById( + { + id: environmentId + }, + { + 'x-e2e-user-email': email + } + ) + ).data - expect(environmentResponse.id).toBe(environment.id) + expect(environmentResponse.id).toBe(environmentId) expect(environmentResponse.name).toBe('Dev') }) it('should be able to create an environment', async () => { - const createEnvironmentResponse = - await EnvironmentController.createEnvironment( + const createEnvironmentResponse = ( + await environmentController.createEnvironment( { projectId, name: 'Prod' @@ -105,15 +135,15 @@ describe('Get Environments Tests', () => { 'x-e2e-user-email': email } ) + ).data expect(createEnvironmentResponse.name).toBe('Prod') - const fetchEnvironmentResponse = (await client.get( - `/api/environment/${createEnvironmentResponse.id}`, - { + const fetchEnvironmentResponse = (await ( + await client.get(`/api/environment/${createEnvironmentResponse.id}`, { 'x-e2e-user-email': email - } - )) as any + }) + ).json()) as any expect(fetchEnvironmentResponse.name).toBe('Prod') @@ -124,42 +154,44 @@ describe('Get Environments Tests', () => { }) it('should be able to update an environment', async () => { - const updateEnvironmentResponse = - await EnvironmentController.updateEnvironment( + const updateEnvironmentResponse = ( + await environmentController.updateEnvironment( { - id: environment.id, + id: environmentId, name: 'Prod' }, { 'x-e2e-user-email': email } ) + ).data expect(updateEnvironmentResponse.name).toBe('Prod') - const fetchEnvironmentResponse = (await client.get( - `/api/environment/${environment.id}`, - { + const fetchEnvironmentResponse = (await ( + await client.get(`/api/environment/${environmentId}`, { 'x-e2e-user-email': email - } - )) as any + }) + ).json()) as any expect(fetchEnvironmentResponse.name).toBe('Prod') }) it('should be able to delete an environment', async () => { // Create an environment - const createEnvironmentResponse = (await client.post( - `/api/environment/${projectId}`, - { - name: 'Prod' - }, - { - 'x-e2e-user-email': email - } - )) as any + const createEnvironmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Prod' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any - await EnvironmentController.deleteEnvironment( + await environmentController.deleteEnvironment( { id: createEnvironmentResponse.id }, @@ -169,8 +201,8 @@ describe('Get Environments Tests', () => { ) // Check if the environment is deleted - const environments = - await EnvironmentController.getAllEnvironmentsOfProject( + const environments = ( + await environmentController.getAllEnvironmentsOfProject( { projectId }, @@ -178,7 +210,20 @@ describe('Get Environments Tests', () => { 'x-e2e-user-email': email } ) + ).data - expect(environments).toHaveLength(2) + expect(environments.items).toHaveLength(2) + expect(environments.metadata.totalCount).toEqual(2) + expect(environments.metadata.links.self).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.first).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) + expect(environments.metadata.links.previous).toBeNull() + expect(environments.metadata.links.next).toBeNull() + expect(environments.metadata.links.last).toBe( + `/environment/all/${projectId}?page=0&limit=10&sort=name&order=asc&search=` + ) }) }) diff --git a/packages/api-client/tests/event.spec.ts b/packages/api-client/tests/event.spec.ts new file mode 100644 index 00000000..2635cea7 --- /dev/null +++ b/packages/api-client/tests/event.spec.ts @@ -0,0 +1,150 @@ +import { APIClient } from '../src/core/client' +import EventController from '../src/controllers/event' +export enum EventSource { + SECRET = 'SECRET', + VARIABLE = 'VARIABLE', + ENVIRONMENT = 'ENVIRONMENT', + PROJECT = 'PROJECT', + WORKSPACE = 'WORKSPACE', + WORKSPACE_ROLE = 'WORKSPACE_ROLE', + INTEGRATION = 'INTEGRATION' +} + +describe('Event Controller Tests', () => { + const backendUrl = process.env.BACKEND_URL + + const client = new APIClient(backendUrl) + const eventController = new EventController(backendUrl) + const email = 'johndoe@example.com' + let projectId: string | null + let workspaceId: string | null + let environment: any + + beforeAll(async () => { + //Create the user's workspace + const workspaceResponse = (await ( + await client.post( + '/api/workspace', + { + name: 'Event Workspace' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + workspaceId = workspaceResponse.id + }) + + afterAll(async () => { + // Delete the workspace + await client.delete(`/api/workspace/${workspaceId}`, { + 'x-e2e-user-email': email + }) + }) + + it('should fetch a Project Event', async () => { + const projectResponse = (await ( + await client.post( + `/api/project/${workspaceId}`, + { + name: 'Project', + storePrivateKey: true + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + projectId = projectResponse.id + const events = await eventController.getEvents( + { workspaceId, source: 'PROJECT' }, + { 'x-e2e-user-email': email } + ) + expect(events.data.items[0].source).toBe(EventSource.PROJECT) + expect(events.data.items[0].metadata.projectId).toBe(projectId) + expect(events.data.items[0].metadata.name).toBe('Project') + }) + + it('should fetch a Environment Event', async () => { + const environmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Dev' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + const events = await eventController.getEvents( + { workspaceId, source: EventSource.ENVIRONMENT }, + { 'x-e2e-user-email': email } + ) + expect(events.data.items[0].source).toBe('ENVIRONMENT') + expect(events.data.items[0].metadata.environmentId).toBe( + environmentResponse.id + ) + expect(events.data.items[0].metadata.name).toBe('Dev') + environment = environmentResponse + }) + + it('should fetch a Secret Event', async () => { + const secretRepsonse = (await ( + await client.post( + `/api/secret/${projectId}`, + { + name: 'My secret', + entries: [ + { + value: 'My value', + environmentId: environment.id + } + ], + note: 'Some note', + rotateAfter: '720' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + const events = await eventController.getEvents( + { workspaceId, source: EventSource.SECRET }, + { 'x-e2e-user-email': email } + ) + expect(events.data.items[0].source).toBe('SECRET') + expect(events.data.items[0].metadata.secretId).toBe(secretRepsonse.id) + expect(events.data.items[0].metadata.name).toBe('My secret') + }) + + it('should fetch a Variable Event', async () => { + const variableResponse = (await ( + await client.post( + `/api/variable/${projectId}`, + { + name: 'My variable', + entries: [ + { + value: 'My value', + environmentId: environment.id + } + ], + note: 'Some note' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + const events = await eventController.getEvents( + { workspaceId, source: EventSource.VARIABLE }, + { 'x-e2e-user-email': email } + ) + expect(events.data.items[0].source).toBe('VARIABLE') + expect(events.data.items[0].metadata.variableId).toBe(variableResponse.id) + expect(events.data.items[0].metadata.name).toBe('My variable') + }) +}) diff --git a/packages/api-client/tests/integration.spec.ts b/packages/api-client/tests/integration.spec.ts new file mode 100644 index 00000000..9ab16b36 --- /dev/null +++ b/packages/api-client/tests/integration.spec.ts @@ -0,0 +1,175 @@ +import { APIClient } from '../src/core/client' +import IntegrationController from '../src/controllers/integration' + +describe('Get Environments Tests', () => { + const backendUrl = process.env.BACKEND_URL as string + + const client = new APIClient(backendUrl) + const integrationController = new IntegrationController(backendUrl) + const email = 'johndoe@example.com' + let projectId: string | undefined + let workspaceId: string + let environment: any + let integrationId: string + + beforeAll(async () => { + // Create the user's workspace + const workspaceResponse = (await ( + await client.post( + '/api/workspace', + { + name: 'Integration Workspace' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + workspaceId = workspaceResponse.id + + // Create a project + const projectResponse = (await ( + await client.post( + `/api/project/${workspaceId}`, + { + name: 'Project', + storePrivateKey: true + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + projectId = projectResponse.id + + const createEnvironmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Dev' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + environment = createEnvironmentResponse + }) + + afterAll(async () => { + // Delete the workspace + await client.delete(`/api/workspace/${workspaceId}`, { + 'x-e2e-user-email': email + }) + }) + + beforeEach(async () => { + // Create a dummy integration before each test + const integration = await integrationController.createIntegration( + { + workspaceId, + projectId, + name: 'Dummy Integration', + type: 'DISCORD', + notifyOn: ['PROJECT_CREATED'], + metadata: { + webhookUrl: '{{vault:WEBHOOK_URL}}' + }, + environmentId: environment.id + }, + { + 'x-e2e-user-email': email + } + ) + integrationId = integration.data?.id as string + }) + + afterEach(async () => { + // Delete the dummy integration after each test + await integrationController.deleteIntegration( + { integrationId }, + { 'x-e2e-user-email': email } + ) + }) + + it('should create an integration', async () => { + const integration = await integrationController.createIntegration( + { + workspaceId, + projectId, + name: 'Discord second', + type: 'DISCORD', + notifyOn: ['PROJECT_CREATED'], + metadata: { + webhookUrl: '{{vault:WEBHOOK_URL}}' + }, + environmentId: environment.id + }, + { + 'x-e2e-user-email': email + } + ) + expect(integration.data.name).toBe('Discord second') + expect(integration.data.projectId).toBe(projectId) + expect(integration.data.environmentId).toBe(environment.id) + expect(integration.data.workspaceId).toBe(workspaceId) + expect(integration.data.type).toBe('DISCORD') + }) + + it('should update the integration', async () => { + const updatedIntegration: any = + await integrationController.updateIntegration( + { integrationId, name: 'Github second' }, + { 'x-e2e-user-email': email } + ) + expect(updatedIntegration.data.name).toBe('Github second') + }) + + it('should get an integration', async () => { + const integration: any = await integrationController.getIntegration( + { integrationId }, + { 'x-e2e-user-email': email } + ) + expect(integration).toBeDefined() + }) + + it('should get all integrations in workspace', async () => { + // Adding another integration + await integrationController.createIntegration( + { + workspaceId, + projectId, + name: 'Discord third', + type: 'DISCORD', + notifyOn: ['PROJECT_CREATED'], + metadata: { + webhookUrl: '{{vault:WEBHOOK_URL}}' + }, + environmentId: environment.id + }, + { + 'x-e2e-user-email': email + } + ) + const integrations: any = await integrationController.getAllIntegrations( + { workspaceId }, + { 'x-e2e-user-email': email } + ) + expect(integrations.data?.items.length).toBe(3) + }) + + it('should delete an integration', async () => { + await integrationController.deleteIntegration( + { integrationId }, + { 'x-e2e-user-email': email } + ) + const integrations: any = await integrationController.getAllIntegrations( + { workspaceId }, + { 'x-e2e-user-email': email } + ) + expect(integrations.data.items.length).toBe(2) + }) +}) diff --git a/packages/api-client/tests/secret.spec.ts b/packages/api-client/tests/secret.spec.ts new file mode 100644 index 00000000..a52cbf09 --- /dev/null +++ b/packages/api-client/tests/secret.spec.ts @@ -0,0 +1,238 @@ +import { APIClient } from '../src/core/client' +import SecretController from '../src/controllers/secret' + +describe('Secret Controller Tests', () => { + const backendUrl = process.env.BACKEND_URL + + const client = new APIClient(backendUrl) + const secretController = new SecretController(backendUrl) + + const email = 'johndoe@example.com' + let projectId: string | null + let workspaceId: string | null + let environmentId: string | null + let secretId: string | null + + beforeAll(async () => { + //Create the user's workspace + + const workspaceResponse = (await ( + await client.post( + '/api/workspace', + { + name: 'My Workspace' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + workspaceId = workspaceResponse.id + + // Create a project + const projectResponse = (await ( + await client.post( + `/api/project/${workspaceId}`, + { + name: 'Project', + storePrivateKey: true + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + projectId = projectResponse.id + + const createEnvironmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Dev' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + environmentId = createEnvironmentResponse.id + }) + + afterAll(async () => { + // Delete the workspace + await client.delete(`/api/workspace/${workspaceId}`, { + 'x-e2e-user-email': email + }) + }) + + beforeEach(async () => { + // Create a secret + const createSecretResponse = await secretController.createSecret( + { + name: 'Secret 1', + note: 'Secret 1 note', + entries: [ + { + environmentId, + value: 'Secret 1 value' + } + ], + projectId + }, + { 'x-e2e-user-email': email } + ) + + secretId = createSecretResponse.data.id + }) + + afterEach(async () => { + // Delete the secret + await secretController.deleteSecret( + { secretId }, + { 'x-e2e-user-email': email } + ) + }) + + // Create a Secret + it('should create a secret', async () => { + const secret = await secretController.createSecret( + { + name: 'Secret 2', + note: 'Secret 2 note', + entries: [ + { + environmentId, + value: 'Secret 1 value' + } + ], + projectId + }, + { 'x-e2e-user-email': email } + ) + + expect(secret.data.projectId).toBe(projectId) + expect(secret.data.project.workspaceId).toBe(workspaceId) + expect(secret.data.name).toBe('Secret 2') + expect(secret.data.versions.length).toBe(1) + expect(secret.error).toBe(null) + + // Delete the secret + await secretController.deleteSecret( + { secretId: secret.data.id }, + { 'x-e2e-user-email': email } + ) + }) + + // Update Name of a Secret + it('should update name of a secret', async () => { + const updatedSecret = await secretController.updateSecret( + { + name: 'Updated Secret 1', + secretId + }, + { 'x-e2e-user-email': email } + ) + expect(updatedSecret.data.secret.name).toBe('Updated Secret 1') + }) + + // // Add Version to a Secret + it('should add version of a secret', async () => { + const updatedSecret = await secretController.updateSecret( + { + entries: [ + { + value: 'Updated Secret 1 value', + environmentId + } + ], + secretId + }, + { 'x-e2e-user-email': email } + ) + expect(updatedSecret.data.updatedVersions.length).toBe(1) + }) + + // // RollBack a Particular Version of a Secret + it('should roll back a version of a secret', async () => { + // Create 2 versions of the secret + await secretController.updateSecret( + { + entries: [ + { + value: 'Secret 1 value', + environmentId + } + ], + secretId + }, + { 'x-e2e-user-email': email } + ) + + await secretController.updateSecret( + { + entries: [ + { + value: 'Updated Secret 1 value', + environmentId + } + ], + secretId + }, + { 'x-e2e-user-email': email } + ) + + const rollbackSecret = await secretController.rollbackSecret( + { secretId, environmentId, version: 1 }, + { 'x-e2e-user-email': email } + ) + + expect(rollbackSecret.data.count).toBe(2) + }) + + // // Get all secrets of a Project + it('should get all secrets of a project', async () => { + const secrets: any = await secretController.getAllSecretsOfProject( + { projectId }, + { 'x-e2e-user-email': email } + ) + expect(secrets.data.items.length).toBe(1) + }) + + // // Get all secrets of an Environment + it('should get all secrets of an environment', async () => { + const secrets: any = await secretController.getAllSecretsOfEnvironment( + { + environmentId, + projectId: projectId + }, + { 'x-e2e-user-email': email } + ) + expect(secrets.data.length).toBe(1) + secrets.data.forEach((secret) => { + expect(secret).toHaveProperty('name') + expect(typeof secret.name).toBe('string') + + expect(secret).toHaveProperty('value') + expect(typeof secret.value).toBe('string') + + expect(secret).toHaveProperty('isPlaintext') + expect(typeof secret.isPlaintext).toBe('boolean') + }) + }) + + // // Delete a Secert from a Project + it('should delete a secret', async () => { + await secretController.deleteSecret( + { secretId }, + { 'x-e2e-user-email': email } + ) + const secrets: any = await secretController.getAllSecretsOfProject( + { projectId }, + { 'x-e2e-user-email': email } + ) + expect(secrets.data.items.length).toBe(0) + }) +}) diff --git a/packages/api-client/tests/variable.spec.ts b/packages/api-client/tests/variable.spec.ts new file mode 100644 index 00000000..653c817d --- /dev/null +++ b/packages/api-client/tests/variable.spec.ts @@ -0,0 +1,230 @@ +import VariableController from '../src/controllers/variable' +import { APIClient } from '../src/core/client' + +describe('Get Variable Tests', () => { + const backendUrl = process.env.BACKEND_URL + + const client = new APIClient(backendUrl) + const variableController = new VariableController(backendUrl) + const email = 'johndoe@example.com' + let workspaceId: string | null + let projectId: string | null + let environment: any + let variableId: string | null + + beforeAll(async () => { + const workspaceResponse = (await ( + await client.post( + '/api/workspace', + { + name: 'My Workspace' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + workspaceId = workspaceResponse.id + + // Create a project + const projectResponse = (await ( + await client.post( + `/api/project/${workspaceId}`, + { + name: 'Project', + storePrivateKey: true + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + projectId = projectResponse.id + + const createEnvironmentResponse = (await ( + await client.post( + `/api/environment/${projectId}`, + { + name: 'Dev' + }, + { + 'x-e2e-user-email': email + } + ) + ).json()) as any + + environment = createEnvironmentResponse + }) + afterAll(async () => { + await client.delete(`/api/workspace/${workspaceId}`, { + 'x-e2e-user-email': email + }) + }) + + // Create a variable + it('should create a variable', async () => { + const variable = await variableController.createVariable( + { + projectId, + name: 'Variable 1', + entries: [{ value: 'Variable 1 value', environmentId: environment.id }] + }, + { + 'x-e2e-user-email': email + } + ) + expect(variable.data.name).toBe('Variable 1') + expect(variable.data.projectId).toBe(projectId) + expect(variable.data.project.workspaceId).toBe(workspaceId) + expect(variable.data.versions.length).toBe(1) + expect(variable.data.versions[0].value).toBe('Variable 1 value') + expect(variable.data.versions[0].environmentId).toBe(environment.id) + variableId = variable.data.id + }) + + // Update Name of the Variable + it('should update the name a variable', async () => { + const updatedVariable = await variableController.updateVariable( + { + name: 'UpdatedVariable 1', + variableId + }, + { + 'x-e2e-user-email': email + } + ) + expect(updatedVariable.data.variable.name).toBe('UpdatedVariable 1') + expect(updatedVariable.data.variable.id).toBe(variableId) + }) + + // Create a new version of Variable + it('should add version to a variable', async () => { + const updateVariable = await variableController.updateVariable( + { + entries: [ + { + value: '1234', + environmentId: environment.id + } + ], + variableId + }, + { 'x-e2e-user-email': email } + ) + expect(updateVariable.data.updatedVersions.length).toBe(1) + expect(updateVariable.data.updatedVersions[0].value).toBe('1234') + expect(updateVariable.data.updatedVersions[0].environmentId).toBe( + environment.id + ) + }) + + // Roll back a variable + it('should rollback a variable', async () => { + const rolledBackVariable: any = await variableController.rollbackVariable( + { + variableId, + version: 1, + environmentId: environment.id + }, + { 'x-e2e-user-email': email } + ) + expect(rolledBackVariable.data.count).toBe(1) + }) + + // Get all the variables of project + it('should get all variables of project', async () => { + const response: any = await variableController.getAllVariablesOfProject( + { projectId }, + { 'x-e2e-user-email': email } + ) + expect(response.data.items.length).toBe(1) + const variable1 = response.data.items[0] + const variable = variable1.variable + const values = variable1.values + expect(variable).toHaveProperty('id') + expect(typeof variable.id).toBe('string') + + expect(variable).toHaveProperty('name') + expect(typeof variable.name).toBe('string') + + expect(variable).toHaveProperty('createdAt') + expect(typeof variable.createdAt).toBe('string') + + expect(variable).toHaveProperty('updatedAt') + expect(typeof variable.updatedAt).toBe('string') + + expect(variable).toHaveProperty('note') + expect(typeof variable.note === 'string' || variable.note === null).toBe( + true + ) + + expect(variable).toHaveProperty('lastUpdatedById') + expect(typeof variable.lastUpdatedById).toBe('string') + + expect(variable).toHaveProperty('projectId') + expect(typeof variable.projectId).toBe('string') + + expect(variable).toHaveProperty('lastUpdatedBy') + expect(variable.lastUpdatedBy).toHaveProperty('id') + expect(typeof variable.lastUpdatedBy.id).toBe('string') + expect(variable.lastUpdatedBy).toHaveProperty('name') + expect(typeof variable.lastUpdatedBy.name).toBe('string') + + values.forEach((value) => { + expect(value).toHaveProperty('environment') + expect(value.environment).toHaveProperty('id') + expect(typeof value.environment.id).toBe('string') + expect(value.environment).toHaveProperty('name') + expect(typeof value.environment.name).toBe('string') + + expect(value).toHaveProperty('value') + expect(typeof value.value).toBe('string') + + expect(value).toHaveProperty('version') + expect(typeof value.version).toBe('number') + }) + }) + + // Get all variables for an environment + it('should get all variables for an environment', async () => { + const variables: any = + await variableController.getAllVariablesOfEnvironment( + { + environmentId: environment.id, + projectId + }, + { 'x-e2e-user-email': email } + ) + + expect(variables.data.length).toBe(1) + variables.data.forEach((variable) => { + expect(variable).toHaveProperty('name') + expect(typeof variable.name).toBe('string') + + expect(variable).toHaveProperty('value') + expect(typeof variable.value).toBe('string') + + expect(variable).toHaveProperty('isPlaintext') + expect(typeof variable.isPlaintext).toBe('boolean') + }) + const variable1 = variables.data[0] + expect(variable1.name).toBe('UpdatedVariable 1') + expect(variable1.value).toBe('Variable 1 value') + expect(variable1.isPlaintext).toBe(true) + }) + + // Delete a variable + it('should delete variable', async () => { + await variableController.deleteVariable( + { variableId }, + { 'x-e2e-user-email': email } + ) + const variables: any = await variableController.getAllVariablesOfProject( + { projectId }, + { 'x-e2e-user-email': email } + ) + expect(variables.data.items.length).toBe(0) + }) +}) diff --git a/packages/api-client/tsconfig.json b/packages/api-client/tsconfig.json index 17ad1248..c2ce8a99 100644 --- a/packages/api-client/tsconfig.json +++ b/packages/api-client/tsconfig.json @@ -16,11 +16,8 @@ "noImplicitAny": false, "strictBindCallApply": false, "forceConsistentCasingInFileNames": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "@package/*": ["src/*"] - } + "noFallthroughCasesInSwitch": true }, - "include": ["src/**/*.ts", "tests/**/*.ts"], - "exclude": ["node_modules"] + "include": ["src/**/*.ts", "tests/**/*.ts", "jest.config.ts"], + "exclude": ["node_modules", "dist"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f05dcc85..8c913990 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,19 +10,19 @@ importers: dependencies: '@semantic-release/changelog': specifier: ^6.0.3 - version: 6.0.3(semantic-release@24.0.0(typescript@5.5.3)) + version: 6.0.3(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/commit-analyzer': specifier: ^12.0.0 - version: 12.0.0(semantic-release@24.0.0(typescript@5.5.3)) + version: 12.0.0(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/git': specifier: ^10.0.1 - version: 10.0.1(semantic-release@24.0.0(typescript@5.5.3)) + version: 10.0.1(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/github': specifier: ^10.0.3 - version: 10.0.7(semantic-release@24.0.0(typescript@5.5.3)) + version: 10.1.3(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/release-notes-generator': specifier: ^14.0.0 - version: 14.0.1(semantic-release@24.0.0(typescript@5.5.3)) + version: 14.0.1(semantic-release@24.0.0(typescript@5.5.4)) '@sentry/node': specifier: ^7.102.0 version: 7.118.0 @@ -31,7 +31,7 @@ importers: version: 7.118.0 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.14.13 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -46,7 +46,7 @@ importers: version: 8.0.0 framer-motion: specifier: ^11.2.9 - version: 11.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) million: specifier: ^3.0.5 version: 3.1.11 @@ -58,32 +58,32 @@ importers: version: 0.33.4 tailwind-merge: specifier: ^2.3.0 - version: 2.3.0 + version: 2.4.0 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3) + version: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4) typescript: specifier: ^5.5.2 - version: 5.5.3 + version: 5.5.4 zod: specifier: ^3.23.6 version: 3.23.8 devDependencies: '@sentry/cli': specifier: ^2.28.6 - version: 2.32.1 + version: 2.33.0 '@sentry/webpack-plugin': specifier: ^2.14.2 - version: 2.20.1(webpack@5.92.1(@swc/core@1.7.2)) + version: 2.21.1(webpack@5.92.1(@swc/core@1.7.3)) '@types/jest': specifier: ^29.5.2 version: 29.5.12 '@typescript-eslint/eslint-plugin': specifier: ^6.0.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^6.0.0 - version: 6.21.0(eslint@8.57.0)(typescript@5.5.3) + version: 6.21.0(eslint@8.57.0)(typescript@5.5.4) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -98,22 +98,22 @@ importers: version: 11.1.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^5.0.0 - version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2) + version: 5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) husky: specifier: ^9.0.11 - version: 9.0.11 + version: 9.1.4 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) prettier: specifier: ^3.0.0 - version: 3.3.2 + version: 3.3.3 prettier-plugin-tailwindcss: specifier: ^0.5.11 - version: 0.5.14(prettier@3.3.2) + version: 0.5.14(prettier@3.3.3) ts-jest: specifier: ^29.1.0 - version: 29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(typescript@5.5.3) + version: 29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@5.5.4) tsconfig: specifier: workspace:* version: link:packages/tsconfig @@ -152,7 +152,7 @@ importers: version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/websockets@10.3.10)(rxjs@7.8.1) '@nestjs/schedule': specifier: ^4.0.1 - version: 4.0.2(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1)) + version: 4.1.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1)) '@nestjs/swagger': specifier: ^7.3.0 version: 7.4.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) @@ -164,7 +164,7 @@ importers: version: 8.3.0(socket.io-adapter@2.5.5) '@supabase/supabase-js': specifier: ^2.39.6 - version: 2.44.2 + version: 2.45.0 class-transformer: specifier: ^0.5.1 version: 0.5.1 @@ -194,7 +194,7 @@ importers: version: 2.0.0 redis: specifier: ^4.6.13 - version: 4.6.14 + version: 4.7.0 rxjs: specifier: ^7.8.1 version: 7.8.1 @@ -207,16 +207,16 @@ importers: devDependencies: '@nestjs/cli': specifier: ^10.0.0 - version: 10.4.0(@swc/cli@0.4.0(@swc/core@1.7.2)(chokidar@3.6.0))(@swc/core@1.7.2) + version: 10.4.2(@swc/cli@0.4.0(@swc/core@1.7.3)(chokidar@3.6.0))(@swc/core@1.7.3) '@nestjs/schematics': specifier: ^10.0.0 - version: 10.1.2(chokidar@3.6.0)(typescript@5.3.3) + version: 10.1.3(chokidar@3.6.0)(typescript@5.3.3) '@nestjs/testing': specifier: ^10.0.0 version: 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10)) '@prisma/client': specifier: ^5.13.0 - version: 5.16.1(prisma@5.13.0) + version: 5.17.0(prisma@5.13.0) '@types/cookie-parser': specifier: ^1.4.7 version: 1.4.7 @@ -243,13 +243,13 @@ importers: version: 7.4.2 jest: specifier: ^29.5.0 - version: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + version: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) jest-mock-extended: specifier: ^3.0.5 - version: 3.0.7(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)))(typescript@5.3.3) + version: 3.0.7(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3) prettier: specifier: ^3.0.0 - version: 3.3.2 + version: 3.3.3 prisma: specifier: 5.13.0 version: 5.13.0 @@ -264,10 +264,10 @@ importers: version: 6.3.4 ts-jest: specifier: ^29.1.0 - version: 29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)))(typescript@5.3.3) + version: 29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3) ts-loader: specifier: ^9.4.3 - version: 9.5.1(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.2)) + version: 9.5.1(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)) apps/cli: dependencies: @@ -277,6 +277,9 @@ importers: '@clack/prompts': specifier: ^0.7.0 version: 0.7.0 + '@keyshade/api-client': + specifier: workspace:../../packages/api-client + version: link:../../packages/api-client chalk: specifier: ^4.1.2 version: 4.1.2 @@ -289,6 +292,9 @@ importers: commander: specifier: ^12.1.0 version: 12.1.0 + eccrypto: + specifier: ^1.1.6 + version: 1.1.6 figlet: specifier: ^1.7.0 version: 1.7.0 @@ -304,22 +310,25 @@ importers: devDependencies: '@swc/cli': specifier: ^0.4.0 - version: 0.4.0(@swc/core@1.7.2(@swc/helpers@0.5.2))(chokidar@3.6.0) + version: 0.4.0(@swc/core@1.7.3(@swc/helpers@0.5.2))(chokidar@3.6.0) '@swc/core': specifier: ^1.6.13 - version: 1.7.2(@swc/helpers@0.5.2) + version: 1.7.3(@swc/helpers@0.5.2) '@types/cli-table': specifier: ^0.3.4 version: 0.3.4 + '@types/eccrypto': + specifier: ^1.1.6 + version: 1.1.6 '@types/figlet': specifier: ^1.5.8 version: 1.5.8 '@types/node': specifier: ^20.14.10 - version: 20.14.10 + version: 20.14.13 eslint-config-standard-with-typescript: specifier: ^43.0.1 - version: 43.0.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.3) + version: 43.0.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4) apps/platform: dependencies: @@ -373,7 +382,7 @@ importers: version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@tanstack/react-table': specifier: ^8.16.0 - version: 8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 8.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) avvvatars-react: specifier: ^0.4.2 version: 0.4.2(csstype@3.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -388,22 +397,22 @@ importers: version: 1.0.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dayjs: specifier: ^1.11.11 - version: 1.11.11 + version: 1.11.12 env-cmd: specifier: ^10.1.0 version: 10.1.0 framer-motion: specifier: ^11.1.7 - version: 11.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) geist: specifier: ^1.2.2 - version: 1.3.0(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 1.3.1(next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) input-otp: specifier: ^1.2.4 version: 1.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) jotai: specifier: ^2.8.0 - version: 2.8.4(@types/react@18.3.3)(react@18.3.1) + version: 2.9.1(@types/react@18.3.3)(react@18.3.1) js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -412,7 +421,7 @@ importers: version: 0.340.0(react@18.3.1) next: specifier: ^13.5.6 - version: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -427,10 +436,10 @@ importers: version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.2.2 - version: 2.3.0 + version: 2.4.0 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3))) + version: 1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))) zod: specifier: ^3.23.8 version: 3.23.8 @@ -440,10 +449,10 @@ importers: version: 13.5.6 '@svgr/webpack': specifier: ^8.1.0 - version: 8.1.0(typescript@5.5.3) + version: 8.1.0(typescript@5.5.4) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3))) + version: 0.5.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))) '@types/dayjs-precise-range': specifier: ^1.0.5 version: 1.0.5 @@ -458,16 +467,16 @@ importers: version: 18.3.0 autoprefixer: specifier: ^10.4.16 - version: 10.4.19(postcss@8.4.39) + version: 10.4.19(postcss@8.4.40) eslint-config-custom: specifier: workspace:* version: link:../../packages/eslint-config-custom postcss: specifier: ^8.4.31 - version: 8.4.39 + version: 8.4.40 tailwindcss: specifier: ^3.3.3 - version: 3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + version: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) tsconfig: specifier: workspace:* version: link:../../packages/tsconfig @@ -476,13 +485,13 @@ importers: dependencies: '@mdx-js/loader': specifier: ^3.0.1 - version: 3.0.1(webpack@5.92.1(@swc/core@1.7.2)) + version: 3.0.1(webpack@5.92.1(@swc/core@1.7.3)) '@mdx-js/react': specifier: ^3.0.1 version: 3.0.1(@types/react@18.3.3)(react@18.3.1) '@next/mdx': specifier: ^14.2.3 - version: 14.2.4(@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.2)))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1)) + version: 14.2.5(@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.3)))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1)) '@tsparticles/engine': specifier: ^3.3.0 version: 3.5.0 @@ -500,13 +509,13 @@ importers: version: 2.1.1 framer-motion: specifier: ^11.2.9 - version: 11.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) geist: specifier: ^1.2.2 - version: 1.3.0(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + version: 1.3.1(next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) next: specifier: ^13.5.6 - version: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: specifier: ^18.2.0 version: 18.3.1 @@ -521,17 +530,17 @@ importers: version: 1.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: specifier: ^2.2.1 - version: 2.3.0 + version: 2.4.0 devDependencies: '@next/eslint-plugin-next': specifier: ^13.4.19 version: 13.5.6 '@svgr/webpack': specifier: ^8.1.0 - version: 8.1.0(typescript@5.5.3) + version: 8.1.0(typescript@5.5.4) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.7(tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3))) + version: 0.5.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))) '@types/react': specifier: ^18.0.22 version: 18.3.3 @@ -540,16 +549,16 @@ importers: version: 18.3.0 autoprefixer: specifier: ^10.4.16 - version: 10.4.19(postcss@8.4.39) + version: 10.4.19(postcss@8.4.40) eslint-config-custom: specifier: workspace:* version: link:../../packages/eslint-config-custom postcss: specifier: ^8.4.31 - version: 8.4.39 + version: 8.4.40 tailwindcss: specifier: ^3.3.3 - version: 3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + version: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) tsconfig: specifier: workspace:* version: link:../../packages/tsconfig @@ -560,7 +569,7 @@ importers: devDependencies: '@vercel/style-guide': specifier: ^5.0.0 - version: 5.2.0(@next/eslint-plugin-next@13.5.6)(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(prettier@3.3.2)(typescript@4.9.5) + version: 5.2.0(@next/eslint-plugin-next@13.5.6)(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(prettier@3.3.3)(typescript@4.9.5) eslint-config-turbo: specifier: ^1.10.12 version: 1.13.4(eslint@8.57.0) @@ -602,23 +611,23 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.7': - resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + '@babel/compat-data@7.25.2': + resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.7': - resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.24.7': - resolution: {integrity: sha512-SO5E3bVxDuxyNxM5agFv480YA2HO6ohZbGxbazZdIk3KQOPOGVNw6q78I9/lbviIf95eq6tPozeYnJLbjnC8IA==} + '@babel/eslint-parser@7.25.1': + resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.24.7': @@ -629,18 +638,18 @@ packages: resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.7': - resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.7': - resolution: {integrity: sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg==} + '@babel/helper-create-class-features-plugin@7.25.0': + resolution: {integrity: sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.24.7': - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} + '@babel/helper-create-regexp-features-plugin@7.25.2': + resolution: {integrity: sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -650,28 +659,16 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.24.7': - resolution: {integrity: sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w==} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.7': - resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -680,18 +677,18 @@ packages: resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.24.7': - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} + '@babel/helper-remap-async-to-generator@7.25.0': + resolution: {integrity: sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.24.7': - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -704,47 +701,49 @@ packages: resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.24.7': - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} + '@babel/helper-wrap-function@7.25.0': + resolution: {integrity: sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.7': - resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + '@babel/helpers@7.25.0': + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + '@babel/parser@7.25.0': + resolution: {integrity: sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.0': + resolution: {integrity: sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0': + resolution: {integrity: sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0': + resolution: {integrity: sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -755,8 +754,8 @@ packages: peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0': + resolution: {integrity: sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -886,8 +885,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.7': - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} + '@babel/plugin-transform-async-generator-functions@7.25.0': + resolution: {integrity: sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -904,8 +903,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.24.7': - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} + '@babel/plugin-transform-block-scoping@7.25.0': + resolution: {integrity: sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -922,8 +921,8 @@ packages: peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.24.7': - resolution: {integrity: sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==} + '@babel/plugin-transform-classes@7.25.0': + resolution: {integrity: sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -934,8 +933,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.7': - resolution: {integrity: sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==} + '@babel/plugin-transform-destructuring@7.24.8': + resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -952,6 +951,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0': + resolution: {integrity: sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-dynamic-import@7.24.7': resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} engines: {node: '>=6.9.0'} @@ -976,8 +981,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.24.7': - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} + '@babel/plugin-transform-function-name@7.25.1': + resolution: {integrity: sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -988,8 +993,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.24.7': - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} + '@babel/plugin-transform-literals@7.25.2': + resolution: {integrity: sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1012,14 +1017,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.7': - resolution: {integrity: sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.7': - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} + '@babel/plugin-transform-modules-systemjs@7.25.0': + resolution: {integrity: sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1072,8 +1077,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.7': - resolution: {integrity: sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==} + '@babel/plugin-transform-optional-chaining@7.24.8': + resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1102,8 +1107,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-constant-elements@7.24.7': - resolution: {integrity: sha512-7LidzZfUXyfZ8/buRW6qIIHBY8wAZ1OrY9c/wTr8YhZ6vMPo+Uc/CVFLYY1spZrEQlD4w5u8wjqk5NQ3OVqQKA==} + '@babel/plugin-transform-react-constant-elements@7.25.1': + resolution: {integrity: sha512-SLV/giH/V4SmloZ6Dt40HjTGTAIkxn33TVIHxNGNvo8ezMhrxBkzisj4op1KZYPIOHFLqhv60OHvX+YRu4xbmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1120,8 +1125,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.24.7': - resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} + '@babel/plugin-transform-react-jsx@7.25.2': + resolution: {integrity: sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1168,14 +1173,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.7': - resolution: {integrity: sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==} + '@babel/plugin-transform-typeof-symbol@7.24.8': + resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.7': - resolution: {integrity: sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw==} + '@babel/plugin-transform-typescript@7.25.2': + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1204,8 +1209,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.7': - resolution: {integrity: sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==} + '@babel/preset-env@7.25.2': + resolution: {integrity: sha512-Y2Vkwy3ITW4id9c6KXshVV/x5yCGK7VdJmKkzOzNsDZMojRKfSA/033rRbLqlRozmhRXCejxWHLSJOg/wUHfzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1230,20 +1235,20 @@ packages: '@babel/regjsgen@0.8.0': resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - '@babel/runtime@7.24.7': - resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==} + '@babel/runtime@7.25.0': + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + '@babel/traverse@7.25.2': + resolution: {integrity: sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -1307,11 +1312,11 @@ packages: '@fastify/middie@8.3.1': resolution: {integrity: sha512-qrQ8U3iCdjNum3+omnIvAyz21ifFx+Pp5jYW7PJJ7b9ueKTCPXsH6vEvaZQrjEZvOpTnWte+CswfBODWD0NqYQ==} - '@floating-ui/core@1.6.4': - resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==} + '@floating-ui/core@1.6.5': + resolution: {integrity: sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==} - '@floating-ui/dom@1.6.7': - resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==} + '@floating-ui/dom@1.6.8': + resolution: {integrity: sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==} '@floating-ui/react-dom@2.1.1': resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} @@ -1319,8 +1324,8 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.2.4': - resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} + '@floating-ui/utils@0.2.5': + resolution: {integrity: sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==} '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} @@ -1541,8 +1546,8 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -1585,8 +1590,8 @@ packages: resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - '@nestjs/cli@10.4.0': - resolution: {integrity: sha512-NIoYRA5cnpQPyj+dde4CgJVEt3NUZ7xoyzyP8ANSdJYSdRe1WMryL9jzDZeIin1iPDnvbmMr+Ft20jpQmDkTXQ==} + '@nestjs/cli@10.4.2': + resolution: {integrity: sha512-fQexIfLHfp6GUgX+CO4fOg+AEwV5ox/LHotQhyZi9wXUQDyIqS0NTTbumr//62EcX35qV4nU0359nYnuEdzG+A==} engines: {node: '>= 16.14'} hasBin: true peerDependencies: @@ -1684,14 +1689,14 @@ packages: '@nestjs/websockets': ^10.0.0 rxjs: ^7.1.0 - '@nestjs/schedule@4.0.2': - resolution: {integrity: sha512-po9oauE7fO0CjhDKvVC2tzEgjOUwhxYoIsXIVkgfu+xaDMmzzpmXY2s1LT4oP90Z+PaTtPoAHmhslnYmo4mSZg==} + '@nestjs/schedule@4.1.0': + resolution: {integrity: sha512-WEc96WTXZW+VI/Ng+uBpiBUwm6TWtAbQ4RKWkfbmzKvmbRGzA/9k/UyAWDS9k0pp+ZcbC+MaZQtt7TjQHrwX6g==} peerDependencies: '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 - '@nestjs/schematics@10.1.2': - resolution: {integrity: sha512-S0bMtZM5U4mAiqkhRyZkXgjmOHBS5P/lp/vEydgMR4F7csOShc3jFeKVs1Eghd9xCFezGKy3SHy7hFT6dpPhWQ==} + '@nestjs/schematics@10.1.3': + resolution: {integrity: sha512-aLJ4Nl/K/u6ZlgLa0NjKw5CuBOIgc6vudF42QvmGueu5FaMGM6IJrAuEvB5T2kr0PAfVwYmDFBBHCWdYhTw4Tg==} peerDependencies: typescript: '>=4.8.2' @@ -1743,8 +1748,8 @@ packages: '@next/eslint-plugin-next@13.5.6': resolution: {integrity: sha512-ng7pU/DDsxPgT6ZPvuprxrkeew3XaRf4LAT4FabaEO/hAbvVx4P7wqnqdbTdDn1kgTvsI4tpIgT4Awn/m0bGbg==} - '@next/mdx@14.2.4': - resolution: {integrity: sha512-eklTNNoH08xGy9UiKcohZmoLhmHAYaYm5ndPGQqJybaeNErgYL8fmp2tk5DRD0L54DNqMz97oN+CAEHqfqIVcw==} + '@next/mdx@14.2.5': + resolution: {integrity: sha512-AROhSdXQg0/jt55iqxVSJqp9oaCyXwRe44/I17c77gDshZ6ex7VKBZDH0GljaxZ0Y4mScYUbFJJEh42Xw4X4Dg==} peerDependencies: '@mdx-js/loader': '>=0.15.0' '@mdx-js/react': '>=0.15.0' @@ -1859,18 +1864,18 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-throttling@9.3.0': - resolution: {integrity: sha512-B5YTToSRTzNSeEyssnrT7WwGhpIdbpV9NKIs3KyTWHX6PhpYn7gqF/+lL3BvsASBM3Sg5BAUYk7KZx5p/Ec77w==} + '@octokit/plugin-throttling@9.3.1': + resolution: {integrity: sha512-Qd91H4liUBhwLB2h6jZ99bsxoQdhgPk6TdwnClPyTBSDAdviGPceViEgUwj+pcQDmB/rfAXAXK7MTochpHM3yQ==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': ^6.0.0 - '@octokit/request-error@6.1.1': - resolution: {integrity: sha512-1mw1gqT3fR/WFvnoVpY/zUM2o/XkMs/2AszUUG9I69xn0JFLv6PGkPhNk5lbfvROs79wiS0bqiJNxfCZcRJJdg==} + '@octokit/request-error@6.1.4': + resolution: {integrity: sha512-VpAhIUxwhWZQImo/dWAN/NpPqqojR6PSLgLYAituLM6U+ddx9hCioFGwBr5Mi+oi5CLeJkcAs3gJ0PYYzU6wUg==} engines: {node: '>= 18'} - '@octokit/request@9.1.1': - resolution: {integrity: sha512-pyAguc0p+f+GbQho0uNetNQMmLG1e80WjkIaqqgUkihqUp0boRU6nKItXO4VWnr+nbZiLGEyy4TeKRwqaLvYgw==} + '@octokit/request@9.1.3': + resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==} engines: {node: '>= 18'} '@octokit/types@13.5.0': @@ -1896,8 +1901,8 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} - '@prisma/client@5.16.1': - resolution: {integrity: sha512-wM9SKQjF0qLxdnOZIVAIMKiz6Hu7vDt4FFAih85K1dk/Rr2mdahy6d3QP41K62N9O0DJJA//gUDA3Mp49xsKIg==} + '@prisma/client@5.17.0': + resolution: {integrity: sha512-N2tnyKayT0Zf7mHjwEyE8iG7FwTmXDHFZ1GnNhQp0pJUObsuel4ZZ1XwfuAYkq5mRIiC/Kot0kt0tGCfLJ70Jw==} engines: {node: '>=16.13'} peerDependencies: prisma: '*' @@ -2543,8 +2548,8 @@ packages: peerDependencies: '@redis/client': ^1.0.0 - '@redis/client@1.5.16': - resolution: {integrity: sha512-X1a3xQ5kEMvTib5fBrHKh6Y+pXbeKXqziYuxOUo1ojQNECg4M5Etd1qqyhMap+lFUOAh8S7UYevgJHOm4A+NOg==} + '@redis/client@1.6.0': + resolution: {integrity: sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==} engines: {node: '>=14'} '@redis/graph@1.1.1': @@ -2552,18 +2557,18 @@ packages: peerDependencies: '@redis/client': ^1.0.0 - '@redis/json@1.0.6': - resolution: {integrity: sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==} + '@redis/json@1.0.7': + resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} peerDependencies: '@redis/client': ^1.0.0 - '@redis/search@1.1.6': - resolution: {integrity: sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw==} + '@redis/search@1.2.0': + resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} peerDependencies: '@redis/client': ^1.0.0 - '@redis/time-series@1.0.5': - resolution: {integrity: sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==} + '@redis/time-series@1.1.0': + resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} peerDependencies: '@redis/client': ^1.0.0 @@ -2576,8 +2581,8 @@ packages: rollup: optional: true - '@rushstack/eslint-patch@1.10.3': - resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -2614,8 +2619,8 @@ packages: peerDependencies: semantic-release: '>=18.0.0' - '@semantic-release/github@10.0.7': - resolution: {integrity: sha512-J7JiFvOu/8QKqFF5FDTk/k19Z/Jku4LdDof/+LsjaGgLOISJR7TL66q89c2YXV6Dh5Jw5VmiT4uK4q6SSfbQGA==} + '@semantic-release/github@10.1.3': + resolution: {integrity: sha512-QVw7YT3J4VqyVjOnlRsFA3OCERAJHER4QbSPupbav3ER0fawrs2BAWbQFjsr24OAD4KTTKMZsVzF+GYFWCDtaQ==} engines: {node: '>=20.8.1'} peerDependencies: semantic-release: '>=20.1.0' @@ -2636,57 +2641,57 @@ packages: resolution: {integrity: sha512-dERAshKlQLrBscHSarhHyUeGsu652bDTUN1FK0m4e3X48M3I5/s+0N880Qjpe5MprNLcINlaIgdQ9jkisvxjfw==} engines: {node: '>=8'} - '@sentry/babel-plugin-component-annotate@2.20.1': - resolution: {integrity: sha512-4mhEwYTK00bIb5Y9UWIELVUfru587Vaeg0DQGswv4aIRHIiMKLyNqCEejaaybQ/fNChIZOKmvyqXk430YVd7Qg==} + '@sentry/babel-plugin-component-annotate@2.21.1': + resolution: {integrity: sha512-u1L8gZ4He0WdyiIsohYkA/YOY1b6Oa5yIMRtfZZ9U5TiWYLgOfMWyb88X0GotZeghSbgxrse/yI4WeHnhAUQDQ==} engines: {node: '>= 14'} - '@sentry/bundler-plugin-core@2.20.1': - resolution: {integrity: sha512-6ipbmGzHekxeRCbp7eoefr6bdd/lW4cNA9eNnrmd9+PicubweGaZZbH2NjhFHsaxzgOezwipDHjrTaap2kTHgw==} + '@sentry/bundler-plugin-core@2.21.1': + resolution: {integrity: sha512-F8FdL/bS8cy1SY1Gw0Mfo3ROTqlrq9Lvt5QGvhXi22dpVcDkWmoTWE2k+sMEnXOa8SdThMc/gyC8lMwHGd3kFQ==} engines: {node: '>= 14'} - '@sentry/cli-darwin@2.32.1': - resolution: {integrity: sha512-z/lEwANTYPCzbWTZ2+eeeNYxRLllC8knd0h+vtAKlhmGw/fyc/N39cznIFyFu+dLJ6tTdjOWOeikHtKuS/7onw==} + '@sentry/cli-darwin@2.33.0': + resolution: {integrity: sha512-LQFvD7uCOQ2P/vYru7IBKqJDHwJ9Rr2vqqkdjbxe2YCQS/N3NPXvi3eVM9hDJ284oyV/BMZ5lrmVTuIicf/hhw==} engines: {node: '>=10'} os: [darwin] - '@sentry/cli-linux-arm64@2.32.1': - resolution: {integrity: sha512-hsGqHYuecUl1Yhq4MhiRejfh1gNlmhyNPcQEoO/DDRBnGnJyEAdiDpKXJcc2e/lT9k40B55Ob2CP1SeY040T2w==} + '@sentry/cli-linux-arm64@2.33.0': + resolution: {integrity: sha512-mR2ZhqpU8RBVGLF5Ji19iOmVznk1B7Bzg5VhA8bVPuKsQmFN/3SyqE87IPMhwKoAsSRXyctwmbAkKs4240fxGA==} engines: {node: '>=10'} cpu: [arm64] os: [linux, freebsd] - '@sentry/cli-linux-arm@2.32.1': - resolution: {integrity: sha512-m0lHkn+o4YKBq8KptGZvpT64FAwSl9mYvHZO9/ChnEGIJ/WyJwiN1X1r9JHVaW4iT5lD0Y5FAyq3JLkk0m0XHg==} + '@sentry/cli-linux-arm@2.33.0': + resolution: {integrity: sha512-gY1bFE7wjDJc7WiNq1AS0WrILqLLJUw6Ou4pFQS45KjaH3/XJ1eohHhGJNy/UBHJ/Gq32b/BA9vsnWTXClZJ7g==} engines: {node: '>=10'} cpu: [arm] os: [linux, freebsd] - '@sentry/cli-linux-i686@2.32.1': - resolution: {integrity: sha512-SuMLN1/ceFd3Q/B0DVyh5igjetTAF423txiABAHASenEev0lG0vZkRDXFclfgDtDUKRPmOXW7VDMirM3yZWQHQ==} + '@sentry/cli-linux-i686@2.33.0': + resolution: {integrity: sha512-XPIy0XpqgAposHtWsy58qsX85QnZ8q0ktBuT4skrsCrLMzfhoQg4Ua+YbUr3RvE814Rt8Hzowx2ar2Rl3pyCyw==} engines: {node: '>=10'} cpu: [x86, ia32] os: [linux, freebsd] - '@sentry/cli-linux-x64@2.32.1': - resolution: {integrity: sha512-x4FGd6xgvFddz8V/dh6jii4wy9qjWyvYLBTz8Fhi9rIP+b8wQ3oxwHIdzntareetZP7C1ggx+hZheiYocNYVwA==} + '@sentry/cli-linux-x64@2.33.0': + resolution: {integrity: sha512-qe1DdCUv4tmqS03s8RtCkEX9vCW2G+NgOxX6jZ5jN/sKDwjUlquljqo7JHUGSupkoXmymnNPm5By3rNr6VyNHg==} engines: {node: '>=10'} cpu: [x64] os: [linux, freebsd] - '@sentry/cli-win32-i686@2.32.1': - resolution: {integrity: sha512-i6aZma9mFzR+hqMY5VliQZEX6ypP/zUjPK0VtIMYWs5cC6PsQLRmuoeJmy3Z7d4nlh0CdK5NPC813Ej6RY6/vg==} + '@sentry/cli-win32-i686@2.33.0': + resolution: {integrity: sha512-VEXWtJ69C3b+kuSmXQJRwdQ0ypPGH88hpqyQuosbAOIqh/sv4g9B/u1ETHZc+whLdFDpPcTLVMbLDbXTGug0Yg==} engines: {node: '>=10'} cpu: [x86, ia32] os: [win32] - '@sentry/cli-win32-x64@2.32.1': - resolution: {integrity: sha512-B58w/lRHLb4MUSjJNfMMw2cQykfimDCMLMmeK+1EiT2RmSeNQliwhhBxYcKk82a8kszH6zg3wT2vCea7LyPUyA==} + '@sentry/cli-win32-x64@2.33.0': + resolution: {integrity: sha512-GIUKysZ1xbSklY9h1aVaLMSYLsnMSd+JuwQLR+0wKw2wJC4O5kNCPFSGikhiOZM/kvh3GO1WnXNyazFp8nLAzw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@sentry/cli@2.32.1': - resolution: {integrity: sha512-MWkbkzZfnlE7s2pPbg4VozRSAeMlIObfZlTIou9ye6XnPt6ZmmxCLOuOgSKMv4sXg6aeqKNzMNiadThxCWyvPg==} + '@sentry/cli@2.33.0': + resolution: {integrity: sha512-9MOzQy1UunVBhPOfEuO0JH2ofWAMmZVavTTR/Bo2CkJwI1qjyVF0UKLTXE3l4ujiJnFufOoBsVyKmYWXFerbCw==} engines: {node: '>= 10'} hasBin: true @@ -2715,8 +2720,8 @@ packages: resolution: {integrity: sha512-43qItc/ydxZV1Zb3Kn2M54RwL9XXFa3IAYBO8S82Qvq5YUYmU2AmJ1jgg7DabXlVSWgMA1HntwqnOV3JLaEnTQ==} engines: {node: '>=8'} - '@sentry/webpack-plugin@2.20.1': - resolution: {integrity: sha512-U6LzoE09Ndt0OCWROoRaZqqIHGxyMRdKpBhbqoBqyyfVwXN/zGW3I/cWZ1e8rreiKFj+2+c7+X0kOS+NGMTUrg==} + '@sentry/webpack-plugin@2.21.1': + resolution: {integrity: sha512-mhKWQq7/eC35qrhhD8oXm/37vZ1BQqmCD8dUngFIr4D24rc7dwlGwPGOYv59yiBqjTS0fGJ+o0xC5PTRKljGQQ==} engines: {node: '>= 14'} peerDependencies: webpack: '>=4.40.0' @@ -2751,8 +2756,8 @@ packages: peerDependencies: socket.io-adapter: ^2.5.4 - '@supabase/auth-js@2.64.2': - resolution: {integrity: sha512-s+lkHEdGiczDrzXJ1YWt2y3bxRi+qIUnXcgkpLSrId7yjBeaXBFygNjTaoZLG02KNcYwbuZ9qkEIqmj2hF7svw==} + '@supabase/auth-js@2.64.4': + resolution: {integrity: sha512-9ITagy4WP4FLl+mke1rchapOH0RQpf++DI+WSG2sO1OFOZ0rW3cwAM0nCrMOxu+Zw4vJ4zObc08uvQrXx590Tg==} '@supabase/functions-js@2.4.1': resolution: {integrity: sha512-8sZ2ibwHlf+WkHDUZJUXqqmPvWQ3UHN0W30behOJngVh/qHHekhJLCFbh0AjkE9/FqqXtf9eoVvmYgfCLk5tNA==} @@ -2761,8 +2766,8 @@ packages: resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} engines: {node: 4.x || >=6.0.0} - '@supabase/postgrest-js@1.15.7': - resolution: {integrity: sha512-TJztay5lcnnKuXjIO/X/aaajOsP8qNeW0k3MqIFoOtRolj5MEAIy8rixNakRk3o23eVCdsuP3iMLYPvOOruH6Q==} + '@supabase/postgrest-js@1.15.8': + resolution: {integrity: sha512-YunjXpoQjQ0a0/7vGAvGZA2dlMABXFdVI/8TuVKtlePxyT71sl6ERl6ay1fmIeZcqxiuFQuZw/LXUuStUG9bbg==} '@supabase/realtime-js@2.10.2': resolution: {integrity: sha512-qyCQaNg90HmJstsvr2aJNxK2zgoKh9ZZA8oqb7UT2LCh3mj9zpa3Iwu167AuyNxsxrUE8eEJ2yH6wLCij4EApA==} @@ -2770,8 +2775,8 @@ packages: '@supabase/storage-js@2.6.0': resolution: {integrity: sha512-REAxr7myf+3utMkI2oOmZ6sdplMZZ71/2NEIEMBZHL9Fkmm3/JnaOZVSRqvG4LStYj2v5WhCruCzuMn6oD/Drw==} - '@supabase/supabase-js@2.44.2': - resolution: {integrity: sha512-fouCwL1OxqftOwLNgdDUPlNnFuCnt30nS4kLcnTpe6NYKn1PmjxRRBFmKscgHs6FjWyU+32ZG4uBJ29+/BWiDw==} + '@supabase/supabase-js@2.45.0': + resolution: {integrity: sha512-j66Mfs8RhzCQCKxKogAFQYH9oNhRmgIdKk6pexguI2Oc7hi+nL9UNJug5aL1tKnBdaBM3h65riPLQSdL6sWa3Q==} '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} @@ -2862,68 +2867,68 @@ packages: chokidar: optional: true - '@swc/core-darwin-arm64@1.7.2': - resolution: {integrity: sha512-Zb8KiGaESzOgh5HBnp6Vhs2fRpngHIT81JOfIo0oaGlzAckamnG7UAXC/yK6cQ8q2KXc78utJ/yq/NM2yVKLqw==} + '@swc/core-darwin-arm64@1.7.3': + resolution: {integrity: sha512-CTkHa6MJdov9t41vuV2kmQIMu+Q19LrEHGIR/UiJYH06SC/sOu35ZZH8DyfLp9ZoaCn21gwgWd61ixOGQlwzTw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.2': - resolution: {integrity: sha512-qb0HY9GEexpPm46Hb3OY7E6xb4r+eniiThm+0Gcnhf19EZV2ZlsCC8Rdbhmav33x++ZqSDzZ44fxMY2vnN5VDg==} + '@swc/core-darwin-x64@1.7.3': + resolution: {integrity: sha512-mun623y6rCoZ2EFIYfIRqXYRFufJOopoYSJcxYhZUrfTpAvQ1zLngjQpWCUU1krggXR2U0PQj+ls0DfXUTraNg==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.2': - resolution: {integrity: sha512-x2+MOK3RzH3yEkaukKtpDW/udM1x9GoYtXaLNqlq6ovAzZPQ9FDFI0pm1asL4akHUw3s7YTh1aUY7QscstJAHQ==} + '@swc/core-linux-arm-gnueabihf@1.7.3': + resolution: {integrity: sha512-4Jz4UcIcvZNMp9qoHbBx35bo3rjt8hpYLPqnR4FFq6gkAsJIMFC56UhRZwdEQoDuYiOFMBnnrsg31Fyo6YQypA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.2': - resolution: {integrity: sha512-4J3HGEDus7a9xnrJUFGyJJgvj4w+BFGiZvs08xbw4Z1ZN4uHJQiJiDsQEAWWciKUxrOndP3SocUq/GhEGiDm0g==} + '@swc/core-linux-arm64-gnu@1.7.3': + resolution: {integrity: sha512-p+U/M/oqV7HC4erQ5TVWHhJU1984QD+wQBPxslAYq751bOQGm0R/mXK42GjugqjnR6yYrAiwKKbpq4iWVXNePA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.2': - resolution: {integrity: sha512-4FhQmYbj8SCmir4pHRLSn8IIFmRKHTL3eZFtOpm26RLME7rXL7Yt33DpzIeTRoHFIesI5NEfaR38WU5mY7P1pA==} + '@swc/core-linux-arm64-musl@1.7.3': + resolution: {integrity: sha512-s6VzyaJwaRGTi2mz2h6Ywxfmgpkc69IxhuMzl+sl34plH0V0RgnZDm14HoCGIKIzRk4+a2EcBV1ZLAfWmPACQg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.2': - resolution: {integrity: sha512-Loz10Hy6z5mBIAOe6OInOVsYu+PVxyknCB3thtr7QH+uqEz6dcXhU2ERrO2Lf4dsTsFs/Wb80rv8zTSwB8dpsw==} + '@swc/core-linux-x64-gnu@1.7.3': + resolution: {integrity: sha512-IrFY48C356Z2dU2pjYg080yvMXzmSV3Lmm/Wna4cfcB1nkVLjWsuYwwRAk9CY7E19c+q8N1sMNggubAUDYoX2g==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.2': - resolution: {integrity: sha512-8p8qNWaLcTa+qHX4NSv1KNm8BQ6zPoLXuOBo9DtOEqc+K60IISGKPCAS7TJlCcv0q20JnmxZ/cEWW5Qo4TR4XQ==} + '@swc/core-linux-x64-musl@1.7.3': + resolution: {integrity: sha512-qoLgxBlBnnyUEDu5vmRQqX90h9jldU1JXI96e6eh2d1gJyKRA0oSK7xXmTzorv1fGHiHulv9qiJOUG+g6uzJWg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.2': - resolution: {integrity: sha512-eNWAYOalBlFrhv/IVSQ1dxu7qIGuhxlUJZTYa8jsgLnKt93vAFd2cjLtKZ85k1OibBnq9PkKQyo4NKVr4hBavw==} + '@swc/core-win32-arm64-msvc@1.7.3': + resolution: {integrity: sha512-OAd7jVVJ7nb0Ev80VAa1aeK+FldPeC4eZ35H4Qn6EICzIz0iqJo2T33qLKkSZiZEBKSoF4KcwrqYfkjLOp5qWg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.2': - resolution: {integrity: sha512-BbpaCPCnbQHCzpQ9yDH3qp1Y5Ijd0NSMNk4qqESN2WWx0ojV2uBTjPou5NC2MZxk8fM3iJpJ05enf+IeaXuh6A==} + '@swc/core-win32-ia32-msvc@1.7.3': + resolution: {integrity: sha512-31+Le1NyfSnILFV9+AhxfFOG0DK0272MNhbIlbcv4w/iqpjkhaOnNQnLsYJD1Ow7lTX1MtIZzTjOhRlzSviRWg==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.2': - resolution: {integrity: sha512-21mf4Jg9Arx0lUnmRQtYd8IQB4WkY4LHJrvcz3EmKbwCTCXI5rQ6Ifnjk7EmG3Tizv0giHqQBQLu5NXWBz45Mg==} + '@swc/core-win32-x64-msvc@1.7.3': + resolution: {integrity: sha512-jVQPbYrwcuueI4QB0fHC29SVrkFOBcfIspYDlgSoHnEz6tmLMqUy+txZUypY/ZH/KaK0HEY74JkzgbRC1S6LFQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.2': - resolution: {integrity: sha512-mjIlT0e6ygKR8LZ1TjtNrDVMhnB8qpyYAdwexhuVHY255yDdDQCpuPGi20odwnE82QhFBSIWs4HcENDVO/yiMw==} + '@swc/core@1.7.3': + resolution: {integrity: sha512-HHAlbXjWI6Kl9JmmUW1LSygT1YbblXgj2UvvDzMkTBPRzYMhW6xchxdO8HbtMPtFYRt/EQq9u1z7j4ttRSrFsA==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -2949,15 +2954,15 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' - '@tanstack/react-table@8.19.2': - resolution: {integrity: sha512-itoSIAkA/Vsg+bjY23FSemcTyPhc5/1YjYyaMsr9QSH/cdbZnQxHVWrpWn0Sp2BWN71qkzR7e5ye8WuMmwyOjg==} + '@tanstack/react-table@8.19.3': + resolution: {integrity: sha512-MtgPZc4y+cCRtU16y1vh1myuyZ2OdkWgMEBzyjYsoMWMicKZGZvcDnub3Zwb6XF2pj9iRMvm1SO1n57lS0vXLw==} engines: {node: '>=12'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - '@tanstack/table-core@8.19.2': - resolution: {integrity: sha512-KpRjhgehIhbfH78ARm/GJDXGnpdw4bCg3qas6yjWSi7czJhI/J6pWln7NHtmBkGE9ZbohiiNtLqwGzKmBfixig==} + '@tanstack/table-core@8.19.3': + resolution: {integrity: sha512-IqREj9ADoml9zCAouIG/5kCGoyIxPFdqdyoxis9FisXFi5vT+iYfEfLosq4xkU/iDbMcEuAj+X8dWRLvKYDNoQ==} engines: {node: '>=12'} '@tokenizer/token@0.3.0': @@ -3136,8 +3141,8 @@ packages: '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint@9.6.0': + resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -3217,8 +3222,8 @@ packages: '@types/multer@1.4.11': resolution: {integrity: sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==} - '@types/node@20.14.10': - resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/node@20.14.13': + resolution: {integrity: sha512-+bHoGiZb8UiQ0+WEtmph2IWQCjIqg8MDZMAV+ppRRhUZnquF5mQkP/9vpSwJClEiSM/C7fZZExPzfU0vJTyp8w==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -3256,8 +3261,8 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/superagent@8.1.7': - resolution: {integrity: sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==} + '@types/superagent@8.1.8': + resolution: {integrity: sha512-nTqHJ2OTa7PFEpLahzSEEeFeqbMpmcN7OeayiOc7v+xk+/vyTKljRe+o4MPqSnPeRCMvtxuLG+5QqluUVQJOnA==} '@types/supertest@6.0.2': resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==} @@ -3274,8 +3279,8 @@ packages: '@types/validator@13.12.0': resolution: {integrity: sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==} - '@types/ws@8.5.10': - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + '@types/ws@8.5.12': + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -3477,8 +3482,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true @@ -3528,8 +3533,8 @@ packages: ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - ajv@8.16.0: - resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -3639,9 +3644,6 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -3690,8 +3692,8 @@ packages: react: '>= 16' react-dom: '>= 16' - axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} axobject-query@3.1.1: @@ -3817,8 +3819,8 @@ packages: browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3891,8 +3893,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001639: - resolution: {integrity: sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==} + caniuse-lite@1.0.30001645: + resolution: {integrity: sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -4293,8 +4295,8 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} - dayjs@1.11.11: - resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + dayjs@1.11.12: + resolution: {integrity: sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -4312,8 +4314,8 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -4492,8 +4494,13 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.4.816: - resolution: {integrity: sha512-EKH5X5oqC6hLmiS7/vYtZHZFTNdhsYG5NVPRN6Yn0kQHNBlT59+xSM8HBy66P5fxWpKgZbPqb+diC64ng295Jw==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.4: + resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -4521,16 +4528,16 @@ packages: engine.io-client@6.5.4: resolution: {integrity: sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==} - engine.io-parser@5.2.2: - resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} engine.io@6.5.5: resolution: {integrity: sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -4762,8 +4769,8 @@ packages: eslint-plugin-jest: optional: true - eslint-plugin-prettier@5.1.3: - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -4788,11 +4795,11 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.34.3: - resolution: {integrity: sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==} + eslint-plugin-react@7.35.0: + resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} engines: {node: '>=4'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-plugin-testing-library@6.2.2: resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} @@ -4852,8 +4859,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -4996,8 +5003,11 @@ packages: fast-uri@2.4.0: resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} - fast-xml-parser@4.4.0: - resolution: {integrity: sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg==} + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true fastify-plugin@4.5.1: @@ -5040,6 +5050,9 @@ packages: file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filename-reserved-regex@3.0.0: resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5123,8 +5136,8 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@11.2.12: - resolution: {integrity: sha512-lCjkV4nA9rWOy2bhR4RZzkp2xpB++kFmUZ6D44V9VQaxk+JDmbDd5lq+u58DjJIIllE8AZEXp9OG/TyDN4FB/w==} + framer-motion@11.3.19: + resolution: {integrity: sha512-+luuQdx4AsamyMcvzW7jUAJYIKvQs1KE7oHvKkW3eNzmo0S+3PSDWjBuQkuIP9WyneGnKGMLUSuHs8OP7jKpQg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 @@ -5180,10 +5193,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - geist@1.3.0: - resolution: {integrity: sha512-IoGBfcqVEYB4bEwsfHd35jF4+X9LHRPYZymHL4YOltHSs9LJa24DYs1Z7rEMQ/lsEvaAIc61Y9aUxgcJaQ8lrg==} + geist@1.3.1: + resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==} peerDependencies: - next: '>=13.2.0 <15.0.0-0' + next: '>=13.2.0' generic-pool@3.9.0: resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} @@ -5241,8 +5254,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} git-hooks-list@3.1.0: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} @@ -5266,6 +5279,10 @@ packages: engines: {node: '>=16 || 14 >=14.18'} hasBin: true + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} deprecated: Glob versions prior to v9 are no longer supported @@ -5437,8 +5454,8 @@ packages: resolution: {integrity: sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q==} engines: {node: '>=18.18.0'} - husky@9.0.11: - resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==} + husky@9.1.4: + resolution: {integrity: sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==} engines: {node: '>=18'} hasBin: true @@ -5467,8 +5484,8 @@ packages: resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} engines: {node: '>=16.20'} - import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true @@ -5583,8 +5600,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} is-data-view@1.0.1: @@ -5770,9 +5787,13 @@ packages: iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true java-properties@1.0.2: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} @@ -5924,8 +5945,8 @@ packages: jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - jotai@2.8.4: - resolution: {integrity: sha512-f6jwjhBJcDtpeauT2xH01gnqadKEySwwt1qNBLvAXcnojkmb76EdqRt05Ym8IamfHGAQz2qMKAwftnyjeSoHAA==} + jotai@2.9.1: + resolution: {integrity: sha512-t4Q7FIqQB3N/1art4OcqdlEtPmQ2h4DNIzTFhvt06WE0kCpQ1QoG+1A1IGTaQBi2KdDRsnywj+ojmHHKgw6PDA==} engines: {node: '>=12.20.0'} peerDependencies: '@types/react': '>=17.0.0' @@ -6048,8 +6069,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.11.4: - resolution: {integrity: sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==} + libphonenumber-js@1.11.5: + resolution: {integrity: sha512-TwHR5BZxGRODtAfz03szucAkjT5OArXr+94SMtAM2pYXIlQNVMrxvb6uSCbnaJJV6QXEyICk7+l6QPgn72WHhg==} lie@3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} @@ -6154,9 +6175,8 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - lru-cache@10.3.0: - resolution: {integrity: sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==} - engines: {node: 14 || >=16.14} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -6364,6 +6384,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} @@ -6378,8 +6402,8 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - mime@4.0.3: - resolution: {integrity: sha512-KgUb15Oorc0NEKPbvfa0wRU+PItIEZmiv+pyAO2i0oTIVTJhlzMclU7w4RXWQrSOVH5ax/p/CkIO7KI4OyFJTQ==} + mime@4.0.4: + resolution: {integrity: sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==} engines: {node: '>=16'} hasBin: true @@ -6416,6 +6440,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -6558,8 +6586,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} nodemailer@6.9.14: resolution: {integrity: sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==} @@ -6608,8 +6636,8 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm@10.8.1: - resolution: {integrity: sha512-Dp1C6SvSMYQI7YHq/y2l94uvI+59Eqbu1EpuKQHQ8p16txXRuRit5gH3Lnaagk2aXDIjg/Iru9pd05bnneKgdw==} + npm@10.8.2: + resolution: {integrity: sha512-x/AIjFIKRllrhcb48dqUNAAZl0ig9+qMuN91RpZo3Cb2+zuibfh+KISl6+kVVyktDz230JKc208UkQwwMqyB+w==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true bundledDependencies: @@ -6724,10 +6752,6 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -6980,8 +7004,8 @@ packages: pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.2.0: - resolution: {integrity: sha512-g3/hpwfujK5a4oVbaefoJxezLzsDgLcNJeITvC6yrfwYeT9la+edCK42j5QpEQSQCZgTKapXvnQIdgZwvRaZug==} + pino@9.3.2: + resolution: {integrity: sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==} hasBin: true pirates@4.0.6: @@ -7031,14 +7055,14 @@ packages: ts-node: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 - postcss-selector-parser@6.1.0: - resolution: {integrity: sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==} + postcss-selector-parser@6.1.1: + resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -7048,8 +7072,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -7060,8 +7084,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier-plugin-packagejson@2.5.0: - resolution: {integrity: sha512-6XkH3rpin5QEQodBSVNg+rBo4r91g/1mCaRwS1YGdQJZ6jwqrg2UchBsIG9tpS1yK1kNBvOt84OILsX8uHzBGg==} + prettier-plugin-packagejson@2.5.1: + resolution: {integrity: sha512-6i4PW1KxEA+VrokYNGeI/q8qQX3u5DNBc7eLr9GX4OrvWr9DMls1lhbuNopkKG7Li9rTNxerWnYQyjxoUO4ROA==} peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: @@ -7120,8 +7144,8 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true @@ -7129,8 +7153,8 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-ms@9.0.0: - resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==} + pretty-ms@9.1.0: + resolution: {integrity: sha512-o1piW0n3tgKIKCwk2vpM/vOV13zjJzvP37Ioze54YlTHE06m4tjEbzg9WsKkvTuyYln2DHjo5pY4qrZGI0otpw==} engines: {node: '>=18'} prisma@5.13.0: @@ -7144,6 +7168,9 @@ packages: process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + process-warning@4.0.0: + resolution: {integrity: sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -7192,8 +7219,8 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} - qs@6.12.2: - resolution: {integrity: sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==} + qs@6.12.3: + resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==} engines: {node: '>=0.6'} query-string@7.1.3: @@ -7322,8 +7349,8 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} - redis@4.6.14: - resolution: {integrity: sha512-GrNg/e33HtsQwNXL7kJT+iNFPSwE1IPmd7wzV3j4f2z0EYxZfZE7FVTmUysgAtqQQtg5NXF5SNLR9OdO/UHOfw==} + redis@4.7.0: + resolution: {integrity: sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==} reflect-metadata@0.2.2: resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} @@ -7533,8 +7560,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -7768,6 +7795,9 @@ packages: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -7915,24 +7945,20 @@ packages: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} - engines: {node: ^14.18.0 || >=16.0.0} - - synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} - tailwind-merge@2.3.0: - resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==} + tailwind-merge@2.4.0: + resolution: {integrity: sha512-49AwoOQNKdqKPd9CViyH5wJoSKsCDjUlzL8DxuGp3P1FsGY36NJDAa18jLZcaHAUUuTj+JB8IAo8zWgBNvBF7A==} tailwindcss-animate@1.0.7: resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' - tailwindcss@3.4.4: - resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} + tailwindcss@3.4.7: + resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -7964,8 +7990,8 @@ packages: uglify-js: optional: true - terser@5.31.1: - resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} + terser@5.31.3: + resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} engines: {node: '>=10'} hasBin: true @@ -8072,8 +8098,8 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - ts-jest@29.1.5: - resolution: {integrity: sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==} + ts-jest@29.2.3: + resolution: {integrity: sha512-yCcfVdiBFngVz9/keHin9EnsrQtQtEu3nRykNy9RVp+FiPFFbPJ3Sg6Qg4+TkmH0vMP5qsTKgXSsk80HRwvdgQ==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -8206,8 +8232,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.20.1: - resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} + type-fest@4.23.0: + resolution: {integrity: sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==} engines: {node: '>=16'} type-is@1.6.18: @@ -8243,13 +8269,13 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true - uglify-js@3.18.0: - resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} + uglify-js@3.19.1: + resolution: {integrity: sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==} engines: {node: '>=0.8.0'} hasBin: true @@ -8273,8 +8299,8 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici@6.19.2: - resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==} + undici@6.19.5: + resolution: {integrity: sha512-LryC15SWzqQsREHIOUybavaIHF5IoL0dJ9aWWxL/PgT1KfqAW5225FZpDUFlt9xiDMS2/S7DOKhFWA7RLksWdg==} engines: {node: '>=18.17'} unicode-canonical-property-names-ecmascript@2.0.0: @@ -8343,12 +8369,12 @@ packages: unplugin@1.0.1: resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} - unplugin@1.11.0: - resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} + unplugin@1.12.0: + resolution: {integrity: sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==} engines: {node: '>=14.0.0'} - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -8390,6 +8416,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -8415,8 +8445,8 @@ packages: vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vfile@6.0.2: + resolution: {integrity: sha512-zND7NlS8rJYb/sPqkb13ZvbbUoExdbi4w3SfRrMq6R3FvnLQmmfpajJNITuuYm6AZ5uao9vy4BAos3EXBPf2rg==} walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -8468,8 +8498,8 @@ packages: which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} engines: {node: '>= 0.4'} which-collection@1.0.2: @@ -8527,6 +8557,18 @@ packages: utf-8-validate: optional: true + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml2js@0.5.0: resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} engines: {node: '>=4.0.0'} @@ -8556,8 +8598,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} hasBin: true @@ -8585,8 +8627,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors@2.1.0: - resolution: {integrity: sha512-FsQpXXeOEe05tcJN4Z2eicuC6+6KiJdBbPOAChanSkwwjZ277XGsh8wh/HaPuGeifTiw/7dgAzabitu2bnDvRg==} + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} zod@3.23.8: @@ -8641,194 +8683,173 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.24.7': {} + '@babel/compat-data@7.25.2': {} - '@babel/core@7.24.7': + '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helpers': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.0 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 convert-source-map: 2.0.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.24.7(@babel/core@7.24.7)(eslint@8.57.0)': + '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.0)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.57.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.24.7': + '@babel/generator@7.25.0': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-compilation-targets@7.24.7': + '@babel/helper-compilation-targets@7.25.2': dependencies: - '@babel/compat-data': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + '@babel/compat-data': 7.25.2 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.7(@babel/core@7.24.7)': + '@babel/helper-create-class-features-plugin@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 + '@babel/traverse': 7.25.2 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.7)': + '@babel/helper-create-regexp-features-plugin@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.7)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - debug: 4.3.5(supports-color@5.5.0) + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + debug: 4.3.6(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-member-expression-to-functions@7.24.7': + '@babel/helper-member-expression-to-functions@7.24.8': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 - '@babel/helper-plugin-utils@7.24.7': {} + '@babel/helper-plugin-utils@7.24.8': {} - '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.7)': + '@babel/helper-remap-async-to-generator@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 + '@babel/helper-wrap-function': 7.25.0 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.7)': + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-simple-access@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.24.7': {} + '@babel/helper-string-parser@7.24.8': {} '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-option@7.24.7': {} + '@babel/helper-validator-option@7.24.8': {} - '@babel/helper-wrap-function@7.24.7': + '@babel/helper-wrap-function@7.25.0': dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.2 + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/helpers@7.24.7': + '@babel/helpers@7.25.0': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 '@babel/highlight@7.24.7': dependencies: @@ -8837,660 +8858,675 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/parser@7.24.7': + '@babel/parser@7.25.0': + dependencies: + '@babel/types': 7.25.2 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/types': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.2 + transitivePeerDependencies: + - supports-color - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.2 + transitivePeerDependencies: + - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.7)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.7)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.7)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.7)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.7)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.7)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.7)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-async-generator-functions@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.7) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-remap-async-to-generator': 7.25.0(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-block-scoping@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-classes@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) - '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/traverse': 7.25.2 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/template': 7.25.0 + + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/template': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-destructuring@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-function-name@7.25.1(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/traverse': 7.25.2 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-literals@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-simple-access': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-modules-systemjs@7.25.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-optional-chaining@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-constant-elements@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-react-constant-elements@7.25.1(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/types': 7.25.2 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typeof-symbol@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typescript@7.24.7(@babel/core@7.24.7)': + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/core': 7.24.7 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.7) - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/preset-env@7.24.7(@babel/core@7.24.7)': - dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-compilation-targets': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.7) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-classes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-destructuring': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-optional-chaining': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typeof-symbol': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.7) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.7) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.7) + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/preset-env@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/compat-data': 7.25.2 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.1(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) core-js-compat: 3.37.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.7)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/types': 7.24.7 + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/types': 7.25.2 esutils: 2.0.3 - '@babel/preset-react@7.24.7(@babel/core@7.24.7)': + '@babel/preset-react@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - '@babel/preset-typescript@7.24.7(@babel/core@7.24.7)': + '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-modules-commonjs': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-transform-typescript': 7.24.7(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color '@babel/regjsgen@0.8.0': {} - '@babel/runtime@7.24.7': + '@babel/runtime@7.25.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': + '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.0 + '@babel/types': 7.25.2 - '@babel/traverse@7.24.7': + '@babel/traverse@7.25.2': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.5(supports-color@5.5.0) + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.0 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.7': + '@babel/types@7.25.2': dependencies: - '@babel/helper-string-parser': 7.24.7 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 @@ -9529,7 +9565,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -9544,8 +9580,8 @@ snapshots: '@fastify/ajv-compiler@3.6.0': dependencies: - ajv: 8.16.0 - ajv-formats: 2.1.1(ajv@8.16.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) fast-uri: 2.4.0 '@fastify/cors@9.0.1': @@ -9575,27 +9611,27 @@ snapshots: path-to-regexp: 6.2.2 reusify: 1.0.4 - '@floating-ui/core@1.6.4': + '@floating-ui/core@1.6.5': dependencies: - '@floating-ui/utils': 0.2.4 + '@floating-ui/utils': 0.2.5 - '@floating-ui/dom@1.6.7': + '@floating-ui/dom@1.6.8': dependencies: - '@floating-ui/core': 1.6.4 - '@floating-ui/utils': 0.2.4 + '@floating-ui/core': 1.6.5 + '@floating-ui/utils': 0.2.5 '@floating-ui/react-dom@2.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/dom': 1.6.7 + '@floating-ui/dom': 1.6.8 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@floating-ui/utils@0.2.4': {} + '@floating-ui/utils@0.2.5': {} '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -9701,27 +9737,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -9742,21 +9778,21 @@ snapshots: - supports-color - ts-node - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -9781,7 +9817,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -9799,7 +9835,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.14.10 + '@types/node': 20.14.13 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -9821,7 +9857,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.14.10 + '@types/node': 20.14.13 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -9868,7 +9904,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -9891,14 +9927,14 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/yargs': 17.0.32 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} @@ -9910,17 +9946,17 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@ljharb/through@2.3.13': dependencies: @@ -9928,11 +9964,11 @@ snapshots: '@lukeed/csprng@1.1.0': {} - '@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.2))': + '@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.3))': dependencies: '@mdx-js/mdx': 3.0.1 source-map: 0.7.4 - webpack: 5.92.1(@swc/core@1.7.2) + webpack: 5.92.1(@swc/core@1.7.3) transitivePeerDependencies: - supports-color @@ -9960,7 +9996,7 @@ snapshots: unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.2 transitivePeerDependencies: - supports-color @@ -9992,31 +10028,30 @@ snapshots: got: 11.8.6 os-filter-obj: 2.0.0 - '@nestjs/cli@10.4.0(@swc/cli@0.4.0(@swc/core@1.7.2)(chokidar@3.6.0))(@swc/core@1.7.2)': + '@nestjs/cli@10.4.2(@swc/cli@0.4.0(@swc/core@1.7.3)(chokidar@3.6.0))(@swc/core@1.7.3)': dependencies: '@angular-devkit/core': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics-cli': 17.3.8(chokidar@3.6.0) - '@nestjs/schematics': 10.1.2(chokidar@3.6.0)(typescript@5.3.3) + '@nestjs/schematics': 10.1.3(chokidar@3.6.0)(typescript@5.3.3) chalk: 4.1.2 chokidar: 3.6.0 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.2)) + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)) glob: 10.4.2 inquirer: 8.2.6 node-emoji: 1.11.0 ora: 5.4.1 - source-map-support: 0.5.21 tree-kill: 1.2.2 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 typescript: 5.3.3 - webpack: 5.92.1(@swc/core@1.7.2) + webpack: 5.92.1(@swc/core@1.7.3) webpack-node-externals: 3.0.0 optionalDependencies: - '@swc/cli': 0.4.0(@swc/core@1.7.2(@swc/helpers@0.5.2))(chokidar@3.6.0) - '@swc/core': 1.7.2(@swc/helpers@0.5.2) + '@swc/cli': 0.4.0(@swc/core@1.7.3(@swc/helpers@0.5.2))(chokidar@3.6.0) + '@swc/core': 1.7.3(@swc/helpers@0.5.2) transitivePeerDependencies: - esbuild - uglify-js @@ -10113,14 +10148,14 @@ snapshots: - supports-color - utf-8-validate - '@nestjs/schedule@4.0.2(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))': + '@nestjs/schedule@4.1.0(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1))': dependencies: '@nestjs/common': 10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.3.10(@nestjs/common@10.3.10(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.10)(@nestjs/websockets@10.3.10)(reflect-metadata@0.2.2)(rxjs@7.8.1) cron: 3.1.7 - uuid: 9.0.1 + uuid: 10.0.0 - '@nestjs/schematics@10.1.2(chokidar@3.6.0)(typescript@5.3.3)': + '@nestjs/schematics@10.1.3(chokidar@3.6.0)(typescript@5.3.3)': dependencies: '@angular-devkit/core': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics': 17.3.8(chokidar@3.6.0) @@ -10172,11 +10207,11 @@ snapshots: dependencies: glob: 7.1.7 - '@next/mdx@14.2.4(@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.2)))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))': + '@next/mdx@14.2.5(@mdx-js/loader@3.0.1(webpack@5.92.1(@swc/core@1.7.3)))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 3.0.1(webpack@5.92.1(@swc/core@1.7.2)) + '@mdx-js/loader': 3.0.1(webpack@5.92.1(@swc/core@1.7.3)) '@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1) '@next/swc-darwin-arm64@13.5.6': @@ -10236,8 +10271,8 @@ snapshots: dependencies: '@octokit/auth-token': 5.1.1 '@octokit/graphql': 8.1.1 - '@octokit/request': 9.1.1 - '@octokit/request-error': 6.1.1 + '@octokit/request': 9.1.3 + '@octokit/request-error': 6.1.4 '@octokit/types': 13.5.0 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 @@ -10249,7 +10284,7 @@ snapshots: '@octokit/graphql@8.1.1': dependencies: - '@octokit/request': 9.1.1 + '@octokit/request': 9.1.3 '@octokit/types': 13.5.0 universal-user-agent: 7.0.2 @@ -10263,24 +10298,24 @@ snapshots: '@octokit/plugin-retry@7.1.1(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 - '@octokit/request-error': 6.1.1 + '@octokit/request-error': 6.1.4 '@octokit/types': 13.5.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@9.3.0(@octokit/core@6.1.2)': + '@octokit/plugin-throttling@9.3.1(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 '@octokit/types': 13.5.0 bottleneck: 2.19.5 - '@octokit/request-error@6.1.1': + '@octokit/request-error@6.1.4': dependencies: '@octokit/types': 13.5.0 - '@octokit/request@9.1.1': + '@octokit/request@9.1.3': dependencies: '@octokit/endpoint': 10.1.1 - '@octokit/request-error': 6.1.1 + '@octokit/request-error': 6.1.4 '@octokit/types': 13.5.0 universal-user-agent: 7.0.2 @@ -10305,7 +10340,7 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@prisma/client@5.16.1(prisma@5.13.0)': + '@prisma/client@5.17.0(prisma@5.13.0)': optionalDependencies: prisma: 5.13.0 @@ -10334,7 +10369,7 @@ snapshots: '@radix-ui/primitive@1.0.1': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/primitive@1.1.0': {} @@ -10422,7 +10457,7 @@ snapshots: '@radix-ui/react-compose-refs@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -10449,7 +10484,7 @@ snapshots: '@radix-ui/react-context@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -10462,7 +10497,7 @@ snapshots: '@radix-ui/react-dialog@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -10513,7 +10548,7 @@ snapshots: '@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -10555,7 +10590,7 @@ snapshots: '@radix-ui/react-focus-guards@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -10568,7 +10603,7 @@ snapshots: '@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -10595,7 +10630,7 @@ snapshots: '@radix-ui/react-id@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -10704,7 +10739,7 @@ snapshots: '@radix-ui/react-portal@1.0.4(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10724,7 +10759,7 @@ snapshots: '@radix-ui/react-presence@1.0.1(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 @@ -10745,7 +10780,7 @@ snapshots: '@radix-ui/react-primitive@1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10807,7 +10842,7 @@ snapshots: '@radix-ui/react-slot@1.0.2(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -10857,7 +10892,7 @@ snapshots: '@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -10870,7 +10905,7 @@ snapshots: '@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -10885,7 +10920,7 @@ snapshots: '@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) react: 18.3.1 optionalDependencies: @@ -10900,7 +10935,7 @@ snapshots: '@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.3.3)(react@18.3.1)': dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 react: 18.3.1 optionalDependencies: '@types/react': 18.3.3 @@ -10942,31 +10977,31 @@ snapshots: '@radix-ui/rect@1.1.0': {} - '@redis/bloom@1.2.0(@redis/client@1.5.16)': + '@redis/bloom@1.2.0(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.16 + '@redis/client': 1.6.0 - '@redis/client@1.5.16': + '@redis/client@1.6.0': dependencies: cluster-key-slot: 1.1.2 generic-pool: 3.9.0 yallist: 4.0.0 - '@redis/graph@1.1.1(@redis/client@1.5.16)': + '@redis/graph@1.1.1(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.16 + '@redis/client': 1.6.0 - '@redis/json@1.0.6(@redis/client@1.5.16)': + '@redis/json@1.0.7(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.16 + '@redis/client': 1.6.0 - '@redis/search@1.1.6(@redis/client@1.5.16)': + '@redis/search@1.2.0(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.16 + '@redis/client': 1.6.0 - '@redis/time-series@1.0.5(@redis/client@1.5.16)': + '@redis/time-series@1.1.0(@redis/client@1.6.0)': dependencies: - '@redis/client': 1.5.16 + '@redis/client': 1.6.0 '@rollup/pluginutils@5.1.0': dependencies: @@ -10974,42 +11009,42 @@ snapshots: estree-walker: 2.0.2 picomatch: 2.3.1 - '@rushstack/eslint-patch@1.10.3': {} + '@rushstack/eslint-patch@1.10.4': {} '@sec-ant/readable-stream@0.4.1': {} - '@semantic-release/changelog@6.0.3(semantic-release@24.0.0(typescript@5.5.3))': + '@semantic-release/changelog@6.0.3(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 fs-extra: 11.2.0 lodash: 4.17.21 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) - '@semantic-release/commit-analyzer@12.0.0(semantic-release@24.0.0(typescript@5.5.3))': + '@semantic-release/commit-analyzer@12.0.0(semantic-release@24.0.0(typescript@5.5.4))': dependencies: conventional-changelog-angular: 7.0.0 conventional-commits-filter: 4.0.0 conventional-commits-parser: 5.0.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.7 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color - '@semantic-release/commit-analyzer@13.0.0(semantic-release@24.0.0(typescript@5.5.3))': + '@semantic-release/commit-analyzer@13.0.0(semantic-release@24.0.0(typescript@5.5.4))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) import-from-esm: 1.3.4 lodash-es: 4.17.21 micromatch: 4.0.7 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color @@ -11017,43 +11052,43 @@ snapshots: '@semantic-release/error@4.0.0': {} - '@semantic-release/git@10.0.1(semantic-release@24.0.0(typescript@5.5.3))': + '@semantic-release/git@10.0.1(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@semantic-release/error': 3.0.0 aggregate-error: 3.1.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) dir-glob: 3.0.1 execa: 5.1.1 lodash: 4.17.21 micromatch: 4.0.7 p-reduce: 2.1.0 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color - '@semantic-release/github@10.0.7(semantic-release@24.0.0(typescript@5.5.3))': + '@semantic-release/github@10.1.3(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@octokit/core': 6.1.2 '@octokit/plugin-paginate-rest': 11.3.3(@octokit/core@6.1.2) '@octokit/plugin-retry': 7.1.1(@octokit/core@6.1.2) - '@octokit/plugin-throttling': 9.3.0(@octokit/core@6.1.2) + '@octokit/plugin-throttling': 9.3.1(@octokit/core@6.1.2) '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) dir-glob: 3.0.1 globby: 14.0.2 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 issue-parser: 7.0.1 lodash-es: 4.17.21 - mime: 4.0.3 + mime: 4.0.4 p-filter: 4.1.0 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) url-join: 5.0.0 transitivePeerDependencies: - supports-color - '@semantic-release/npm@12.0.1(semantic-release@24.0.0(typescript@5.5.3))': + '@semantic-release/npm@12.0.1(semantic-release@24.0.0(typescript@5.5.4))': dependencies: '@semantic-release/error': 4.0.0 aggregate-error: 5.0.0 @@ -11062,27 +11097,27 @@ snapshots: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.1 - npm: 10.8.1 + npm: 10.8.2 rc: 1.2.8 read-pkg: 9.0.1 registry-auth-token: 5.0.2 - semantic-release: 24.0.0(typescript@5.5.3) - semver: 7.6.2 + semantic-release: 24.0.0(typescript@5.5.4) + semver: 7.6.3 tempy: 3.1.0 - '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.0.0(typescript@5.5.3))': + '@semantic-release/release-notes-generator@14.0.1(semantic-release@24.0.0(typescript@5.5.4))': dependencies: conventional-changelog-angular: 8.0.0 conventional-changelog-writer: 8.0.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.0.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) get-stream: 7.0.1 import-from-esm: 1.3.4 into-stream: 7.0.0 lodash-es: 4.17.21 read-package-up: 11.0.0 - semantic-release: 24.0.0(typescript@5.5.3) + semantic-release: 24.0.0(typescript@5.5.4) transitivePeerDependencies: - supports-color @@ -11092,13 +11127,13 @@ snapshots: '@sentry/types': 7.118.0 '@sentry/utils': 7.118.0 - '@sentry/babel-plugin-component-annotate@2.20.1': {} + '@sentry/babel-plugin-component-annotate@2.21.1': {} - '@sentry/bundler-plugin-core@2.20.1': + '@sentry/bundler-plugin-core@2.21.1': dependencies: - '@babel/core': 7.24.7 - '@sentry/babel-plugin-component-annotate': 2.20.1 - '@sentry/cli': 2.32.1 + '@babel/core': 7.25.2 + '@sentry/babel-plugin-component-annotate': 2.21.1 + '@sentry/cli': 2.33.0 dotenv: 16.4.5 find-up: 5.0.0 glob: 9.3.5 @@ -11108,28 +11143,28 @@ snapshots: - encoding - supports-color - '@sentry/cli-darwin@2.32.1': + '@sentry/cli-darwin@2.33.0': optional: true - '@sentry/cli-linux-arm64@2.32.1': + '@sentry/cli-linux-arm64@2.33.0': optional: true - '@sentry/cli-linux-arm@2.32.1': + '@sentry/cli-linux-arm@2.33.0': optional: true - '@sentry/cli-linux-i686@2.32.1': + '@sentry/cli-linux-i686@2.33.0': optional: true - '@sentry/cli-linux-x64@2.32.1': + '@sentry/cli-linux-x64@2.33.0': optional: true - '@sentry/cli-win32-i686@2.32.1': + '@sentry/cli-win32-i686@2.33.0': optional: true - '@sentry/cli-win32-x64@2.32.1': + '@sentry/cli-win32-x64@2.33.0': optional: true - '@sentry/cli@2.32.1': + '@sentry/cli@2.33.0': dependencies: https-proxy-agent: 5.0.1 node-fetch: 2.7.0 @@ -11137,13 +11172,13 @@ snapshots: proxy-from-env: 1.1.0 which: 2.0.2 optionalDependencies: - '@sentry/cli-darwin': 2.32.1 - '@sentry/cli-linux-arm': 2.32.1 - '@sentry/cli-linux-arm64': 2.32.1 - '@sentry/cli-linux-i686': 2.32.1 - '@sentry/cli-linux-x64': 2.32.1 - '@sentry/cli-win32-i686': 2.32.1 - '@sentry/cli-win32-x64': 2.32.1 + '@sentry/cli-darwin': 2.33.0 + '@sentry/cli-linux-arm': 2.33.0 + '@sentry/cli-linux-arm64': 2.33.0 + '@sentry/cli-linux-i686': 2.33.0 + '@sentry/cli-linux-x64': 2.33.0 + '@sentry/cli-win32-i686': 2.33.0 + '@sentry/cli-win32-x64': 2.33.0 transitivePeerDependencies: - encoding - supports-color @@ -11179,12 +11214,12 @@ snapshots: dependencies: '@sentry/types': 7.118.0 - '@sentry/webpack-plugin@2.20.1(webpack@5.92.1(@swc/core@1.7.2))': + '@sentry/webpack-plugin@2.21.1(webpack@5.92.1(@swc/core@1.7.3))': dependencies: - '@sentry/bundler-plugin-core': 2.20.1 + '@sentry/bundler-plugin-core': 2.21.1 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.92.1(@swc/core@1.7.2) + webpack: 5.92.1(@swc/core@1.7.3) transitivePeerDependencies: - encoding - supports-color @@ -11209,14 +11244,14 @@ snapshots: '@socket.io/redis-adapter@8.3.0(socket.io-adapter@2.5.5)': dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) notepack.io: 3.0.1 socket.io-adapter: 2.5.5 uid2: 1.0.0 transitivePeerDependencies: - supports-color - '@supabase/auth-js@2.64.2': + '@supabase/auth-js@2.64.4': dependencies: '@supabase/node-fetch': 2.6.15 @@ -11228,7 +11263,7 @@ snapshots: dependencies: whatwg-url: 5.0.0 - '@supabase/postgrest-js@1.15.7': + '@supabase/postgrest-js@1.15.8': dependencies: '@supabase/node-fetch': 2.6.15 @@ -11236,8 +11271,8 @@ snapshots: dependencies: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.5 - '@types/ws': 8.5.10 - ws: 8.17.1 + '@types/ws': 8.5.12 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -11246,68 +11281,68 @@ snapshots: dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/supabase-js@2.44.2': + '@supabase/supabase-js@2.45.0': dependencies: - '@supabase/auth-js': 2.64.2 + '@supabase/auth-js': 2.64.4 '@supabase/functions-js': 2.4.1 '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 1.15.7 + '@supabase/postgrest-js': 1.15.8 '@supabase/realtime-js': 2.10.2 '@supabase/storage-js': 2.6.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.7)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 - '@svgr/babel-preset@8.1.0(@babel/core@7.24.7)': + '@svgr/babel-preset@8.1.0(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.7) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.7) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.25.2) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.25.2) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.25.2) - '@svgr/core@8.1.0(typescript@5.5.3)': + '@svgr/core@8.1.0(typescript@5.5.4)': dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.5.3) + cosmiconfig: 8.3.6(typescript@5.5.4) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -11315,102 +11350,102 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.5.3))': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.5.4))': dependencies: - '@babel/core': 7.24.7 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.7) - '@svgr/core': 8.1.0(typescript@5.5.3) + '@babel/core': 7.25.2 + '@svgr/babel-preset': 8.1.0(@babel/core@7.25.2) + '@svgr/core': 8.1.0(typescript@5.5.4) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.5.3))(typescript@5.5.3)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.5.4))(typescript@5.5.4)': dependencies: - '@svgr/core': 8.1.0(typescript@5.5.3) - cosmiconfig: 8.3.6(typescript@5.5.3) + '@svgr/core': 8.1.0(typescript@5.5.4) + cosmiconfig: 8.3.6(typescript@5.5.4) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@svgr/webpack@8.1.0(typescript@5.5.3)': + '@svgr/webpack@8.1.0(typescript@5.5.4)': dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-transform-react-constant-elements': 7.24.7(@babel/core@7.24.7) - '@babel/preset-env': 7.24.7(@babel/core@7.24.7) - '@babel/preset-react': 7.24.7(@babel/core@7.24.7) - '@babel/preset-typescript': 7.24.7(@babel/core@7.24.7) - '@svgr/core': 8.1.0(typescript@5.5.3) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.5.3)) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.5.3))(typescript@5.5.3) + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-constant-elements': 7.25.1(@babel/core@7.25.2) + '@babel/preset-env': 7.25.2(@babel/core@7.25.2) + '@babel/preset-react': 7.24.7(@babel/core@7.25.2) + '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) + '@svgr/core': 8.1.0(typescript@5.5.4) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.5.4))(typescript@5.5.4) transitivePeerDependencies: - supports-color - typescript - '@swc/cli@0.4.0(@swc/core@1.7.2(@swc/helpers@0.5.2))(chokidar@3.6.0)': + '@swc/cli@0.4.0(@swc/core@1.7.3(@swc/helpers@0.5.2))(chokidar@3.6.0)': dependencies: '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.7.2(@swc/helpers@0.5.2) + '@swc/core': 1.7.3(@swc/helpers@0.5.2) '@swc/counter': 0.1.3 commander: 8.3.0 fast-glob: 3.3.2 minimatch: 9.0.5 piscina: 4.6.1 - semver: 7.6.2 + semver: 7.6.3 slash: 3.0.0 source-map: 0.7.4 optionalDependencies: chokidar: 3.6.0 - '@swc/core-darwin-arm64@1.7.2': + '@swc/core-darwin-arm64@1.7.3': optional: true - '@swc/core-darwin-x64@1.7.2': + '@swc/core-darwin-x64@1.7.3': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.2': + '@swc/core-linux-arm-gnueabihf@1.7.3': optional: true - '@swc/core-linux-arm64-gnu@1.7.2': + '@swc/core-linux-arm64-gnu@1.7.3': optional: true - '@swc/core-linux-arm64-musl@1.7.2': + '@swc/core-linux-arm64-musl@1.7.3': optional: true - '@swc/core-linux-x64-gnu@1.7.2': + '@swc/core-linux-x64-gnu@1.7.3': optional: true - '@swc/core-linux-x64-musl@1.7.2': + '@swc/core-linux-x64-musl@1.7.3': optional: true - '@swc/core-win32-arm64-msvc@1.7.2': + '@swc/core-win32-arm64-msvc@1.7.3': optional: true - '@swc/core-win32-ia32-msvc@1.7.2': + '@swc/core-win32-ia32-msvc@1.7.3': optional: true - '@swc/core-win32-x64-msvc@1.7.2': + '@swc/core-win32-x64-msvc@1.7.3': optional: true - '@swc/core@1.7.2(@swc/helpers@0.5.2)': + '@swc/core@1.7.3(@swc/helpers@0.5.2)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.2 - '@swc/core-darwin-x64': 1.7.2 - '@swc/core-linux-arm-gnueabihf': 1.7.2 - '@swc/core-linux-arm64-gnu': 1.7.2 - '@swc/core-linux-arm64-musl': 1.7.2 - '@swc/core-linux-x64-gnu': 1.7.2 - '@swc/core-linux-x64-musl': 1.7.2 - '@swc/core-win32-arm64-msvc': 1.7.2 - '@swc/core-win32-ia32-msvc': 1.7.2 - '@swc/core-win32-x64-msvc': 1.7.2 + '@swc/core-darwin-arm64': 1.7.3 + '@swc/core-darwin-x64': 1.7.3 + '@swc/core-linux-arm-gnueabihf': 1.7.3 + '@swc/core-linux-arm64-gnu': 1.7.3 + '@swc/core-linux-arm64-musl': 1.7.3 + '@swc/core-linux-x64-gnu': 1.7.3 + '@swc/core-linux-x64-musl': 1.7.3 + '@swc/core-win32-arm64-msvc': 1.7.3 + '@swc/core-win32-ia32-msvc': 1.7.3 + '@swc/core-win32-x64-msvc': 1.7.3 '@swc/helpers': 0.5.2 '@swc/counter@0.1.3': {} @@ -11427,18 +11462,18 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/forms@0.5.7(tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))': + '@tailwindcss/forms@0.5.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + tailwindcss: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) - '@tanstack/react-table@8.19.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@tanstack/react-table@8.19.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/table-core': 8.19.2 + '@tanstack/table-core': 8.19.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@tanstack/table-core@8.19.2': {} + '@tanstack/table-core@8.19.3': {} '@tokenizer/token@0.3.0': {} @@ -11625,42 +11660,42 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.0 + '@babel/types': 7.25.2 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 + '@babel/parser': 7.25.0 + '@babel/types': 7.25.2 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.24.7 + '@babel/types': 7.25.2 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/responselike': 1.0.3 '@types/cli-table@0.3.4': {} '@types/connect@3.4.38': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/cookie-parser@1.4.7': dependencies: @@ -11672,11 +11707,11 @@ snapshots: '@types/cors@2.8.17': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/dayjs-precise-range@1.0.5': dependencies: - dayjs: 1.11.11 + dayjs: 1.11.12 '@types/debug@4.1.12': dependencies: @@ -11685,14 +11720,14 @@ snapshots: '@types/eccrypto@1.1.6': dependencies: '@types/expect': 1.20.4 - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/eslint-scope@3.7.7': dependencies: - '@types/eslint': 8.56.10 + '@types/eslint': 9.6.0 '@types/estree': 1.0.5 - '@types/eslint@8.56.10': + '@types/eslint@9.6.0': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -11707,7 +11742,7 @@ snapshots: '@types/express-serve-static-core@4.19.5': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -11723,7 +11758,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/hast@3.0.4': dependencies: @@ -11756,11 +11791,11 @@ snapshots: '@types/jsonwebtoken@9.0.5': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/keyv@3.1.4': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/luxon@3.4.2': {} @@ -11780,7 +11815,7 @@ snapshots: dependencies: '@types/express': 4.17.21 - '@types/node@20.14.10': + '@types/node@20.14.13': dependencies: undici-types: 5.26.5 @@ -11805,33 +11840,34 @@ snapshots: '@types/responselike@1.0.3': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/semver@7.5.8': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/send': 0.17.4 '@types/stack-utils@2.0.3': {} - '@types/superagent@8.1.7': + '@types/superagent@8.1.8': dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 20.14.10 + '@types/node': 20.14.13 + form-data: 4.0.0 '@types/supertest@6.0.2': dependencies: '@types/methods': 1.1.4 - '@types/superagent': 8.1.7 + '@types/superagent': 8.1.8 '@types/unist@2.0.10': {} @@ -11841,9 +11877,9 @@ snapshots: '@types/validator@13.12.0': {} - '@types/ws@8.5.10': + '@types/ws@8.5.12': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 '@types/yargs-parser@21.0.3': {} @@ -11859,35 +11895,35 @@ snapshots: '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.2 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.3) + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -11897,23 +11933,23 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -11931,7 +11967,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@4.9.5) - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@4.9.5) optionalDependencies: @@ -11939,15 +11975,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.3) - debug: 4.3.5(supports-color@5.5.0) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6(supports-color@5.5.0) eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -11959,10 +11995,10 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.2 + semver: 7.6.3 tsutils: 3.21.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 @@ -11973,29 +12009,29 @@ snapshots: dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.2 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@4.9.5) optionalDependencies: typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.3) + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -12009,7 +12045,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -12023,21 +12059,21 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) eslint: 8.57.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -12054,11 +12090,11 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@13.5.6)(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(prettier@3.3.2)(typescript@4.9.5)': + '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@13.5.6)(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(prettier@3.3.3)(typescript@4.9.5)': dependencies: - '@babel/core': 7.24.7 - '@babel/eslint-parser': 7.24.7(@babel/core@7.24.7)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.10.3 + '@babel/core': 7.25.2 + '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.0) + '@rushstack/eslint-patch': 1.10.4 '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@4.9.5) eslint-config-prettier: 9.1.0(eslint@8.57.0) @@ -12066,19 +12102,19 @@ snapshots: eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(typescript@4.9.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(typescript@4.9.5))(eslint@8.57.0) - eslint-plugin-react: 7.34.3(eslint@8.57.0) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5))(eslint@8.57.0) + eslint-plugin-react: 7.35.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@4.9.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) - prettier-plugin-packagejson: 2.5.0(prettier@3.3.2) + prettier-plugin-packagejson: 2.5.1(prettier@3.3.3) optionalDependencies: '@next/eslint-plugin-next': 13.5.6 eslint: 8.57.0 - prettier: 3.3.2 + prettier: 3.3.3 typescript: 4.9.5 transitivePeerDependencies: - eslint-import-resolver-node @@ -12185,31 +12221,31 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-attributes@1.9.5(acorn@8.12.0): + acorn-import-attributes@1.9.5(acorn@8.12.1): dependencies: - acorn: 8.12.0 + acorn: 8.12.1 - acorn-jsx@5.3.2(acorn@8.12.0): + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: - acorn: 8.12.0 + acorn: 8.12.1 acorn-walk@8.3.3: dependencies: - acorn: 8.12.0 + acorn: 8.12.1 acorn@7.1.1: {} - acorn@8.12.0: {} + acorn@8.12.1: {} agent-base@6.0.2: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color agent-base@7.1.1: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -12227,13 +12263,13 @@ snapshots: optionalDependencies: ajv: 8.12.0 - ajv-formats@2.1.1(ajv@8.16.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.16.0 + ajv: 8.17.1 - ajv-formats@3.0.1(ajv@8.16.0): + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: - ajv: 8.16.0 + ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): dependencies: @@ -12260,12 +12296,12 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 - ajv@8.16.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 ansi-colors@4.1.3: {} @@ -12378,13 +12414,6 @@ snapshots: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.toreversed@1.1.2: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 @@ -12416,14 +12445,14 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.19(postcss@8.4.39): + autoprefixer@10.4.19(postcss@8.4.40): dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001639 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001645 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -12443,19 +12472,19 @@ snapshots: transitivePeerDependencies: - csstype - axe-core@4.9.1: {} + axe-core@4.10.0: {} axobject-query@3.1.1: dependencies: deep-equal: 2.2.3 - babel-jest@29.7.0(@babel/core@7.24.7): + babel-jest@29.7.0(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.7) + babel-preset-jest: 29.6.3(@babel/core@7.25.2) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -12464,7 +12493,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -12474,56 +12503,56 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.7): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): dependencies: - '@babel/compat-data': 7.24.7 - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + '@babel/compat-data': 7.25.2 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.7): + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.7): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): dependencies: - '@babel/core': 7.24.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.7) + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.7) - - babel-preset-jest@29.6.3(@babel/core@7.24.7): - dependencies: - '@babel/core': 7.24.7 + babel-preset-current-node-syntax@1.0.1(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + + babel-preset-jest@29.6.3(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) bail@2.0.2: {} @@ -12545,7 +12574,7 @@ snapshots: bin-version-check@5.1.0: dependencies: bin-version: 6.0.0 - semver: 7.6.2 + semver: 7.6.3 semver-truncate: 3.0.0 bin-version@6.0.0: @@ -12625,12 +12654,12 @@ snapshots: safe-buffer: 5.2.1 optional: true - browserslist@4.23.1: + browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001639 - electron-to-chromium: 1.4.816 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + caniuse-lite: 1.0.30001645 + electron-to-chromium: 1.5.4 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.2) bs-logger@0.2.6: dependencies: @@ -12663,7 +12692,7 @@ snapshots: builtins@5.1.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 busboy@1.6.0: dependencies: @@ -12699,7 +12728,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001639: {} + caniuse-lite@1.0.30001645: {} ccount@2.0.1: {} @@ -12757,7 +12786,7 @@ snapshots: class-validator@0.14.1: dependencies: '@types/validator': 13.12.0 - libphonenumber-js: 1.11.4 + libphonenumber-js: 1.11.5 validator: 13.12.0 class-variance-authority@0.7.0: @@ -12942,7 +12971,7 @@ snapshots: conventional-commits-filter: 5.0.0 handlebars: 4.7.8 meow: 13.2.0 - semver: 7.6.2 + semver: 7.6.3 conventional-commits-filter@4.0.0: {} @@ -12980,7 +13009,7 @@ snapshots: core-js-compat@3.37.1: dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 core-util-is@1.0.3: {} @@ -12998,23 +13027,23 @@ snapshots: optionalDependencies: typescript: 5.3.3 - cosmiconfig@8.3.6(typescript@5.5.3): + cosmiconfig@8.3.6(typescript@5.5.4): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 - cosmiconfig@9.0.0(typescript@5.5.3): + cosmiconfig@9.0.0(typescript@5.5.4): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.5.3 + typescript: 5.5.4 create-hash@1.2.0: dependencies: @@ -13035,13 +13064,13 @@ snapshots: sha.js: 2.4.11 optional: true - create-jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)): + create-jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -13050,13 +13079,13 @@ snapshots: - supports-color - ts-node - create-jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)): + create-jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -13140,7 +13169,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 - dayjs@1.11.11: {} + dayjs@1.11.12: {} debug@2.6.9: dependencies: @@ -13150,7 +13179,7 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.5(supports-color@5.5.0): + debug@4.3.6(supports-color@5.5.0): dependencies: ms: 2.1.2 optionalDependencies: @@ -13328,7 +13357,11 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.4.816: {} + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.4: {} elliptic@6.5.4: dependencies: @@ -13357,8 +13390,8 @@ snapshots: engine.io-client@6.5.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.5(supports-color@5.5.0) - engine.io-parser: 5.2.2 + debug: 4.3.6(supports-color@5.5.0) + engine.io-parser: 5.2.3 ws: 8.17.1 xmlhttprequest-ssl: 2.0.0 transitivePeerDependencies: @@ -13366,26 +13399,26 @@ snapshots: - supports-color - utf-8-validate - engine.io-parser@5.2.2: {} + engine.io-parser@5.2.3: {} engine.io@6.5.5: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 20.14.10 + '@types/node': 20.14.13 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.5(supports-color@5.5.0) - engine.io-parser: 5.2.2 + debug: 4.3.6(supports-color@5.5.0) + engine.io-parser: 5.2.3 ws: 8.17.1 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - enhanced-resolve@5.17.0: + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -13533,29 +13566,29 @@ snapshots: eslint-compat-utils@0.5.1(eslint@8.57.0): dependencies: eslint: 8.57.0 - semver: 7.6.2 + semver: 7.6.3 eslint-config-prettier@9.1.0(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-config-standard-with-typescript@43.0.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.3): + eslint-config-standard-with-typescript@43.0.1(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) eslint-plugin-n: 16.6.2(eslint@8.57.0) eslint-plugin-promise: 6.6.0(eslint@8.57.0) - typescript: 5.5.3 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0): + eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.6.0(eslint@8.57.0))(eslint@8.57.0): dependencies: eslint: 8.57.0 - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) eslint-plugin-n: 16.6.2(eslint@8.57.0) eslint-plugin-promise: 6.6.0(eslint@8.57.0) @@ -13571,21 +13604,21 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.14.0 + is-core-module: 2.15.0 resolve: 1.22.8 transitivePeerDependencies: - supports-color eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0): dependencies: - debug: 4.3.5(supports-color@5.5.0) - enhanced-resolve: 5.17.0 + debug: 4.3.6(supports-color@5.5.0) + enhanced-resolve: 5.17.1 eslint: 8.57.0 eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) fast-glob: 3.3.2 - get-tsconfig: 4.7.5 - is-core-module: 2.14.0 + get-tsconfig: 4.7.6 + is-core-module: 2.15.0 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' @@ -13604,11 +13637,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -13645,7 +13678,7 @@ snapshots: eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) hasown: 2.0.2 - is-core-module: 2.14.0 + is-core-module: 2.15.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -13660,7 +13693,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -13670,9 +13703,9 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 - is-core-module: 2.14.0 + is-core-module: 2.15.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -13681,19 +13714,19 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(typescript@4.9.5): + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5) - jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) transitivePeerDependencies: - supports-color - typescript @@ -13704,7 +13737,7 @@ snapshots: array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.9.1 + axe-core: 4.10.0 axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 @@ -13724,14 +13757,14 @@ snapshots: builtins: 5.1.0 eslint: 8.57.0 eslint-plugin-es-x: 7.8.0(eslint@8.57.0) - get-tsconfig: 4.7.5 + get-tsconfig: 4.7.6 globals: 13.24.0 ignore: 5.3.1 is-builtin-module: 3.2.1 - is-core-module: 2.14.0 + is-core-module: 2.15.0 minimatch: 3.1.2 resolve: 1.22.8 - semver: 7.6.2 + semver: 7.6.3 eslint-plugin-node@11.1.0(eslint@8.57.0): dependencies: @@ -13743,20 +13776,20 @@ snapshots: resolve: 1.22.8 semver: 6.3.1 - eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(typescript@4.9.5))(eslint@8.57.0): + eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5))(eslint@8.57.0): dependencies: eslint: 8.57.0 optionalDependencies: - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(typescript@4.9.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(typescript@4.9.5))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@4.9.5) - eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.2): + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): dependencies: eslint: 8.57.0 - prettier: 3.3.2 + prettier: 3.3.3 prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 + synckit: 0.9.1 optionalDependencies: - '@types/eslint': 8.56.10 + '@types/eslint': 9.6.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-plugin-promise@6.6.0(eslint@8.57.0): @@ -13767,27 +13800,27 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react@7.34.3(eslint@8.57.0): + eslint-plugin-react@7.35.0(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 eslint: 8.57.0 estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.hasown: 1.1.4 object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@4.9.5): dependencies: @@ -13814,7 +13847,7 @@ snapshots: ci-info: 3.9.0 clean-regexp: 1.0.0 eslint: 8.57.0 - esquery: 1.5.0 + esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -13823,7 +13856,7 @@ snapshots: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.6.2 + semver: 7.6.3 strip-indent: 3.0.0 eslint-scope@5.1.1: @@ -13859,13 +13892,13 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -13891,13 +13924,13 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -13999,10 +14032,10 @@ snapshots: is-plain-obj: 4.1.0 is-stream: 4.0.1 npm-run-path: 5.3.0 - pretty-ms: 9.0.0 + pretty-ms: 9.1.0 signal-exit: 4.1.0 strip-final-newline: 4.0.0 - yoctocolors: 2.1.0 + yoctocolors: 2.1.1 executable@4.1.1: dependencies: @@ -14056,7 +14089,7 @@ snapshots: ext-list@2.2.2: dependencies: - mime-db: 1.52.0 + mime-db: 1.53.0 ext-name@5.0.0: dependencies: @@ -14092,8 +14125,8 @@ snapshots: fast-json-stringify@5.16.1: dependencies: '@fastify/merge-json-schemas': 0.1.1 - ajv: 8.16.0 - ajv-formats: 3.0.1(ajv@8.16.0) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) fast-deep-equal: 3.1.3 fast-uri: 2.4.0 json-schema-ref-resolver: 1.0.1 @@ -14111,7 +14144,9 @@ snapshots: fast-uri@2.4.0: {} - fast-xml-parser@4.4.0: + fast-uri@3.0.1: {} + + fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 @@ -14128,12 +14163,12 @@ snapshots: fast-json-stringify: 5.16.1 find-my-way: 8.2.0 light-my-request: 5.13.0 - pino: 9.2.0 + pino: 9.3.2 process-warning: 3.0.0 proxy-addr: 2.0.7 rfdc: 1.4.1 secure-json-parse: 2.7.0 - semver: 7.6.2 + semver: 7.6.3 toad-cache: 3.7.0 fastq@1.17.1: @@ -14171,6 +14206,10 @@ snapshots: file-uri-to-path@1.0.0: optional: true + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + filename-reserved-regex@3.0.0: {} filenamify@5.1.1: @@ -14245,7 +14284,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.2)): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -14257,10 +14296,10 @@ snapshots: minimatch: 3.1.2 node-abort-controller: 3.1.1 schema-utils: 3.3.0 - semver: 7.6.2 + semver: 7.6.3 tapable: 2.2.1 typescript: 5.3.3 - webpack: 5.92.1(@swc/core@1.7.2) + webpack: 5.92.1(@swc/core@1.7.3) form-data@4.0.0: dependencies: @@ -14273,13 +14312,13 @@ snapshots: dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - qs: 6.12.2 + qs: 6.12.3 forwarded@0.2.0: {} fraction.js@4.3.7: {} - framer-motion@11.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.3.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: tslib: 2.6.3 optionalDependencies: @@ -14327,9 +14366,9 @@ snapshots: functions-have-names@1.2.3: {} - geist@1.3.0(next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): + geist@1.3.1(next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)): dependencies: - next: 13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) generic-pool@3.9.0: {} @@ -14374,7 +14413,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.5: + get-tsconfig@4.7.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -14402,7 +14441,16 @@ snapshots: glob@10.4.2: dependencies: foreground-child: 3.2.1 - jackspeak: 3.4.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + glob@10.4.5: + dependencies: + foreground-child: 3.2.1 + jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 @@ -14505,7 +14553,7 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.18.0 + uglify-js: 3.19.1 has-bigints@1.0.2: {} @@ -14604,7 +14652,7 @@ snapshots: hosted-git-info@7.0.2: dependencies: - lru-cache: 10.3.0 + lru-cache: 10.4.3 html-escaper@2.0.2: {} @@ -14621,7 +14669,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -14633,14 +14681,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -14650,7 +14698,7 @@ snapshots: human-signals@7.0.0: {} - husky@9.0.11: {} + husky@9.1.4: {} iconv-lite@0.4.24: dependencies: @@ -14671,12 +14719,12 @@ snapshots: import-from-esm@1.3.4: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) import-meta-resolve: 4.1.0 transitivePeerDependencies: - supports-color - import-local@3.1.0: + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -14808,7 +14856,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.14.0: + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -14934,8 +14982,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -14944,11 +14992,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.24.7 - '@babel/parser': 7.24.7 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -14960,7 +15008,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -14981,12 +15029,19 @@ snapshots: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - jackspeak@3.4.0: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jake@10.9.2: + dependencies: + async: 3.2.5 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + java-properties@1.0.2: {} jest-changed-files@29.7.0: @@ -15001,7 +15056,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -15021,16 +15076,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)): + jest-cli@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + create-jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -15040,16 +15095,16 @@ snapshots: - supports-color - ts-node - jest-cli@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)): + jest-cli@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + create-jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -15059,12 +15114,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)): + jest-config@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -15084,18 +15139,18 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.14.10 - ts-node: 10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3) + '@types/node': 20.14.13 + ts-node: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)): + jest-config@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -15115,8 +15170,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.14.10 - ts-node: 10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3) + '@types/node': 20.14.13 + ts-node: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -15145,7 +15200,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -15155,7 +15210,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.14.10 + '@types/node': 20.14.13 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -15191,16 +15246,16 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)))(typescript@5.3.3): + jest-mock-extended@3.0.7(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3): dependencies: - jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) ts-essentials: 10.0.1(typescript@5.3.3) typescript: 5.3.3 jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -15235,7 +15290,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -15263,7 +15318,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 chalk: 4.1.2 cjs-module-lexer: 1.3.1 collect-v8-coverage: 1.0.2 @@ -15283,15 +15338,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.7) - '@babel/types': 7.24.7 + '@babel/core': 7.25.2 + '@babel/generator': 7.25.0 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) + '@babel/types': 7.25.2 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.7) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.25.2) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -15302,14 +15357,14 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.2 + semver: 7.6.3 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -15328,7 +15383,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.10 + '@types/node': 20.14.13 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -15337,35 +15392,35 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.14.10 + '@types/node': 20.14.13 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)): + jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)): + jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -15376,7 +15431,7 @@ snapshots: jju@1.4.0: {} - jotai@2.8.4(@types/react@18.3.3)(react@18.3.1): + jotai@2.9.1(@types/react@18.3.3)(react@18.3.1): optionalDependencies: '@types/react': 18.3.3 react: 18.3.1 @@ -15445,7 +15500,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.2 + semver: 7.6.3 jsx-ast-utils@3.3.5: dependencies: @@ -15486,7 +15541,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.11.4: {} + libphonenumber-js@1.11.5: {} lie@3.1.1: dependencies: @@ -15577,7 +15632,7 @@ snapshots: lowercase-keys@2.0.0: {} - lru-cache@10.3.0: {} + lru-cache@10.4.3: {} lru-cache@4.1.5: dependencies: @@ -15596,11 +15651,11 @@ snapshots: magic-string@0.30.8: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 make-dir@4.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 make-error@1.3.6: {} @@ -15711,7 +15766,7 @@ snapshots: trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.2 mdast-util-to-markdown@2.1.0: dependencies: @@ -15811,8 +15866,8 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) micromark-extension-mdx-expression: 3.0.0 micromark-extension-mdx-jsx: 3.0.0 micromark-extension-mdx-md: 2.0.0 @@ -15937,7 +15992,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -15963,18 +16018,20 @@ snapshots: million@3.1.11: dependencies: - '@babel/core': 7.24.7 - '@babel/types': 7.24.7 + '@babel/core': 7.25.2 + '@babel/types': 7.25.2 '@rollup/pluginutils': 5.1.0 kleur: 4.1.5 - undici: 6.19.2 - unplugin: 1.11.0 + undici: 6.19.5 + unplugin: 1.12.0 transitivePeerDependencies: - rollup - supports-color mime-db@1.52.0: {} + mime-db@1.53.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 @@ -15983,7 +16040,7 @@ snapshots: mime@2.6.0: {} - mime@4.0.3: {} + mime@4.0.4: {} mimic-fn@2.1.0: {} @@ -16005,6 +16062,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimatch@8.0.4: dependencies: brace-expansion: 2.0.1 @@ -16026,7 +16087,7 @@ snapshots: browser-or-node: 2.1.1 buffer-crc32: 1.0.0 eventemitter3: 5.0.1 - fast-xml-parser: 4.4.0 + fast-xml-parser: 4.4.1 ipaddr.js: 2.2.0 lodash: 4.17.21 mime-types: 2.1.35 @@ -16093,16 +16154,16 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - next@13.5.6(@babel/core@7.24.7)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@13.5.6(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 13.5.6 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001639 + caniuse-lite: 1.0.30001645 postcss: 8.4.31 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(@babel/core@7.24.7)(react@18.3.1) + styled-jsx: 5.1.1(@babel/core@7.25.2)(react@18.3.1) watchpack: 2.4.0 optionalDependencies: '@next/swc-darwin-arm64': 13.5.6 @@ -16131,7 +16192,7 @@ snapshots: node-abi@3.65.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 node-abort-controller@3.1.1: {} @@ -16158,18 +16219,18 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.14: {} + node-releases@2.0.18: {} nodemailer@6.9.14: {} nodemon@3.1.4: dependencies: chokidar: 3.6.0 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 7.6.2 + semver: 7.6.3 simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.1 @@ -16185,7 +16246,7 @@ snapshots: normalize-package-data@6.0.2: dependencies: hosted-git-info: 7.0.2 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -16210,7 +16271,7 @@ snapshots: dependencies: path-key: 4.0.0 - npm@10.8.1: {} + npm@10.8.2: {} nth-check@2.1.1: dependencies: @@ -16257,12 +16318,6 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.3 - object.hasown@1.1.4: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - object.values@1.2.0: dependencies: call-bind: 1.0.7 @@ -16395,7 +16450,7 @@ snapshots: dependencies: '@babel/code-frame': 7.24.7 index-to-position: 0.1.2 - type-fest: 4.20.1 + type-fest: 4.23.0 parse-ms@4.0.0: {} @@ -16453,7 +16508,7 @@ snapshots: path-scurry@1.11.1: dependencies: - lru-cache: 10.3.0 + lru-cache: 10.4.3 minipass: 7.1.2 path-to-regexp@0.1.7: {} @@ -16493,14 +16548,14 @@ snapshots: pino-std-serializers@7.0.0: {} - pino@9.2.0: + pino@9.3.2: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 1.2.0 pino-std-serializers: 7.0.0 - process-warning: 3.0.0 + process-warning: 4.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 @@ -16526,32 +16581,32 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.39): + postcss-import@15.1.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.39): + postcss-js@4.0.1(postcss@8.4.40): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.39 + postcss: 8.4.40 - postcss-load-config@4.0.2(postcss@8.4.39)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)): + postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: lilconfig: 3.1.2 - yaml: 2.4.5 + yaml: 2.5.0 optionalDependencies: - postcss: 8.4.39 - ts-node: 10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3) + postcss: 8.4.40 + ts-node: 10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4) - postcss-nested@6.0.1(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.1.0 + postcss: 8.4.40 + postcss-selector-parser: 6.1.1 - postcss-selector-parser@6.1.0: + postcss-selector-parser@6.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -16564,7 +16619,7 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 - postcss@8.4.39: + postcss@8.4.40: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -16576,18 +16631,18 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-packagejson@2.5.0(prettier@3.3.2): + prettier-plugin-packagejson@2.5.1(prettier@3.3.3): dependencies: sort-package-json: 2.10.0 - synckit: 0.9.0 + synckit: 0.9.1 optionalDependencies: - prettier: 3.3.2 + prettier: 3.3.3 - prettier-plugin-tailwindcss@0.5.14(prettier@3.3.2): + prettier-plugin-tailwindcss@0.5.14(prettier@3.3.3): dependencies: - prettier: 3.3.2 + prettier: 3.3.3 - prettier@3.3.2: {} + prettier@3.3.3: {} pretty-format@29.7.0: dependencies: @@ -16595,7 +16650,7 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - pretty-ms@9.0.0: + pretty-ms@9.1.0: dependencies: parse-ms: 4.0.0 @@ -16607,6 +16662,8 @@ snapshots: process-warning@3.0.0: {} + process-warning@4.0.0: {} + process@0.11.10: {} progress@2.0.3: {} @@ -16650,7 +16707,7 @@ snapshots: dependencies: side-channel: 1.0.6 - qs@6.12.2: + qs@6.12.3: dependencies: side-channel: 1.0.6 @@ -16748,7 +16805,7 @@ snapshots: dependencies: find-up-simple: 1.0.0 read-pkg: 9.0.1 - type-fest: 4.20.1 + type-fest: 4.23.0 read-pkg-up@7.0.1: dependencies: @@ -16768,7 +16825,7 @@ snapshots: '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.2 parse-json: 8.1.0 - type-fest: 4.20.1 + type-fest: 4.23.0 unicorn-magic: 0.1.0 readable-stream@2.3.8: @@ -16805,14 +16862,14 @@ snapshots: real-require@0.2.0: {} - redis@4.6.14: + redis@4.7.0: dependencies: - '@redis/bloom': 1.2.0(@redis/client@1.5.16) - '@redis/client': 1.5.16 - '@redis/graph': 1.1.1(@redis/client@1.5.16) - '@redis/json': 1.0.6(@redis/client@1.5.16) - '@redis/search': 1.1.6(@redis/client@1.5.16) - '@redis/time-series': 1.0.5(@redis/client@1.5.16) + '@redis/bloom': 1.2.0(@redis/client@1.6.0) + '@redis/client': 1.6.0 + '@redis/graph': 1.1.1(@redis/client@1.6.0) + '@redis/json': 1.0.7(@redis/client@1.6.0) + '@redis/search': 1.2.0(@redis/client@1.6.0) + '@redis/time-series': 1.1.0(@redis/client@1.6.0) reflect-metadata@0.2.2: {} @@ -16824,7 +16881,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 globalthis: 1.0.4 - which-builtin-type: 1.1.3 + which-builtin-type: 1.1.4 regenerate-unicode-properties@10.1.1: dependencies: @@ -16836,7 +16893,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.7 + '@babel/runtime': 7.25.0 regexp-tree@0.1.27: {} @@ -16892,7 +16949,7 @@ snapshots: '@types/mdast': 4.0.4 mdast-util-to-hast: 13.2.0 unified: 11.0.5 - vfile: 6.0.1 + vfile: 6.0.2 repeat-string@1.6.1: {} @@ -16916,18 +16973,18 @@ snapshots: resolve@1.19.0: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 resolve@1.22.8: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.5: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -17019,16 +17076,16 @@ snapshots: secure-json-parse@2.7.0: {} - semantic-release@24.0.0(typescript@5.5.3): + semantic-release@24.0.0(typescript@5.5.4): dependencies: - '@semantic-release/commit-analyzer': 13.0.0(semantic-release@24.0.0(typescript@5.5.3)) + '@semantic-release/commit-analyzer': 13.0.0(semantic-release@24.0.0(typescript@5.5.4)) '@semantic-release/error': 4.0.0 - '@semantic-release/github': 10.0.7(semantic-release@24.0.0(typescript@5.5.3)) - '@semantic-release/npm': 12.0.1(semantic-release@24.0.0(typescript@5.5.3)) - '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.0.0(typescript@5.5.3)) + '@semantic-release/github': 10.1.3(semantic-release@24.0.0(typescript@5.5.4)) + '@semantic-release/npm': 12.0.1(semantic-release@24.0.0(typescript@5.5.4)) + '@semantic-release/release-notes-generator': 14.0.1(semantic-release@24.0.0(typescript@5.5.4)) aggregate-error: 5.0.0 - cosmiconfig: 9.0.0(typescript@5.5.3) - debug: 4.3.5(supports-color@5.5.0) + cosmiconfig: 9.0.0(typescript@5.5.4) + debug: 4.3.6(supports-color@5.5.0) env-ci: 11.0.0 execa: 9.3.0 figures: 6.1.0 @@ -17046,7 +17103,7 @@ snapshots: p-reduce: 3.0.0 read-package-up: 11.0.0 resolve-from: 5.0.0 - semver: 7.6.2 + semver: 7.6.3 semver-diff: 4.0.0 signale: 1.4.0 yargs: 17.7.2 @@ -17056,19 +17113,19 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 semver-regex@4.0.5: {} semver-truncate@3.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 semver@5.7.2: {} semver@6.3.1: {} - semver@7.6.2: {} + semver@7.6.3: {} send@0.18.0: dependencies: @@ -17131,7 +17188,7 @@ snapshots: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.6.2 + semver: 7.6.3 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.4 '@img/sharp-darwin-x64': 0.33.4 @@ -17188,7 +17245,7 @@ snapshots: simple-update-notifier@2.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 sisteransi@1.0.5: {} @@ -17209,7 +17266,7 @@ snapshots: socket.io-adapter@2.5.5: dependencies: - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) ws: 8.17.1 transitivePeerDependencies: - bufferutil @@ -17219,7 +17276,7 @@ snapshots: socket.io-client@4.7.5: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) engine.io-client: 6.5.4 socket.io-parser: 4.2.4 transitivePeerDependencies: @@ -17230,7 +17287,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -17239,7 +17296,7 @@ snapshots: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) engine.io: 6.5.5 socket.io-adapter: 2.5.5 socket.io-parser: 4.2.4 @@ -17275,7 +17332,7 @@ snapshots: git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 - semver: 7.6.2 + semver: 7.6.3 sort-object-keys: 1.1.3 source-map-js@1.2.0: {} @@ -17384,6 +17441,11 @@ snapshots: set-function-name: 2.0.2 side-channel: 1.0.6 + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 @@ -17461,18 +17523,18 @@ snapshots: dependencies: inline-style-parser: 0.2.3 - styled-jsx@5.1.1(@babel/core@7.24.7)(react@18.3.1): + styled-jsx@5.1.1(@babel/core@7.25.2)(react@18.3.1): dependencies: client-only: 0.0.1 react: 18.3.1 optionalDependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 sucrase@3.35.0: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.2 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -17487,14 +17549,14 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.5(supports-color@5.5.0) + debug: 4.3.6(supports-color@5.5.0) fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 methods: 1.1.2 mime: 2.6.0 - qs: 6.12.2 - semver: 7.6.2 + qs: 6.12.3 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -17540,25 +17602,18 @@ snapshots: symbol-observable@4.0.0: {} - synckit@0.8.8: - dependencies: - '@pkgr/core': 0.1.1 - tslib: 2.6.3 - - synckit@0.9.0: + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.3 - tailwind-merge@2.3.0: - dependencies: - '@babel/runtime': 7.24.7 + tailwind-merge@2.4.0: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4))): dependencies: - tailwindcss: 3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + tailwindcss: 3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) - tailwindcss@3.4.4(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)): + tailwindcss@3.4.7(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -17574,12 +17629,12 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.1 - postcss: 8.4.39 - postcss-import: 15.1.0(postcss@8.4.39) - postcss-js: 4.0.1(postcss@8.4.39) - postcss-load-config: 4.0.2(postcss@8.4.39)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) - postcss-nested: 6.0.1(postcss@8.4.39) - postcss-selector-parser: 6.1.0 + postcss: 8.4.40 + postcss-import: 15.1.0(postcss@8.4.40) + postcss-js: 4.0.1(postcss@8.4.40) + postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) + postcss-nested: 6.2.0(postcss@8.4.40) + postcss-selector-parser: 6.1.1 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -17596,21 +17651,21 @@ snapshots: type-fest: 2.19.0 unique-string: 3.0.0 - terser-webpack-plugin@5.3.10(@swc/core@1.7.2)(webpack@5.92.1(@swc/core@1.7.2)): + terser-webpack-plugin@5.3.10(@swc/core@1.7.3)(webpack@5.92.1(@swc/core@1.7.3)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.31.1 - webpack: 5.92.1(@swc/core@1.7.2) + terser: 5.31.3 + webpack: 5.92.1(@swc/core@1.7.3) optionalDependencies: - '@swc/core': 1.7.2(@swc/helpers@0.5.2) + '@swc/core': 1.7.3(@swc/helpers@0.5.2) - terser@5.31.1: + terser@5.31.3: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.12.0 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -17692,9 +17747,9 @@ snapshots: dependencies: typescript: 4.9.5 - ts-api-utils@1.3.0(typescript@5.5.3): + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: - typescript: 5.5.3 + typescript: 5.5.4 ts-essentials@10.0.1(typescript@5.3.3): optionalDependencies: @@ -17702,61 +17757,63 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)))(typescript@5.3.3): + ts-jest@29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)))(typescript@5.3.3): dependencies: bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3)) + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.2 + semver: 7.6.3 typescript: 5.3.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) + babel-jest: 29.7.0(@babel/core@7.25.2) - ts-jest@29.1.5(@babel/core@7.24.7)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.7))(jest@29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)))(typescript@5.5.3): + ts-jest@29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)))(typescript@5.5.4): dependencies: bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.14.10)(ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3)) + jest: 29.7.0(@types/node@20.14.13)(ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.2 - typescript: 5.5.3 + semver: 7.6.3 + typescript: 5.5.4 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.24.7 + '@babel/core': 7.25.2 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.7) + babel-jest: 29.7.0(@babel/core@7.25.2) - ts-loader@9.5.1(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.2)): + ts-loader@9.5.1(typescript@5.3.3)(webpack@5.92.1(@swc/core@1.7.3)): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 micromatch: 4.0.7 - semver: 7.6.2 + semver: 7.6.3 source-map: 0.7.4 typescript: 5.3.3 - webpack: 5.92.1(@swc/core@1.7.2) + webpack: 5.92.1(@swc/core@1.7.3) - ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.3.3): + ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.3.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.10 - acorn: 8.12.0 + '@types/node': 20.14.13 + acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 @@ -17766,33 +17823,33 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.2(@swc/helpers@0.5.2) + '@swc/core': 1.7.3(@swc/helpers@0.5.2) optional: true - ts-node@10.9.2(@swc/core@1.7.2)(@types/node@20.14.10)(typescript@5.5.3): + ts-node@10.9.2(@swc/core@1.7.3)(@types/node@20.14.13)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.14.10 - acorn: 8.12.0 + '@types/node': 20.14.13 + acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.3 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.2(@swc/helpers@0.5.2) + '@swc/core': 1.7.3(@swc/helpers@0.5.2) tsconfig-paths-webpack-plugin@4.1.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 tsconfig-paths: 4.2.0 tsconfig-paths@3.15.0: @@ -17862,7 +17919,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.20.1: {} + type-fest@4.23.0: {} type-is@1.6.18: dependencies: @@ -17907,9 +17964,9 @@ snapshots: typescript@5.3.3: {} - typescript@5.5.3: {} + typescript@5.5.4: {} - uglify-js@3.18.0: + uglify-js@3.19.1: optional: true uid2@0.0.4: {} @@ -17931,7 +17988,7 @@ snapshots: undici-types@5.26.5: {} - undici@6.19.2: {} + undici@6.19.5: {} unicode-canonical-property-names-ecmascript@2.0.0: {} @@ -17956,7 +18013,7 @@ snapshots: extend: 3.0.2 is-plain-obj: 4.1.0 trough: 2.2.0 - vfile: 6.0.1 + vfile: 6.0.2 unique-string@3.0.0: dependencies: @@ -18002,21 +18059,21 @@ snapshots: unplugin@1.0.1: dependencies: - acorn: 8.12.0 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.5.0 - unplugin@1.11.0: + unplugin@1.12.0: dependencies: - acorn: 8.12.0 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.2 - update-browserslist-db@1.0.16(browserslist@4.23.1): + update-browserslist-db@1.1.0(browserslist@4.23.2): dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 escalade: 3.1.2 picocolors: 1.0.1 @@ -18053,6 +18110,8 @@ snapshots: utils-merge@1.0.1: {} + uuid@10.0.0: {} + uuid@9.0.1: {} v8-compile-cache-lib@3.0.1: {} @@ -18077,7 +18136,7 @@ snapshots: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 - vfile@6.0.1: + vfile@6.0.2: dependencies: '@types/unist': 3.0.2 unist-util-stringify-position: 4.0.0 @@ -18117,18 +18176,18 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.92.1(@swc/core@1.7.2): + webpack@5.92.1(@swc/core@1.7.3): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.0 - acorn-import-attributes: 1.9.5(acorn@8.12.0) - browserslist: 4.23.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.23.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 @@ -18140,7 +18199,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.2)(webpack@5.92.1(@swc/core@1.7.2)) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.3)(webpack@5.92.1(@swc/core@1.7.3)) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -18161,7 +18220,7 @@ snapshots: is-string: 1.0.7 is-symbol: 1.0.4 - which-builtin-type@1.1.3: + which-builtin-type@1.1.4: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -18230,6 +18289,8 @@ snapshots: ws@8.17.1: {} + ws@8.18.0: {} + xml2js@0.5.0: dependencies: sax: 1.4.1 @@ -18249,7 +18310,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.4.5: {} + yaml@2.5.0: {} yargs-parser@20.2.9: {} @@ -18279,7 +18340,7 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors@2.1.0: {} + yoctocolors@2.1.1: {} zod@3.23.8: {}