diff --git a/Dockerfiles/Dockerfile.agent-provisioning b/Dockerfiles/Dockerfile.agent-provisioning index 3df1af321..2844893d6 100644 --- a/Dockerfiles/Dockerfile.agent-provisioning +++ b/Dockerfiles/Dockerfile.agent-provisioning @@ -19,6 +19,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.agent-service b/Dockerfiles/Dockerfile.agent-service index 253ec3cba..ae85a6770 100644 --- a/Dockerfiles/Dockerfile.agent-service +++ b/Dockerfiles/Dockerfile.agent-service @@ -15,6 +15,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.api-gateway b/Dockerfiles/Dockerfile.api-gateway index c687a4adb..69ac7000f 100644 --- a/Dockerfiles/Dockerfile.api-gateway +++ b/Dockerfiles/Dockerfile.api-gateway @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ # COPY package-lock.json ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.cloud-wallet b/Dockerfiles/Dockerfile.cloud-wallet index db7e31f1e..1c3160b20 100644 --- a/Dockerfiles/Dockerfile.cloud-wallet +++ b/Dockerfiles/Dockerfile.cloud-wallet @@ -9,6 +9,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.connection b/Dockerfiles/Dockerfile.connection index 5e7b6a050..0174fe803 100644 --- a/Dockerfiles/Dockerfile.connection +++ b/Dockerfiles/Dockerfile.connection @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ #COPY package-lock.json ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.geolocation b/Dockerfiles/Dockerfile.geolocation index 45d92e8f8..239275448 100644 --- a/Dockerfiles/Dockerfile.geolocation +++ b/Dockerfiles/Dockerfile.geolocation @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ #COPY package-lock.json ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.issuance b/Dockerfiles/Dockerfile.issuance index 83b6876d4..11c6cc002 100644 --- a/Dockerfiles/Dockerfile.issuance +++ b/Dockerfiles/Dockerfile.issuance @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ #COPY package-lock.json ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.ledger b/Dockerfiles/Dockerfile.ledger index 5e387abd8..4be86fc7a 100644 --- a/Dockerfiles/Dockerfile.ledger +++ b/Dockerfiles/Dockerfile.ledger @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ #COPY package-lock.json ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.notification b/Dockerfiles/Dockerfile.notification index 57e0e6d1d..718526704 100644 --- a/Dockerfiles/Dockerfile.notification +++ b/Dockerfiles/Dockerfile.notification @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ #COPY package-lock.json ./ # Install dependencies diff --git a/Dockerfiles/Dockerfile.organization b/Dockerfiles/Dockerfile.organization index bc0b72869..0b1fe5486 100644 --- a/Dockerfiles/Dockerfile.organization +++ b/Dockerfiles/Dockerfile.organization @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.seed b/Dockerfiles/Dockerfile.seed index b7c6611b7..8a02b1e4a 100644 --- a/Dockerfiles/Dockerfile.seed +++ b/Dockerfiles/Dockerfile.seed @@ -13,6 +13,7 @@ RUN chmod +x /app/libs/prisma-service/prisma/scripts/geo_location_data_import.sh RUN chmod +x /app/libs/prisma-service/prisma/scripts/update_client_credential_data.sh ENV PUPPETEER_SKIP_DOWNLOAD=true +COPY pnpm-workspace.yaml ./ RUN pnpm i --ignore-scripts # Run Prisma commands diff --git a/Dockerfiles/Dockerfile.user b/Dockerfiles/Dockerfile.user index 8969f6e77..8cc17d320 100644 --- a/Dockerfiles/Dockerfile.user +++ b/Dockerfiles/Dockerfile.user @@ -10,6 +10,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.utility b/Dockerfiles/Dockerfile.utility index a39aef3b8..797c47867 100644 --- a/Dockerfiles/Dockerfile.utility +++ b/Dockerfiles/Dockerfile.utility @@ -9,6 +9,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.verification b/Dockerfiles/Dockerfile.verification index 317062dd4..e6780d08b 100644 --- a/Dockerfiles/Dockerfile.verification +++ b/Dockerfiles/Dockerfile.verification @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/Dockerfiles/Dockerfile.webhook b/Dockerfiles/Dockerfile.webhook index ed52bdd1f..e2664d398 100644 --- a/Dockerfiles/Dockerfile.webhook +++ b/Dockerfiles/Dockerfile.webhook @@ -8,6 +8,7 @@ WORKDIR /app # Copy package.json and package-lock.json COPY package.json ./ +COPY pnpm-workspace.yaml ./ #COPY package-lock.json ./ ENV PUPPETEER_SKIP_DOWNLOAD=true diff --git a/apps/api-gateway/src/agent-service/agent-service.controller.ts b/apps/api-gateway/src/agent-service/agent-service.controller.ts index 90fbbb68c..f90bbb90a 100644 --- a/apps/api-gateway/src/agent-service/agent-service.controller.ts +++ b/apps/api-gateway/src/agent-service/agent-service.controller.ts @@ -55,8 +55,8 @@ const seedLength = 32; @Controller() @ApiTags('agents') @ApiBearerAuth() -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class AgentController { constructor(private readonly agentService: AgentService) {} private readonly logger = new Logger(); diff --git a/apps/api-gateway/src/agent-service/agent-service.service.ts b/apps/api-gateway/src/agent-service/agent-service.service.ts index 557027f7a..ee646dd93 100644 --- a/apps/api-gateway/src/agent-service/agent-service.service.ts +++ b/apps/api-gateway/src/agent-service/agent-service.service.ts @@ -1,5 +1,4 @@ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { user } from '@prisma/client'; import { BaseService } from 'libs/service/base.service'; import { AgentSpinupDto } from './dto/agent-service.dto'; @@ -10,6 +9,7 @@ import { CreateDidDto } from './dto/create-did.dto'; import { CreateWalletDto } from './dto/create-wallet.dto'; import { AgentConfigureDto } from './dto/agent-configure.dto'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class AgentService extends BaseService { diff --git a/apps/api-gateway/src/agent/agent.controller.ts b/apps/api-gateway/src/agent/agent.controller.ts index 164437c87..defa5baa3 100644 --- a/apps/api-gateway/src/agent/agent.controller.ts +++ b/apps/api-gateway/src/agent/agent.controller.ts @@ -16,7 +16,17 @@ import { HttpStatus } from '@nestjs/common'; import { AgentService } from './agent.service'; -import { ApiTags, ApiResponse, ApiOperation, ApiQuery, ApiBearerAuth, ApiParam, ApiUnauthorizedResponse, ApiForbiddenResponse, ApiExcludeEndpoint } from '@nestjs/swagger'; +import { + ApiTags, + ApiResponse, + ApiOperation, + ApiQuery, + ApiBearerAuth, + ApiParam, + ApiUnauthorizedResponse, + ApiForbiddenResponse, + ApiExcludeEndpoint +} from '@nestjs/swagger'; import { AuthGuard } from '@nestjs/passport'; import { WalletDetailsDto } from '../dtos/wallet-details.dto'; import { UnauthorizedErrorDto } from '../dtos/unauthorized-error.dto'; @@ -33,17 +43,19 @@ import { User } from '../authz/decorators/user.decorator'; @ApiBearerAuth() @Controller('agent') export class AgentController { - constructor(private readonly agentService: AgentService, - private readonly commonService: CommonService) { } + constructor( + private readonly agentService: AgentService, + private readonly commonService: CommonService + ) {} private readonly logger = new Logger(); /** - * - * @param user - * @param _public - * @param verkey - * @param did + * + * @param user + * @param _public + * @param verkey + * @param did * @returns List of all the DID created for the current Cloud Agent. */ @Get('/wallet/did') @@ -55,8 +67,8 @@ export class AgentController { @ApiQuery({ name: 'did', required: false }) @ApiOperation({ summary: 'List of all DID', description: 'List of all the DID created for the current Cloud Agent.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) getAllDid( @User() user: any, @Query('_public') _public: boolean, @@ -68,8 +80,8 @@ export class AgentController { } /** - * - * @param user + * + * @param user * @returns Created DID */ @Post('/wallet/did/create') @@ -78,20 +90,18 @@ export class AgentController { @SetMetadata('permissions', [CommonConstants.PERMISSION_ORG_MGMT]) @ApiOperation({ summary: 'Create a new DID', description: 'Create a new did for the current Cloud Agent wallet.' }) @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) - createLocalDid( - @User() user: any - ): Promise { + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) + createLocalDid(@User() user: any): Promise { this.logger.log(`**** Create Local Did...`); return this.agentService.createLocalDid(user); } /** - * - * @param walletUserDetails - * @param user - * @returns + * + * @param walletUserDetails + * @param user + * @returns */ @Post('/wallet/provision') @ApiTags('agent') @@ -102,12 +112,9 @@ export class AgentController { description: 'Create a new wallet and spin up your Aries Cloud Agent Python by selecting your desired network.' }) @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) - walletProvision( - @Body() walletUserDetails: WalletDetailsDto, - @User() user: object - ): Promise { + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) + walletProvision(@Body() walletUserDetails: WalletDetailsDto, @User() user: object): Promise { this.logger.log(`**** Spin up the agent...${JSON.stringify(walletUserDetails)}`); const regex = new RegExp('^[a-zA-Z0-9]+$'); @@ -115,76 +122,30 @@ export class AgentController { this.logger.error(`Wallet name in wrong format.`); throw new BadRequestException(`Please enter valid wallet name, It allows only alphanumeric values`); } - const decryptedPassword = this.commonService.decryptPassword(walletUserDetails.walletPassword); + const decryptedPassword = this.commonService.decryptPassword(walletUserDetails.walletPassword); walletUserDetails.walletPassword = decryptedPassword; return this.agentService.walletProvision(walletUserDetails, user); } - /** - * Description: Route for fetch public DID - */ - @Get('/wallet/did/public') - @ApiTags('agent') - @UseGuards(AuthGuard('jwt'), RolesGuard) - @SetMetadata('permissions', [CommonConstants.PERMISSION_ORG_MGMT]) - @ApiOperation({ summary: 'Fetch the current public DID', description: 'Fetch the current public DID.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) - getPublicDid( - @User() user: any - ): Promise { - this.logger.log(`**** Fetch public Did...`); - return this.agentService.getPublicDid(user); - } - - /** - * Description: Route for assign public DID - * @param did - */ - @Get('/wallet/did/public/:id') - @ApiTags('agent') - @UseGuards(AuthGuard('jwt'), RolesGuard) - @SetMetadata('permissions', [CommonConstants.PERMISSION_USER_MANAGEMENT]) - @ApiOperation({ summary: 'Assign public DID', description: 'Assign public DID for the current use.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) - assignPublicDid( - @Param('id') id: number, - @User() user: any - ): Promise { - this.logger.log(`**** Assign public DID...`); - this.logger.log(`user: ${user.orgId} == id: ${Number(id)}`); - - if (user.orgId === Number(id)) { - return this.agentService.assignPublicDid(id, user); - } else { - this.logger.error(`Cannot make DID public of requested organization.`); - throw new BadRequestException(`Cannot make DID public requested organization.`); - } - } - - /** * Description: Route for onboarding register role on ledger - * @param role - * @param alias - * @param verkey - * @param did + * @param role + * @param alias + * @param verkey + * @param did */ @Get('/ledger/register-nym/:id') @ApiTags('agent') @UseGuards(AuthGuard('jwt'), RolesGuard) @SetMetadata('permissions', [CommonConstants.PERMISSION_ORG_MGMT]) - @ApiOperation({ summary: 'Send a NYM registration to the ledger', description: 'Write the DID to the ledger to make that DID public.' }) + @ApiOperation({ + summary: 'Send a NYM registration to the ledger', + description: 'Write the DID to the ledger to make that DID public.' + }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) - registerNym( - @Param('id') id: string, - @User() user: IUserRequestInterface - ): Promise { + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) + registerNym(@Param('id') id: string, @User() user: IUserRequestInterface): Promise { this.logger.log(`user: ${typeof user.orgId} == id: ${typeof Number(id)}`); if (user.orgId !== id) { @@ -204,8 +165,8 @@ export class AgentController { description: 'Platform Admin can restart or stop the running Aries Agent. (Platform Admin)' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiParam({ name: 'action', enum: AgentActions }) restartStopAgent(@Param('orgId') orgId: string, @Param('action') action: string): Promise { return this.agentService.restartStopAgent(action, orgId); @@ -220,8 +181,8 @@ export class AgentController { description: 'Fetch the status of the Aries Cloud Agent.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) getAgentServerStatus(@User() user: any): Promise { this.logger.log(`**** getPlatformConfig called...`); return this.agentService.getAgentServerStatus(user); @@ -249,8 +210,8 @@ export class AgentController { description: 'List of all created Aries Cloud Agent status.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiQuery({ name: 'items_per_page', required: false }) @ApiQuery({ name: 'page', required: false }) @ApiQuery({ name: 'search_text', required: false }) @@ -265,7 +226,6 @@ export class AgentController { @Query('status') status: any, @User() user: any ): Promise { - this.logger.log(`status: ${typeof status} ${status}`); items_per_page = items_per_page || 10; diff --git a/apps/api-gateway/src/agent/agent.service.ts b/apps/api-gateway/src/agent/agent.service.ts index 7b4b63602..88bb87b31 100644 --- a/apps/api-gateway/src/agent/agent.service.ts +++ b/apps/api-gateway/src/agent/agent.service.ts @@ -3,100 +3,86 @@ /* eslint-disable no-return-await */ /* eslint-disable @typescript-eslint/explicit-function-return-type */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; +import { Injectable, Inject } from '@nestjs/common'; import { BaseService } from 'libs/service/base.service'; import { WalletDetailsDto } from '../dtos/wallet-details.dto'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class AgentService extends BaseService { - constructor( - @Inject('NATS_CLIENT') private readonly agentServiceProxy: ClientProxy, - private readonly natsClient : NATSClient - ) { - super('AgentService'); - } - - - /** - * Description: Calling agent service for get-all-did - * @param _public - * @param verkey - * @param did - */ - getAllDid(_public: boolean, verkey: string, did: string, user: any) { - this.logger.log('**** getAllDid called...'); - const payload = { _public, verkey, did, user }; - return this.natsClient.sendNats(this.agentServiceProxy, 'get-all-did', payload); - } - - /** - * Description: Calling agent service for create-local-did - */ - createLocalDid(user: any) { - this.logger.log('**** createLocalDid called...'); - return this.natsClient.sendNats(this.agentServiceProxy, 'create-local-did', user); - } - - async walletProvision(walletUserDetails: WalletDetailsDto, user: any) { - this.logger.log(`**** walletProvision called...${JSON.stringify(walletUserDetails)}`); - const payload = { walletUserDetails, user }; - return await this.natsClient.sendNats(this.agentServiceProxy, 'wallet-provision', payload); - } - - /** - * Description: Calling agent service for get-public-did - */ - getPublicDid(user: any) { - this.logger.log('**** getPublicDid called...'); - return this.natsClient.sendNats(this.agentServiceProxy, 'get-public-did', user); - } + constructor( + @Inject('NATS_CLIENT') private readonly agentServiceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { + super('AgentService'); + } - /** - * Description: Calling agent service for assign-public-did - * @param did - */ - assignPublicDid(id: number, user: any) { - this.logger.log('**** assignPublicDid called...'); - const payload = { id, user }; - return this.natsClient.sendNats(this.agentServiceProxy, 'assign-public-did-org', payload); - } + /** + * Description: Calling agent service for get-all-did + * @param _public + * @param verkey + * @param did + */ + getAllDid(_public: boolean, verkey: string, did: string, user: any) { + this.logger.log('**** getAllDid called...'); + const payload = { _public, verkey, did, user }; + return this.natsClient.sendNats(this.agentServiceProxy, 'get-all-did', payload); + } + /** + * Description: Calling agent service for create-local-did + */ + createLocalDid(user: any) { + this.logger.log('**** createLocalDid called...'); + return this.natsClient.sendNats(this.agentServiceProxy, 'create-local-did', user); + } - /** - * Description: Calling agent service for onboard-register-ledger - * @param role - * @param alias - * @param verkey - * @param did - */ - registerNym(id: string, user: any) { - this.logger.log('**** registerNym called...'); - const payload = { id, user }; - return this.natsClient.sendNats(this.agentServiceProxy, 'register-nym-org', payload); - } + async walletProvision(walletUserDetails: WalletDetailsDto, user: any) { + this.logger.log(`**** walletProvision called...${walletUserDetails.walletName}`); + const payload = { walletUserDetails, user }; + return this.natsClient.sendNats(this.agentServiceProxy, 'wallet-provision', payload); + } - restartStopAgent(action: string, orgId: string) { - const payload = { action, orgId }; - return this.natsClient.sendNats(this.agentServiceProxy, 'restart-stop-agent', payload); - } + /** + * Description: Calling agent service for onboard-register-ledger + * @param role + * @param alias + * @param verkey + * @param did + */ + registerNym(id: string, user: any) { + this.logger.log('**** registerNym called...'); + const payload = { id, user }; + return this.natsClient.sendNats(this.agentServiceProxy, 'register-nym-org', payload); + } - getAgentServerStatus(user) { + restartStopAgent(action: string, orgId: string) { + const payload = { action, orgId }; + return this.natsClient.sendNats(this.agentServiceProxy, 'restart-stop-agent', payload); + } - return this.natsClient.sendNats(this.agentServiceProxy, 'get-agent-server-status', user); - } + getAgentServerStatus(user) { + return this.natsClient.sendNats(this.agentServiceProxy, 'get-agent-server-status', user); + } - pingServiceAgent() { - this.logger.log('**** pingServiceAgent called...'); - const payload = {}; - return this.natsClient.sendNats(this.agentServiceProxy, 'ping-agent', payload); - } + pingServiceAgent() { + this.logger.log('**** pingServiceAgent called...'); + const payload = {}; + return this.natsClient.sendNats(this.agentServiceProxy, 'ping-agent', payload); + } - agentSpinupStatus(items_per_page: number, page: number, search_text: string, agentStatus: string, sortValue: string, user: any) { - this.logger.log('**** agentSpinupStatus called...'); - const payload = { items_per_page, page, search_text, agentStatus, sortValue, user }; - return this.natsClient.sendNats(this.agentServiceProxy, 'get-agent-spinup-status', payload); - } + agentSpinupStatus( + items_per_page: number, + page: number, + search_text: string, + agentStatus: string, + sortValue: string, + user: any + ) { + this.logger.log('**** agentSpinupStatus called...'); + const payload = { items_per_page, page, search_text, agentStatus, sortValue, user }; + return this.natsClient.sendNats(this.agentServiceProxy, 'get-agent-spinup-status', payload); + } } diff --git a/apps/api-gateway/src/app.module.ts b/apps/api-gateway/src/app.module.ts index 9994df54d..db0bc198b 100644 --- a/apps/api-gateway/src/app.module.ts +++ b/apps/api-gateway/src/app.module.ts @@ -80,8 +80,8 @@ export class AppModule { userContext .apply(AuthzMiddleware) .exclude( - { path: 'authz', method: RequestMethod.ALL }, - 'authz/:splat*', + // The below excludes authz with all its subpaths + { path: 'authz/(.*)', method: RequestMethod.ALL }, 'admin/subscriptions', 'registry/organizations/', 'email/user/verify', diff --git a/apps/api-gateway/src/app.service.ts b/apps/api-gateway/src/app.service.ts index 095adb165..1ffcaa3cd 100644 --- a/apps/api-gateway/src/app.service.ts +++ b/apps/api-gateway/src/app.service.ts @@ -1,12 +1,10 @@ import { Inject, Injectable } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from '../../../libs/service/base.service'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class AppService extends BaseService { - constructor( - @Inject('NATS_CLIENT') private readonly appServiceProxy: ClientProxy - ) { - super('appService'); - } + constructor(@Inject('NATS_CLIENT') private readonly appServiceProxy: ClientProxy) { + super('appService'); + } } diff --git a/apps/api-gateway/src/authz/authz.controller.ts b/apps/api-gateway/src/authz/authz.controller.ts index dbc60f931..97e306380 100644 --- a/apps/api-gateway/src/authz/authz.controller.ts +++ b/apps/api-gateway/src/authz/authz.controller.ts @@ -372,8 +372,8 @@ export class AuthzController { description: 'Retrieve sessions for the user. Based on userId.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiBearerAuth() @UseGuards(AuthGuard('jwt')) async userSessions( @@ -413,8 +413,8 @@ export class AuthzController { description: 'Delete a particular session using its sessionId' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiBearerAuth() @UseGuards(AuthGuard('jwt')) async deleteSession( diff --git a/apps/api-gateway/src/authz/authz.service.ts b/apps/api-gateway/src/authz/authz.service.ts index 1fb50dc03..a060788a4 100644 --- a/apps/api-gateway/src/authz/authz.service.ts +++ b/apps/api-gateway/src/authz/authz.service.ts @@ -1,5 +1,4 @@ import { Injectable, Inject, HttpException } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from '../../../../libs/service/base.service'; import { WebSocketGateway, WebSocketServer } from '@nestjs/websockets'; import { UserEmailVerificationDto } from '../user/dto/create-user.dto'; @@ -20,6 +19,7 @@ import { user } from '@prisma/client'; import { IRestrictedUserSession, ISessionDetails } from 'apps/user/interfaces/user.interface'; import { UserLogoutDto } from './dtos/user-logout.dto'; import type { Prisma } from '@prisma/client'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() @WebSocketGateway() export class AuthzService extends BaseService { diff --git a/apps/api-gateway/src/cloud-wallet/cloud-wallet.controller.ts b/apps/api-gateway/src/cloud-wallet/cloud-wallet.controller.ts index 393cbb536..f581c11f4 100644 --- a/apps/api-gateway/src/cloud-wallet/cloud-wallet.controller.ts +++ b/apps/api-gateway/src/cloud-wallet/cloud-wallet.controller.ts @@ -1,11 +1,40 @@ import { IResponse } from '@credebl/common/interfaces/response.interface'; import { ResponseMessages } from '@credebl/common/response-messages'; -import { Controller, Post, Logger, Body, HttpStatus, Res, UseFilters, UseGuards, Get, Param, Query, BadRequestException } from '@nestjs/common'; -import { ApiBearerAuth, ApiForbiddenResponse, ApiOperation, ApiQuery, ApiResponse, ApiTags, ApiUnauthorizedResponse } from '@nestjs/swagger'; +import { + Controller, + Post, + Logger, + Body, + HttpStatus, + Res, + UseFilters, + UseGuards, + Get, + Param, + Query, + BadRequestException +} from '@nestjs/common'; +import { + ApiBearerAuth, + ApiForbiddenResponse, + ApiOperation, + ApiQuery, + ApiResponse, + ApiTags, + ApiUnauthorizedResponse +} from '@nestjs/swagger'; import { ForbiddenErrorDto } from '../dtos/forbidden-error.dto'; import { UnauthorizedErrorDto } from '../dtos/unauthorized-error.dto'; import { CloudWalletService } from './cloud-wallet.service'; -import { AcceptOfferDto, BasicMessageDTO, CreateCloudWalletDidDto, CreateCloudWalletDto, CredentialListDto, GetAllCloudWalletConnectionsDto, ReceiveInvitationUrlDTO } from './dtos/cloudWallet.dto'; +import { + AcceptOfferDto, + BasicMessageDTO, + CreateCloudWalletDidDto, + CreateCloudWalletDto, + CredentialListDto, + GetAllCloudWalletConnectionsDto, + ReceiveInvitationUrlDTO +} from './dtos/cloudWallet.dto'; import { Response } from 'express'; import { CustomExceptionFilter } from 'apps/api-gateway/common/exception-handler'; import { ApiResponseDto } from '../dtos/apiResponse.dto'; @@ -18,512 +47,574 @@ import { Validator } from '@credebl/common/validator'; import { CommonConstants } from '@credebl/common/common.constant'; import { UserRoleGuard } from '../authz/guards/user-role.guard'; import { AcceptProofRequestDto } from './dtos/accept-proof-request.dto'; -import { IBasicMessage, IConnectionDetailsById, ICredentialDetails, IGetProofPresentation, IGetProofPresentationById, IWalletDetailsForDidList } from '@credebl/common/interfaces/cloud-wallet.interface'; +import { + IBasicMessage, + IConnectionDetailsById, + ICredentialDetails, + IGetProofPresentation, + IGetProofPresentationById, + IWalletDetailsForDidList +} from '@credebl/common/interfaces/cloud-wallet.interface'; import { CreateConnectionDto } from './dtos/create-connection.dto'; - @UseFilters(CustomExceptionFilter) @Controller() @ApiTags('cloud-wallet') @ApiBearerAuth() -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class CloudWalletController { - - private readonly logger = new Logger('cloud-wallet'); - constructor(private readonly cloudWalletService: CloudWalletService) { } - - /** - * Configure cloud base wallet - * @param cloudBaseWalletConfigure - * @param user - * @param res - * @returns success message - */ - @Post('/configure/base-wallet') - @ApiOperation({ summary: 'Configure Cloud Base Wallet', description: 'Endpoint to configure the base wallet for the cloud wallet service.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Base wallet configured successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt')) - async configureBaseWallet( - @Res() res: Response, - @Body() cloudBaseWalletConfigure: CloudBaseWalletConfigureDto, - @User() user: user - ): Promise { - - const { id, email } = user; - - cloudBaseWalletConfigure.userId = id; - cloudBaseWalletConfigure.email = email; - - const configureBaseWalletData = await this.cloudWalletService.configureBaseWallet(cloudBaseWalletConfigure); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.cloudWallet.success.configureBaseWallet, - data: configureBaseWalletData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } - - /** - * Create cloud wallet - * @param cloudWalletDetails - * @param res - * @returns Success message and wallet details - */ - @Post('/create-wallet') - @ApiOperation({ summary: 'Create Cloud Wallet', description: 'Endpoint to create a new cloud wallet for the user.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Cloud wallet created successfully', type: ApiResponseDto }) - @ApiBearerAuth() - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async createCloudWallet( - @Res() res: Response, - @Body() cloudWalletDetails: CreateCloudWalletDto, - @User() user: user - ): Promise { - const {email, id} = user; - cloudWalletDetails.email = email; - cloudWalletDetails.userId = id; - const cloudWalletData = await this.cloudWalletService.createCloudWallet(cloudWalletDetails); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.cloudWallet.success.create, - data: cloudWalletData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - - } - - /** - * Accept proof request - * @param acceptProofRequest - * @returns success message - */ - @Post('/proofs/accept-request') - @ApiOperation({ summary: 'Accept Proof Request', description: 'Endpoint to accept a proof request for the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Proof request accepted successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async acceptProofRequest( - @Res() res: Response, - @Body() acceptProofRequest: AcceptProofRequestDto, - @User() user: user - ): Promise { - const { id, email } = user; - acceptProofRequest.userId = id; - acceptProofRequest.email = email; - - const acceptProofRequestDetails = await this.cloudWalletService.acceptProofRequest(acceptProofRequest); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.cloudWallet.success.acceptProofRequest, - data: acceptProofRequestDetails - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } - - /** - * Get proof presentation by proof id - * @param proofRecordId - * @param res - * @returns success message - */ - @Get('/proofs/:proofRecordId') - @ApiOperation({ summary: 'Get Proof Presentation by ID', description: 'Endpoint to retrieve proof presentation details by proof record ID.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Proof presentation retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async getProofById( - @Param('proofRecordId') proofRecordId: string, - @Res() res: Response, - @User() user: user - ): Promise { - const { id, email } = user; - - const proofPresentationByIdPayload: IGetProofPresentationById = { - userId: id, - email, - proofRecordId - }; - - const getProofDetails = await this.cloudWalletService.getProofById(proofPresentationByIdPayload); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.getProofById, - data: getProofDetails - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Get proof presentations - * @param threadId - * @param res - * @returns success message - */ - @Get('/proofs') - @ApiOperation({ summary: 'Get Proof Presentations', description: 'Endpoint to retrieve all proof presentations, optionally filtered by thread ID.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Proof presentations retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - @ApiQuery({ - name: 'threadId', - required: false - }) - async getProofPresentation( - @Res() res: Response, - @User() user: user, - @Query('threadId') threadId?: string - ): Promise { - - const { id, email } = user; - - const proofPresentationPayload: IGetProofPresentation = { - userId: id, - email, - threadId - }; - - const getProofDetails = await this.cloudWalletService.getProofPresentation(proofPresentationPayload); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.getProofPresentation, - data: getProofDetails - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Receive invitation by URL - * @param receiveInvitation - * @param res - * @returns Response from agent - */ - @Post('/receive-invitation-url') - @ApiOperation({ summary: 'Receive Invitation by URL', description: 'Endpoint to receive an invitation using a URL for the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Invitation received successfully', type: ApiResponseDto }) - @ApiBearerAuth() - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async receiveInvitationByUrl( - @Res() res: Response, - @Body() receiveInvitation: ReceiveInvitationUrlDTO, - @User() user: user - ): Promise { - const {email, id} = user; - receiveInvitation.email = email; - receiveInvitation.userId = id; - const receiveInvitationData = await this.cloudWalletService.receiveInvitationByUrl(receiveInvitation); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.cloudWallet.success.receive, - data: receiveInvitationData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - - } - - /** - * Accept offer - * @param acceptOffer - * @param res - * @returns Response from agent - */ - @Post('/accept-offer') - @ApiOperation({ summary: 'Accept Credential Offer', description: 'Endpoint to accept a credential offer for the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Credential offer accepted successfully', type: ApiResponseDto }) - @ApiBearerAuth() - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async acceptOffer( - @Res() res: Response, - @Body() acceptOffer: AcceptOfferDto, - @User() user: user - ): Promise { - const {email, id} = user; - acceptOffer.email = email; - acceptOffer.userId = id; - const receiveInvitationData = await this.cloudWalletService.acceptOffer(acceptOffer); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.cloudWallet.success.receive, - data: receiveInvitationData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - - } - - /** - * Create did - * @param createDidDto - * @param res - * @returns did - */ - @Post('/did') - @ApiOperation({ summary: 'Create DID', description: 'Endpoint to create a new DID (Decentralized Identifier) for the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'DID created successfully', type: ApiResponseDto }) - @ApiBearerAuth() - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async createDid( - @Body() createDidDto: CreateCloudWalletDidDto, - @User() user: user, - @Res() res: Response - ): Promise { - Validator.validateDid(createDidDto); - const {email, id} = user; - createDidDto.email = email; - createDidDto.userId = id; - if (createDidDto.seed && CommonConstants.SEED_LENGTH !== createDidDto.seed.length) { - throw new BadRequestException(ResponseMessages.agent.error.seedChar, { - cause: new Error(), - description: ResponseMessages.errorMessages.badRequest - }); - } - - const didDetails = await this.cloudWalletService.createDid(createDidDto); - - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.agent.success.createDid, - data: didDetails - }; - - return res.status(HttpStatus.CREATED).json(finalResponse); - } - - /** - * Get DID list by organization id - * @param res - * @returns DID list - */ - @Get('/did') - @ApiOperation({ summary: 'Get DID List', description: 'Endpoint to retrieve the list of DIDs associated with the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'DID list retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async getDidList( - @Res() res: Response, - @User() user: user - ): Promise { - const { id, email } = user; - - const walletDetails: IWalletDetailsForDidList = { - userId: id, - email - }; - - const didListDetails = await this.cloudWalletService.getDidList(walletDetails); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.didList, - data: didListDetails - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Create connection invitation - * @param createConnection - * @param res - * @returns success message - */ - @Post('/connections/invitation') - @ApiOperation({ summary: 'Create Connection Invitation', description: 'Endpoint to create a connection invitation for the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Connection invitation created successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async createConnection( - @Res() res: Response, - @Body() createConnection: CreateConnectionDto, - @User() user: user - ): Promise { - const { id, email } = user; - createConnection.userId = id; - createConnection.email = email; - - const createConnectionDetails = await this.cloudWalletService.createConnection(createConnection); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.cloudWallet.success.createConnection, - data: createConnectionDetails - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } - - /** - * Get connection by connection id - * @param connectionId - * @param res - * @returns connection details - */ - @Get('/connection/:connectionId') - @ApiOperation({ summary: 'Get Connection by ID', description: 'Endpoint to retrieve connection details by connection ID.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Connection details retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async getconnectionById( - @Param('connectionId') connectionId: string, - @Res() res: Response, - @User() user: user - ): Promise { - const { id, email } = user; - - const connectionDetails: IConnectionDetailsById = { - userId: id, - email, - connectionId - }; - - const connectionDetailResponse = await this.cloudWalletService.getconnectionById(connectionDetails); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.connectionById, - data: connectionDetailResponse - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Get all wallet connections - * @param connectionListQueryOptions - * @param res - * @returns connection list - */ - @Get('/connections') - @ApiOperation({ summary: 'Get All Wallet Connections', description: 'Endpoint to retrieve all connections associated with the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Connections retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async getAllconnectionById( - @Query() connectionListQueryOptions: GetAllCloudWalletConnectionsDto, - @Res() res: Response, - @User() user: user - ): Promise { - const { id, email } = user; - - connectionListQueryOptions.userId = id; - connectionListQueryOptions.email = email; - - const connectionDetailResponse = await this.cloudWalletService.getAllconnectionById(connectionListQueryOptions); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.connectionList, - data: connectionDetailResponse - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Get credential list by tenant id - * @param credentialListQueryOptions - * @param res - * @returns Credential list - */ - @Get('/credential') - @ApiOperation({ summary: 'Get Credential List', description: 'Endpoint to retrieve the list of credentials associated with the cloud wallet.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Credential list retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async getCredentialList( - @Query() credentialListQueryOptions: CredentialListDto, - @Res() res: Response, - @User() user: user - ): Promise { - const { id, email } = user; - - credentialListQueryOptions.userId = id; - credentialListQueryOptions.email = email; - - const connectionDetailResponse = await this.cloudWalletService.getCredentialList(credentialListQueryOptions); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.credentials, - data: connectionDetailResponse - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Get credential by credential record id - * @param credentialRecordId - * @param res - * @returns Credential details - */ - @Get('/credential/:credentialRecordId') - @ApiOperation({ summary: 'Get Credential by Record ID', description: 'Endpoint to retrieve credential details by credential record ID.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Credential details retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async getCredentialByCredentialRecordId( - @Param('credentialRecordId') credentialRecordId: string, - @Res() res: Response, - @User() user: user - ): Promise { - const { id, email } = user; - - const credentialDetails: ICredentialDetails = { - userId: id, - email, - credentialRecordId - }; - - const connectionDetailResponse = await this.cloudWalletService.getCredentialByCredentialRecordId(credentialDetails); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.credentialByRecordId, - data: connectionDetailResponse - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Get basic message by connection id - * @param connectionId - * @param res - * @returns Basic message details - */ - @Get('/basic-message/:connectionId') - @ApiOperation({ summary: 'Get Basic Message by Connection ID', description: 'Endpoint to retrieve basic message details by connection ID.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Basic message details retrieved successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async getBasicMessageByConnectionId( - @Param('connectionId') connectionId: string, - @Res() res: Response, - @User() user: user - ): Promise { - const { id, email } = user; - - const connectionDetails: IBasicMessage = { - userId: id, - email, - connectionId - }; - - const basicMessageDetailResponse = await this.cloudWalletService.getBasicMessageByConnectionId(connectionDetails); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.cloudWallet.success.basicMessageByConnectionId, - data: basicMessageDetailResponse - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Send basic message - * @param connectionId - * @param messageDetails - * @param res - * @returns success message - */ - @Post('/basic-message/:connectionId') - @ApiOperation({ summary: 'Send Basic Message', description: 'Endpoint to send a basic message to a connection.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Basic message sent successfully', type: ApiResponseDto }) - @UseGuards(AuthGuard('jwt'), UserRoleGuard) - async sendBasicMessage( - @Param('connectionId') connectionId: string, - @Res() res: Response, - @Body() messageDetails: BasicMessageDTO, - @User() user: user - ): Promise { - const { id, email } = user; - messageDetails.userId = id; - messageDetails.email = email; - messageDetails.connectionId = connectionId; - const basicMessageDetails = await this.cloudWalletService.sendBasicMessage(messageDetails); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.cloudWallet.success.basicMessage, - data: basicMessageDetails - }; - return res.status(HttpStatus.CREATED).json(finalResponse); + private readonly logger = new Logger('cloud-wallet'); + constructor(private readonly cloudWalletService: CloudWalletService) {} + + /** + * Configure cloud base wallet + * @param cloudBaseWalletConfigure + * @param user + * @param res + * @returns success message + */ + @Post('/configure/base-wallet') + @ApiOperation({ + summary: 'Configure Cloud Base Wallet', + description: 'Endpoint to configure the base wallet for the cloud wallet service.' + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Base wallet configured successfully', type: ApiResponseDto }) + @UseGuards(AuthGuard('jwt')) + async configureBaseWallet( + @Res() res: Response, + @Body() cloudBaseWalletConfigure: CloudBaseWalletConfigureDto, + @User() user: user + ): Promise { + const { id, email } = user; + + cloudBaseWalletConfigure.userId = id; + cloudBaseWalletConfigure.email = email; + + const configureBaseWalletData = await this.cloudWalletService.configureBaseWallet(cloudBaseWalletConfigure); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.cloudWallet.success.configureBaseWallet, + data: configureBaseWalletData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + + /** + * Create cloud wallet + * @param cloudWalletDetails + * @param res + * @returns Success message and wallet details + */ + @Post('/create-wallet') + @ApiOperation({ summary: 'Create Cloud Wallet', description: 'Endpoint to create a new cloud wallet for the user.' }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Cloud wallet created successfully', type: ApiResponseDto }) + @ApiBearerAuth() + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async createCloudWallet( + @Res() res: Response, + @Body() cloudWalletDetails: CreateCloudWalletDto, + @User() user: user + ): Promise { + const { email, id } = user; + cloudWalletDetails.email = email; + cloudWalletDetails.userId = id; + const cloudWalletData = await this.cloudWalletService.createCloudWallet(cloudWalletDetails); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.cloudWallet.success.create, + data: cloudWalletData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + + /** + * Accept proof request + * @param acceptProofRequest + * @returns success message + */ + @Post('/proofs/accept-request') + @ApiOperation({ + summary: 'Accept Proof Request', + description: 'Endpoint to accept a proof request for the cloud wallet.' + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Proof request accepted successfully', type: ApiResponseDto }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async acceptProofRequest( + @Res() res: Response, + @Body() acceptProofRequest: AcceptProofRequestDto, + @User() user: user + ): Promise { + const { id, email } = user; + acceptProofRequest.userId = id; + acceptProofRequest.email = email; + + const acceptProofRequestDetails = await this.cloudWalletService.acceptProofRequest(acceptProofRequest); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.cloudWallet.success.acceptProofRequest, + data: acceptProofRequestDetails + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + + /** + * Get proof presentation by proof id + * @param proofRecordId + * @param res + * @returns success message + */ + @Get('/proofs/:proofRecordId') + @ApiOperation({ + summary: 'Get Proof Presentation by ID', + description: 'Endpoint to retrieve proof presentation details by proof record ID.' + }) + @ApiResponse({ + status: HttpStatus.OK, + description: 'Proof presentation retrieved successfully', + type: ApiResponseDto + }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async getProofById( + @Param('proofRecordId') proofRecordId: string, + @Res() res: Response, + @User() user: user + ): Promise { + const { id, email } = user; + + const proofPresentationByIdPayload: IGetProofPresentationById = { + userId: id, + email, + proofRecordId + }; + + const getProofDetails = await this.cloudWalletService.getProofById(proofPresentationByIdPayload); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.getProofById, + data: getProofDetails + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Get proof presentations + * @param threadId + * @param res + * @returns success message + */ + @Get('/proofs') + @ApiOperation({ + summary: 'Get Proof Presentations', + description: 'Endpoint to retrieve all proof presentations, optionally filtered by thread ID.' + }) + @ApiResponse({ + status: HttpStatus.OK, + description: 'Proof presentations retrieved successfully', + type: ApiResponseDto + }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + @ApiQuery({ + name: 'threadId', + required: false + }) + async getProofPresentation( + @Res() res: Response, + @User() user: user, + @Query('threadId') threadId?: string + ): Promise { + const { id, email } = user; + + const proofPresentationPayload: IGetProofPresentation = { + userId: id, + email, + threadId + }; + + const getProofDetails = await this.cloudWalletService.getProofPresentation(proofPresentationPayload); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.getProofPresentation, + data: getProofDetails + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Receive invitation by URL + * @param receiveInvitation + * @param res + * @returns Response from agent + */ + @Post('/receive-invitation-url') + @ApiOperation({ + summary: 'Receive Invitation by URL', + description: 'Endpoint to receive an invitation using a URL for the cloud wallet.' + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Invitation received successfully', type: ApiResponseDto }) + @ApiBearerAuth() + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async receiveInvitationByUrl( + @Res() res: Response, + @Body() receiveInvitation: ReceiveInvitationUrlDTO, + @User() user: user + ): Promise { + const { email, id } = user; + receiveInvitation.email = email; + receiveInvitation.userId = id; + const receiveInvitationData = await this.cloudWalletService.receiveInvitationByUrl(receiveInvitation); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.cloudWallet.success.receive, + data: receiveInvitationData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + + /** + * Accept offer + * @param acceptOffer + * @param res + * @returns Response from agent + */ + @Post('/accept-offer') + @ApiOperation({ + summary: 'Accept Credential Offer', + description: 'Endpoint to accept a credential offer for the cloud wallet.' + }) + @ApiResponse({ + status: HttpStatus.CREATED, + description: 'Credential offer accepted successfully', + type: ApiResponseDto + }) + @ApiBearerAuth() + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async acceptOffer(@Res() res: Response, @Body() acceptOffer: AcceptOfferDto, @User() user: user): Promise { + const { email, id } = user; + acceptOffer.email = email; + acceptOffer.userId = id; + const receiveInvitationData = await this.cloudWalletService.acceptOffer(acceptOffer); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.cloudWallet.success.receive, + data: receiveInvitationData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + + /** + * Create did + * @param createDidDto + * @param res + * @returns did + */ + @Post('/did') + @ApiOperation({ + summary: 'Create DID', + description: 'Endpoint to create a new DID (Decentralized Identifier) for the cloud wallet.' + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'DID created successfully', type: ApiResponseDto }) + @ApiBearerAuth() + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async createDid( + @Body() createDidDto: CreateCloudWalletDidDto, + @User() user: user, + @Res() res: Response + ): Promise { + Validator.validateDid(createDidDto); + const { email, id } = user; + createDidDto.email = email; + createDidDto.userId = id; + if (createDidDto.seed && CommonConstants.SEED_LENGTH !== createDidDto.seed.length) { + throw new BadRequestException(ResponseMessages.agent.error.seedChar, { + cause: new Error(), + description: ResponseMessages.errorMessages.badRequest + }); } + const didDetails = await this.cloudWalletService.createDid(createDidDto); + + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.agent.success.createDid, + data: didDetails + }; + + return res.status(HttpStatus.CREATED).json(finalResponse); + } + + /** + * Get DID list by organization id + * @param res + * @returns DID list + */ + @Get('/did') + @ApiOperation({ + summary: 'Get DID List', + description: 'Endpoint to retrieve the list of DIDs associated with the cloud wallet.' + }) + @ApiResponse({ status: HttpStatus.OK, description: 'DID list retrieved successfully', type: ApiResponseDto }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async getDidList(@Res() res: Response, @User() user: user): Promise { + const { id, email } = user; + + const walletDetails: IWalletDetailsForDidList = { + userId: id, + email + }; + + const didListDetails = await this.cloudWalletService.getDidList(walletDetails); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.didList, + data: didListDetails + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Create connection invitation + * @param createConnection + * @param res + * @returns success message + */ + @Post('/connections/invitation') + @ApiOperation({ + summary: 'Create Connection Invitation', + description: 'Endpoint to create a connection invitation for the cloud wallet.' + }) + @ApiResponse({ + status: HttpStatus.CREATED, + description: 'Connection invitation created successfully', + type: ApiResponseDto + }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async createConnection( + @Res() res: Response, + @Body() createConnection: CreateConnectionDto, + @User() user: user + ): Promise { + const { id, email } = user; + createConnection.userId = id; + createConnection.email = email; + + const createConnectionDetails = await this.cloudWalletService.createConnection(createConnection); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.cloudWallet.success.createConnection, + data: createConnectionDetails + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + + /** + * Get connection by connection id + * @param connectionId + * @param res + * @returns connection details + */ + @Get('/connection/:connectionId') + @ApiOperation({ + summary: 'Get Connection by ID', + description: 'Endpoint to retrieve connection details by connection ID.' + }) + @ApiResponse({ + status: HttpStatus.OK, + description: 'Connection details retrieved successfully', + type: ApiResponseDto + }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async getconnectionById( + @Param('connectionId') connectionId: string, + @Res() res: Response, + @User() user: user + ): Promise { + const { id, email } = user; + + const connectionDetails: IConnectionDetailsById = { + userId: id, + email, + connectionId + }; + + const connectionDetailResponse = await this.cloudWalletService.getconnectionById(connectionDetails); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.connectionById, + data: connectionDetailResponse + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Get all wallet connections + * @param connectionListQueryOptions + * @param res + * @returns connection list + */ + @Get('/connections') + @ApiOperation({ + summary: 'Get All Wallet Connections', + description: 'Endpoint to retrieve all connections associated with the cloud wallet.' + }) + @ApiResponse({ status: HttpStatus.OK, description: 'Connections retrieved successfully', type: ApiResponseDto }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async getAllconnectionById( + @Query() connectionListQueryOptions: GetAllCloudWalletConnectionsDto, + @Res() res: Response, + @User() user: user + ): Promise { + const { id, email } = user; + + connectionListQueryOptions.userId = id; + connectionListQueryOptions.email = email; + + const connectionDetailResponse = await this.cloudWalletService.getAllconnectionById(connectionListQueryOptions); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.connectionList, + data: connectionDetailResponse + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Get credential list by tenant id + * @param credentialListQueryOptions + * @param res + * @returns Credential list + */ + @Get('/credential') + @ApiOperation({ + summary: 'Get Credential List', + description: 'Endpoint to retrieve the list of credentials associated with the cloud wallet.' + }) + @ApiResponse({ status: HttpStatus.OK, description: 'Credential list retrieved successfully', type: ApiResponseDto }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async getCredentialList( + @Query() credentialListQueryOptions: CredentialListDto, + @Res() res: Response, + @User() user: user + ): Promise { + const { id, email } = user; + + credentialListQueryOptions.userId = id; + credentialListQueryOptions.email = email; + + const connectionDetailResponse = await this.cloudWalletService.getCredentialList(credentialListQueryOptions); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.credentials, + data: connectionDetailResponse + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Get credential by credential record id + * @param credentialRecordId + * @param res + * @returns Credential details + */ + @Get('/credential/:credentialRecordId') + @ApiOperation({ + summary: 'Get Credential by Record ID', + description: 'Endpoint to retrieve credential details by credential record ID.' + }) + @ApiResponse({ + status: HttpStatus.OK, + description: 'Credential details retrieved successfully', + type: ApiResponseDto + }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async getCredentialByCredentialRecordId( + @Param('credentialRecordId') credentialRecordId: string, + @Res() res: Response, + @User() user: user + ): Promise { + const { id, email } = user; + + const credentialDetails: ICredentialDetails = { + userId: id, + email, + credentialRecordId + }; + + const connectionDetailResponse = await this.cloudWalletService.getCredentialByCredentialRecordId(credentialDetails); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.credentialByRecordId, + data: connectionDetailResponse + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Get basic message by connection id + * @param connectionId + * @param res + * @returns Basic message details + */ + @Get('/basic-message/:connectionId') + @ApiOperation({ + summary: 'Get Basic Message by Connection ID', + description: 'Endpoint to retrieve basic message details by connection ID.' + }) + @ApiResponse({ + status: HttpStatus.OK, + description: 'Basic message details retrieved successfully', + type: ApiResponseDto + }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async getBasicMessageByConnectionId( + @Param('connectionId') connectionId: string, + @Res() res: Response, + @User() user: user + ): Promise { + const { id, email } = user; + + const connectionDetails: IBasicMessage = { + userId: id, + email, + connectionId + }; + + const basicMessageDetailResponse = await this.cloudWalletService.getBasicMessageByConnectionId(connectionDetails); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.cloudWallet.success.basicMessageByConnectionId, + data: basicMessageDetailResponse + }; + return res.status(HttpStatus.OK).json(finalResponse); + } + + /** + * Send basic message + * @param connectionId + * @param messageDetails + * @param res + * @returns success message + */ + @Post('/basic-message/:connectionId') + @ApiOperation({ summary: 'Send Basic Message', description: 'Endpoint to send a basic message to a connection.' }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Basic message sent successfully', type: ApiResponseDto }) + @UseGuards(AuthGuard('jwt'), UserRoleGuard) + async sendBasicMessage( + @Param('connectionId') connectionId: string, + @Res() res: Response, + @Body() messageDetails: BasicMessageDTO, + @User() user: user + ): Promise { + const { id, email } = user; + messageDetails.userId = id; + messageDetails.email = email; + messageDetails.connectionId = connectionId; + const basicMessageDetails = await this.cloudWalletService.sendBasicMessage(messageDetails); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.cloudWallet.success.basicMessage, + data: basicMessageDetails + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } } diff --git a/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts b/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts index 8fb55f4a3..6400aa046 100644 --- a/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts +++ b/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts @@ -1,106 +1,139 @@ - -import { IAcceptOffer, ICreateCloudWallet, ICreateCloudWalletDid, IReceiveInvitation, IAcceptProofRequest, IProofRequestRes, ICloudBaseWalletConfigure, IGetProofPresentation, IGetProofPresentationById, IGetStoredWalletInfo, IStoredWalletDetails, IWalletDetailsForDidList, IConnectionDetailsById, ITenantDetail, ICredentialDetails, ICreateConnection, IConnectionInvitationResponse, GetAllCloudWalletConnections, IBasicMessage, IBasicMessageDetails } from '@credebl/common/interfaces/cloud-wallet.interface'; -import { Inject, Injectable} from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; +import { + IAcceptOffer, + ICreateCloudWallet, + ICreateCloudWalletDid, + IReceiveInvitation, + IAcceptProofRequest, + IProofRequestRes, + ICloudBaseWalletConfigure, + IGetProofPresentation, + IGetProofPresentationById, + IGetStoredWalletInfo, + IStoredWalletDetails, + IWalletDetailsForDidList, + IConnectionDetailsById, + ITenantDetail, + ICredentialDetails, + ICreateConnection, + IConnectionInvitationResponse, + GetAllCloudWalletConnections, + IBasicMessage, + IBasicMessageDetails +} from '@credebl/common/interfaces/cloud-wallet.interface'; +import { Inject, Injectable } from '@nestjs/common'; import { BaseService } from 'libs/service/base.service'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class CloudWalletService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly cloudWalletServiceProxy: ClientProxy, private readonly natsClient : NATSClient) { + constructor( + @Inject('NATS_CLIENT') private readonly cloudWalletServiceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { super('CloudWalletServiceProxy'); } - configureBaseWallet( - cloudBaseWalletConfigure: ICloudBaseWalletConfigure - ): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'configure-cloud-base-wallet', cloudBaseWalletConfigure); + configureBaseWallet(cloudBaseWalletConfigure: ICloudBaseWalletConfigure): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'configure-cloud-base-wallet', + cloudBaseWalletConfigure + ); } - createConnection( - createConnection: ICreateConnection - ): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'create-connection-by-holder', createConnection); + createConnection(createConnection: ICreateConnection): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'create-connection-by-holder', + createConnection + ); } - acceptProofRequest( - acceptProofRequest: IAcceptProofRequest - ): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'accept-proof-request-by-holder', acceptProofRequest); + acceptProofRequest(acceptProofRequest: IAcceptProofRequest): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'accept-proof-request-by-holder', + acceptProofRequest + ); } - getProofById( - proofPresentationByIdPayload: IGetProofPresentationById - ): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-proof-by-proof-id-holder', proofPresentationByIdPayload); + getProofById(proofPresentationByIdPayload: IGetProofPresentationById): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'get-proof-by-proof-id-holder', + proofPresentationByIdPayload + ); } - getProofPresentation( - proofPresentationPayload: IGetProofPresentation - ): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-proof-presentation-holder', proofPresentationPayload); + getProofPresentation(proofPresentationPayload: IGetProofPresentation): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'get-proof-presentation-holder', + proofPresentationPayload + ); } - createCloudWallet( - cloudWalletDetails: ICreateCloudWallet - ): Promise { + createCloudWallet(cloudWalletDetails: ICreateCloudWallet): Promise { return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'create-cloud-wallet', cloudWalletDetails); } - receiveInvitationByUrl( - ReceiveInvitationDetails: IReceiveInvitation - ): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'receive-invitation-by-url', ReceiveInvitationDetails); + receiveInvitationByUrl(ReceiveInvitationDetails: IReceiveInvitation): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'receive-invitation-by-url', + ReceiveInvitationDetails + ); } - acceptOffer( - acceptOfferDetails: IAcceptOffer - ): Promise { + acceptOffer(acceptOfferDetails: IAcceptOffer): Promise { return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'accept-credential-offer', acceptOfferDetails); } - createDid(createDidDetails: ICreateCloudWalletDid): Promise { + createDid(createDidDetails: ICreateCloudWalletDid): Promise { return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'create-cloud-wallet-did', createDidDetails); -} + } -getDidList( - walletDetails: IWalletDetailsForDidList -): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'cloud-wallet-did-list', walletDetails); -} + getDidList(walletDetails: IWalletDetailsForDidList): Promise { + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'cloud-wallet-did-list', walletDetails); + } -getconnectionById( - connectionDetails: IConnectionDetailsById -): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-cloud-wallet-connection-by-id', connectionDetails); -} -getAllconnectionById( - connectionDetails: GetAllCloudWalletConnections -): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-all-cloud-wallet-connections-list-by-id', connectionDetails); -} + getconnectionById(connectionDetails: IConnectionDetailsById): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'get-cloud-wallet-connection-by-id', + connectionDetails + ); + } + getAllconnectionById(connectionDetails: GetAllCloudWalletConnections): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'get-all-cloud-wallet-connections-list-by-id', + connectionDetails + ); + } -getCredentialList( - tenantDetails: ITenantDetail -): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'wallet-credential-by-id', tenantDetails); -} + getCredentialList(tenantDetails: ITenantDetail): Promise { + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'wallet-credential-by-id', tenantDetails); + } -getCredentialByCredentialRecordId( - credentialDetails: ICredentialDetails -): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'wallet-credential-by-record-id', credentialDetails); -} + getCredentialByCredentialRecordId(credentialDetails: ICredentialDetails): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'wallet-credential-by-record-id', + credentialDetails + ); + } -getBasicMessageByConnectionId( - connectionDetails: IBasicMessage -): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'basic-message-list-by-connection-id', connectionDetails); -} + getBasicMessageByConnectionId(connectionDetails: IBasicMessage): Promise { + return this.natsClient.sendNatsMessage( + this.cloudWalletServiceProxy, + 'basic-message-list-by-connection-id', + connectionDetails + ); + } -sendBasicMessage( - messageDetails: IBasicMessageDetails -): Promise { - return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'send-basic-message', messageDetails); -} + sendBasicMessage(messageDetails: IBasicMessageDetails): Promise { + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'send-basic-message', messageDetails); + } } diff --git a/apps/api-gateway/src/connection/connection.controller.ts b/apps/api-gateway/src/connection/connection.controller.ts index e72848f9a..6d3ba32d7 100644 --- a/apps/api-gateway/src/connection/connection.controller.ts +++ b/apps/api-gateway/src/connection/connection.controller.ts @@ -1,13 +1,43 @@ import { IResponse } from '@credebl/common/interfaces/response.interface'; import { ResponseMessages } from '@credebl/common/response-messages'; -import { Controller, Post, Logger, Body, UseGuards, HttpStatus, Res, Get, Param, UseFilters, Query, Inject, ParseUUIDPipe, BadRequestException, Delete } from '@nestjs/common'; +import { + Controller, + Post, + Logger, + Body, + UseGuards, + HttpStatus, + Res, + Get, + Param, + UseFilters, + Query, + Inject, + ParseUUIDPipe, + BadRequestException, + Delete +} from '@nestjs/common'; import { AuthGuard } from '@nestjs/passport'; -import { ApiBearerAuth, ApiExcludeEndpoint, ApiForbiddenResponse, ApiOperation, ApiQuery, ApiResponse, ApiTags, ApiUnauthorizedResponse } from '@nestjs/swagger'; +import { + ApiBearerAuth, + ApiExcludeEndpoint, + ApiForbiddenResponse, + ApiOperation, + ApiQuery, + ApiResponse, + ApiTags, + ApiUnauthorizedResponse +} from '@nestjs/swagger'; import { User } from '../authz/decorators/user.decorator'; import { ForbiddenErrorDto } from '../dtos/forbidden-error.dto'; import { UnauthorizedErrorDto } from '../dtos/unauthorized-error.dto'; import { ConnectionService } from './connection.service'; -import { ConnectionDto, CreateOutOfBandConnectionInvitation, ReceiveInvitationDto, ReceiveInvitationUrlDto } from './dtos/connection.dto'; +import { + ConnectionDto, + CreateOutOfBandConnectionInvitation, + ReceiveInvitationDto, + ReceiveInvitationUrlDto +} from './dtos/connection.dto'; import { IUserRequestInterface } from './interfaces'; import { Response } from 'express'; import { IUserRequest } from '@credebl/user-request/user-request.interface'; @@ -19,103 +49,119 @@ import { GetAllAgentConnectionsDto, GetAllConnectionsDto } from './dtos/get-all- import { ApiResponseDto } from '../dtos/apiResponse.dto'; import { IConnectionSearchCriteria } from '../interfaces/IConnectionSearch.interface'; import { SortFields } from 'apps/connection/src/enum/connection.enum'; -import { ClientProxy} from '@nestjs/microservices'; -import { BasicMessageDto, QuestionAnswerWebhookDto, QuestionDto} from './dtos/question-answer.dto'; +import { BasicMessageDto, QuestionAnswerWebhookDto, QuestionDto } from './dtos/question-answer.dto'; // eslint-disable-next-line @typescript-eslint/no-unused-vars import { user } from '@prisma/client'; import { TrimStringParamPipe } from '@credebl/common/cast.helper'; +import { ClientProxy } from '@nestjs/microservices'; @UseFilters(CustomExceptionFilter) @Controller() @ApiTags('connections') @ApiBearerAuth() -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class ConnectionController { + private readonly logger = new Logger('Connection'); + constructor( + private readonly connectionService: ConnectionService, + @Inject('NATS_CLIENT') private readonly connectionServiceProxy: ClientProxy + ) {} - private readonly logger = new Logger('Connection'); - constructor(private readonly connectionService: ConnectionService, - @Inject('NATS_CLIENT') private readonly connectionServiceProxy: ClientProxy - ) { } - - /** - * Get connection details by connectionId - * @param connectionId The ID of the connection - * @param orgId The ID of the organization - * @returns Connection details by connection Id - */ - @Get('orgs/:orgId/connections/:connectionId') - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) - @ApiOperation({ - summary: `Get connection details by connectionId`, - description: `Retrieve the details of a specific connection by its connectionId for a specific organization.` - }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async getConnectionsById( - @User() user: IUserRequest, - @Param('orgId') orgId: string, - @Param('connectionId', TrimStringParamPipe, new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.connection.error.invalidConnectionId); }})) connectionId: string, - @Res() res: Response - ): Promise { - const connectionsDetails = await this.connectionService.getConnectionsById(user, connectionId, orgId); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.connection.success.fetchConnection, - data: connectionsDetails - }; - return res.status(HttpStatus.OK).json(finalResponse); - } - - /** - * Get all connections - * @param user The user making the request - * @param orgId The ID of the organization - * @returns List of all connections for a specific organization - */ - @Get('/orgs/:orgId/connections') - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) - @ApiOperation({ - summary: `Fetch all connections by orgId`, - description: `Retrieve all connections for a specific organization. Supports pagination and sorting.` - }) - @ApiQuery({ - name: 'sortField', - enum: SortFields, - required: false - }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async getConnections( - @Query() getAllConnectionsDto: GetAllConnectionsDto, - @User() user: IUserRequest, - @Param('orgId', new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(`Invalid format for orgId`); }})) orgId: string, - @Res() res: Response - ): Promise { + /** + * Get connection details by connectionId + * @param connectionId The ID of the connection + * @param orgId The ID of the organization + * @returns Connection details by connection Id + */ + @Get('orgs/:orgId/connections/:connectionId') + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) + @ApiOperation({ + summary: `Get connection details by connectionId`, + description: `Retrieve the details of a specific connection by its connectionId for a specific organization.` + }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async getConnectionsById( + @User() user: IUserRequest, + @Param('orgId') orgId: string, + @Param( + 'connectionId', + TrimStringParamPipe, + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.connection.error.invalidConnectionId); + } + }) + ) + connectionId: string, + @Res() res: Response + ): Promise { + const connectionsDetails = await this.connectionService.getConnectionsById(user, connectionId, orgId); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.connection.success.fetchConnection, + data: connectionsDetails + }; + return res.status(HttpStatus.OK).json(finalResponse); + } - const { pageSize, searchByText, pageNumber, sortField, sortBy } = getAllConnectionsDto; - const connectionSearchCriteria: IConnectionSearchCriteria = { - pageNumber, - searchByText, - pageSize, - sortField, - sortBy - }; - const connectionDetails = await this.connectionService.getConnections(connectionSearchCriteria, user, orgId); + /** + * Get all connections + * @param user The user making the request + * @param orgId The ID of the organization + * @returns List of all connections for a specific organization + */ + @Get('/orgs/:orgId/connections') + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) + @ApiOperation({ + summary: `Fetch all connections by orgId`, + description: `Retrieve all connections for a specific organization. Supports pagination and sorting.` + }) + @ApiQuery({ + name: 'sortField', + enum: SortFields, + required: false + }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async getConnections( + @Query() getAllConnectionsDto: GetAllConnectionsDto, + @User() user: IUserRequest, + @Param( + 'orgId', + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(`Invalid format for orgId`); + } + }) + ) + orgId: string, + @Res() res: Response + ): Promise { + const { pageSize, searchByText, pageNumber, sortField, sortBy } = getAllConnectionsDto; + const connectionSearchCriteria: IConnectionSearchCriteria = { + pageNumber, + searchByText, + pageSize, + sortField, + sortBy + }; + const connectionDetails = await this.connectionService.getConnections(connectionSearchCriteria, user, orgId); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.connection.success.fetch, - data: connectionDetails - }; - return res.status(HttpStatus.OK).json(finalResponse); - } + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.connection.success.fetch, + data: connectionDetails + }; + return res.status(HttpStatus.OK).json(finalResponse); + } - /** - * Get all connections from agent - * @param user The user making the request - * @param orgId The ID of the organization - * @returns List of all connections from agent for a specific organization - */ + /** + * Get all connections from agent + * @param user The user making the request + * @param orgId The ID of the organization + * @returns List of all connections from agent for a specific organization + */ @Get('/orgs/:orgId/agent/connections') @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) @@ -129,11 +175,7 @@ export class ConnectionController { @Param('orgId') orgId: string, @Res() res: Response ): Promise { - - const connectionDetails = await this.connectionService.getConnectionListFromAgent( - getAllConnectionsDto, - orgId - ); + const connectionDetails = await this.connectionService.getConnectionListFromAgent(getAllConnectionsDto, orgId); const finalResponse: IResponse = { statusCode: HttpStatus.OK, @@ -143,65 +185,74 @@ export class ConnectionController { return res.status(HttpStatus.OK).json(finalResponse); } - - /** - * Get question-answer record - * @param orgId The ID of the organization - * @returns Question-answer record for a specific organization - */ - @Get('orgs/:orgId/question-answer/question') - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER, OrgRoles.HOLDER, OrgRoles.SUPER_ADMIN, OrgRoles.PLATFORM_ADMIN) - @ApiOperation({ - summary: `Get question-answer record`, - description: `Retrieve the question-answer record for a specific organization.` - }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async getQuestionAnswersRecord( - @Param('orgId') orgId: string, - @Res() res: Response - ): Promise { - const record = await this.connectionService.getQuestionAnswersRecord(orgId); - const finalResponse: IResponse = { - statusCode: HttpStatus.OK, - message: ResponseMessages.connection.success.questionAnswerRecord, - data: record - }; - return res.status(HttpStatus.OK).json(finalResponse); - } + /** + * Get question-answer record + * @param orgId The ID of the organization + * @returns Question-answer record for a specific organization + */ + @Get('orgs/:orgId/question-answer/question') + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles( + OrgRoles.OWNER, + OrgRoles.ADMIN, + OrgRoles.ISSUER, + OrgRoles.VERIFIER, + OrgRoles.MEMBER, + OrgRoles.HOLDER, + OrgRoles.SUPER_ADMIN, + OrgRoles.PLATFORM_ADMIN + ) + @ApiOperation({ + summary: `Get question-answer record`, + description: `Retrieve the question-answer record for a specific organization.` + }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async getQuestionAnswersRecord(@Param('orgId') orgId: string, @Res() res: Response): Promise { + const record = await this.connectionService.getQuestionAnswersRecord(orgId); + const finalResponse: IResponse = { + statusCode: HttpStatus.OK, + message: ResponseMessages.connection.success.questionAnswerRecord, + data: record + }; + return res.status(HttpStatus.OK).json(finalResponse); + } - /** - * Create out-of-band connection invitation - * @param orgId The ID of the organization - * @param createOutOfBandConnectionInvitation The details of the out-of-band connection invitation - * @param reqUser The user making the request - * @param res The response object - * @returns Created out-of-band connection invitation URL - */ - @Post('/orgs/:orgId/connections') - @ApiOperation({ summary: 'Create outbound out-of-band connection invitation', description: 'Create an outbound out-of-band connection invitation for the organization.' }) - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) - async createConnectionInvitation( - @Param('orgId') orgId: string, - @Body() createOutOfBandConnectionInvitation: CreateOutOfBandConnectionInvitation, - @User() reqUser: IUserRequestInterface, - @Res() res: Response - ): Promise { - - createOutOfBandConnectionInvitation.orgId = orgId; - const connectionData = await this.connectionService.createConnectionInvitation(createOutOfBandConnectionInvitation, reqUser); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.connection.success.create, - data: connectionData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - - } + /** + * Create out-of-band connection invitation + * @param orgId The ID of the organization + * @param createOutOfBandConnectionInvitation The details of the out-of-band connection invitation + * @param reqUser The user making the request + * @param res The response object + * @returns Created out-of-band connection invitation URL + */ + @Post('/orgs/:orgId/connections') + @ApiOperation({ + summary: 'Create outbound out-of-band connection invitation', + description: 'Create an outbound out-of-band connection invitation for the organization.' + }) + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) + async createConnectionInvitation( + @Param('orgId') orgId: string, + @Body() createOutOfBandConnectionInvitation: CreateOutOfBandConnectionInvitation, + @User() reqUser: IUserRequestInterface, + @Res() res: Response + ): Promise { + createOutOfBandConnectionInvitation.orgId = orgId; + const connectionData = await this.connectionService.createConnectionInvitation( + createOutOfBandConnectionInvitation, + reqUser + ); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.connection.success.create, + data: connectionData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } - /** + /** * Send question * @param orgId The ID of the organization * @param connectionId The ID of the connection @@ -210,31 +261,38 @@ export class ConnectionController { * @param res The response object * @returns The details of the sent question */ - @Post('/orgs/:orgId/question-answer/question/:connectionId') - @ApiOperation({ summary: 'Send question', description: 'Send a question to the connection ID' }) - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER, OrgRoles.HOLDER, OrgRoles.SUPER_ADMIN, OrgRoles.PLATFORM_ADMIN) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) - async sendQuestion( - @Param('orgId') orgId: string, - @Param('connectionId', TrimStringParamPipe) connectionId: string, - @Body() questionDto: QuestionDto, - @User() reqUser: IUserRequestInterface, - @Res() res: Response - ): Promise { - - questionDto.orgId = orgId; - questionDto.connectionId = connectionId; - const questionData = await this.connectionService.sendQuestion(questionDto); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.connection.success.questionSend, - data: questionData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - - } - /** + @Post('/orgs/:orgId/question-answer/question/:connectionId') + @ApiOperation({ summary: 'Send question', description: 'Send a question to the connection ID' }) + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles( + OrgRoles.OWNER, + OrgRoles.ADMIN, + OrgRoles.ISSUER, + OrgRoles.VERIFIER, + OrgRoles.MEMBER, + OrgRoles.HOLDER, + OrgRoles.SUPER_ADMIN, + OrgRoles.PLATFORM_ADMIN + ) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) + async sendQuestion( + @Param('orgId') orgId: string, + @Param('connectionId', TrimStringParamPipe) connectionId: string, + @Body() questionDto: QuestionDto, + @User() reqUser: IUserRequestInterface, + @Res() res: Response + ): Promise { + questionDto.orgId = orgId; + questionDto.connectionId = connectionId; + const questionData = await this.connectionService.sendQuestion(questionDto); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.connection.success.questionSend, + data: questionData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + /** * Receive Invitation URL * @param orgId The ID of the organization * @param receiveInvitationUrl The details of the invitation URL @@ -242,27 +300,26 @@ export class ConnectionController { * @param res The response object * @returns The details of the received invitation URL */ - @Post('/orgs/:orgId/receive-invitation-url') - @ApiOperation({ summary: 'Receive Invitation URL', description: 'Receive an invitation URL for the organization.' }) - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) - async receiveInvitationUrl( - @Param('orgId') orgId: string, - @Body() receiveInvitationUrl: ReceiveInvitationUrlDto, - @User() user: IUserRequestInterface, - @Res() res: Response - ): Promise { - - const connectionData = await this.connectionService.receiveInvitationUrl(receiveInvitationUrl, orgId, user); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.connection.success.receivenvitation, - data: connectionData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } - /** + @Post('/orgs/:orgId/receive-invitation-url') + @ApiOperation({ summary: 'Receive Invitation URL', description: 'Receive an invitation URL for the organization.' }) + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) + async receiveInvitationUrl( + @Param('orgId') orgId: string, + @Body() receiveInvitationUrl: ReceiveInvitationUrlDto, + @User() user: IUserRequestInterface, + @Res() res: Response + ): Promise { + const connectionData = await this.connectionService.receiveInvitationUrl(receiveInvitationUrl, orgId, user); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.connection.success.receivenvitation, + data: connectionData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } + /** * Receive Invitation * @param orgId The ID of the organization * @param receiveInvitation The details of the invitation @@ -270,33 +327,35 @@ export class ConnectionController { * @param res The response object * @returns The details of the received invitation */ - @Post('/orgs/:orgId/receive-invitation') - @ApiOperation({ summary: 'Receive Invitation', description: 'Receive an invitation for the organization using the invitation object.' }) - @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) - async receiveInvitation( - @Param('orgId') orgId: string, - @Body() receiveInvitation: ReceiveInvitationDto, - @User() user: IUserRequestInterface, - @Res() res: Response - ): Promise { - - const connectionData = await this.connectionService.receiveInvitation(receiveInvitation, orgId, user); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.connection.success.receivenvitation, - data: connectionData - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } + @Post('/orgs/:orgId/receive-invitation') + @ApiOperation({ + summary: 'Receive Invitation', + description: 'Receive an invitation for the organization using the invitation object.' + }) + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) + async receiveInvitation( + @Param('orgId') orgId: string, + @Body() receiveInvitation: ReceiveInvitationDto, + @User() user: IUserRequestInterface, + @Res() res: Response + ): Promise { + const connectionData = await this.connectionService.receiveInvitation(receiveInvitation, orgId, user); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.connection.success.receivenvitation, + data: connectionData + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } - /** - * Catch connection webhook responses - * @param connectionDto The details of the connection - * @param orgId The ID of the organization - * @returns Callback URL for connection and created connections details - */ + /** + * Catch connection webhook responses + * @param connectionDto The details of the connection + * @param orgId The ID of the organization + * @returns Callback URL for connection and created connections details + */ @Post('wh/:orgId/connections/') @ApiExcludeEndpoint() @ApiOperation({ @@ -311,37 +370,38 @@ export class ConnectionController { ): Promise { connectionDto.type = 'Connection'; this.logger.debug(`connectionDto ::: ${JSON.stringify(connectionDto)} ${orgId}`); - + if (orgId && 'default' === connectionDto?.contextCorrelationId) { connectionDto.orgId = orgId; } - const connectionData = await this.connectionService.getConnectionWebhook(connectionDto, orgId).catch(error => { - this.logger.debug(`error in saving connection webhook ::: ${JSON.stringify(error)}`); - }); + const connectionData = await this.connectionService.getConnectionWebhook(connectionDto, orgId).catch((error) => { + this.logger.debug(`error in saving connection webhook ::: ${JSON.stringify(error)}`); + }); const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, message: ResponseMessages.connection.success.create, data: connectionData }; - const webhookUrl = await this.connectionService._getWebhookUrl(connectionDto?.contextCorrelationId, orgId).catch(error => { - this.logger.debug(`error in getting webhook url ::: ${JSON.stringify(error)}`); - - }); - if (webhookUrl) { - await this.connectionService._postWebhookResponse(webhookUrl, { data: connectionDto }).catch(error => { - this.logger.debug(`error in posting webhook response to webhook url ::: ${JSON.stringify(error)}`); - }); - } + const webhookUrl = await this.connectionService + ._getWebhookUrl(connectionDto?.contextCorrelationId, orgId) + .catch((error) => { + this.logger.debug(`error in getting webhook url ::: ${JSON.stringify(error)}`); + }); + if (webhookUrl) { + await this.connectionService._postWebhookResponse(webhookUrl, { data: connectionDto }).catch((error) => { + this.logger.debug(`error in posting webhook response to webhook url ::: ${JSON.stringify(error)}`); + }); + } return res.status(HttpStatus.CREATED).json(finalResponse); } -/** - * Catch question-answer webhook responses - * @param questionAnswerWebhookDto The details of the question-answer webhook - * @param orgId The ID of the organization - * @returns Callback URL for question-answer - */ + /** + * Catch question-answer webhook responses + * @param questionAnswerWebhookDto The details of the question-answer webhook + * @param orgId The ID of the organization + * @returns Callback URL for question-answer + */ @Post('wh/:orgId/question-answer/') @ApiExcludeEndpoint() @ApiOperation({ @@ -350,28 +410,31 @@ export class ConnectionController { }) @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) async getQuestionAnswerWebhook( - @Body() questionAnswerWebhookDto:QuestionAnswerWebhookDto, + @Body() questionAnswerWebhookDto: QuestionAnswerWebhookDto, @Param('orgId') orgId: string, @Res() res: Response ): Promise { questionAnswerWebhookDto.type = 'question-answer'; this.logger.debug(`questionAnswer ::: ${JSON.stringify(questionAnswerWebhookDto)} ${orgId}`); - + const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, message: ResponseMessages.connection.success.create, data: '' }; - const webhookUrl = await this.connectionService._getWebhookUrl(questionAnswerWebhookDto?.contextCorrelationId, orgId).catch(error => { + const webhookUrl = await this.connectionService + ._getWebhookUrl(questionAnswerWebhookDto?.contextCorrelationId, orgId) + .catch((error) => { this.logger.debug(`error in getting webhook url ::: ${JSON.stringify(error)}`); - - }); - + }); + if (webhookUrl) { - await this.connectionService._postWebhookResponse(webhookUrl, { data: questionAnswerWebhookDto }).catch(error => { - this.logger.debug(`error in posting webhook response to webhook url ::: ${JSON.stringify(error)}`); + await this.connectionService + ._postWebhookResponse(webhookUrl, { data: questionAnswerWebhookDto }) + .catch((error) => { + this.logger.debug(`error in posting webhook response to webhook url ::: ${JSON.stringify(error)}`); }); - } + } return res.status(HttpStatus.CREATED).json(finalResponse); } /** @@ -408,36 +471,55 @@ export class ConnectionController { return res.status(HttpStatus.OK).json(finalResponse); } /** - * Send basic message - * @param orgId The ID of the organization - * @param connectionId The ID of the connection - * @param basicMessageDto The details of the basic message - * @param reqUser The user making the request - * @param res The response object - * @returns The details of the sent basic message - */ + * Send basic message + * @param orgId The ID of the organization + * @param connectionId The ID of the connection + * @param basicMessageDto The details of the basic message + * @param reqUser The user making the request + * @param res The response object + * @returns The details of the sent basic message + */ @Post('/orgs/:orgId/basic-message/:connectionId') - @ApiOperation({ summary: 'Send basic message', description: 'Send a basic message to a specific connection for a specific organization.' }) + @ApiOperation({ + summary: 'Send basic message', + description: 'Send a basic message to a specific connection for a specific organization.' + }) @UseGuards(AuthGuard('jwt'), OrgRolesGuard) - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER, OrgRoles.HOLDER, OrgRoles.SUPER_ADMIN, OrgRoles.PLATFORM_ADMIN) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) - async sendBasicMessage( - @Param('orgId') orgId: string, - @Param('connectionId', TrimStringParamPipe, new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.connection.error.invalidConnectionId); }})) connectionId: string, - @Body() basicMessageDto: BasicMessageDto, - @User() reqUser: IUserRequestInterface, - @Res() res: Response - ): Promise { - - basicMessageDto.orgId = orgId; - basicMessageDto.connectionId = connectionId; - const basicMesgResponse = await this.connectionService.sendBasicMessage(basicMessageDto); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.connection.success.basicMessage, - data: basicMesgResponse - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - - } + @Roles( + OrgRoles.OWNER, + OrgRoles.ADMIN, + OrgRoles.ISSUER, + OrgRoles.VERIFIER, + OrgRoles.MEMBER, + OrgRoles.HOLDER, + OrgRoles.SUPER_ADMIN, + OrgRoles.PLATFORM_ADMIN + ) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) + async sendBasicMessage( + @Param('orgId') orgId: string, + @Param( + 'connectionId', + TrimStringParamPipe, + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.connection.error.invalidConnectionId); + } + }) + ) + connectionId: string, + @Body() basicMessageDto: BasicMessageDto, + @User() reqUser: IUserRequestInterface, + @Res() res: Response + ): Promise { + basicMessageDto.orgId = orgId; + basicMessageDto.connectionId = connectionId; + const basicMesgResponse = await this.connectionService.sendBasicMessage(basicMessageDto); + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.connection.success.basicMessage, + data: basicMesgResponse + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } } diff --git a/apps/api-gateway/src/connection/connection.service.ts b/apps/api-gateway/src/connection/connection.service.ts index 215439f31..88efdbad7 100644 --- a/apps/api-gateway/src/connection/connection.service.ts +++ b/apps/api-gateway/src/connection/connection.service.ts @@ -1,23 +1,34 @@ import { IUserRequest } from '@credebl/user-request/user-request.interface'; -import { Inject, Injectable} from '@nestjs/common'; +import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy, RpcException } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; -import { ConnectionDto, CreateOutOfBandConnectionInvitation, ReceiveInvitationDto, ReceiveInvitationUrlDto } from './dtos/connection.dto'; +import { + ConnectionDto, + CreateOutOfBandConnectionInvitation, + ReceiveInvitationDto, + ReceiveInvitationUrlDto +} from './dtos/connection.dto'; import { IReceiveInvitationRes, IUserRequestInterface } from './interfaces'; import { IConnectionList, IDeletedConnectionsRecord } from '@credebl/common/interfaces/connection.interface'; -import { AgentConnectionSearchCriteria, IConnectionDetailsById, IConnectionSearchCriteria } from '../interfaces/IConnectionSearch.interface'; +import { + AgentConnectionSearchCriteria, + IConnectionDetailsById, + IConnectionSearchCriteria +} from '../interfaces/IConnectionSearch.interface'; import { BasicMessageDto, QuestionDto } from './dtos/question-answer.dto'; import { user } from '@prisma/client'; import { NATSClient } from '@credebl/common/NATSClient'; +import { firstValueFrom } from 'rxjs'; @Injectable() export class ConnectionService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly connectionServiceProxy: ClientProxy, private readonly natsClient : NATSClient) { + constructor( + @Inject('NATS_CLIENT') private readonly connectionServiceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { super('ConnectionService'); } - sendQuestion( - questionDto: QuestionDto - ): Promise { + sendQuestion(questionDto: QuestionDto): Promise { try { return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'send-question', questionDto); } catch (error) { @@ -25,20 +36,19 @@ export class ConnectionService extends BaseService { } } - sendBasicMessage( - basicMessageDto: BasicMessageDto - ): Promise { + sendBasicMessage(basicMessageDto: BasicMessageDto): Promise { try { - return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'send-basic-message-on-connection', basicMessageDto); + return this.natsClient.sendNatsMessage( + this.connectionServiceProxy, + 'send-basic-message-on-connection', + basicMessageDto + ); } catch (error) { throw new RpcException(error.response); } } - getConnectionWebhook( - connectionDto: ConnectionDto, - orgId: string - ): Promise { + getConnectionWebhook(connectionDto: ConnectionDto, orgId: string): Promise { const payload = { connectionDto, orgId }; return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'webhook-get-connection', payload); } @@ -71,20 +81,16 @@ export class ConnectionService extends BaseService { return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'get-all-agent-connection-list', payload); } - getConnectionsById( - user: IUserRequest, - connectionId: string, - orgId: string - ): Promise { + getConnectionsById(user: IUserRequest, connectionId: string, orgId: string): Promise { const payload = { user, connectionId, orgId }; - return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'get-connection-details-by-connectionId', payload); + return this.natsClient.sendNatsMessage( + this.connectionServiceProxy, + 'get-connection-details-by-connectionId', + payload + ); } - - getQuestionAnswersRecord( - orgId: string - ): Promise { - + getQuestionAnswersRecord(orgId: string): Promise { return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'get-question-answer-record', orgId); } @@ -110,10 +116,10 @@ export class ConnectionService extends BaseService { const pattern = { cmd: 'get-webhookurl' }; const payload = { tenantId, orgId }; - + try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.connectionServiceProxy.send(pattern, payload).toPromise(); + const message: string = await firstValueFrom(this.connectionServiceProxy.send(pattern, payload)); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); @@ -121,13 +127,12 @@ export class ConnectionService extends BaseService { } } - async _postWebhookResponse(webhookUrl: string, data:object): Promise { + async _postWebhookResponse(webhookUrl: string, data: object): Promise { const pattern = { cmd: 'post-webhook-response-to-webhook-url' }; - const payload = { webhookUrl, data }; - + const payload = { webhookUrl, data }; + try { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.connectionServiceProxy.send(pattern, payload).toPromise(); + const message: string = await firstValueFrom(this.connectionServiceProxy.send(pattern, payload)); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); diff --git a/apps/api-gateway/src/credential-definition/credential-definition.controller.ts b/apps/api-gateway/src/credential-definition/credential-definition.controller.ts index 23eb3b36b..2fce93717 100644 --- a/apps/api-gateway/src/credential-definition/credential-definition.controller.ts +++ b/apps/api-gateway/src/credential-definition/credential-definition.controller.ts @@ -1,6 +1,27 @@ -import { Controller, Logger, Post, Body, UseGuards, Get, Query, HttpStatus, Res, Param, UseFilters, ParseUUIDPipe, BadRequestException } from '@nestjs/common'; +import { + Controller, + Logger, + Post, + Body, + UseGuards, + Get, + Query, + HttpStatus, + Res, + Param, + UseFilters, + ParseUUIDPipe, + BadRequestException +} from '@nestjs/common'; import { CredentialDefinitionService } from './credential-definition.service'; -import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth, ApiUnauthorizedResponse, ApiForbiddenResponse } from '@nestjs/swagger'; +import { + ApiTags, + ApiOperation, + ApiResponse, + ApiBearerAuth, + ApiUnauthorizedResponse, + ApiForbiddenResponse +} from '@nestjs/swagger'; import { ApiResponseDto } from 'apps/api-gateway/src/dtos/apiResponse.dto'; import { UnauthorizedErrorDto } from 'apps/api-gateway/src/dtos/unauthorized-error.dto'; import { ForbiddenErrorDto } from 'apps/api-gateway/src/dtos/forbidden-error.dto'; @@ -18,16 +39,14 @@ import { Roles } from '../authz/decorators/roles.decorator'; import { CustomExceptionFilter } from 'apps/api-gateway/common/exception-handler'; import { EmptyStringParamPipe, TrimStringParamPipe } from '@credebl/common/cast.helper'; - @ApiBearerAuth() @ApiTags('credential-definitions') @Controller() -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @UseFilters(CustomExceptionFilter) export class CredentialDefinitionController { - - constructor(private readonly credentialDefinitionService: CredentialDefinitionService) { } + constructor(private readonly credentialDefinitionService: CredentialDefinitionService) {} private readonly logger = new Logger('CredentialDefinitionController'); /** @@ -40,7 +59,8 @@ export class CredentialDefinitionController { @Get('/orgs/:orgId/cred-defs/:credDefId') @ApiOperation({ summary: 'Get credential definition by credential definition Id', - description: 'Fetches the details of a specific credential definition using its ID available credential definitions on platform.' + description: + 'Fetches the details of a specific credential definition using its ID available credential definitions on platform.' }) @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) @@ -50,7 +70,10 @@ export class CredentialDefinitionController { @Param('credDefId', TrimStringParamPipe, EmptyStringParamPipe.forParam('credDefId')) credentialDefinitionId: string, @Res() res: Response ): Promise { - const credentialsDefinitionDetails = await this.credentialDefinitionService.getCredentialDefinitionById(credentialDefinitionId, orgId); + const credentialsDefinitionDetails = await this.credentialDefinitionService.getCredentialDefinitionById( + credentialDefinitionId, + orgId + ); const credDefResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.credentialDefinition.success.fetch, @@ -59,7 +82,7 @@ export class CredentialDefinitionController { return res.status(HttpStatus.OK).json(credDefResponse); } - /** + /** * Retrieves all credential definitions linked to a specific schema. * * @param schemaId The unique identifier of the schema. @@ -68,7 +91,8 @@ export class CredentialDefinitionController { @Get('/verifiation/cred-defs/:schemaId') @ApiOperation({ summary: 'Get all credential definitions by schema Id', - description: 'Fetches all credential definitions associated with a specific schema ID available credential definitions on platform.' + description: + 'Fetches all credential definitions associated with a specific schema ID available credential definitions on platform.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) @UseGuards(AuthGuard('jwt')) @@ -76,7 +100,6 @@ export class CredentialDefinitionController { @Param('schemaId', TrimStringParamPipe) schemaId: string, @Res() res: Response ): Promise { - if (!schemaId) { throw new BadRequestException(ResponseMessages.schema.error.invalidSchemaId); } @@ -90,11 +113,11 @@ export class CredentialDefinitionController { return res.status(HttpStatus.OK).json(credDefResponse); } - /** - * Retrieves all credential definitions for a given organization. - * - * @param orgId The unique identifier of the organization. - * @returns A paginated list of credential definitions for the organization. + /** + * Retrieves all credential definitions for a given organization. + * + * @param orgId The unique identifier of the organization. + * @returns A paginated list of credential definitions for the organization. */ @Get('/orgs/:orgId/cred-defs') @ApiOperation({ @@ -104,7 +127,15 @@ export class CredentialDefinitionController { @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) @UseGuards(AuthGuard('jwt'), OrgRolesGuard) async getAllCredDefs( - @Param('orgId', new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); }})) orgId: string, + @Param( + 'orgId', + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); + } + }) + ) + orgId: string, @Query() getAllCredDefs: GetAllCredDefsDto, @User() user: IUserRequestInterface, @Res() res: Response @@ -122,7 +153,7 @@ export class CredentialDefinitionController { return res.status(HttpStatus.OK).json(credDefResponse); } - /** + /** * Creates a new credential definition and submits it to the ledger. * * @param orgId The unique identifier of the organization. @@ -140,12 +171,22 @@ export class CredentialDefinitionController { async createCredentialDefinition( @User() user: IUserRequestInterface, @Body() credDef: CreateCredentialDefinitionDto, - @Param('orgId', new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); }})) orgId: string, + @Param( + 'orgId', + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); + } + }) + ) + orgId: string, @Res() res: Response ): Promise { - credDef.orgId = orgId; - const credentialsDefinitionDetails = await this.credentialDefinitionService.createCredentialDefinition(credDef, user); + const credentialsDefinitionDetails = await this.credentialDefinitionService.createCredentialDefinition( + credDef, + user + ); const credDefResponse: IResponse = { statusCode: HttpStatus.CREATED, message: ResponseMessages.credentialDefinition.success.create, @@ -153,5 +194,4 @@ export class CredentialDefinitionController { }; return res.status(HttpStatus.CREATED).json(credDefResponse); } - -} \ No newline at end of file +} diff --git a/apps/api-gateway/src/credential-definition/credential-definition.service.ts b/apps/api-gateway/src/credential-definition/credential-definition.service.ts index 330e6d200..4f23b357c 100644 --- a/apps/api-gateway/src/credential-definition/credential-definition.service.ts +++ b/apps/api-gateway/src/credential-definition/credential-definition.service.ts @@ -1,5 +1,4 @@ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { CreateCredentialDefinitionDto } from './dto/create-cred-defs.dto'; import { BaseService } from '../../../../libs/service/base.service'; import { IUserRequestInterface } from '../interfaces/IUserRequestInterface'; @@ -7,19 +6,19 @@ import { GetAllCredDefsDto } from '../dtos/get-cred-defs.dto'; import { ICredDef, ICredDefs } from './interfaces'; import { ICredDefData } from '@credebl/common/interfaces/cred-def.interface'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class CredentialDefinitionService extends BaseService { - constructor( @Inject('NATS_CLIENT') private readonly credDefServiceProxy: ClientProxy, - private readonly natsClient : NATSClient + private readonly natsClient: NATSClient ) { super('CredentialDefinitionService'); } createCredentialDefinition(credDef: CreateCredentialDefinitionDto, user: IUserRequestInterface): Promise { - const payload = { credDef, user }; + const payload = { credDef, user }; return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'create-credential-definition', payload); } @@ -28,13 +27,21 @@ export class CredentialDefinitionService extends BaseService { return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'get-credential-definition-by-id', payload); } - getAllCredDefs(credDefSearchCriteria: GetAllCredDefsDto, user: IUserRequestInterface, orgId: string): Promise { + getAllCredDefs( + credDefSearchCriteria: GetAllCredDefsDto, + user: IUserRequestInterface, + orgId: string + ): Promise { const payload = { credDefSearchCriteria, user, orgId }; return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'get-all-credential-definitions', payload); } getCredentialDefinitionBySchemaId(schemaId: string): Promise { const payload = { schemaId }; - return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'get-all-credential-definitions-by-schema-id', payload); + return this.natsClient.sendNatsMessage( + this.credDefServiceProxy, + 'get-all-credential-definitions-by-schema-id', + payload + ); } } diff --git a/apps/api-gateway/src/dtos/save-roles-permissions.dto.ts b/apps/api-gateway/src/dtos/save-roles-permissions.dto.ts index ce01ac99a..b884ac46d 100644 --- a/apps/api-gateway/src/dtos/save-roles-permissions.dto.ts +++ b/apps/api-gateway/src/dtos/save-roles-permissions.dto.ts @@ -1,14 +1,14 @@ import { ApiProperty } from '@nestjs/swagger'; export class RolesPermissionsObj { - @ApiProperty() - roleId: string; + @ApiProperty() + roleId: string; - @ApiProperty({ type: [] }) - permissionsId: number; + @ApiProperty({ type: Number }) + permissionsId: number; } export class SaveRolesPermissionsDto { - @ApiProperty({ type: [] }) - data: RolesPermissionsObj; + @ApiProperty({ type: RolesPermissionsObj }) + data: RolesPermissionsObj; } diff --git a/apps/api-gateway/src/fido/fido.controller.ts b/apps/api-gateway/src/fido/fido.controller.ts index 37e11a0f8..7b6695e2e 100644 --- a/apps/api-gateway/src/fido/fido.controller.ts +++ b/apps/api-gateway/src/fido/fido.controller.ts @@ -1,8 +1,38 @@ -import { Body, Controller, Delete, Get, HttpStatus, Logger, Param, Post, Put, Query, Request, Res, UseFilters } from '@nestjs/common'; -import { ApiBadRequestResponse, ApiBearerAuth, ApiExcludeEndpoint, ApiForbiddenResponse, ApiOperation, ApiQuery, ApiResponse, ApiTags, ApiUnauthorizedResponse } from '@nestjs/swagger'; +import { + Body, + Controller, + Delete, + Get, + HttpStatus, + Logger, + Param, + Post, + Put, + Query, + Request, + Res, + UseFilters +} from '@nestjs/common'; +import { + ApiBadRequestResponse, + ApiBearerAuth, + ApiExcludeEndpoint, + ApiForbiddenResponse, + ApiOperation, + ApiQuery, + ApiResponse, + ApiTags, + ApiUnauthorizedResponse +} from '@nestjs/swagger'; import { ApiResponseDto } from '../dtos/apiResponse.dto'; import { BadRequestErrorDto } from '../dtos/bad-request-error.dto'; -import { GenerateAuthenticationDto, GenerateRegistrationDto, UpdateFidoUserDetailsDto, VerifyRegistrationDto, VerifyAuthenticationDto } from '../dtos/fido-user.dto'; +import { + GenerateAuthenticationDto, + GenerateRegistrationDto, + UpdateFidoUserDetailsDto, + VerifyRegistrationDto, + VerifyAuthenticationDto +} from '../dtos/fido-user.dto'; import { ForbiddenErrorDto } from '../dtos/forbidden-error.dto'; import { UnauthorizedErrorDto } from '../dtos/unauthorized-error.dto'; import { FidoService } from './fido.service'; @@ -16,202 +46,251 @@ import { CustomExceptionFilter } from 'apps/api-gateway/common/exception-handler @UseFilters(CustomExceptionFilter) @Controller('auth') @ApiTags('fido') -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) -@ApiBadRequestResponse({ status: 400, description: 'Bad Request', type: BadRequestErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiBadRequestResponse({ description: 'Bad Request', type: BadRequestErrorDto }) export class FidoController { - private logger = new Logger('FidoController'); - constructor(private readonly fidoService: FidoService) { } + private logger = new Logger('FidoController'); + constructor(private readonly fidoService: FidoService) {} - /** - * Fetch fido user details - * @param email The email of the user - * @param res The response object - * @returns User details - */ - @Get('/passkey/:email') - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.HOLDER, OrgRoles.ISSUER, OrgRoles.SUPER_ADMIN, OrgRoles.MEMBER) - @ApiBearerAuth() - @ApiOperation({ summary: 'Fetch fido user details', description: 'Retrieve the details of a FIDO user by their email address.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) - @ApiBadRequestResponse({ status: 400, description: 'Bad Request', type: BadRequestErrorDto }) - async fetchFidoUserDetails(@Request() req, @Param('email') email: string, @Res() res: Response): Promise { - try { - const fidoUserDetails = await this.fidoService.fetchFidoUserDetails(req.params.email.toLowerCase()); - const finalResponse: IResponseType = { - statusCode: HttpStatus.OK, - message: ResponseMessages.user.success.fetchUsers, - data: fidoUserDetails.response - }; - return res.status(HttpStatus.OK).json(finalResponse); - } catch (error) { - this.logger.error(`Error::${error}`); - throw error; - } + /** + * Fetch fido user details + * @param email The email of the user + * @param res The response object + * @returns User details + */ + @Get('/passkey/:email') + // TODO: Check if roles are required here? + // @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.HOLDER, OrgRoles.ISSUER, OrgRoles.SUPER_ADMIN, OrgRoles.MEMBER) + @ApiBearerAuth() + @ApiOperation({ + summary: 'Fetch fido user details', + description: 'Retrieve the details of a FIDO user by their email address.' + }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiBadRequestResponse({ description: 'Bad Request', type: BadRequestErrorDto }) + async fetchFidoUserDetails(@Request() req, @Param('email') email: string, @Res() res: Response): Promise { + try { + const fidoUserDetails = await this.fidoService.fetchFidoUserDetails(email.toLowerCase()); + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.user.success.fetchUsers, + data: fidoUserDetails.response + }; + return res.status(HttpStatus.OK).json(finalResponse); + } catch (error) { + this.logger.error(`Error::${error}`); + throw error; } + } - /** - * Generate registration option - * @param GenerateRegistrationDto The registration details - * @param email The email of the user - * @param res The response object - * @returns Registration options - */ - @Post('/passkey/generate-registration/:email') - @ApiExcludeEndpoint() - @ApiOperation({ summary: 'Generate registration option', description: 'Generate registration options for a FIDO user.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - async generateRegistrationOption(@Body() body: GenerateRegistrationDto, @Param('email') email: string, @Res() res: Response): Promise { - try { - const { deviceFlag } = body; - const registrationOption = await this.fidoService.generateRegistrationOption(deviceFlag, email.toLowerCase()); - const finalResponse: IResponseType = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.fido.success.RegistrationOption, - data: registrationOption.response - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } catch (error) { - this.logger.error(`Error::${error}`); - } + /** + * Generate registration option + * @param GenerateRegistrationDto The registration details + * @param email The email of the user + * @param res The response object + * @returns Registration options + */ + @Post('/passkey/generate-registration/:email') + @ApiExcludeEndpoint() + @ApiOperation({ + summary: 'Generate registration option', + description: 'Generate registration options for a FIDO user.' + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) + async generateRegistrationOption( + @Body() body: GenerateRegistrationDto, + @Param('email') email: string, + @Res() res: Response + ): Promise { + try { + const { deviceFlag } = body; + const registrationOption = await this.fidoService.generateRegistrationOption(deviceFlag, email.toLowerCase()); + const finalResponse: IResponseType = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.fido.success.RegistrationOption, + data: registrationOption.response + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } catch (error) { + this.logger.error(`Error::${error}`); + throw error; } + } - /** - * Verify registration - * @param verifyRegistrationDto The registration verification details - * @param email The email of the user - * @param res The response object - * @returns Verification result - */ - @Post('/passkey/verify-registration/:email') - @ApiExcludeEndpoint() - @ApiOperation({ summary: 'Verify registration', description: 'Verify the registration of a FIDO user.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async verifyRegistration(@Request() req, @Body() verifyRegistrationDto: VerifyRegistrationDto, @Param('email') email: string, @Res() res: Response): Promise { - const verifyRegistration = await this.fidoService.verifyRegistration(verifyRegistrationDto, req.params.email.toLowerCase()); - const finalResponse: IResponseType = { - statusCode: HttpStatus.OK, - message: ResponseMessages.fido.success.verifyRegistration, - data: verifyRegistration.response - }; - return res.status(HttpStatus.OK).json(finalResponse); - } + /** + * Verify registration + * @param verifyRegistrationDto The registration verification details + * @param email The email of the user + * @param res The response object + * @returns Verification result + */ + @Post('/passkey/verify-registration/:email') + @ApiExcludeEndpoint() + @ApiOperation({ summary: 'Verify registration', description: 'Verify the registration of a FIDO user.' }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async verifyRegistration( + @Request() req, + @Body() verifyRegistrationDto: VerifyRegistrationDto, + @Param('email') email: string, + @Res() res: Response + ): Promise { + const verifyRegistration = await this.fidoService.verifyRegistration(verifyRegistrationDto, email.toLowerCase()); + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.fido.success.verifyRegistration, + data: verifyRegistration.response + }; + return res.status(HttpStatus.OK).json(finalResponse); + } - /** - * Generate authentication option - * @param GenerateAuthenticationDto The authentication details - * @param res The response object - * @returns Authentication options - */ - @Post('/passkey/authentication-options') - @ApiExcludeEndpoint() - @ApiOperation({ summary: 'Generate authentication option', description: 'Generate authentication options for a FIDO user.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - async generateAuthenticationOption(@Body() body: GenerateAuthenticationDto, @Request() req, @Res() res: Response): Promise { - const generateAuthentication = await this.fidoService.generateAuthenticationOption(body); - const finalResponse: IResponseType = { - statusCode: HttpStatus.OK, - message: ResponseMessages.fido.success.generateAuthenticationOption, - data: generateAuthentication.response - }; - return res.status(HttpStatus.OK).json(finalResponse); - } + /** + * Generate authentication option + * @param GenerateAuthenticationDto The authentication details + * @param res The response object + * @returns Authentication options + */ + @Post('/passkey/authentication-options') + @ApiExcludeEndpoint() + @ApiOperation({ + summary: 'Generate authentication option', + description: 'Generate authentication options for a FIDO user.' + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) + async generateAuthenticationOption( + @Body() body: GenerateAuthenticationDto, + @Request() req, + @Res() res: Response + ): Promise { + const generateAuthentication = await this.fidoService.generateAuthenticationOption(body); + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.fido.success.generateAuthenticationOption, + data: generateAuthentication.response + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } - /** - * Verify authentication - * @param verifyAuthenticationDto The authentication verification details - * @param email The email of the user - * @param res The response object - * @returns Verification result - */ - @Post('/passkey/verify-authentication/:email') - @ApiExcludeEndpoint() - @ApiOperation({ summary: 'Verify authentication', description: 'Verify the authentication of a FIDO user.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async verifyAuthentication(@Request() req, @Body() verifyAuthenticationDto: VerifyAuthenticationDto, @Param('email') email: string, @Res() res: Response): Promise { - const verifyAuthentication = await this.fidoService.verifyAuthentication(verifyAuthenticationDto, req.params.email.toLowerCase()); - const finalResponse: IResponseType = { - statusCode: HttpStatus.OK, - message: ResponseMessages.fido.success.login, - data: verifyAuthentication.response - }; - return res.status(HttpStatus.OK).json(finalResponse); - } + /** + * Verify authentication + * @param verifyAuthenticationDto The authentication verification details + * @param email The email of the user + * @param res The response object + * @returns Verification result + */ + @Post('/passkey/verify-authentication/:email') + @ApiExcludeEndpoint() + @ApiOperation({ summary: 'Verify authentication', description: 'Verify the authentication of a FIDO user.' }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async verifyAuthentication( + @Request() req, + @Body() verifyAuthenticationDto: VerifyAuthenticationDto, + @Param('email') email: string, + @Res() res: Response + ): Promise { + const verifyAuthentication = await this.fidoService.verifyAuthentication( + verifyAuthenticationDto, + email.toLowerCase() + ); + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.fido.success.login, + data: verifyAuthentication.response + }; + return res.status(HttpStatus.OK).json(finalResponse); + } - /** - * Update fido user details - * @param updateFidoUserDetailsDto The user details to be updated - * @param credentialId The credential ID of the user - * @param res The response object - * @returns Updated user details - */ - @Put('/passkey/user-details/:credentialId') - @ApiExcludeEndpoint() - @ApiOperation({ summary: 'Update fido user details', description: 'Update the details of a FIDO user.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async updateFidoUser(@Request() req, @Body() updateFidoUserDetailsDto: UpdateFidoUserDetailsDto, @Param('credentialId') credentialId: string, @Res() res: Response): Promise { - const verifyRegistration = await this.fidoService.updateFidoUser(updateFidoUserDetailsDto, decodeURIComponent(credentialId)); - const finalResponse: IResponseType = { - statusCode: HttpStatus.OK, - message: ResponseMessages.fido.success.updateUserDetails, - data: verifyRegistration.response - }; - return res.status(HttpStatus.OK).json(finalResponse); - } + /** + * Update fido user details + * @param updateFidoUserDetailsDto The user details to be updated + * @param credentialId The credential ID of the user + * @param res The response object + * @returns Updated user details + */ + @Put('/passkey/user-details/:credentialId') + @ApiExcludeEndpoint() + @ApiOperation({ summary: 'Update fido user details', description: 'Update the details of a FIDO user.' }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async updateFidoUser( + @Request() req, + @Body() updateFidoUserDetailsDto: UpdateFidoUserDetailsDto, + @Param('credentialId') credentialId: string, + @Res() res: Response + ): Promise { + const verifyRegistration = await this.fidoService.updateFidoUser( + updateFidoUserDetailsDto, + decodeURIComponent(credentialId) + ); + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.fido.success.updateUserDetails, + data: verifyRegistration.response + }; + return res.status(HttpStatus.OK).json(finalResponse); + } - /** - * Update fido user device name - * @param credentialId The credential ID of the user - * @param deviceName The new device name - * @param res The response object - * @returns Updated device name - */ - @Put('/passkey/:credentialId') - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.HOLDER, OrgRoles.ISSUER, OrgRoles.SUPER_ADMIN, OrgRoles.MEMBER) - @ApiBearerAuth() - @ApiOperation({ summary: 'Update fido user device name', description: 'Update the device name of a FIDO user.' }) - @ApiQuery({ name: 'deviceName', required: true }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async updateFidoUserDeviceName(@Param('credentialId') credentialId: string, @Query('deviceName') deviceName: string, @Res() res: Response): Promise { - try { - const updateDeviceName = await this.fidoService.updateFidoUserDeviceName(credentialId, deviceName); - const finalResponse: IResponseType = { - statusCode: HttpStatus.OK, - message: ResponseMessages.fido.success.updateDeviceName, - data: updateDeviceName.response - }; - return res.status(HttpStatus.OK).json(finalResponse); - } catch (error) { - this.logger.error(`Error::${error}`); - throw error; - } + /** + * Update fido user device name + * @param credentialId The credential ID of the user + * @param deviceName The new device name + * @param res The response object + * @returns Updated device name + */ + @Put('/passkey/:credentialId') + @ApiBearerAuth() + // TODO: Check if roles are required here? + // @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.HOLDER, OrgRoles.ISSUER, OrgRoles.SUPER_ADMIN, OrgRoles.MEMBER) + @ApiOperation({ summary: 'Update fido user device name', description: 'Update the device name of a FIDO user.' }) + @ApiQuery({ name: 'deviceName', required: true }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async updateFidoUserDeviceName( + @Param('credentialId') credentialId: string, + @Query('deviceName') deviceName: string, + @Res() res: Response + ): Promise { + try { + const updateDeviceName = await this.fidoService.updateFidoUserDeviceName(credentialId, deviceName); + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.fido.success.updateDeviceName, + data: updateDeviceName.response + }; + return res.status(HttpStatus.OK).json(finalResponse); + } catch (error) { + this.logger.error(`Error::${error}`); + throw error; } + } - /** - * Delete fido user device - * @param credentialId The credential ID of the user - * @param res The response object - * @returns Success message - */ - @Delete('/passkey/:credentialId') - @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.HOLDER, OrgRoles.ISSUER, OrgRoles.SUPER_ADMIN, OrgRoles.MEMBER) - @ApiBearerAuth() - @ApiOperation({ summary: 'Delete fido user device', description: 'Delete a FIDO user device by its credential ID.' }) - @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - async deleteFidoUserDevice(@Param('credentialId') credentialId: string, @Res() res: Response): Promise { - try { - const deleteFidoUser = await this.fidoService.deleteFidoUserDevice(credentialId); - const finalResponse: IResponseType = { - statusCode: HttpStatus.OK, - message: ResponseMessages.fido.success.deleteDevice, - data: deleteFidoUser.response - }; - return res.status(HttpStatus.OK).json(finalResponse); - } catch (error) { - this.logger.error(`Error::${error}`); - throw error; - } + /** + * Delete fido user device + * @param credentialId The credential ID of the user + * @param res The response object + * @returns Success message + */ + @Delete('/passkey/:credentialId') + @ApiBearerAuth() + // TODO: Check if roles are required here? + // @UseGuards(AuthGuard('jwt'), OrgRolesGuard) + @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.HOLDER, OrgRoles.ISSUER, OrgRoles.SUPER_ADMIN, OrgRoles.MEMBER) + @ApiOperation({ summary: 'Delete fido user device', description: 'Delete a FIDO user device by its credential ID.' }) + @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) + async deleteFidoUserDevice(@Param('credentialId') credentialId: string, @Res() res: Response): Promise { + try { + const deleteFidoUser = await this.fidoService.deleteFidoUserDevice(credentialId); + const finalResponse: IResponseType = { + statusCode: HttpStatus.OK, + message: ResponseMessages.fido.success.deleteDevice, + data: deleteFidoUser.response + }; + return res.status(HttpStatus.OK).json(finalResponse); + } catch (error) { + this.logger.error(`Error::${error}`); + throw error; } + } } diff --git a/apps/api-gateway/src/fido/fido.service.ts b/apps/api-gateway/src/fido/fido.service.ts index e746b3930..0b131bbbb 100644 --- a/apps/api-gateway/src/fido/fido.service.ts +++ b/apps/api-gateway/src/fido/fido.service.ts @@ -1,61 +1,70 @@ import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy, RpcException } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; -import { UpdateFidoUserDetailsDto, VerifyRegistrationDto, GenerateAuthenticationDto, VerifyAuthenticationDto } from '../dtos/fido-user.dto'; +import { + UpdateFidoUserDetailsDto, + VerifyRegistrationDto, + GenerateAuthenticationDto, + VerifyAuthenticationDto +} from '../dtos/fido-user.dto'; import { NATSClient } from '@credebl/common/NATSClient'; - @Injectable() export class FidoService extends BaseService { - constructor( - @Inject('NATS_CLIENT') private readonly fidoServiceProxy: ClientProxy, - private readonly natsClient : NATSClient - ) { - super('FidoService'); - } - async generateRegistrationOption(deviceFlag: boolean, email:string): Promise<{response: object}> { - try { - const payload = { deviceFlag, email }; - return await this.natsClient.sendNats(this.fidoServiceProxy, 'generate-registration-options', payload); - } catch (error) { - throw new RpcException(error.response); - } - + constructor( + @Inject('NATS_CLIENT') private readonly fidoServiceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { + super('FidoService'); + } + async generateRegistrationOption(deviceFlag: boolean, email: string): Promise<{ response: object }> { + try { + const payload = { deviceFlag, email }; + return await this.natsClient.sendNats(this.fidoServiceProxy, 'generate-registration-options', payload); + } catch (error) { + throw new RpcException(error.response); } + } - async verifyRegistration(verifyRegistrationDto: VerifyRegistrationDto, email: string): Promise<{response: object}> { - const payload = { verifyRegistrationDetails: verifyRegistrationDto, email }; - return this.natsClient.sendNats(this.fidoServiceProxy, 'verify-registration', payload); - } + async verifyRegistration(verifyRegistrationDto: VerifyRegistrationDto, email: string): Promise<{ response: object }> { + const payload = { verifyRegistrationDetails: verifyRegistrationDto, email }; + return this.natsClient.sendNats(this.fidoServiceProxy, 'verify-registration', payload); + } - async generateAuthenticationOption(generateAuthentication: GenerateAuthenticationDto) : Promise<{response: object}> { - const {userName} = generateAuthentication; - const payload = { userName }; - return this.natsClient.sendNats(this.fidoServiceProxy, 'generate-authentication-options', payload); - } + async generateAuthenticationOption(generateAuthentication: GenerateAuthenticationDto): Promise<{ response: object }> { + const { userName } = generateAuthentication; + const payload = { userName }; + return this.natsClient.sendNats(this.fidoServiceProxy, 'generate-authentication-options', payload); + } - async verifyAuthentication(verifyAuthenticationDto: VerifyAuthenticationDto, email: string): Promise<{response: object}> { - const payload = { verifyAuthenticationDetails: verifyAuthenticationDto, email }; - return this.natsClient.sendNats(this.fidoServiceProxy, 'verify-authentication', payload); - } + async verifyAuthentication( + verifyAuthenticationDto: VerifyAuthenticationDto, + email: string + ): Promise<{ response: object }> { + const payload = { verifyAuthenticationDetails: verifyAuthenticationDto, email }; + return this.natsClient.sendNats(this.fidoServiceProxy, 'verify-authentication', payload); + } - async updateFidoUser(updateFidoUserDetailsDto: UpdateFidoUserDetailsDto, credentialId: string) : Promise<{response: object}> { - const payload = {updateFidoUserDetailsDto, credentialId}; - return this.natsClient.sendNats(this.fidoServiceProxy, 'update-user', payload); - } + async updateFidoUser( + updateFidoUserDetailsDto: UpdateFidoUserDetailsDto, + credentialId: string + ): Promise<{ response: object }> { + const payload = { updateFidoUserDetailsDto, credentialId }; + return this.natsClient.sendNats(this.fidoServiceProxy, 'update-user', payload); + } - async fetchFidoUserDetails(email: string): Promise<{response: string}> { - const payload = { email }; - return this.natsClient.sendNats(this.fidoServiceProxy, 'fetch-fido-user-details', payload); - } + async fetchFidoUserDetails(email: string): Promise<{ response: string }> { + const payload = { email }; + return this.natsClient.sendNats(this.fidoServiceProxy, 'fetch-fido-user-details', payload); + } - async deleteFidoUserDevice(credentialId: string): Promise<{response: object}> { - const payload = { credentialId }; - return this.natsClient.sendNats(this.fidoServiceProxy, 'delete-fido-user-device', payload); - } + async deleteFidoUserDevice(credentialId: string): Promise<{ response: object }> { + const payload = { credentialId }; + return this.natsClient.sendNats(this.fidoServiceProxy, 'delete-fido-user-device', payload); + } - async updateFidoUserDeviceName(credentialId: string, deviceName: string): Promise<{response: string}> { - const payload = { credentialId, deviceName }; - return this.natsClient.sendNats(this.fidoServiceProxy, 'update-fido-user-device-name', payload); - } + async updateFidoUserDeviceName(credentialId: string, deviceName: string): Promise<{ response: string }> { + const payload = { credentialId, deviceName }; + return this.natsClient.sendNats(this.fidoServiceProxy, 'update-fido-user-device-name', payload); + } } diff --git a/apps/api-gateway/src/geo-location/geo-location.service.ts b/apps/api-gateway/src/geo-location/geo-location.service.ts index ab8f92f7b..43aab40a5 100644 --- a/apps/api-gateway/src/geo-location/geo-location.service.ts +++ b/apps/api-gateway/src/geo-location/geo-location.service.ts @@ -1,12 +1,15 @@ import { CountryInterface, StateInterface, CityInterface } from '@credebl/common/interfaces/geolocation.interface'; import { Inject, Injectable } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class GeoLocationService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, private readonly natsClient : NATSClient) { + constructor( + @Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { super('GeoLocationService'); } diff --git a/apps/api-gateway/src/issuance/issuance.controller.ts b/apps/api-gateway/src/issuance/issuance.controller.ts index b94ff1777..86add6131 100644 --- a/apps/api-gateway/src/issuance/issuance.controller.ts +++ b/apps/api-gateway/src/issuance/issuance.controller.ts @@ -84,8 +84,8 @@ import { NotFoundErrorDto } from '../dtos/not-found-error.dto'; @Controller() @UseFilters(CustomExceptionFilter) @ApiTags('credentials') -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class IssuanceController { constructor( private readonly issueCredentialService: IssuanceService, @@ -255,9 +255,9 @@ export class IssuanceController { */ @Post('/orgs/:orgId/credentials/bulk/template') @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) - @ApiNotFoundResponse({ status: HttpStatus.NOT_FOUND, description: 'Not Found', type: NotFoundErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiNotFoundResponse({ description: 'Not Found', type: NotFoundErrorDto }) @ApiBearerAuth() @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER) @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @@ -316,12 +316,10 @@ export class IssuanceController { }) @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) @ApiUnauthorizedResponse({ - status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) @ApiForbiddenResponse({ - status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) @@ -410,13 +408,11 @@ export class IssuanceController { @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @ApiBearerAuth() @ApiUnauthorizedResponse({ - status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) @ApiForbiddenResponse({ - status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) @@ -472,12 +468,10 @@ export class IssuanceController { @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @ApiBearerAuth() @ApiUnauthorizedResponse({ - status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) @ApiForbiddenResponse({ - status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) @@ -571,12 +565,10 @@ export class IssuanceController { @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @ApiBearerAuth() @ApiUnauthorizedResponse({ - status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) @ApiForbiddenResponse({ - status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) @@ -613,12 +605,10 @@ export class IssuanceController { @ApiBearerAuth() @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) @ApiUnauthorizedResponse({ - status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) @ApiForbiddenResponse({ - status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) @@ -654,13 +644,11 @@ export class IssuanceController { @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @ApiBearerAuth() @ApiUnauthorizedResponse({ - status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) @ApiForbiddenResponse({ - status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) @@ -697,12 +685,10 @@ export class IssuanceController { @ApiBearerAuth() @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) @ApiUnauthorizedResponse({ - status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) @ApiForbiddenResponse({ - status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) diff --git a/apps/api-gateway/src/issuance/issuance.service.ts b/apps/api-gateway/src/issuance/issuance.service.ts index dd791f7e8..b09b8a4a3 100644 --- a/apps/api-gateway/src/issuance/issuance.service.ts +++ b/apps/api-gateway/src/issuance/issuance.service.ts @@ -1,6 +1,5 @@ /* eslint-disable camelcase */ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { IUserRequest } from '@credebl/user-request/user-request.interface'; import { @@ -28,6 +27,7 @@ import { import { IssueCredentialDto } from './dtos/multi-connection.dto'; import { user } from '@prisma/client'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class IssuanceService extends BaseService { constructor( diff --git a/apps/api-gateway/src/main.ts b/apps/api-gateway/src/main.ts index 0b08970c5..e92468ce8 100644 --- a/apps/api-gateway/src/main.ts +++ b/apps/api-gateway/src/main.ts @@ -84,7 +84,7 @@ async function bootstrap(): Promise { const document = SwaggerModule.createDocument(app, options); SwaggerModule.setup('api', app, document); - const httpAdapter = app.get(HttpAdapterHost); + const httpAdapter: HttpAdapterHost = app.get(HttpAdapterHost) as HttpAdapterHost; app.useGlobalFilters(new AllExceptionsFilter(httpAdapter)); const { ENABLE_CORS_IP_LIST } = process.env || {}; if (ENABLE_CORS_IP_LIST && '' !== ENABLE_CORS_IP_LIST) { diff --git a/apps/api-gateway/src/notification/notification.controller.ts b/apps/api-gateway/src/notification/notification.controller.ts index c435d1eaa..1a8489bf2 100644 --- a/apps/api-gateway/src/notification/notification.controller.ts +++ b/apps/api-gateway/src/notification/notification.controller.ts @@ -1,6 +1,13 @@ import { CustomExceptionFilter } from '@credebl/common/exception-handler'; import { Body, Controller, HttpStatus, Logger, Post, Res, UseFilters } from '@nestjs/common'; -import { ApiExcludeEndpoint, ApiForbiddenResponse, ApiOperation, ApiResponse, ApiTags, ApiUnauthorizedResponse } from '@nestjs/swagger'; +import { + ApiExcludeEndpoint, + ApiForbiddenResponse, + ApiOperation, + ApiResponse, + ApiTags, + ApiUnauthorizedResponse +} from '@nestjs/swagger'; import { UnauthorizedErrorDto } from '../dtos/unauthorized-error.dto'; import { ForbiddenErrorDto } from '../dtos/forbidden-error.dto'; import { ApiResponseDto } from '../dtos/apiResponse.dto'; @@ -10,75 +17,67 @@ import { Response } from 'express'; import { ResponseMessages } from '@credebl/common/response-messages'; import { NotificationService } from './notification.service'; - @Controller('notification') @UseFilters(CustomExceptionFilter) @ApiTags('notification') -@ApiUnauthorizedResponse({ status: 401, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: 403, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class NotificationController { - constructor( - private readonly notificationService: NotificationService - ) { } - private readonly logger = new Logger('NotificationController'); - - /** - * Register organization webhook endpoint - * @param registerOrgWebhhookEndpointDto - * @param res - * @returns Stored notification data - */ - @Post('/register/webhook-endpoint') - @ApiExcludeEndpoint() - @ApiOperation({ - summary: `Register organization webhook endpoint for notification`, - description: `Register organization webhook endpoint for notification` - }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - async registerOrgWebhookEndpoint( - @Body() registerOrgWebhhookEndpointDto: RegisterOrgWebhhookEndpointDto, - @Res() res: Response - ): Promise { - - const registerUserEndpoint = await this.notificationService.registerOrgWebhookEndpoint( - registerOrgWebhhookEndpointDto - ); + constructor(private readonly notificationService: NotificationService) {} + private readonly logger = new Logger('NotificationController'); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.notification.success.register, - data: registerUserEndpoint - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } + /** + * Register organization webhook endpoint + * @param registerOrgWebhhookEndpointDto + * @param res + * @returns Stored notification data + */ + @Post('/register/webhook-endpoint') + @ApiExcludeEndpoint() + @ApiOperation({ + summary: `Register organization webhook endpoint for notification`, + description: `Register organization webhook endpoint for notification` + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) + async registerOrgWebhookEndpoint( + @Body() registerOrgWebhhookEndpointDto: RegisterOrgWebhhookEndpointDto, + @Res() res: Response + ): Promise { + const registerUserEndpoint = + await this.notificationService.registerOrgWebhookEndpoint(registerOrgWebhhookEndpointDto); - /** - * Send notification for holder - * @param sendNotificationDto - * @param res - * @returns Get notification details - */ - @Post('/') - @ApiExcludeEndpoint() - @ApiOperation({ - summary: `Send notification for holder`, - description: `Send notification for holder` - }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - async sendNotification( - @Body() notificationRequestBody: SendNotificationDto, - @Res() res: Response - ): Promise { + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.notification.success.register, + data: registerUserEndpoint + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } - const sendNotification = await this.notificationService.sendNotification( - notificationRequestBody - ); + /** + * Send notification for holder + * @param sendNotificationDto + * @param res + * @returns Get notification details + */ + @Post('/') + @ApiExcludeEndpoint() + @ApiOperation({ + summary: `Send notification for holder`, + description: `Send notification for holder` + }) + @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) + async sendNotification( + @Body() notificationRequestBody: SendNotificationDto, + @Res() res: Response + ): Promise { + const sendNotification = await this.notificationService.sendNotification(notificationRequestBody); - const finalResponse: IResponse = { - statusCode: HttpStatus.CREATED, - message: ResponseMessages.notification.success.sendNotification, - data: sendNotification - }; - return res.status(HttpStatus.CREATED).json(finalResponse); - } -} \ No newline at end of file + const finalResponse: IResponse = { + statusCode: HttpStatus.CREATED, + message: ResponseMessages.notification.success.sendNotification, + data: sendNotification + }; + return res.status(HttpStatus.CREATED).json(finalResponse); + } +} diff --git a/apps/api-gateway/src/notification/notification.service.ts b/apps/api-gateway/src/notification/notification.service.ts index 130012fc2..d1f3e3e03 100644 --- a/apps/api-gateway/src/notification/notification.service.ts +++ b/apps/api-gateway/src/notification/notification.service.ts @@ -1,31 +1,40 @@ import { Inject, Injectable } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { RegisterOrgWebhhookEndpointDto, SendNotificationDto } from './dtos/notification.dto'; import { INotification } from './interfaces/notification.interfaces'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class NotificationService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, private readonly natsClient : NATSClient) { - super('NotificationService'); - } + constructor( + @Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { + super('NotificationService'); + } - /** - * Register organization webhook endpoint - * @param registerOrgWebhhookEndpointDto - * @returns Stored notification data - */ - async registerOrgWebhookEndpoint(registerOrgWebhhookEndpointDto: RegisterOrgWebhhookEndpointDto): Promise { - return this.natsClient.sendNatsMessage(this.serviceProxy, 'register-org-webhook-endpoint-for-notification', registerOrgWebhhookEndpointDto); - } + /** + * Register organization webhook endpoint + * @param registerOrgWebhhookEndpointDto + * @returns Stored notification data + */ + async registerOrgWebhookEndpoint( + registerOrgWebhhookEndpointDto: RegisterOrgWebhhookEndpointDto + ): Promise { + return this.natsClient.sendNatsMessage( + this.serviceProxy, + 'register-org-webhook-endpoint-for-notification', + registerOrgWebhhookEndpointDto + ); + } - /** - * Send notification for holder - * @param sendNotificationDto - * @returns Get notification details - */ - async sendNotification(notificationRequestBody: SendNotificationDto): Promise { - return this.natsClient.sendNatsMessage(this.serviceProxy, 'send-notification', notificationRequestBody); - } -} \ No newline at end of file + /** + * Send notification for holder + * @param sendNotificationDto + * @returns Get notification details + */ + async sendNotification(notificationRequestBody: SendNotificationDto): Promise { + return this.natsClient.sendNatsMessage(this.serviceProxy, 'send-notification', notificationRequestBody); + } +} diff --git a/apps/api-gateway/src/organization/organization.controller.ts b/apps/api-gateway/src/organization/organization.controller.ts index dd034e418..f07d44db5 100644 --- a/apps/api-gateway/src/organization/organization.controller.ts +++ b/apps/api-gateway/src/organization/organization.controller.ts @@ -58,8 +58,8 @@ import { TrimStringParamPipe } from '@credebl/common/cast.helper'; @UseFilters(CustomExceptionFilter) @Controller('orgs') @ApiTags('organizations') -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class OrganizationController { constructor( private readonly organizationService: OrganizationService, diff --git a/apps/api-gateway/src/organization/organization.service.ts b/apps/api-gateway/src/organization/organization.service.ts index c407385e0..d5928a653 100644 --- a/apps/api-gateway/src/organization/organization.service.ts +++ b/apps/api-gateway/src/organization/organization.service.ts @@ -1,6 +1,5 @@ import { Inject } from '@nestjs/common'; import { Injectable } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { CreateOrganizationDto } from './dtos/create-organization-dto'; import { BulkSendInvitationDto } from './dtos/send-invitation.dto'; @@ -24,6 +23,7 @@ import { IClientRoles } from '@credebl/client-registration/interfaces/client.int import { GetAllOrganizationsDto } from './dtos/get-organizations.dto'; import { PrimaryDid } from './dtos/set-primary-did.dto'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class OrganizationService extends BaseService { diff --git a/apps/api-gateway/src/platform/platform.service.ts b/apps/api-gateway/src/platform/platform.service.ts index 36838b02d..8fdc9865e 100644 --- a/apps/api-gateway/src/platform/platform.service.ts +++ b/apps/api-gateway/src/platform/platform.service.ts @@ -1,5 +1,4 @@ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from '../../../../libs/service/base.service'; import { ILedgers, ISchemaSearchPayload } from '../interfaces/ISchemaSearch.interface'; import { IUserRequestInterface } from '../interfaces/IUserRequestInterface'; @@ -7,39 +6,41 @@ import { INetworkUrl, ISchemaDetails } from '@credebl/common/interfaces/schema.i import { GetAllPlatformCredDefsDto } from '../credential-definition/dto/get-all-platform-cred-defs.dto'; import { IPlatformCredDefsData } from '@credebl/common/interfaces/cred-def.interface'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class PlatformService extends BaseService { - constructor( - @Inject('NATS_CLIENT') private readonly platformServiceProxy: ClientProxy, - private readonly natsClient : NATSClient - ) { - super('PlatformService'); - } - - async getAllSchema(schemaSearchCriteria: ISchemaSearchPayload, user: IUserRequestInterface): Promise { - const schemaSearch = { schemaSearchCriteria, user }; - return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-schemas', schemaSearch); + constructor( + @Inject('NATS_CLIENT') private readonly platformServiceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { + super('PlatformService'); + } - } + async getAllSchema(schemaSearchCriteria: ISchemaSearchPayload, user: IUserRequestInterface): Promise { + const schemaSearch = { schemaSearchCriteria, user }; + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-schemas', schemaSearch); + } - async getAllPlatformCredDefs(getAllPlatformCredDefs: GetAllPlatformCredDefsDto, user: IUserRequestInterface): Promise { - const credDefs = { ...getAllPlatformCredDefs, user }; - return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-platform-cred-defs', credDefs); - } + async getAllPlatformCredDefs( + getAllPlatformCredDefs: GetAllPlatformCredDefsDto, + user: IUserRequestInterface + ): Promise { + const credDefs = { ...getAllPlatformCredDefs, user }; + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-platform-cred-defs', credDefs); + } - async getAllLedgers(): Promise { - const payload = {}; - return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-ledgers', payload); - } + async getAllLedgers(): Promise { + const payload = {}; + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-ledgers', payload); + } - async getNetworkUrl(indyNamespace: string): Promise { - return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-network-url', indyNamespace); - } + async getNetworkUrl(indyNamespace: string): Promise { + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-network-url', indyNamespace); + } - async getShorteningUrlById(referenceId: string): Promise { - - // NATS call - return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-shortening-url', referenceId); - } -} \ No newline at end of file + async getShorteningUrlById(referenceId: string): Promise { + // NATS call + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-shortening-url', referenceId); + } +} diff --git a/apps/api-gateway/src/revocation/revocation.service.ts b/apps/api-gateway/src/revocation/revocation.service.ts index 706f2408a..d6e8cfb9f 100644 --- a/apps/api-gateway/src/revocation/revocation.service.ts +++ b/apps/api-gateway/src/revocation/revocation.service.ts @@ -2,11 +2,11 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable camelcase */ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { CreateRevocationRegistryDto } from '../dtos/create-revocation-registry.dto'; import { UpdateRevocationRegistryUriDto } from '../dtos/update-revocation-registry.dto'; import { BaseService } from 'libs/service/base.service'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class RevocationService extends BaseService { @@ -40,7 +40,7 @@ export class RevocationService extends BaseService { const payload = { revocationId, user }; return this.natsClient.sendNats(this.revocationServiceProxy, 'publish-revocation-registry', payload); } - // eslint-disable-next-line @typescript-eslint/explicit-function-return-type + // eslint-disable-next-line @typescript-eslint/explicit-function-return-type getRevocationRegistry(rev_reg_id: string, user: any) { this.logger.log('**** getRevocationRegistry called'); const payload = { rev_reg_id, user }; diff --git a/apps/api-gateway/src/schema/dtos/get-all-schema.dto.ts b/apps/api-gateway/src/schema/dtos/get-all-schema.dto.ts index 0e77da8cd..ff00b52c2 100644 --- a/apps/api-gateway/src/schema/dtos/get-all-schema.dto.ts +++ b/apps/api-gateway/src/schema/dtos/get-all-schema.dto.ts @@ -7,129 +7,126 @@ import { toNumber, trim } from '@credebl/common/cast.helper'; import { CredDefSortFields, SchemaType, SortFields, SortValue } from '@credebl/enum/enum'; export class GetAllSchemaDto { - @ApiProperty({ required: false }) - @IsOptional() - @Transform(({ value }) => trim(value)) - @Type(() => String) - searchByText: string = ''; - - @ApiProperty({ required: false, default: 1 }) - @IsOptional() - @Transform(({ value }) => toNumber(value)) - @Min(1, { message: 'Page number must be greater than 0' }) - pageNumber: number = 1; - - @ApiProperty({ required: false, default: 10 }) - @IsOptional() - @Transform(({ value }) => toNumber(value)) - @Min(1, { message: 'Page size must be greater than 0' }) - pageSize: number = 10; - - @ApiProperty({ - required: false - }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsEnum(SortFields) - sortField: string = SortFields.CREATED_DATE_TIME; - - @ApiProperty({ - enum: [SortValue.DESC, SortValue.ASC], - required: false - }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsEnum(SortValue) - sortBy: string = SortValue.DESC; + @ApiProperty({ required: false }) + @IsOptional() + @Transform(({ value }) => trim(value)) + @Type(() => String) + searchByText: string = ''; + + @ApiProperty({ required: false, default: 1 }) + @IsOptional() + @Transform(({ value }) => toNumber(value)) + @Min(1, { message: 'Page number must be greater than 0' }) + pageNumber: number = 1; + + @ApiProperty({ required: false, default: 10 }) + @IsOptional() + @Transform(({ value }) => toNumber(value)) + @Min(1, { message: 'Page size must be greater than 0' }) + pageSize: number = 10; + + @ApiProperty({ + required: false + }) + @Transform(({ value }) => trim(value)) + @IsOptional() + @IsEnum(SortFields) + sortField: string = SortFields.CREATED_DATE_TIME; + + @ApiProperty({ + enum: [SortValue.DESC, SortValue.ASC], + required: false + }) + @Transform(({ value }) => trim(value)) + @IsOptional() + @IsEnum(SortValue) + sortBy: string = SortValue.DESC; } export class GetCredentialDefinitionBySchemaIdDto { - - @ApiProperty({ required: false, default: 1 }) - @IsOptional() - @Transform(({ value }) => toNumber(value)) - @Min(1, { message: 'Page number must be greater than 0' }) - pageNumber: number = 1; - - @ApiProperty({ required: false, default: 10 }) - @IsOptional() - @Transform(({ value }) => toNumber(value)) - @Min(1, { message: 'Page size must be greater than 0' }) - pageSize: number = 10; - - @ApiProperty({ required: false }) - @IsOptional() - @Type(() => String) - searchByText: string = ''; - - @ApiProperty({ - required: false - }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsEnum(CredDefSortFields) - sortField: string = SortFields.CREATED_DATE_TIME; - - @ApiProperty({ - enum: [SortValue.DESC, SortValue.ASC], - required: false - }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsEnum(SortValue) - sortBy: string = SortValue.DESC; - - schemaId: string; - - orgId: string; + @ApiProperty({ required: false, default: 1 }) + @IsOptional() + @Transform(({ value }) => toNumber(value)) + @Min(1, { message: 'Page number must be greater than 0' }) + pageNumber: number = 1; + + @ApiProperty({ required: false, default: 10 }) + @IsOptional() + @Transform(({ value }) => toNumber(value)) + @Min(1, { message: 'Page size must be greater than 0' }) + pageSize: number = 10; + + @ApiProperty({ required: false }) + @IsOptional() + @Type(() => String) + searchByText: string = ''; + + @ApiProperty({ + required: false, + enum: CredDefSortFields + }) + @Transform(({ value }) => trim(value)) + @IsOptional() + @IsEnum(CredDefSortFields) + sortField: string = CredDefSortFields.CREATED_DATE_TIME; + + @ApiProperty({ + enum: [SortValue.DESC, SortValue.ASC], + required: false + }) + @Transform(({ value }) => trim(value)) + @IsOptional() + @IsEnum(SortValue) + sortBy: string = SortValue.DESC; + + schemaId: string; + + orgId: string; } - export class GetAllSchemaByPlatformDto { - - @ApiProperty({ example: '1a7eac11-ff05-40d7-8351-4d7467687cad'}) - @ApiPropertyOptional() - @Transform(({ value }) => ('string' === typeof value && '' === value.trim() ? undefined : value.trim())) - @IsOptional() - @IsUUID('4', { message: 'Invalid format of ledgerId' }) - ledgerId?: string; - - @ApiProperty({ required: false, default: 1 }) - @IsOptional() - @Transform(({ value }) => toNumber(value)) - @Min(1, { message: 'Page number must be greater than 0' }) - pageNumber: number = 1; - - @ApiProperty({ required: false }) - @IsOptional() - @Type(() => String) - searchByText: string = ''; - - @ApiProperty({ required: false, default: 10 }) - @IsOptional() - @Transform(({ value }) => toNumber(value)) - @Min(1, { message: 'Page size must be greater than 0' }) - pageSize: number = 10; - - @ApiProperty({ - required: false - }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsEnum(SortFields) - sorting: string = SortFields.CREATED_DATE_TIME; - - @ApiProperty({ required: false }) - @IsOptional() - sortByValue: string = SortValue.DESC; - - @ApiProperty({ - type: SchemaType, - required: false - }) - @Transform(({ value }) => trim(value)) - @IsOptional() - @IsEnum(SchemaType) - schemaType: SchemaType; - -} \ No newline at end of file + @ApiProperty({ example: '1a7eac11-ff05-40d7-8351-4d7467687cad' }) + @ApiPropertyOptional() + @Transform(({ value }) => ('string' === typeof value && '' === value.trim() ? undefined : value.trim())) + @IsOptional() + @IsUUID('4', { message: 'Invalid format of ledgerId' }) + ledgerId?: string; + + @ApiProperty({ required: false, default: 1 }) + @IsOptional() + @Transform(({ value }) => toNumber(value, { min: 1 })) + @Min(1, { message: 'Page number must be greater than 0' }) + pageNumber: number = 1; + + @ApiProperty({ required: false }) + @IsOptional() + @Type(() => String) + searchByText: string = ''; + + @ApiProperty({ required: false, default: 10 }) + @IsOptional() + @Transform(({ value }) => toNumber(value, { min: 1 })) + @Min(1, { message: 'Page size must be greater than 0' }) + pageSize: number = 10; + + @ApiProperty({ + required: false + }) + @Transform(({ value }) => trim(value)) + @IsOptional() + @IsEnum(SortFields) + sorting: string = SortFields.CREATED_DATE_TIME; + + @ApiProperty({ required: false }) + @IsOptional() + sortByValue: string = SortValue.DESC; + + @ApiProperty({ + enum: SchemaType, + required: false + }) + @Transform(({ value }) => trim(value)) + @IsOptional() + @IsEnum(SchemaType) + schemaType: SchemaType; +} diff --git a/apps/api-gateway/src/schema/schema.controller.ts b/apps/api-gateway/src/schema/schema.controller.ts index 93682107f..8373e8aa2 100644 --- a/apps/api-gateway/src/schema/schema.controller.ts +++ b/apps/api-gateway/src/schema/schema.controller.ts @@ -1,7 +1,31 @@ -import { Controller, Logger, Post, Body, HttpStatus, UseGuards, Get, Query, BadRequestException, Res, UseFilters, Param, ParseUUIDPipe, Put } from '@nestjs/common'; +import { + Controller, + Logger, + Post, + Body, + HttpStatus, + UseGuards, + Get, + Query, + BadRequestException, + Res, + UseFilters, + Param, + ParseUUIDPipe, + Put +} from '@nestjs/common'; /* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable camelcase */ -import { ApiOperation, ApiResponse, ApiTags, ApiBearerAuth, ApiForbiddenResponse, ApiUnauthorizedResponse, ApiQuery, ApiExcludeEndpoint } from '@nestjs/swagger'; +import { + ApiOperation, + ApiResponse, + ApiTags, + ApiBearerAuth, + ApiForbiddenResponse, + ApiUnauthorizedResponse, + ApiQuery, + ApiExcludeEndpoint +} from '@nestjs/swagger'; import { SchemaService } from './schema.service'; import { AuthGuard } from '@nestjs/passport'; import { ApiResponseDto } from '../dtos/apiResponse.dto'; @@ -27,14 +51,12 @@ import { UpdateSchemaDto } from './dtos/update-schema-dto'; @Controller('orgs') @ApiTags('schemas') @ApiBearerAuth() -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class SchemaController { - constructor(private readonly appService: SchemaService - ) { } + constructor(private readonly appService: SchemaService) {} private readonly logger = new Logger('SchemaController'); - /** * Retrieves schema information from the ledger using its schema ID. * @@ -52,14 +74,13 @@ export class SchemaController { @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) async getSchemaById( @Res() res: Response, - @Param('orgId') orgId: string, + @Param('orgId') orgId: string, @Param('schemaId', TrimStringParamPipe) schemaId: string ): Promise { - if (!schemaId) { throw new BadRequestException(ResponseMessages.schema.error.invalidSchemaId); } - + const schemaDetails = await this.appService.getSchemaById(schemaId, orgId); const finalResponse: IResponse = { statusCode: HttpStatus.OK, @@ -69,14 +90,13 @@ export class SchemaController { return res.status(HttpStatus.OK).json(finalResponse); } - /** * Retrieves a list of credential definitions associated with a given schema ID. - * + * * @param orgId The organization ID. * @param schemaId The unique schema ID. * @param sortField The field by which to sort the results (optional). - * + * * @returns A list of credential definitions filtered by schema ID. */ @Get('/:orgId/schemas/:schemaId/cred-defs') @@ -93,12 +113,20 @@ export class SchemaController { @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER) @UseGuards(AuthGuard('jwt'), OrgRolesGuard) async getcredDeffListBySchemaId( - @Param('orgId', new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); }})) orgId: string, + @Param( + 'orgId', + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); + } + }) + ) + orgId: string, @Param('schemaId', TrimStringParamPipe) schemaId: string, @Query() getCredentialDefinitionBySchemaIdDto: GetCredentialDefinitionBySchemaIdDto, @Res() res: Response, - @User() user: IUserRequestInterface): Promise { - + @User() user: IUserRequestInterface + ): Promise { if (!schemaId) { throw new BadRequestException(ResponseMessages.schema.error.invalidSchemaId); } @@ -106,21 +134,24 @@ export class SchemaController { getCredentialDefinitionBySchemaIdDto.schemaId = schemaId; getCredentialDefinitionBySchemaIdDto.orgId = orgId; - const credentialDefinitionList = await this.appService.getcredDefListBySchemaId(getCredentialDefinitionBySchemaIdDto, user); + const credentialDefinitionList = await this.appService.getcredDefListBySchemaId( + getCredentialDefinitionBySchemaIdDto, + user + ); const finalResponse: IResponse = { statusCode: HttpStatus.OK, message: ResponseMessages.schema.success.fetch, data: credentialDefinitionList }; - + return res.status(HttpStatus.OK).json(finalResponse); } /** * Retrieves a list of schemas associated with a given organization ID. - * + * * @param orgId The organization ID. - * + * * @returns A list of schemas filtered by organization ID. */ @Get('/:orgId/schemas') @@ -138,11 +169,18 @@ export class SchemaController { @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) async getSchemas( @Query() getAllSchemaDto: GetAllSchemaDto, - @Param('orgId', new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); }})) orgId: string, + @Param( + 'orgId', + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); + } + }) + ) + orgId: string, @Res() res: Response, @User() user: IUserRequestInterface ): Promise { - const { pageSize, searchByText, pageNumber, sortField, sortBy } = getAllSchemaDto; const schemaSearchCriteria: ISchemaSearchPayload = { pageNumber, @@ -161,25 +199,37 @@ export class SchemaController { return res.status(HttpStatus.OK).json(finalResponse); } - -/** - * Create and register various types of schemas. - * - * @param orgId The organization ID. - * @param schemaDetails The schema details. - * @returns The created schema details. - */ + /** + * Create and register various types of schemas. + * + * @param orgId The organization ID. + * @param schemaDetails The schema details. + * @returns The created schema details. + */ @Post('/:orgId/schemas') @ApiOperation({ summary: 'Create and register various types of schemas.', - description: 'Create and register a schema for an organization. Supports multiple systems like Indy, Polygon, and W3C standards.' - } - ) + description: + 'Create and register a schema for an organization. Supports multiple systems like Indy, Polygon, and W3C standards.' + }) @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - async createSchema(@Res() res: Response, @Body() schemaDetails: GenericSchemaDTO, @Param('orgId', new ParseUUIDPipe({exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); }})) orgId: string, @User() user: IUserRequestInterface): Promise { - const schemaResponse = await this.appService.createSchema(schemaDetails, user, orgId); + async createSchema( + @Res() res: Response, + @Body() schemaDetails: GenericSchemaDTO, + @Param( + 'orgId', + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); + } + }) + ) + orgId: string, + @User() user: IUserRequestInterface + ): Promise { + const schemaResponse = await this.appService.createSchema(schemaDetails, user, orgId); const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, message: ResponseMessages.schema.success.create, @@ -189,10 +239,10 @@ export class SchemaController { } /** - * Update an schema alias - * @param updateSchemaDto The details of the schema to be updated - * @returns Success message - */ + * Update an schema alias + * @param updateSchemaDto The details of the schema to be updated + * @returns Success message + */ @Put('/schema') @ApiOperation({ summary: 'Update schema', description: 'Update the details of the schema' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) @@ -200,8 +250,7 @@ export class SchemaController { @ApiBearerAuth() @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) @UseGuards(AuthGuard('jwt')) - async updateSchema(@Body() updateSchemaDto: UpdateSchemaDto, @Res() res: Response): Promise { - + async updateSchema(@Body() updateSchemaDto: UpdateSchemaDto, @Res() res: Response): Promise { await this.appService.updateSchema(updateSchemaDto); const finalResponse: IResponse = { @@ -210,5 +259,4 @@ export class SchemaController { }; return res.status(HttpStatus.OK).json(finalResponse); } - } diff --git a/apps/api-gateway/src/schema/schema.service.ts b/apps/api-gateway/src/schema/schema.service.ts index bb328e5dc..16f6b79da 100644 --- a/apps/api-gateway/src/schema/schema.service.ts +++ b/apps/api-gateway/src/schema/schema.service.ts @@ -1,41 +1,52 @@ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from '../../../../libs/service/base.service'; import { GenericSchemaDTO } from '../dtos/create-schema.dto'; import { ISchemaSearchPayload } from '../interfaces/ISchemaSearch.interface'; import { ISchemaInfo, IUserRequestInterface } from './interfaces'; -import { ICredDefWithPagination, ISchemaData, ISchemasWithPagination } from '@credebl/common/interfaces/schema.interface'; +import { + ICredDefWithPagination, + ISchemaData, + ISchemasWithPagination +} from '@credebl/common/interfaces/schema.interface'; import { GetCredentialDefinitionBySchemaIdDto } from './dtos/get-all-schema.dto'; import { NATSClient } from '@credebl/common/NATSClient'; import { UpdateSchemaResponse } from 'apps/ledger/src/schema/interfaces/schema.interface'; import { UpdateSchemaDto } from './dtos/update-schema-dto'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class SchemaService extends BaseService { - constructor( @Inject('NATS_CLIENT') private readonly schemaServiceProxy: ClientProxy, - private readonly natsClient : NATSClient - ) { super(`Schema Service`); } + private readonly natsClient: NATSClient + ) { + super(`Schema Service`); + } createSchema(schemaDetails: GenericSchemaDTO, user: IUserRequestInterface, orgId: string): Promise { const payload = { schemaDetails, user, orgId }; return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'create-schema', payload); } - getSchemaById(schemaId: string, orgId: string): Promise { const payload = { schemaId, orgId }; return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'get-schema-by-id', payload); } - getSchemas(schemaSearchCriteria: ISchemaSearchPayload, user: IUserRequestInterface, orgId: string): Promise { + getSchemas( + schemaSearchCriteria: ISchemaSearchPayload, + user: IUserRequestInterface, + orgId: string + ): Promise { const schemaSearch = { schemaSearchCriteria, user, orgId }; return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'get-schemas', schemaSearch); } - getcredDefListBySchemaId(schemaSearchCriteria: GetCredentialDefinitionBySchemaIdDto, user: IUserRequestInterface): Promise { + getcredDefListBySchemaId( + schemaSearchCriteria: GetCredentialDefinitionBySchemaIdDto, + user: IUserRequestInterface + ): Promise { const payload = { schemaSearchCriteria, user }; return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'get-cred-def-list-by-schemas-id', payload); } @@ -44,4 +55,4 @@ export class SchemaService extends BaseService { const payload = { schemaDetails }; return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'update-schema', payload); } -} \ No newline at end of file +} diff --git a/apps/api-gateway/src/user/user.controller.ts b/apps/api-gateway/src/user/user.controller.ts index 588f7e259..24d4918d4 100644 --- a/apps/api-gateway/src/user/user.controller.ts +++ b/apps/api-gateway/src/user/user.controller.ts @@ -55,8 +55,8 @@ import { TrimStringParamPipe } from '@credebl/common/cast.helper'; @UseFilters(CustomExceptionFilter) @Controller('users') @ApiTags('users') -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class UserController { constructor( private readonly userService: UserService, diff --git a/apps/api-gateway/src/user/user.service.ts b/apps/api-gateway/src/user/user.service.ts index 1d0281af1..03029dd27 100644 --- a/apps/api-gateway/src/user/user.service.ts +++ b/apps/api-gateway/src/user/user.service.ts @@ -1,5 +1,4 @@ import { Inject, Injectable } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { AcceptRejectInvitationDto } from './dto/accept-reject-invitation.dto'; import { GetAllInvitationsDto } from './dto/get-all-invitations.dto'; @@ -12,6 +11,7 @@ import { IUserInvitations } from '@credebl/common/interfaces/user.interface'; import { user } from '@prisma/client'; import { PaginationDto } from '@credebl/common/dtos/pagination.dto'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class UserService extends BaseService { diff --git a/apps/api-gateway/src/utilities/utilities.controller.ts b/apps/api-gateway/src/utilities/utilities.controller.ts index a1cba29aa..7c8b226f4 100644 --- a/apps/api-gateway/src/utilities/utilities.controller.ts +++ b/apps/api-gateway/src/utilities/utilities.controller.ts @@ -1,6 +1,13 @@ -import { ApiBearerAuth, ApiForbiddenResponse, ApiOperation, ApiResponse, ApiTags, ApiUnauthorizedResponse } from '@nestjs/swagger'; -import { Controller, UseFilters, Post, Body, Res, HttpStatus, Param, UseGuards } from '@nestjs/common'; -import IResponse from '@credebl/common/interfaces/response.interface'; +import { + ApiBearerAuth, + ApiForbiddenResponse, + ApiOperation, + ApiResponse, + ApiTags, + ApiUnauthorizedResponse +} from '@nestjs/swagger'; +import { Controller, UseFilters, Post, Body, Res, HttpStatus, Param, UseGuards, ParseBoolPipe } from '@nestjs/common'; +import IResponse from '@credebl/common/interfaces/response.interface'; import { Response } from 'express'; import { ApiResponseDto } from '../dtos/apiResponse.dto'; import { UnauthorizedErrorDto } from '../dtos/unauthorized-error.dto'; @@ -14,13 +21,10 @@ import { AuthGuard } from '@nestjs/passport'; @UseFilters(CustomExceptionFilter) @Controller('utilities') @ApiTags('utilities') -@ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class UtilitiesController { - - constructor( - private readonly utilitiesService: UtilitiesService - ) { } + constructor(private readonly utilitiesService: UtilitiesService) {} /** * Create a shortening URL @@ -51,10 +55,23 @@ export class UtilitiesController { @Post('/store-object/:persist') @ApiBearerAuth() @UseGuards(AuthGuard('jwt')) - @ApiOperation({ summary: 'Store Object and Create Short URL', description: 'Store an object and create a short URL representing the object.' }) - @ApiResponse({ status: HttpStatus.CREATED, description: 'Object stored and short URL created successfully', type: ApiResponseDto }) - async storeObject(@Body() storeObjectDto: StoreObjectDto, @Param('persist') persist: boolean, @Res() res: Response): Promise { - const shorteningUrl = await this.utilitiesService.storeObject(persist.valueOf(), storeObjectDto); + @ApiOperation({ + summary: 'Store Object and Create Short URL', + description: 'Store an object and create a short URL representing the object.' + }) + @ApiResponse({ + status: HttpStatus.CREATED, + description: 'Object stored and short URL created successfully', + type: ApiResponseDto + }) + async storeObject( + @Body() storeObjectDto: StoreObjectDto, + // Since Params are always strings, we need to parse the value. + // This prevent for example 'false' being considered as a truthy value + @Param('persist', ParseBoolPipe) persist: boolean, + @Res() res: Response + ): Promise { + const shorteningUrl = await this.utilitiesService.storeObject(persist, storeObjectDto); const finalResponse: IResponse = { statusCode: HttpStatus.CREATED, message: ResponseMessages.storeObject.success.storeObject, @@ -63,4 +80,3 @@ export class UtilitiesController { return res.status(HttpStatus.CREATED).json(finalResponse); } } - diff --git a/apps/api-gateway/src/utilities/utilities.service.ts b/apps/api-gateway/src/utilities/utilities.service.ts index c90142ee4..58f3f5cd7 100644 --- a/apps/api-gateway/src/utilities/utilities.service.ts +++ b/apps/api-gateway/src/utilities/utilities.service.ts @@ -1,12 +1,15 @@ import { Inject, Injectable } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { StoreObjectDto, UtilitiesDto } from './dtos/shortening-url.dto'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class UtilitiesService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, private readonly natsClient : NATSClient) { + constructor( + @Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { super('OrganizationService'); } @@ -16,7 +19,7 @@ export class UtilitiesService extends BaseService { async storeObject(persistent: boolean, storeObjectDto: StoreObjectDto): Promise { const storeObj = storeObjectDto.data; - const payload = {persistent, storeObj}; + const payload = { persistent, storeObj }; return this.natsClient.sendNatsMessage(this.serviceProxy, 'store-object-return-url', payload); } } diff --git a/apps/api-gateway/src/verification/verification.controller.ts b/apps/api-gateway/src/verification/verification.controller.ts index 9a0258946..cbd952442 100644 --- a/apps/api-gateway/src/verification/verification.controller.ts +++ b/apps/api-gateway/src/verification/verification.controller.ts @@ -76,8 +76,8 @@ export class VerificationController { @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @ApiBearerAuth() @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) async getVerifiedProofDetails( @Res() res: Response, @User() user: IUserRequest, @@ -105,8 +105,8 @@ export class VerificationController { description: 'Retrieve the details of a proof presentation by its proof ID for a specific organization.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER, OrgRoles.HOLDER) @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @ApiBearerAuth() @@ -154,8 +154,8 @@ export class VerificationController { description: 'Retrieve the details of a proof presentation by its issuer Id' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @UseGuards(AuthGuard('jwt')) @ApiBearerAuth() async getProofPresentationByIssuerId( @@ -190,8 +190,8 @@ export class VerificationController { required: false }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiBearerAuth() @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.MEMBER, OrgRoles.HOLDER) @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @@ -242,8 +242,8 @@ export class VerificationController { description: 'Send a proof request to a specific organization.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiBody({ type: RequestProofDtoV1 }) @ApiQuery({ name: 'requestType', @@ -303,8 +303,8 @@ export class VerificationController { description: 'Send a proof request on multiple connections for a the organization.' }) @ApiResponse({ status: HttpStatus.OK, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiBody({ type: RequestProofDtoV2 }) @ApiQuery({ name: 'requestType', @@ -365,8 +365,8 @@ export class VerificationController { description: 'Verify the proof presentation for a the organization.' }) @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @Roles(OrgRoles.OWNER, OrgRoles.ADMIN, OrgRoles.VERIFIER) @ApiBearerAuth() @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @@ -396,8 +396,8 @@ export class VerificationController { description: 'Send an out-of-band proof request for a specific organization.' }) @ApiResponse({ status: HttpStatus.CREATED, description: 'Success', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) @ApiBody({ type: SendProofRequestPayload }) @ApiQuery({ name: 'requestType', @@ -436,8 +436,8 @@ export class VerificationController { }) @ApiExcludeEndpoint() @ApiResponse({ status: HttpStatus.CREATED, description: 'Created', type: ApiResponseDto }) - @ApiUnauthorizedResponse({ status: HttpStatus.UNAUTHORIZED, description: 'Unauthorized', type: UnauthorizedErrorDto }) - @ApiForbiddenResponse({ status: HttpStatus.FORBIDDEN, description: 'Forbidden', type: ForbiddenErrorDto }) + @ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) + @ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) async webhookProofPresentation( @Param('orgId') orgId: string, @Body() proofPresentationPayload: WebhookPresentationProofDto, diff --git a/apps/api-gateway/src/verification/verification.service.ts b/apps/api-gateway/src/verification/verification.service.ts index d312967ce..68eb70a23 100644 --- a/apps/api-gateway/src/verification/verification.service.ts +++ b/apps/api-gateway/src/verification/verification.service.ts @@ -1,5 +1,4 @@ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { SendProofRequestPayload, RequestProofDtoV1, RequestProofDtoV2 } from './dto/request-proof.dto'; import { IUserRequest } from '@credebl/user-request/user-request.interface'; @@ -14,6 +13,7 @@ import { IProofPresentation } from './interfaces/verification.interface'; // To do make a similar interface in API-gateway import { user } from '@prisma/client'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class VerificationService extends BaseService { @@ -118,7 +118,7 @@ export class VerificationService extends BaseService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.verificationServiceProxy.send(pattern, payload).toPromise(); + const message = await this.verificationServiceProxy.send(pattern, payload).toPromise(); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); @@ -132,7 +132,7 @@ export class VerificationService extends BaseService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.verificationServiceProxy.send(pattern, payload).toPromise(); + const message = await this.verificationServiceProxy.send(pattern, payload).toPromise(); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); diff --git a/apps/api-gateway/src/webhook/webhook.controller.ts b/apps/api-gateway/src/webhook/webhook.controller.ts index 9481263bb..c35843f02 100644 --- a/apps/api-gateway/src/webhook/webhook.controller.ts +++ b/apps/api-gateway/src/webhook/webhook.controller.ts @@ -43,12 +43,10 @@ import { GetWebhookDto } from './dtos/get-webhoook-dto'; @UseFilters(CustomExceptionFilter) @Controller('webhooks') @ApiTags('webhooks') -@ApiUnauthorizedResponse({ status: 401, description: 'Unauthorized', type: UnauthorizedErrorDto }) -@ApiForbiddenResponse({ status: 403, description: 'Forbidden', type: ForbiddenErrorDto }) +@ApiUnauthorizedResponse({ description: 'Unauthorized', type: UnauthorizedErrorDto }) +@ApiForbiddenResponse({ description: 'Forbidden', type: ForbiddenErrorDto }) export class WebhookController { - constructor( - private readonly webhookService: WebhookService - ) {} + constructor(private readonly webhookService: WebhookService) {} private readonly logger = new Logger('WebhookController'); private readonly PAGE: number = 1; @@ -69,7 +67,15 @@ export class WebhookController { @Roles(OrgRoles.OWNER, OrgRoles.ADMIN) @ApiResponse({ status: HttpStatus.CREATED, description: 'Webhook URL registered successfully', type: ApiResponseDto }) async registerWebhook( - @Param('orgId', new ParseUUIDPipe({ exceptionFactory: (): Error => { throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); }})) orgId: string, + @Param( + 'orgId', + new ParseUUIDPipe({ + exceptionFactory: (): Error => { + throw new BadRequestException(ResponseMessages.organisation.error.invalidOrgId); + } + }) + ) + orgId: string, @Body() registerWebhookDto: RegisterWebhookDto, @Res() res: Response ): Promise { @@ -98,13 +104,14 @@ export class WebhookController { description: 'Retrieve the details of the webhook URL for an organization.' }) @ApiBearerAuth() - @UseGuards(AuthGuard('jwt')) + @UseGuards(AuthGuard('jwt'), OrgRolesGuard) @Roles(OrgRoles.OWNER, OrgRoles.ISSUER, OrgRoles.VERIFIER, OrgRoles.ADMIN) - @ApiResponse({ status: HttpStatus.OK, description: 'Webhook URL details retrieved successfully', type: ApiResponseDto }) - async getWebhookUrl( - @Query() getWebhook: GetWebhookDto, - @Res() res: Response - ): Promise { + @ApiResponse({ + status: HttpStatus.OK, + description: 'Webhook URL details retrieved successfully', + type: ApiResponseDto + }) + async getWebhookUrl(@Query() getWebhook: GetWebhookDto, @Res() res: Response): Promise { const webhookUrlData = await this.webhookService.getWebhookUrl(getWebhook); const finalResponse: IResponse = { diff --git a/apps/api-gateway/src/webhook/webhook.service.ts b/apps/api-gateway/src/webhook/webhook.service.ts index aed49bdbd..d3e00925d 100644 --- a/apps/api-gateway/src/webhook/webhook.service.ts +++ b/apps/api-gateway/src/webhook/webhook.service.ts @@ -1,29 +1,30 @@ /* eslint-disable camelcase */ import { Injectable, Inject } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { RegisterWebhookDto } from './dtos/register-webhook-dto'; import { ICreateWebhookUrl, IGetWebhookUrl } from 'apps/webhook/interfaces/webhook.interfaces'; import { GetWebhookDto } from './dtos/get-webhoook-dto'; import { NATSClient } from '@credebl/common/NATSClient'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class WebhookService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly webhookProxy: ClientProxy, private readonly natsClient : NATSClient) { + constructor( + @Inject('NATS_CLIENT') private readonly webhookProxy: ClientProxy, + private readonly natsClient: NATSClient + ) { super('WebhookService'); } - async getWebhookUrl(getWebhook: GetWebhookDto): Promise { + async getWebhookUrl(getWebhook: GetWebhookDto): Promise { // NATS call return this.natsClient.sendNatsMessage(this.webhookProxy, 'get-webhookurl', getWebhook); } async registerWebhook(registerWebhookDto: RegisterWebhookDto): Promise { - const payload = { registerWebhookDto}; + const payload = { registerWebhookDto }; // NATS call return this.natsClient.sendNatsMessage(this.webhookProxy, 'register-webhook', payload); } - - } diff --git a/apps/cloud-wallet/src/cloud-wallet.controller.ts b/apps/cloud-wallet/src/cloud-wallet.controller.ts index 842f422d4..e639ec511 100644 --- a/apps/cloud-wallet/src/cloud-wallet.controller.ts +++ b/apps/cloud-wallet/src/cloud-wallet.controller.ts @@ -2,7 +2,28 @@ import { Controller } from '@nestjs/common'; // Import the common service in the library import { CloudWalletService } from './cloud-wallet.service'; // Import the common service in connection module import { MessagePattern } from '@nestjs/microservices'; // Import the nestjs microservices package -import { IAcceptOffer, ICreateCloudWalletDid, IReceiveInvitation, IAcceptProofRequest, IProofRequestRes, ICloudBaseWalletConfigure, ICreateCloudWallet, IGetProofPresentation, IGetProofPresentationById, IGetStoredWalletInfo, IStoredWalletDetails, ICreateConnection, IConnectionInvitationResponse, IWalletDetailsForDidList, IConnectionDetailsById, ITenantDetail, ICredentialDetails, GetAllCloudWalletConnections, IBasicMessage, IBasicMessageDetails } from '@credebl/common/interfaces/cloud-wallet.interface'; +import { + IAcceptOffer, + ICreateCloudWalletDid, + IReceiveInvitation, + IAcceptProofRequest, + IProofRequestRes, + ICloudBaseWalletConfigure, + ICreateCloudWallet, + IGetProofPresentation, + IGetProofPresentationById, + IGetStoredWalletInfo, + IStoredWalletDetails, + ICreateConnection, + IConnectionInvitationResponse, + IWalletDetailsForDidList, + IConnectionDetailsById, + ITenantDetail, + ICredentialDetails, + GetAllCloudWalletConnections, + IBasicMessage, + IBasicMessageDetails +} from '@credebl/common/interfaces/cloud-wallet.interface'; @Controller() export class CloudWalletController { @@ -54,7 +75,7 @@ export class CloudWalletController { } @MessagePattern({ cmd: 'cloud-wallet-did-list' }) - async getDidList(walletDetails: IWalletDetailsForDidList): Promise { + async getDidList(walletDetails: IWalletDetailsForDidList): Promise { return this.cloudWalletService.getDidList(walletDetails); } @@ -63,7 +84,6 @@ export class CloudWalletController { return this.cloudWalletService.getconnectionById(connectionDetails); } - @MessagePattern({ cmd: 'get-all-cloud-wallet-connections-list-by-id' }) async getAllconnectionById(connectionDetails: GetAllCloudWalletConnections): Promise { return this.cloudWalletService.getAllconnectionById(connectionDetails); @@ -73,7 +93,7 @@ export class CloudWalletController { async getCredentialList(tenantDetails: ITenantDetail): Promise { return this.cloudWalletService.getCredentialListById(tenantDetails); } - + @MessagePattern({ cmd: 'wallet-credential-by-record-id' }) async getCredentialByCredentialRecordId(credentialDetails: ICredentialDetails): Promise { return this.cloudWalletService.getCredentialByRecord(credentialDetails); @@ -88,5 +108,4 @@ export class CloudWalletController { async sendBasicMessage(messageDetails: IBasicMessageDetails): Promise { return this.cloudWalletService.sendBasicMessage(messageDetails); } - -} \ No newline at end of file +} diff --git a/apps/cloud-wallet/src/cloud-wallet.service.ts b/apps/cloud-wallet/src/cloud-wallet.service.ts index 63ef079f0..ef458b295 100644 --- a/apps/cloud-wallet/src/cloud-wallet.service.ts +++ b/apps/cloud-wallet/src/cloud-wallet.service.ts @@ -9,7 +9,6 @@ import { Logger, NotFoundException } from '@nestjs/common'; -import { ClientProxy } from '@nestjs/microservices'; import { Cache } from 'cache-manager'; import { CACHE_MANAGER } from '@nestjs/cache-manager'; import { @@ -41,6 +40,7 @@ import { CloudWalletRepository } from './cloud-wallet.repository'; import { ResponseMessages } from '@credebl/common/response-messages'; import { CloudWalletType } from '@credebl/enum/enum'; import { CommonConstants } from '@credebl/common/common.constant'; +import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class CloudWalletService { @@ -425,7 +425,7 @@ export class CloudWalletService { * @param walletDetails * @returns DID list */ - async getDidList(walletDetails: IWalletDetailsForDidList): Promise { + async getDidList(walletDetails: IWalletDetailsForDidList): Promise { try { const { userId } = walletDetails; const [baseWalletDetails, decryptedApiKey] = await this._commonCloudWalletInfo(userId); @@ -434,7 +434,7 @@ export class CloudWalletService { const url = `${agentEndpoint}${CommonConstants.URL_AGENT_GET_DID}`; - const didList = await this.commonService.httpGet(url, { headers: { authorization: decryptedApiKey } }); + const didList = (await this.commonService.httpGet(url, { headers: { authorization: decryptedApiKey } })) ?? []; return didList; } catch (error) { await this.commonService.handleError(error); diff --git a/apps/connection/src/connection.service.ts b/apps/connection/src/connection.service.ts index 410a3b2ec..ad162c96b 100644 --- a/apps/connection/src/connection.service.ts +++ b/apps/connection/src/connection.service.ts @@ -460,16 +460,13 @@ export class ConnectionService { return createQuestion; } catch (error) { this.logger.error(`[sendQuestion] - error in sending question: ${error}`); - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { + if (error?.status?.message?.error) { throw new RpcException({ - message: error?.status?.message?.error?.reason - ? error?.status?.message?.error?.reason - : error?.status?.message?.error, - statusCode: error?.status?.code + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status?.code ?? HttpStatus.INTERNAL_SERVER_ERROR }); - } else { - throw new RpcException(error.response ? error.response : error); } + throw new RpcException(error.response || error); } } @@ -657,16 +654,13 @@ export class ConnectionService { } handleError(error): Promise { - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { + if (error?.status?.message?.error) { throw new RpcException({ - message: error?.status?.message?.error?.reason - ? error?.status?.message?.error?.reason - : error?.status?.message?.error, - statusCode: error?.status?.code + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status?.code ?? HttpStatus.INTERNAL_SERVER_ERROR }); - } else { - throw new RpcException(error.response ? error.response : error); } + throw new RpcException(error.response || error); } async deleteConnectionRecords(orgId: string, user: user): Promise { @@ -732,16 +726,13 @@ export class ConnectionService { return sendBasicMessage; } catch (error) { this.logger.error(`[sendBasicMesage] - error in send basic message: ${error}`); - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { + if (error?.status?.message?.error) { throw new RpcException({ - message: error?.status?.message?.error?.reason - ? error?.status?.message?.error?.reason - : error?.status?.message?.error, - statusCode: error?.status?.code + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status?.code ?? HttpStatus.INTERNAL_SERVER_ERROR }); - } else { - throw new RpcException(error.response ? error.response : error); } + throw new RpcException(error.response || error); } } diff --git a/apps/issuance/src/issuance.service.ts b/apps/issuance/src/issuance.service.ts index 3d4234550..d785ae1cb 100644 --- a/apps/issuance/src/issuance.service.ts +++ b/apps/issuance/src/issuance.service.ts @@ -524,7 +524,7 @@ export class IssuanceService { }> { try { return this.issuanceServiceProxy - .send(pattern, payload) + .send(pattern, payload) .pipe( map((response) => ({ response @@ -702,17 +702,13 @@ export class IssuanceService { this.logger.error( `[getIssueCredentialsbyCredentialRecordId] - error in get credentials : ${JSON.stringify(error)}` ); - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { + if (error?.status?.message?.error) { throw new RpcException({ - message: - error?.status?.message?.error?.reason || - error?.status?.message?.error?.message || - error?.status?.message?.error, - statusCode: error?.status?.code + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status?.code ?? HttpStatus.INTERNAL_SERVER_ERROR }); - } else { - throw new RpcException(error.response ? error.response : error); } + throw new RpcException(error.response || error); } } diff --git a/apps/ledger/src/credential-definition/credential-definition.service.ts b/apps/ledger/src/credential-definition/credential-definition.service.ts index a98d59480..557aa286b 100644 --- a/apps/ledger/src/credential-definition/credential-definition.service.ts +++ b/apps/ledger/src/credential-definition/credential-definition.service.ts @@ -1,18 +1,24 @@ /* eslint-disable camelcase */ -import { - ConflictException, - HttpException, - Inject, - Injectable, - NotFoundException -} from '@nestjs/common'; +import { ConflictException, HttpException, HttpStatus, Inject, Injectable, NotFoundException } from '@nestjs/common'; import { ClientProxy, RpcException } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { CredentialDefinitionRepository } from './repositories/credential-definition.repository'; -import { CreateCredDefPayload, CredDefPayload, GetAllCredDefsPayload, GetCredDefBySchemaId, GetCredDefPayload, IPlatformCredDefs, ISaveCredDef } from './interfaces/create-credential-definition.interface'; +import { + CreateCredDefPayload, + CredDefPayload, + GetAllCredDefsPayload, + GetCredDefBySchemaId, + GetCredDefPayload, + IPlatformCredDefs, + ISaveCredDef +} from './interfaces/create-credential-definition.interface'; import { credential_definition } from '@prisma/client'; import { ResponseMessages } from '@credebl/common/response-messages'; -import { CreateCredDefAgentRedirection, CredDefSchema, GetCredDefAgentRedirection } from './interfaces/credential-definition.interface'; +import { + CreateCredDefAgentRedirection, + CredDefSchema, + GetCredDefAgentRedirection +} from './interfaces/credential-definition.interface'; import { map } from 'rxjs/operators'; import { OrgAgentType, SchemaType, SortValue } from '@credebl/enum/enum'; import { Cache } from 'cache-manager'; @@ -23,391 +29,384 @@ import { from } from 'rxjs'; import { ISchemaDetail } from '@credebl/common/interfaces/schema.interface'; @Injectable() export class CredentialDefinitionService extends BaseService { - constructor( - private readonly credentialDefinitionRepository: CredentialDefinitionRepository, - @Inject('NATS_CLIENT') private readonly credDefServiceProxy: ClientProxy, - @Inject(CACHE_MANAGER) private readonly cacheService: Cache, - private readonly natsClient : NATSClient - - ) { - super('CredentialDefinitionService'); - } + constructor( + private readonly credentialDefinitionRepository: CredentialDefinitionRepository, + @Inject('NATS_CLIENT') private readonly credDefServiceProxy: ClientProxy, + @Inject(CACHE_MANAGER) private readonly cacheService: Cache, + private readonly natsClient: NATSClient + ) { + super('CredentialDefinitionService'); + } + + async createCredentialDefinition(payload: CreateCredDefPayload): Promise { + try { + const { credDef, user } = payload; + const { agentEndPoint, orgDid } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(credDef.orgId); + // eslint-disable-next-line yoda + const did = credDef.orgDid?.split(':').length >= 4 ? credDef.orgDid : orgDid; + const getAgentDetails = await this.credentialDefinitionRepository.getAgentType(credDef.orgId); + + const userId = user.id; + credDef.tag = credDef.tag.trim(); + const dbResult: credential_definition = await this.credentialDefinitionRepository.getByAttribute( + credDef.schemaLedgerId, + credDef.tag + ); + + if (dbResult) { + throw new ConflictException(ResponseMessages.credentialDefinition.error.Conflict); + } + let credDefResponseFromAgentService; + + const orgAgentType = await this.credentialDefinitionRepository.getOrgAgentType( + getAgentDetails.org_agents[0].orgAgentTypeId + ); + if (OrgAgentType.DEDICATED === orgAgentType) { + const CredDefPayload = { + tag: credDef.tag, + schemaId: credDef.schemaLedgerId, + issuerId: did, + agentEndPoint, + orgId: credDef.orgId, + agentType: OrgAgentType.DEDICATED + }; + + credDefResponseFromAgentService = await this._createCredentialDefinition(CredDefPayload); + } else if (OrgAgentType.SHARED === orgAgentType) { + const { tenantId } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(credDef.orgId); + + const CredDefPayload = { + tenantId, + method: 'registerCredentialDefinition', + payload: { + tag: credDef.tag, + schemaId: credDef.schemaLedgerId, + issuerId: did + }, + agentEndPoint, + orgId: credDef.orgId, + agentType: OrgAgentType.SHARED + }; + credDefResponseFromAgentService = await this._createCredentialDefinition(CredDefPayload); + } + const response = JSON.parse(JSON.stringify(credDefResponseFromAgentService.response)); + const schemaDetails = await this.credentialDefinitionRepository.getSchemaById(credDef.schemaLedgerId); + if (!schemaDetails) { + throw new NotFoundException(ResponseMessages.credentialDefinition.error.schemaIdNotFound); + } + const credDefData: CredDefPayload = { + tag: '', + schemaLedgerId: '', + issuerId: '', + revocable: credDef.revocable, + createdBy: `0`, + lastChangedBy: `0`, + orgId: '0', + schemaId: '0', + credentialDefinitionId: '' + }; + + if ('finished' === response.state) { + credDefData.tag = response.credentialDefinition.tag; + credDefData.schemaLedgerId = response.credentialDefinition.schemaId; + credDefData.issuerId = response.credentialDefinition.issuerId; + credDefData.credentialDefinitionId = response.credentialDefinitionId; + credDefData.orgId = credDef.orgId; + credDefData.revocable = credDef.revocable; + credDefData.schemaId = schemaDetails.id; + credDefData.createdBy = userId; + credDefData.lastChangedBy = userId; + } else if ('finished' === response.credentialDefinition.state) { + credDefData.tag = response.credentialDefinition.credentialDefinition.tag; + credDefData.schemaLedgerId = response.credentialDefinition.credentialDefinition.schemaId; + credDefData.issuerId = response.credentialDefinition.credentialDefinition.issuerId; + credDefData.credentialDefinitionId = response.credentialDefinition.credentialDefinitionId; + credDefData.orgId = credDef.orgId; + credDefData.revocable = credDef.revocable; + credDefData.schemaId = schemaDetails.id; + credDefData.createdBy = userId; + credDefData.lastChangedBy = userId; + } + const credDefResponse = await this.credentialDefinitionRepository.saveCredentialDefinition(credDefData); + + delete credDefResponse.lastChangedBy; + delete credDefResponse.lastChangedDateTime; - async createCredentialDefinition(payload: CreateCredDefPayload): Promise { - try { - const { credDef, user } = payload; - const { agentEndPoint, orgDid } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(credDef.orgId); - // eslint-disable-next-line yoda - const did = credDef.orgDid?.split(':').length >= 4 ? credDef.orgDid : orgDid; - const getAgentDetails = await this.credentialDefinitionRepository.getAgentType(credDef.orgId); - - const userId = user.id; - credDef.tag = credDef.tag.trim(); - const dbResult: credential_definition = await this.credentialDefinitionRepository.getByAttribute( - credDef.schemaLedgerId, - credDef.tag - ); - - if (dbResult) { - throw new ConflictException(ResponseMessages.credentialDefinition.error.Conflict); - } - let credDefResponseFromAgentService; - - const orgAgentType = await this.credentialDefinitionRepository.getOrgAgentType(getAgentDetails.org_agents[0].orgAgentTypeId); - if (OrgAgentType.DEDICATED === orgAgentType) { - const CredDefPayload = { - tag: credDef.tag, - schemaId: credDef.schemaLedgerId, - issuerId: did, - agentEndPoint, - orgId: credDef.orgId, - agentType: OrgAgentType.DEDICATED - }; - - credDefResponseFromAgentService = await this._createCredentialDefinition(CredDefPayload); - - } else if (OrgAgentType.SHARED === orgAgentType) { - const { tenantId } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(credDef.orgId); - - const CredDefPayload = { - tenantId, - method: 'registerCredentialDefinition', - payload: { - tag: credDef.tag, - schemaId: credDef.schemaLedgerId, - issuerId: did - }, - agentEndPoint, - orgId: credDef.orgId, - agentType: OrgAgentType.SHARED - }; - credDefResponseFromAgentService = await this._createCredentialDefinition(CredDefPayload); - } - const response = JSON.parse(JSON.stringify(credDefResponseFromAgentService.response)); - const schemaDetails = await this.credentialDefinitionRepository.getSchemaById(credDef.schemaLedgerId); - if (!schemaDetails) { - throw new NotFoundException(ResponseMessages.credentialDefinition.error.schemaIdNotFound); - } - const credDefData: CredDefPayload = { - tag: '', - schemaLedgerId: '', - issuerId: '', - revocable: credDef.revocable, - createdBy: `0`, - lastChangedBy: `0`, - orgId: '0', - schemaId: '0', - credentialDefinitionId: '' - }; - - if ('finished' === response.state) { - credDefData.tag = response.credentialDefinition.tag; - credDefData.schemaLedgerId = response.credentialDefinition.schemaId; - credDefData.issuerId = response.credentialDefinition.issuerId; - credDefData.credentialDefinitionId = response.credentialDefinitionId; - credDefData.orgId = credDef.orgId; - credDefData.revocable = credDef.revocable; - credDefData.schemaId = schemaDetails.id; - credDefData.createdBy = userId; - credDefData.lastChangedBy = userId; - } else if ('finished' === response.credentialDefinition.state) { - credDefData.tag = response.credentialDefinition.credentialDefinition.tag; - credDefData.schemaLedgerId = response.credentialDefinition.credentialDefinition.schemaId; - credDefData.issuerId = response.credentialDefinition.credentialDefinition.issuerId; - credDefData.credentialDefinitionId = response.credentialDefinition.credentialDefinitionId; - credDefData.orgId = credDef.orgId; - credDefData.revocable = credDef.revocable; - credDefData.schemaId = schemaDetails.id; - credDefData.createdBy = userId; - credDefData.lastChangedBy = userId; - } - const credDefResponse = await this.credentialDefinitionRepository.saveCredentialDefinition(credDefData); - - delete credDefResponse.lastChangedBy; - delete credDefResponse.lastChangedDateTime; - - return credDefResponse; - - } catch (error) { - this.logger.error( - `Error in creating credential definition: ${JSON.stringify(error)}` - ); - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { - throw new RpcException({ - message: error?.status?.message?.error?.reason ? error?.status?.message?.error?.reason : error?.status?.message?.error, - statusCode: error?.status?.code - }); - - } else { - throw new RpcException(error.response ? error.response : error); - } - } + return credDefResponse; + } catch (error) { + this.logger.error(`Error in creating credential definition: ${JSON.stringify(error)}`); + if (error?.status?.message?.error) { + throw new RpcException({ + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status?.code ?? HttpStatus.INTERNAL_SERVER_ERROR + }); + } + throw new RpcException(error.response || error); } + } + + async _createCredentialDefinition(payload: CreateCredDefAgentRedirection): Promise<{ + response: string; + }> { + try { + const pattern = { + cmd: 'agent-create-credential-definition' + }; - async _createCredentialDefinition(payload: CreateCredDefAgentRedirection): Promise<{ - response: string; - }> { - try { - const pattern = { - cmd: 'agent-create-credential-definition' - }; - - const credDefResponse = await from(this.natsClient - .send(this.credDefServiceProxy, pattern, payload)) - .pipe( - map((response) => ( - { - response - })) - ).toPromise() - .catch(error => { - this.logger.error(`Catch : ${JSON.stringify(error)}`); - throw new HttpException( - { - status: error.statusCode, - error: error.message - }, error.error); - }); - return credDefResponse; - } catch (error) { - this.logger.error(`Error in creating credential definition : ${JSON.stringify(error)}`); - throw error; - } + const credDefResponse = await from(this.natsClient.send(this.credDefServiceProxy, pattern, payload)) + .pipe( + map((response) => ({ + response + })) + ) + .toPromise() + .catch((error) => { + this.logger.error(`Catch : ${JSON.stringify(error)}`); + throw new HttpException( + { + status: error.statusCode, + error: error.message + }, + error.statusCode ?? HttpStatus.INTERNAL_SERVER_ERROR + ); + }); + return credDefResponse; + } catch (error) { + this.logger.error(`Error in creating credential definition : ${JSON.stringify(error)}`); + throw error; } + } + + async getAllPlatformCredDefs(credDefsPayload: IPlatformCredDefs): Promise { + try { + const { pageSize, pageNumber } = credDefsPayload; + const response = await this.credentialDefinitionRepository.getAllPlatformCredDefsDetails(credDefsPayload); + + const credDefResponse: IPlatformCredDefsData = { + totalItems: response.credDefCount, + hasNextPage: pageSize * pageNumber < response.credDefCount, + hasPreviousPage: 1 < pageNumber, + nextPage: pageNumber + 1, + previousPage: pageNumber - 1, + lastPage: Math.ceil(response.credDefCount / pageSize), + data: response.credDefResult + }; - async getAllPlatformCredDefs(credDefsPayload: IPlatformCredDefs): Promise { - try { - const { pageSize, pageNumber } = credDefsPayload; - const response = await this.credentialDefinitionRepository.getAllPlatformCredDefsDetails(credDefsPayload); - - const credDefResponse: IPlatformCredDefsData = { - totalItems: response.credDefCount, - hasNextPage: pageSize * pageNumber < response.credDefCount, - hasPreviousPage: 1 < pageNumber, - nextPage: pageNumber + 1, - previousPage: pageNumber - 1, - lastPage: Math.ceil(response.credDefCount / pageSize), - data: response.credDefResult - }; - - if (0 !== response.credDefCount) { - return credDefResponse; - } else { - throw new NotFoundException(ResponseMessages.credentialDefinition.error.NotFound); - } - - - } catch (error) { - this.logger.error(`Error in retrieving all credential definitions: ${error}`); - throw new RpcException(error.response ? error.response : error); - } + if (0 !== response.credDefCount) { + return credDefResponse; + } else { + throw new NotFoundException(ResponseMessages.credentialDefinition.error.NotFound); } - - async getCredentialDefinitionById(payload: GetCredDefPayload): Promise { - try { - const { credentialDefinitionId, orgId } = payload; - const { agentEndPoint } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(String(orgId)); - const getAgentDetails = await this.credentialDefinitionRepository.getAgentType(String(orgId)); - const orgAgentType = await this.credentialDefinitionRepository.getOrgAgentType(getAgentDetails.org_agents[0].orgAgentTypeId); - - let credDefResponse; - if (OrgAgentType.DEDICATED === orgAgentType) { - const getSchemaPayload = { - credentialDefinitionId, - orgId, - agentEndPoint, - agentType: OrgAgentType.DEDICATED - }; - credDefResponse = await this._getCredentialDefinitionById(getSchemaPayload); - } else if (OrgAgentType.SHARED === orgAgentType) { - const { tenantId } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(String(orgId)); - const getSchemaPayload = { - orgId, - tenantId, - method: 'getCredentialDefinitionById', - payload: { credentialDefinitionId }, - agentType: OrgAgentType.SHARED, - agentEndPoint - }; - credDefResponse = await this._getCredentialDefinitionById(getSchemaPayload); - } - if (credDefResponse.response.resolutionMetadata.error) { - throw new NotFoundException(ResponseMessages.credentialDefinition.error.credDefIdNotFound); - } - - return credDefResponse; - } catch (error) { - this.logger.error(`Error retrieving credential definition with id ${payload.credentialDefinitionId}`); - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { - throw new RpcException({ - message: error?.status?.message?.error?.reason ? error?.status?.message?.error?.reason : error?.status?.message?.error, - statusCode: error?.status?.code - }); - - } else { - throw new RpcException(error.response ? error.response : error); - } - } + } catch (error) { + this.logger.error(`Error in retrieving all credential definitions: ${error}`); + throw new RpcException(error.response ? error.response : error); } + } + + async getCredentialDefinitionById(payload: GetCredDefPayload): Promise { + try { + const { credentialDefinitionId, orgId } = payload; + const { agentEndPoint } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(String(orgId)); + const getAgentDetails = await this.credentialDefinitionRepository.getAgentType(String(orgId)); + const orgAgentType = await this.credentialDefinitionRepository.getOrgAgentType( + getAgentDetails.org_agents[0].orgAgentTypeId + ); + + let credDefResponse; + if (OrgAgentType.DEDICATED === orgAgentType) { + const getSchemaPayload = { + credentialDefinitionId, + orgId, + agentEndPoint, + agentType: OrgAgentType.DEDICATED + }; + credDefResponse = await this._getCredentialDefinitionById(getSchemaPayload); + } else if (OrgAgentType.SHARED === orgAgentType) { + const { tenantId } = await this.credentialDefinitionRepository.getAgentDetailsByOrgId(String(orgId)); + const getSchemaPayload = { + orgId, + tenantId, + method: 'getCredentialDefinitionById', + payload: { credentialDefinitionId }, + agentType: OrgAgentType.SHARED, + agentEndPoint + }; + credDefResponse = await this._getCredentialDefinitionById(getSchemaPayload); + } + if (credDefResponse.response.resolutionMetadata.error) { + throw new NotFoundException(ResponseMessages.credentialDefinition.error.credDefIdNotFound); + } - async _getCredentialDefinitionById(payload: GetCredDefAgentRedirection): Promise<{ - response: string; - }> { - - try { - const pattern = { - cmd: 'agent-get-credential-definition' - }; - const credDefResponse = await from(this.natsClient - .send(this.credDefServiceProxy, pattern, payload)) - .pipe( - map((response) => ( - { - response - })) - ).toPromise() - .catch(error => { - this.logger.error(`Catch : ${JSON.stringify(error)}`); - throw new HttpException( - { - status: error.statusCode, - error: error.message - }, error.error); - }); - return credDefResponse; - } catch (error) { - this.logger.error(`Error in creating credential definition : ${JSON.stringify(error)}`); - throw error; - } + return credDefResponse; + } catch (error) { + this.logger.error(`Error retrieving credential definition with id ${payload.credentialDefinitionId}`); + if (error?.status?.message?.error) { + throw new RpcException({ + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status?.code ?? HttpStatus.INTERNAL_SERVER_ERROR + }); + } + throw new RpcException(error.response || error); } + } - async getAllCredDefs(payload: GetAllCredDefsPayload): Promise { - try { - const { credDefSearchCriteria, orgId } = payload; - const response = await this.credentialDefinitionRepository.getAllCredDefs(credDefSearchCriteria, orgId); - - const schemaIds = response?.map((item) => item?.schemaLedgerId); - - const schemaDetails = await this._getSchemaDetails(schemaIds); - - const archivedSchemaIds = schemaDetails - .filter((schema) => schema.isSchemaArchived) - .map((schema) => schema.schemaLedgerId); - - const filteredResponse = response.filter( - (credDef) => !archivedSchemaIds.includes(credDef.schemaLedgerId) - ); - - const credDefResponse = { - totalItems: filteredResponse.length, - hasNextPage: credDefSearchCriteria.pageSize * credDefSearchCriteria.pageNumber < response.length, - hasPreviousPage: 1 < credDefSearchCriteria.pageNumber, - nextPage: credDefSearchCriteria.pageNumber + 1, - previousPage: credDefSearchCriteria.pageNumber - 1, - lastPage: Math.ceil(response.length / credDefSearchCriteria.pageSize), - data: filteredResponse - }; - - if (0 === filteredResponse.length) { - throw new NotFoundException(ResponseMessages.credentialDefinition.error.NotFound); - } - - return credDefResponse; - } catch (error) { - this.logger.error(`Error in retrieving credential definitions: ${error}`); - throw new RpcException(error.response ? error.response : error); - } + async _getCredentialDefinitionById(payload: GetCredDefAgentRedirection): Promise<{ + response: string; + }> { + try { + const pattern = { + cmd: 'agent-get-credential-definition' + }; + const credDefResponse = await from(this.natsClient.send(this.credDefServiceProxy, pattern, payload)) + .pipe( + map((response) => ({ + response + })) + ) + .toPromise() + .catch((error) => { + this.logger.error(`Catch : ${JSON.stringify(error)}`); + throw new HttpException( + { + status: error.statusCode, + error: error.message + }, + error.statusCode ?? HttpStatus.INTERNAL_SERVER_ERROR + ); + }); + return credDefResponse; + } catch (error) { + this.logger.error(`Error in creating credential definition : ${JSON.stringify(error)}`); + throw error; } - - async _getSchemaDetails(schemaIds: string[]): Promise { - const pattern = { cmd: 'get-schemas-details' }; - - const payload = { - templateIds: schemaIds - }; + } + + async getAllCredDefs(payload: GetAllCredDefsPayload): Promise { + try { + const { credDefSearchCriteria, orgId } = payload; + const response = await this.credentialDefinitionRepository.getAllCredDefs(credDefSearchCriteria, orgId); + + const schemaIds = response?.map((item) => item?.schemaLedgerId); - const getSchemaDetails = await this.credDefServiceProxy - .send(pattern, payload) - .toPromise() - .catch((error) => { - this.logger.error(`catch: ${JSON.stringify(error)}`); - throw new HttpException( - { - status: error.status, - error: error.message - }, - error.status - ); - }); - return getSchemaDetails; + const schemaDetails = await this._getSchemaDetails(schemaIds); + + const archivedSchemaIds = schemaDetails + .filter((schema) => schema.isSchemaArchived) + .map((schema) => schema.schemaLedgerId); + + const filteredResponse = response.filter((credDef) => !archivedSchemaIds.includes(credDef.schemaLedgerId)); + + const credDefResponse = { + totalItems: filteredResponse.length, + hasNextPage: credDefSearchCriteria.pageSize * credDefSearchCriteria.pageNumber < response.length, + hasPreviousPage: 1 < credDefSearchCriteria.pageNumber, + nextPage: credDefSearchCriteria.pageNumber + 1, + previousPage: credDefSearchCriteria.pageNumber - 1, + lastPage: Math.ceil(response.length / credDefSearchCriteria.pageSize), + data: filteredResponse + }; + + if (0 === filteredResponse.length) { + throw new NotFoundException(ResponseMessages.credentialDefinition.error.NotFound); } - async getCredentialDefinitionBySchemaId(payload: GetCredDefBySchemaId): Promise { - try { - const { schemaId } = payload; - const credDefListBySchemaId = await this.credentialDefinitionRepository.getCredentialDefinitionBySchemaId(schemaId); - return credDefListBySchemaId; - } catch (error) { - this.logger.error(`Error in retrieving credential definitions: ${error}`); - throw new RpcException(error.response ? error.response : error); - } + return credDefResponse; + } catch (error) { + this.logger.error(`Error in retrieving credential definitions: ${error}`); + throw new RpcException(error.response ? error.response : error); } + } + + async _getSchemaDetails(schemaIds: string[]): Promise { + const pattern = { cmd: 'get-schemas-details' }; - async getAllCredentialTemplates(orgId: string, schemaType: string): Promise { - const schemaTypeEnum = schemaType as SchemaType; - if (!Object.values(SchemaType).includes(schemaTypeEnum)) { - throw new NotFoundException(ResponseMessages.credentialDefinition.error.InvalidSchemaType); - } - try { - const payload = { - orgId, - sortValue: SortValue.ASC, - credDefSortBy: 'id' - }; - - if (schemaType === SchemaType.W3C_Schema) { - const schemaDetailList = await this.credentialDefinitionRepository.getAllSchemaByOrgIdAndType(orgId, schemaType); - const schemaResponse = await Promise.all(schemaDetailList.map(async (schemaDetails) => ({ - schemaCredDefName: `${schemaDetails.name}-${schemaDetails.version}`, - schemaName: schemaDetails.name, - schemaVersion: schemaDetails.version, - schemaAttributes: schemaDetails.attributes, - type: SchemaType.W3C_Schema, - schemaIdentifier: schemaDetails.schemaLedgerId, - createDateTime: schemaDetails.createDateTime, - organizationName: schemaDetails?.organisation?.name, - userName: schemaDetails?.organisation?.userOrgRoles[0]?.user?.firstName - }))); - - return schemaResponse; - } - const credDefSchemaList = - await this.credentialDefinitionRepository.getAllCredDefsByOrgIdForBulk( - payload - ); - - if (!credDefSchemaList) { - throw new NotFoundException(ResponseMessages.credentialDefinition.error.NotFound); - } - - const activeCredDefSchemaList = credDefSchemaList.filter((item) => !item?.['isSchemaArchived']); - - return activeCredDefSchemaList; - } catch (error) { - this.logger.error( - `get Cred-Defs and schema List By OrgId for bulk operations: ${JSON.stringify(error)}` - ); - if (error?.status?.message?.error) { - const reason = error?.status?.message?.error?.reason ?? error?.status?.message?.error; - throw new RpcException({ - message: reason, - statusCode: error?.status?.code - }); - } else { - throw new RpcException(error.response ?? error); - } - } + const payload = { + templateIds: schemaIds + }; + + const getSchemaDetails = await this.credDefServiceProxy + .send(pattern, payload) + .toPromise() + .catch((error) => { + this.logger.error(`catch: ${JSON.stringify(error)}`); + throw new HttpException( + { + status: error.status, + error: error.message + }, + error.status + ); + }); + return getSchemaDetails; + } + + async getCredentialDefinitionBySchemaId(payload: GetCredDefBySchemaId): Promise { + try { + const { schemaId } = payload; + const credDefListBySchemaId = + await this.credentialDefinitionRepository.getCredentialDefinitionBySchemaId(schemaId); + return credDefListBySchemaId; + } catch (error) { + this.logger.error(`Error in retrieving credential definitions: ${error}`); + throw new RpcException(error.response ? error.response : error); + } + } + + async getAllCredentialTemplates(orgId: string, schemaType: string): Promise { + const schemaTypeEnum = schemaType as SchemaType; + if (!Object.values(SchemaType).includes(schemaTypeEnum)) { + throw new NotFoundException(ResponseMessages.credentialDefinition.error.InvalidSchemaType); } + try { + const payload = { + orgId, + sortValue: SortValue.ASC, + credDefSortBy: 'id' + }; + + if (schemaType === SchemaType.W3C_Schema) { + const schemaDetailList = await this.credentialDefinitionRepository.getAllSchemaByOrgIdAndType( + orgId, + schemaType + ); + const schemaResponse = await Promise.all( + schemaDetailList.map(async (schemaDetails) => ({ + schemaCredDefName: `${schemaDetails.name}-${schemaDetails.version}`, + schemaName: schemaDetails.name, + schemaVersion: schemaDetails.version, + schemaAttributes: schemaDetails.attributes, + type: SchemaType.W3C_Schema, + schemaIdentifier: schemaDetails.schemaLedgerId, + createDateTime: schemaDetails.createDateTime, + organizationName: schemaDetails?.organisation?.name, + userName: schemaDetails?.organisation?.userOrgRoles[0]?.user?.firstName + })) + ); + + return schemaResponse; + } + const credDefSchemaList = await this.credentialDefinitionRepository.getAllCredDefsByOrgIdForBulk(payload); + + if (!credDefSchemaList) { + throw new NotFoundException(ResponseMessages.credentialDefinition.error.NotFound); + } + + const activeCredDefSchemaList = credDefSchemaList.filter((item) => !item?.['isSchemaArchived']); + + return activeCredDefSchemaList; + } catch (error) { + this.logger.error(`get Cred-Defs and schema List By OrgId for bulk operations: ${JSON.stringify(error)}`); + if (error?.status?.message?.error) { + const reason = error?.status?.message?.error?.reason ?? error?.status?.message?.error; + throw new RpcException({ + message: reason, + statusCode: error?.status?.code + }); + } else { + throw new RpcException(error.response ?? error); + } + } + } async _getOrgAgentApiKey(orgId: string): Promise { const pattern = { cmd: 'get-org-agent-api-key' }; @@ -419,10 +418,13 @@ export class CredentialDefinitionService extends BaseService { return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); - throw new HttpException({ - status: error.status, - error: error.message - }, error.status); + throw new HttpException( + { + status: error.status, + error: error.message + }, + error.status + ); } } @@ -435,4 +437,4 @@ export class CredentialDefinitionService extends BaseService { throw new RpcException(error.response ? error.response : error); } } -} \ No newline at end of file +} diff --git a/apps/ledger/src/schema/schema.service.ts b/apps/ledger/src/schema/schema.service.ts index 1fd599611..13e3328a1 100644 --- a/apps/ledger/src/schema/schema.service.ts +++ b/apps/ledger/src/schema/schema.service.ts @@ -6,7 +6,8 @@ import { ConflictException, Injectable, NotAcceptableException, - NotFoundException + NotFoundException, + HttpStatus } from '@nestjs/common'; import { ClientProxy, RpcException } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; @@ -516,16 +517,13 @@ export class SchemaService extends BaseService { } } catch (error) { this.logger.error(`Error in getting schema by id: ${error}`); - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { + if (error?.status?.message?.error) { throw new RpcException({ - message: error?.status?.message?.error?.reason - ? error?.status?.message?.error?.reason - : error?.status?.message?.error, - statusCode: error?.status?.code + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status?.code ?? HttpStatus.INTERNAL_SERVER_ERROR }); - } else { - throw new RpcException(error.response ? error.response : error); } + throw new RpcException(error.response || error); } } diff --git a/apps/organization/src/organization.service.ts b/apps/organization/src/organization.service.ts index 084475f39..0e6972fc8 100644 --- a/apps/organization/src/organization.service.ts +++ b/apps/organization/src/organization.service.ts @@ -1760,7 +1760,7 @@ export class OrganizationService { }; return this.organizationServiceProxy - .send(pattern, userEmails) + .send(pattern, userEmails) .pipe( map((response: string) => ({ response @@ -1789,7 +1789,7 @@ export class OrganizationService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.organizationServiceProxy.send(pattern, payload).toPromise(); + const message = await this.organizationServiceProxy.send(pattern, payload).toPromise(); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); diff --git a/libs/aws/package.json b/libs/aws/package.json index 7e66c0b02..56590cbf5 100644 --- a/libs/aws/package.json +++ b/libs/aws/package.json @@ -13,9 +13,9 @@ "test": "jest" }, "dependencies": { - "@nestjs/common": "^10.2.7", - "@nestjs/testing": "^10.1.3", - "@nestjs/microservices": "^10.1.3", + "@nestjs/common": "catalog:", + "@nestjs/testing": "catalog:", + "@nestjs/microservices": "catalog:", "aws-sdk": "^2.1510.0" }, "devDependencies": { diff --git a/libs/common/package.json b/libs/common/package.json index 16a53aeb6..6e1569c67 100644 --- a/libs/common/package.json +++ b/libs/common/package.json @@ -13,12 +13,12 @@ "test": "jest" }, "dependencies": { - "@nestjs/axios": "^3.0.0", - "@nestjs/common": "^10.2.7", - "@nestjs/core": "^10.1.3", - "@nestjs/testing": "^10.1.3", - "@nestjs/microservices": "^10.1.3", - "@nestjs/swagger": "^7.1.6", + "@nestjs/axios": "catalog:", + "@nestjs/common": "catalog:", + "@nestjs/core": "catalog:", + "@nestjs/testing": "catalog:", + "@nestjs/microservices": "catalog:", + "@nestjs/swagger": "catalog:", "@prisma/client": "^5.1.1", "@sendgrid/mail": "^7.7.0", "class-transformer": "^0.5.1", diff --git a/libs/common/src/NATSClient.ts b/libs/common/src/NATSClient.ts index 219a85499..3d2a98e6e 100644 --- a/libs/common/src/NATSClient.ts +++ b/libs/common/src/NATSClient.ts @@ -19,25 +19,34 @@ export class NATSClient { } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - sendNats(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { + sendNats(serviceProxy: Pick, cmd: string, payload: any): Promise { this.logger.log(`Inside NATSClient for sendNats()`); const pattern = { cmd }; - const headers = nats.headers(1, this.contextStorageService.getContextId()); + const contextId = this.contextStorageService.getContextId() ?? v4(); + const headers = nats.headers(); + headers.set('contextId', contextId); const record = new NatsRecordBuilder(payload).setHeaders(headers).build(); - return serviceProxy - .send(pattern, record) - .pipe( + return firstValueFrom( + serviceProxy.send(pattern, record).pipe( + /** + * TODO: Check dependency of this mapping. + * This might be the reason we are getting, response.response in multiple responses + * We are maintaining them as is for now, but it need to be updated later + */ map((response: string) => ({ + // This map return the reposne as `{response: string}` instead of just the `string` response })) ) - .toPromise(); + ); } - sendNatsMessage(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { + sendNatsMessage(serviceProxy: Pick, cmd: string, payload: any): Promise { const pattern = { cmd }; - const headers = nats.headers(1, this.contextStorageService.getContextId()); + const contextId = this.contextStorageService.getContextId() ?? v4(); + const headers = nats.headers(); + headers.set('contextId', contextId); const record = new NatsRecordBuilder(payload).setHeaders(headers).build(); const result = serviceProxy.send(pattern, record); @@ -45,14 +54,10 @@ export class NATSClient { return firstValueFrom(result); } - send(serviceProxy: ClientProxy, pattern: object, payload: any): Promise { - let contextId = this.contextStorageService.getContextId(); - - if (!contextId) { - contextId = v4(); - } - - const headers = nats.headers(1, contextId); + send(serviceProxy: Pick, pattern: object, payload: any): Promise { + const contextId = this.contextStorageService.getContextId() ?? v4(); + const headers = nats.headers(); + headers.set('contextId', contextId); const record = new NatsRecordBuilder(payload).setHeaders(headers).build(); const result = serviceProxy.send(pattern, record); diff --git a/libs/common/src/common.service.ts b/libs/common/src/common.service.ts index 7d031b7a5..6f59b24b3 100644 --- a/libs/common/src/common.service.ts +++ b/libs/common/src/common.service.ts @@ -238,16 +238,13 @@ export class CommonService { * This function is used to handle errors in apps with RpcException */ handleError(error): Promise { - if (error && error?.status && error?.status?.message && error?.status?.message?.error) { + if (error?.status?.message?.error) { throw new RpcException({ - message: error?.status?.message?.error?.reason - ? error?.status?.message?.error?.reason - : error?.status?.message?.error, - statusCode: error?.status?.code + message: error.status.message.error.reason || error.status.message.error, + statusCode: error.status.code ?? HttpStatus.INTERNAL_SERVER_ERROR }); - } else { - throw new RpcException(error.response ? error.response : error); } + throw new RpcException(error.response || error); } async checkAgentHealth(baseUrl: string, apiKey: string): Promise { diff --git a/libs/common/src/interfaces/schema.interface.ts b/libs/common/src/interfaces/schema.interface.ts index 34dc9b028..b174526e2 100644 --- a/libs/common/src/interfaces/schema.interface.ts +++ b/libs/common/src/interfaces/schema.interface.ts @@ -1,3 +1,5 @@ +import { ICredDefData } from './cred-def.interface'; + export interface IPaginationDetails { totalItems: number; hasNextPage: boolean; @@ -71,21 +73,15 @@ export interface IPlatformSchemas { schemasResult: ISchemaData[]; } -export interface ICredDefData { - tag: string; - credentialDefinitionId: string; - schemaLedgerId: string; - revocable: boolean; - createDateTime?: Date; -} +export interface PartialICredDefData extends Omit {} export interface ICredDefWithPagination extends IPaginationDetails { - data: ICredDefData[]; + data: PartialICredDefData[]; } export interface ICredDefWithCount { credDefCount: number; - credDefResult: ICredDefData[]; + credDefResult: PartialICredDefData[]; } export interface INetworkUrl { diff --git a/libs/user-activity/repositories/index.ts b/libs/user-activity/repositories/index.ts index 7895ea825..7342f7910 100644 --- a/libs/user-activity/repositories/index.ts +++ b/libs/user-activity/repositories/index.ts @@ -1,82 +1,88 @@ /* eslint-disable camelcase */ -import { HttpException, Inject, Injectable, Logger } from '@nestjs/common'; -import { IUsersActivity} from '../interface'; +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { HttpException, HttpStatus, Inject, Injectable, Logger } from '@nestjs/common'; +import { IUsersActivity } from '../interface'; import { PrismaService } from '@credebl/prisma-service'; import { RecordType, user, user_activity } from '@prisma/client'; -import { map } from 'rxjs'; +import { lastValueFrom, timeout } from 'rxjs'; import { ClientProxy } from '@nestjs/microservices'; @Injectable() export class UserActivityRepository { - constructor(private readonly prisma: PrismaService, private readonly logger: Logger, + constructor( + private readonly prisma: PrismaService, + private readonly logger: Logger, @Inject('NATS_CLIENT') private readonly userActivityServiceProxy: ClientProxy - ) { } + ) {} + async logActivity(userId: string, orgId: string, action: string, details: string): Promise { + return this.prisma.user_activity.create({ + data: { + userId, + orgId, + action, + details, + createdBy: userId, + lastChangedBy: userId + } + }); + } - async logActivity(userId: string, orgId: string, action: string, details: string): Promise { - return this.prisma.user_activity.create({ - data: { - userId, - orgId, - action, - details, - createdBy: userId, - lastChangedBy: userId - } - }); - } + async getRecentActivities(userId: string, limit: number): Promise { + return this.prisma.user_activity.findMany({ + where: { + userId + }, + select: { + id: true, + userId: true, + orgId: true, + action: true, + details: true, + createDateTime: true, + lastChangedDateTime: true + }, + orderBy: { + createDateTime: 'desc' + }, + take: limit + }); + } - async getRecentActivities(userId: string, limit: number): Promise { - return this.prisma.user_activity.findMany({ - where: { - userId - }, - select: { - id: true, - userId: true, - orgId: true, - action: true, - details: true, - createDateTime:true, - lastChangedDateTime: true - }, - orderBy: { - createDateTime: 'desc' - }, - take: limit - }); - } + async _orgDeletedActivity( + orgId: string, + user: user, + txnMetadata: object, + recordType: RecordType + ): Promise<{ + message: string; + }> { + try { + const pattern = { cmd: 'org-deleted-activity' }; + const payload = { orgId, userId: user?.id, deletedBy: user?.id, recordType, userEmail: user?.email, txnMetadata }; - async _orgDeletedActivity(orgId: string, user: user, txnMetadata: object, recordType: RecordType): Promise<{ - message: string; - }> { - try { - const pattern = { cmd: 'org-deleted-activity' }; - const payload = { orgId, userId: user?.id, deletedBy: user?.id, recordType, userEmail: user?.email, txnMetadata }; - - return this.userActivityServiceProxy - .send(pattern, payload) - .pipe( - map((message) => ({ - message - })) - ) - .toPromise() - .catch((error) => { - this.logger.error(`catch: ${JSON.stringify(error)}`); - - throw new HttpException( - { - status: error?.error?.statusCode, - error: error?.error?.error, - message: error?.error?.message ?? error?.message - }, - error.error - ); - }); - } catch (error) { - this.logger.error(`[_orgDeletedActivity] - error in delete wallet : ${JSON.stringify(error)}`); - throw error; - } + const resp = await lastValueFrom(this.userActivityServiceProxy.send(pattern, payload).pipe(timeout(10000))); + + if ('string' === typeof resp) { + return { message: resp }; + } + if (resp && 'string' === typeof (resp as any).message) { + return { message: (resp as any).message }; } -} \ No newline at end of file + return { message: 'OK' }; + } catch (error) { + this.logger.error(`[_orgDeletedActivity] - NATS 'org-deleted-activity' failed`, (error as any)?.stack); + const status = + (error as any)?.status ?? + (error as any)?.statusCode ?? + (error as any)?.error?.statusCode ?? + HttpStatus.INTERNAL_SERVER_ERROR; + const response = { + status, + error: (error as any)?.name ?? (error as any)?.error?.error ?? 'InternalServerError', + message: (error as any)?.message ?? (error as any)?.error?.message ?? 'Internal server error' + }; + throw new HttpException(response, status); + } + } +} diff --git a/libs/user-activity/src/user-activity.module.ts b/libs/user-activity/src/user-activity.module.ts index 2ac446d9d..b4ac80416 100644 --- a/libs/user-activity/src/user-activity.module.ts +++ b/libs/user-activity/src/user-activity.module.ts @@ -3,8 +3,10 @@ import { Logger, Module } from '@nestjs/common'; import { PrismaService } from '@credebl/prisma-service'; import { UserActivityRepository } from '../repositories'; import { UserActivityService } from './user-activity.service'; +import { LoggerModule } from '@credebl/logger'; @Module({ + imports: [LoggerModule], providers: [UserActivityService, UserActivityRepository, Logger, PrismaService], exports: [UserActivityService] }) diff --git a/package.json b/package.json index 3affb2fec..5d3de0b85 100644 --- a/package.json +++ b/package.json @@ -27,21 +27,21 @@ }, "dependencies": { "@elastic/ecs-winston-format": "^1.5.3", - "@nestjs/axios": "^3.0.0", - "@nestjs/bull": "^10.0.1", - "@nestjs/cache-manager": "^2.1.0", - "@nestjs/common": "^10.2.7", - "@nestjs/config": "^3.0.0", - "@nestjs/core": "^10.1.3", - "@nestjs/jwt": "^10.1.0", - "@nestjs/microservices": "^10.1.3", - "@nestjs/passport": "^10.0.0", - "@nestjs/platform-express": "^10.1.3", - "@nestjs/platform-socket.io": "^10.1.3", - "@nestjs/schedule": "^3.0.1", - "@nestjs/swagger": "^7.1.6", - "@nestjs/typeorm": "^10.0.0", - "@nestjs/websockets": "^10.1.3", + "@nestjs/axios": "catalog:", + "@nestjs/bull": "catalog:", + "@nestjs/cache-manager": "catalog:", + "@nestjs/common": "catalog:", + "@nestjs/config": "catalog:", + "@nestjs/core": "catalog:", + "@nestjs/jwt": "catalog:", + "@nestjs/microservices": "catalog:", + "@nestjs/passport": "catalog:", + "@nestjs/platform-express": "catalog:", + "@nestjs/platform-socket.io": "catalog:", + "@nestjs/schedule": "catalog:", + "@nestjs/swagger": "catalog:", + "@nestjs/typeorm": "catalog:", + "@nestjs/websockets": "catalog:", "@opentelemetry/api": "^1.9.0", "@opentelemetry/exporter-logs-otlp-http": "^0.202.0", "@opentelemetry/exporter-trace-otlp-http": "^0.202.0", @@ -91,10 +91,10 @@ "multer": "1.4.5-lts.1", "nanoid": "^4.0.2", "nats": "^2.15.1", - "nestjs-cls": "^4.3.0", - "nestjs-rate-limiter": "^3.1.0", - "nestjs-supabase-auth": "^1.0.9", - "nestjs-typeorm-paginate": "^4.0.4", + "nestjs-cls": "catalog:", + "nestjs-rate-limiter": "catalog:", + "nestjs-supabase-auth": "catalog:", + "nestjs-typeorm-paginate": "catalog:", "node-html-to-image": "^4.0.0", "node-qpdf2": "^2.0.0", "p-limit": "^3.0.0", @@ -125,9 +125,9 @@ "xml-js": "^1.6.11" }, "devDependencies": { - "@nestjs/cli": "^10.1.11", - "@nestjs/schematics": "^10.0.1", - "@nestjs/testing": "^10.1.3", + "@nestjs/cli": "catalog:", + "@nestjs/schematics": "catalog:", + "@nestjs/testing": "catalog:", "@types/express": "^4.17.17", "@types/jest": "^29.5.3", "@types/multer": "^1.4.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65c373c35..0e8abdffc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,57 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +catalogs: + default: + '@nestjs/axios': + specifier: ^4.0.1 + version: 4.0.1 + '@nestjs/bull': + specifier: ^11.0.3 + version: 11.0.3 + '@nestjs/cache-manager': + specifier: ^3.0.1 + version: 3.0.1 + '@nestjs/common': + specifier: ^11.1.6 + version: 11.1.6 + '@nestjs/config': + specifier: ^4.0.2 + version: 4.0.2 + '@nestjs/core': + specifier: ^11.1.6 + version: 11.1.6 + '@nestjs/jwt': + specifier: ^11.0.0 + version: 11.0.0 + '@nestjs/microservices': + specifier: ^11.1.6 + version: 11.1.6 + '@nestjs/passport': + specifier: ^11.0.5 + version: 11.0.5 + '@nestjs/platform-express': + specifier: ^11.1.6 + version: 11.1.6 + '@nestjs/platform-socket.io': + specifier: ^11.1.6 + version: 11.1.6 + '@nestjs/schedule': + specifier: ^6.0.1 + version: 6.0.1 + '@nestjs/swagger': + specifier: ^11.2.0 + version: 11.2.0 + '@nestjs/testing': + specifier: ^11.1.6 + version: 11.1.6 + '@nestjs/typeorm': + specifier: ^11.0.0 + version: 11.0.0 + '@nestjs/websockets': + specifier: ^11.1.6 + version: 11.1.6 + importers: .: @@ -12,50 +63,50 @@ importers: specifier: ^1.5.3 version: 1.5.3 '@nestjs/axios': - specifier: ^3.0.0 - version: 3.1.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(axios@0.26.1)(rxjs@7.8.2) + specifier: 'catalog:' + version: 4.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(axios@0.26.1)(rxjs@7.8.2) '@nestjs/bull': - specifier: ^10.0.1 - version: 10.2.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(bull@4.16.5) + specifier: 'catalog:' + version: 11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(bull@4.16.5) '@nestjs/cache-manager': - specifier: ^2.1.0 - version: 2.3.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(cache-manager@5.7.6)(rxjs@7.8.2) + specifier: 'catalog:' + version: 3.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(cache-manager@5.7.6)(keyv@4.5.4)(rxjs@7.8.2) '@nestjs/common': - specifier: ^10.2.7 - version: 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/config': - specifier: ^3.0.0 - version: 3.3.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(rxjs@7.8.2) + specifier: 'catalog:' + version: 4.0.2(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(rxjs@7.8.2) '@nestjs/core': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/jwt': - specifier: ^10.1.0 - version: 10.2.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)) + specifier: 'catalog:' + version: 11.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)) '@nestjs/microservices': - specifier: ^10.1.3 - version: 10.4.19(@grpc/grpc-js@1.13.4)(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/websockets@10.4.19)(cache-manager@5.7.6)(ioredis@5.6.1)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(@grpc/grpc-js@1.14.0)(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/websockets@11.1.6)(cache-manager@5.7.6)(ioredis@5.8.0)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/passport': - specifier: ^10.0.0 - version: 10.0.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(passport@0.6.0) + specifier: 'catalog:' + version: 11.0.5(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(passport@0.6.0) '@nestjs/platform-express': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19) + specifier: 'catalog:' + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6) '@nestjs/platform-socket.io': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/websockets@10.4.19)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/websockets@11.1.6)(rxjs@7.8.2) '@nestjs/schedule': - specifier: ^3.0.1 - version: 3.0.4(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(reflect-metadata@0.1.14) + specifier: 'catalog:' + version: 6.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6) '@nestjs/swagger': - specifier: ^7.1.6 - version: 7.4.2(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14) + specifier: 'catalog:' + version: 11.2.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14) '@nestjs/typeorm': - specifier: ^10.0.0 - version: 10.0.2(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))) + specifier: 'catalog:' + version: 11.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2))) '@nestjs/websockets': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/platform-socket.io@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-socket.io@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.0 @@ -67,16 +118,16 @@ importers: version: 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-express': specifier: ^0.51.0 - version: 0.51.0(@opentelemetry/api@1.9.0) + version: 0.51.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-http': specifier: ^0.202.0 version: 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation-nestjs-core': specifier: ^0.48.0 - version: 0.48.0(@opentelemetry/api@1.9.0) + version: 0.48.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': specifier: ^2.0.1 - version: 2.0.1(@opentelemetry/api@1.9.0) + version: 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': specifier: ^0.202.0 version: 0.202.0(@opentelemetry/api@1.9.0) @@ -85,7 +136,7 @@ importers: version: 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': specifier: ^1.34.0 - version: 1.34.0 + version: 1.37.0 '@prisma/client': specifier: ^5.1.1 version: 5.22.0(prisma@5.22.0) @@ -94,7 +145,7 @@ importers: version: 7.7.0 '@supabase/supabase-js': specifier: ^2.32.0 - version: 2.50.0 + version: 2.57.4 '@types/async-retry': specifier: ^1.4.5 version: 1.4.9 @@ -154,7 +205,7 @@ importers: version: 5.0.0 dotenv: specifier: ^16.0.3 - version: 16.5.0 + version: 16.6.1 express: specifier: ^4.18.2 version: 4.21.2 @@ -193,7 +244,7 @@ importers: version: 2.30.1 morgan: specifier: ^1.10.0 - version: 1.10.0 + version: 1.10.1 multer: specifier: 1.4.5-lts.1 version: 1.4.5-lts.1 @@ -204,8 +255,8 @@ importers: specifier: ^2.15.1 version: 2.29.3 nestjs-cls: - specifier: ^4.3.0 - version: 4.5.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: ^6.0.1 + version: 6.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) nestjs-rate-limiter: specifier: ^3.1.0 version: 3.1.0 @@ -214,7 +265,7 @@ importers: version: 1.0.9 nestjs-typeorm-paginate: specifier: ^4.0.4 - version: 4.1.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(typeorm@0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))) + version: 4.1.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(typeorm@0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2))) node-html-to-image: specifier: ^4.0.0 version: 4.0.0 @@ -244,10 +295,10 @@ importers: version: 0.13.0 pg: specifier: ^8.11.2 - version: 8.16.2 + version: 8.16.3 puppeteer: specifier: ^21.5.0 - version: 21.11.0(typescript@5.8.3) + version: 21.11.0(typescript@5.9.2) qrcode: specifier: ^1.5.3 version: 1.5.4 @@ -274,7 +325,7 @@ importers: version: 5.0.1(express@4.21.2) typeorm: specifier: ^0.3.10 - version: 0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) unzipper: specifier: ^0.10.14 version: 0.10.14 @@ -301,14 +352,14 @@ importers: version: 1.6.11 devDependencies: '@nestjs/cli': - specifier: ^10.1.11 - version: 10.4.9 + specifier: ^11.0.10 + version: 11.0.10(@types/node@20.19.17) '@nestjs/schematics': - specifier: ^10.0.1 - version: 10.2.3(chokidar@3.6.0)(typescript@5.8.3) + specifier: ^11.0.7 + version: 11.0.7(chokidar@4.0.3)(typescript@5.9.2) '@nestjs/testing': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19) + specifier: ^11.1.6 + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6) '@types/express': specifier: ^4.17.17 version: 4.17.23 @@ -320,7 +371,7 @@ importers: version: 1.4.13 '@types/node': specifier: ^20.4.6 - version: 20.19.1 + version: 20.19.17 '@types/passport-jwt': specifier: 3.0.9 version: 3.0.9 @@ -332,28 +383,28 @@ importers: version: 2.0.16 '@typescript-eslint/eslint-plugin': specifier: ^6.2.1 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/parser': specifier: ^6.2.1 - version: 6.21.0(eslint@8.57.1)(typescript@5.8.3) + version: 6.21.0(eslint@8.57.1)(typescript@5.9.2) eslint: specifier: ^8.46.0 version: 8.57.1 eslint-config-prettier: specifier: ^8.10.0 - version: 8.10.0(eslint@8.57.1) + version: 8.10.2(eslint@8.57.1) eslint-config-standard-with-typescript: specifier: ^37.0.0 - version: 37.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.8.3) + version: 37.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.2) eslint-plugin-import: specifier: ^2.28.0 - version: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + version: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) eslint-plugin-n: specifier: ^15.7.0 version: 15.7.0(eslint@8.57.1) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.0) + version: 4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) eslint-plugin-promise: specifier: ^6.1.1 version: 6.6.0(eslint@8.57.1) @@ -362,13 +413,13 @@ importers: version: 8.0.3 jest: specifier: ^29.6.2 - version: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + version: 29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) lint-staged: specifier: ^13.2.3 version: 13.3.0 prettier: specifier: ^3.0.1 - version: 3.6.0 + version: 3.6.2 prisma: specifier: ^5.1.1 version: 5.22.0 @@ -377,31 +428,31 @@ importers: version: 6.3.4 ts-jest: specifier: ^29.1.1 - version: 29.4.0(@babel/core@7.27.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.4))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)))(typescript@5.8.3) + version: 29.4.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)))(typescript@5.9.2) ts-loader: specifier: ^9.4.4 - version: 9.5.2(typescript@5.8.3)(webpack@5.97.1) + version: 9.5.4(typescript@5.9.2)(webpack@5.100.2) ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@20.19.1)(typescript@5.8.3) + version: 10.9.2(@types/node@20.19.17)(typescript@5.9.2) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 typescript: specifier: ^5.1.6 - version: 5.8.3 + version: 5.9.2 libs/aws: dependencies: '@nestjs/common': - specifier: ^10.2.7 - version: 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/microservices': - specifier: ^10.1.3 - version: 10.4.19(@grpc/grpc-js@1.13.4)(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/websockets@10.4.19)(cache-manager@5.7.6)(ioredis@5.6.1)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(@grpc/grpc-js@1.14.0)(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/websockets@11.1.6)(cache-manager@5.7.6)(ioredis@5.8.0)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/testing': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19) + specifier: 'catalog:' + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6) aws-sdk: specifier: ^2.1510.0 version: 2.1692.0 @@ -414,28 +465,28 @@ importers: version: 4.4.1 typescript: specifier: ^5.1.6 - version: 5.8.3 + version: 5.9.2 libs/common: dependencies: '@nestjs/axios': - specifier: ^3.0.0 - version: 3.1.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(axios@0.26.1)(rxjs@7.8.2) + specifier: 'catalog:' + version: 4.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(axios@0.26.1)(rxjs@7.8.2) '@nestjs/common': - specifier: ^10.2.7 - version: 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/core': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/microservices': - specifier: ^10.1.3 - version: 10.4.19(@grpc/grpc-js@1.13.4)(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/websockets@10.4.19)(cache-manager@5.7.6)(ioredis@5.6.1)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) + specifier: 'catalog:' + version: 11.1.6(@grpc/grpc-js@1.14.0)(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/websockets@11.1.6)(cache-manager@5.7.6)(ioredis@5.8.0)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) '@nestjs/swagger': - specifier: ^7.1.6 - version: 7.4.2(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14) + specifier: 'catalog:' + version: 11.2.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14) '@nestjs/testing': - specifier: ^10.1.3 - version: 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19) + specifier: 'catalog:' + version: 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6) '@prisma/client': specifier: ^5.1.1 version: 5.22.0(prisma@5.22.0) @@ -453,7 +504,7 @@ importers: version: 4.2.0 dotenv: specifier: ^16.0.3 - version: 16.5.0 + version: 16.6.1 nats: specifier: ^2.15.1 version: 2.29.3 @@ -475,58 +526,58 @@ importers: version: 4.4.1 typescript: specifier: ^5.1.6 - version: 5.8.3 + version: 5.9.2 packages: - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - - '@angular-devkit/core@17.3.11': - resolution: {integrity: sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==} - engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/core@19.2.15': + resolution: {integrity: sha512-pU2RZYX6vhd7uLSdLwPnuBcr0mXJSjp3EgOXKsrlQFQZevc+Qs+2JdXgIElnOT/aDqtRtriDmLlSbtdE8n3ZbA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: - chokidar: ^3.5.2 + chokidar: ^4.0.0 peerDependenciesMeta: chokidar: optional: true - '@angular-devkit/schematics-cli@17.3.11': - resolution: {integrity: sha512-kcOMqp+PHAKkqRad7Zd7PbpqJ0LqLaNZdY1+k66lLWmkEBozgq8v4ASn/puPWf9Bo0HpCiK+EzLf0VHE8Z/y6Q==} - engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/schematics-cli@19.2.15': + resolution: {integrity: sha512-1ESFmFGMpGQmalDB3t2EtmWDGv6gOFYBMxmHO2f1KI/UDl8UmZnCGL4mD3EWo8Hv0YIsZ9wOH9Q7ZHNYjeSpzg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular-devkit/schematics@17.3.11': - resolution: {integrity: sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==} - engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + '@angular-devkit/schematics@19.2.15': + resolution: {integrity: sha512-kNOJ+3vekJJCQKWihNmxBkarJzNW09kP5a9E1SRNiQVNOUEeSwcRR0qYotM65nx821gNzjjhJXnAZ8OazWldrg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.27.5': - resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} + '@babel/compat-data@7.28.4': + resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} engines: {node: '>=6.9.0'} - '@babel/core@7.27.4': - resolution: {integrity: sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.5': - resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.27.2': resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.27.1': resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.27.3': - resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -547,12 +598,12 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.6': - resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.5': - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true @@ -651,17 +702,20 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.27.4': - resolution: {integrity: sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.6': - resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@borewit/text-codec@0.1.1': + resolution: {integrity: sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -693,8 +747,8 @@ packages: resolution: {integrity: sha512-6uQ1pVXutwz1Krwooo67W+3K8BwH1ASMh1WoHTpomUzw8EXecXN5lHIJ9EPqTHuv1WqR2LKkSJyagcq0HYUJpg==} engines: {node: '>=12'} - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -711,12 +765,12 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@grpc/grpc-js@1.13.4': - resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + '@grpc/grpc-js@1.14.0': + resolution: {integrity: sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==} engines: {node: '>=12.10.0'} - '@grpc/proto-loader@0.7.15': - resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + '@grpc/proto-loader@0.8.0': + resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} engines: {node: '>=6'} hasBin: true @@ -733,8 +787,159 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@ioredis/commands@1.2.0': - resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + '@inquirer/ansi@1.0.0': + resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.2.4': + resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.18': + resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.2.2': + resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.20': + resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.20': + resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.13': + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} + engines: {node: '>=18'} + + '@inquirer/input@4.2.4': + resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.20': + resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.20': + resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.3.2': + resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.8.0': + resolution: {integrity: sha512-JHwGbQ6wjf1dxxnalDYpZwZxUEosT+6CPGD9Zh4sm9WXdtUp9XODCQD3NjSTmu+0OAyxWXNOqf0spjIymJa2Tw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.1.8': + resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.1.3': + resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.3.4': + resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.8': + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@ioredis/commands@1.4.0': + resolution: {integrity: sha512-aFT2yemJJo+TZCmieA7qnYGQooOS7QfNmYrzGtsYd3g9j5iDP8AimYYAesf79ohjbLG12XxC4nG5DyEnC88AsQ==} + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -814,26 +1019,24 @@ packages: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -841,10 +1044,6 @@ packages: '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - '@ljharb/through@2.3.14': - resolution: {integrity: sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==} - engines: {node: '>= 0.4'} - '@lukeed/csprng@1.1.0': resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} engines: {node: '>=8'} @@ -886,40 +1085,41 @@ packages: cpu: [x64] os: [win32] - '@nestjs/axios@3.1.3': - resolution: {integrity: sha512-RZ/63c1tMxGLqyG3iOCVt7A72oy4x1eM6QEhd4KzCYpaVWW0igq0WSREeRoEZhIxRcZfDfIIkvsOMiM7yfVGZQ==} + '@nestjs/axios@4.0.1': + resolution: {integrity: sha512-68pFJgu+/AZbWkGu65Z3r55bTsCPlgyKaV4BSG8yUAD72q1PPuyVRgUwFv6BxdnibTUHlyxm06FmYWNC+bjN7A==} peerDependencies: - '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 axios: ^1.3.1 - rxjs: ^6.0.0 || ^7.0.0 + rxjs: ^7.0.0 - '@nestjs/bull-shared@10.2.3': - resolution: {integrity: sha512-XcgAjNOgq6b5DVCytxhR5BKiwWo7hsusVeyE7sfFnlXRHeEtIuC2hYWBr/ZAtvL/RH0/O0tqtq0rVl972nbhJw==} + '@nestjs/bull-shared@11.0.3': + resolution: {integrity: sha512-CaHniPkLAxis6fAB1DB8WZELQv8VPCLedbj7iP0VQ1pz74i6NSzG9mBg6tOomXq/WW4la4P4OMGEQ48UAJh20A==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 - '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 - '@nestjs/bull@10.2.3': - resolution: {integrity: sha512-Gy90JjFCfYhWFBeoBSidc7rEEf2BNhkJ3RfK8ym589POOldwAra2xcnFBi0ZuhhOV60GcrCJBBkdrUbAMM670w==} + '@nestjs/bull@11.0.3': + resolution: {integrity: sha512-VyH823Klc7OgsU0FyuKItgRefgrQOQHN5uW9lHxNih6LRtw2Vpi9fENjPdOwjQqKexxZxjNDGKZoDCyK+UGclg==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 - '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 + '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 bull: ^3.3 || ^4.0.0 - '@nestjs/cache-manager@2.3.0': - resolution: {integrity: sha512-pxeBp9w/s99HaW2+pezM1P3fLiWmUEnTUoUMLa9UYViCtjj0E0A19W/vaT5JFACCzFIeNrwH4/16jkpAhQ25Vw==} + '@nestjs/cache-manager@3.0.1': + resolution: {integrity: sha512-4UxTnR0fsmKL5YDalU2eLFVnL+OBebWUpX+hEduKGncrVKH4PPNoiRn1kXyOCjmzb0UvWgqubpssNouc8e0MCw==} peerDependencies: - '@nestjs/common': ^9.0.0 || ^10.0.0 - '@nestjs/core': ^9.0.0 || ^10.0.0 - cache-manager: <=5 - rxjs: ^7.0.0 + '@nestjs/common': ^9.0.0 || ^10.0.0 || ^11.0.0 + '@nestjs/core': ^9.0.0 || ^10.0.0 || ^11.0.0 + cache-manager: '>=6' + keyv: '>=5' + rxjs: ^7.8.1 - '@nestjs/cli@10.4.9': - resolution: {integrity: sha512-s8qYd97bggqeK7Op3iD49X2MpFtW4LVNLAwXFkfbRxKME6IYT7X0muNTJ2+QfI8hpbNx9isWkrLWIp+g5FOhiA==} - engines: {node: '>= 16.14'} + '@nestjs/cli@11.0.10': + resolution: {integrity: sha512-4waDT0yGWANg0pKz4E47+nUrqIJv/UqrZ5wLPkCqc7oMGRMWKAaw1NDZ9rKsaqhqvxb2LfI5+uXOWr4yi94DOQ==} + engines: {node: '>= 20.11'} hasBin: true peerDependencies: - '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 + '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 '@swc/core': ^1.3.62 peerDependenciesMeta: '@swc/cli': @@ -927,11 +1127,11 @@ packages: '@swc/core': optional: true - '@nestjs/common@10.4.19': - resolution: {integrity: sha512-0TZJ8H+7qtaqZt6YfZJkDRp0e+v6jjo5/pevPAjUy0WYxaTy16bNNQxFPRKLMe/v1hUr2oGV9imvL2477zNt5g==} + '@nestjs/common@11.1.6': + resolution: {integrity: sha512-krKwLLcFmeuKDqngG2N/RuZHCs2ycsKcxWIDgcm7i1lf3sQ0iG03ci+DsP/r3FcT/eJDFsIHnKtNta2LIi7PzQ==} peerDependencies: - class-transformer: '*' - class-validator: '*' + class-transformer: '>=0.4.1' + class-validator: '>=0.13.2' reflect-metadata: ^0.1.12 || ^0.2.0 rxjs: ^7.1.0 peerDependenciesMeta: @@ -940,19 +1140,20 @@ packages: class-validator: optional: true - '@nestjs/config@3.3.0': - resolution: {integrity: sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==} + '@nestjs/config@4.0.2': + resolution: {integrity: sha512-McMW6EXtpc8+CwTUwFdg6h7dYcBUpH5iUILCclAsa+MbCEvC9ZKu4dCHRlJqALuhjLw97pbQu62l4+wRwGeZqA==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 rxjs: ^7.1.0 - '@nestjs/core@10.4.19': - resolution: {integrity: sha512-gahghu0y4Rn4gn/xPjTgNHFMpUM8TxfhdeMowVWTGVnYMZtGeEGbIXMFhJS0Dce3E4VKyqAglzgO9ecAZd4Ong==} + '@nestjs/core@11.1.6': + resolution: {integrity: sha512-siWX7UDgErisW18VTeJA+x+/tpNZrJewjTBsRPF3JVxuWRuAB1kRoiJcxHgln8Lb5UY9NdvklITR84DUEXD0Cg==} + engines: {node: '>= 20'} peerDependencies: - '@nestjs/common': ^10.0.0 - '@nestjs/microservices': ^10.0.0 - '@nestjs/platform-express': ^10.0.0 - '@nestjs/websockets': ^10.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/microservices': ^11.0.0 + '@nestjs/platform-express': ^11.0.0 + '@nestjs/websockets': ^11.0.0 reflect-metadata: ^0.1.12 || ^0.2.0 rxjs: ^7.1.0 peerDependenciesMeta: @@ -963,15 +1164,15 @@ packages: '@nestjs/websockets': optional: true - '@nestjs/jwt@10.2.0': - resolution: {integrity: sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==} + '@nestjs/jwt@11.0.0': + resolution: {integrity: sha512-v7YRsW3Xi8HNTsO+jeHSEEqelX37TVWgwt+BcxtkG/OfXJEOs6GZdbdza200d6KqId1pJQZ6UPj1F0M6E+mxaA==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 - '@nestjs/mapped-types@2.0.5': - resolution: {integrity: sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==} + '@nestjs/mapped-types@2.1.0': + resolution: {integrity: sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 class-transformer: ^0.4.0 || ^0.5.0 class-validator: ^0.13.0 || ^0.14.0 reflect-metadata: ^0.1.12 || ^0.2.0 @@ -981,13 +1182,13 @@ packages: class-validator: optional: true - '@nestjs/microservices@10.4.19': - resolution: {integrity: sha512-GaWRqFug/ctACF7T9CcQJ4UYr1Q5B44nqYnWoeqnzLN0Ov1ta9dBQmPGxBHYbLN2vP8d9zQHf1G+iBsaH29YEQ==} + '@nestjs/microservices@11.1.6': + resolution: {integrity: sha512-5ibvCvZ8IBxKhpSkyAC+EBdtm0XVAu3h+GV4PmOi4bXbRvVBT3Kwqq4td2wkWDN3VqteChjQ0aTADv0jizhCrg==} peerDependencies: '@grpc/grpc-js': '*' - '@nestjs/common': ^10.0.0 - '@nestjs/core': ^10.0.0 - '@nestjs/websockets': ^10.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + '@nestjs/websockets': ^11.0.0 amqp-connection-manager: '*' amqplib: '*' cache-manager: '*' @@ -1017,43 +1218,42 @@ packages: nats: optional: true - '@nestjs/passport@10.0.3': - resolution: {integrity: sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==} + '@nestjs/passport@11.0.5': + resolution: {integrity: sha512-ulQX6mbjlws92PIM15Naes4F4p2JoxGnIJuUsdXQPT+Oo2sqQmENEZXM7eYuimocfHnKlcfZOuyzbA33LwUlOQ==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 - passport: ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 + passport: ^0.5.0 || ^0.6.0 || ^0.7.0 - '@nestjs/platform-express@10.4.19': - resolution: {integrity: sha512-IeQkBZUtPeJoO4E0QqSLwkB+60KcThw8/s4gGvAwIRJ5ViuXoxnwU59eBDy84PUuVbNe4VdKjfAF9fuQOEh11Q==} + '@nestjs/platform-express@11.1.6': + resolution: {integrity: sha512-HErwPmKnk+loTq8qzu1up+k7FC6Kqa8x6lJ4cDw77KnTxLzsCaPt+jBvOq6UfICmfqcqCCf3dKXg+aObQp+kIQ==} peerDependencies: - '@nestjs/common': ^10.0.0 - '@nestjs/core': ^10.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 - '@nestjs/platform-socket.io@10.4.19': - resolution: {integrity: sha512-Pfz9dBcXaoUFdVpA/I96NoOTiTQ7eYfDNhQ2sZdQzne3oISEvts5G2SWyQNouoyjqkUPt6X5r/CQ++M4AzSlEQ==} + '@nestjs/platform-socket.io@11.1.6': + resolution: {integrity: sha512-ozm+OKiRiFLNQdFLA3ULDuazgdVaPrdRdgtG/+404T7tcROXpbUuFL0eEmWJpG64CxMkBNwamclUSH6J0AeU7A==} peerDependencies: - '@nestjs/common': ^10.0.0 - '@nestjs/websockets': ^10.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/websockets': ^11.0.0 rxjs: ^7.1.0 - '@nestjs/schedule@3.0.4': - resolution: {integrity: sha512-uFJpuZsXfpvgx2y7/KrIZW9e1L68TLiwRodZ6+Gc8xqQiHSUzAVn+9F4YMxWFlHITZvvkjWziUFgRNCitDcTZQ==} + '@nestjs/schedule@6.0.1': + resolution: {integrity: sha512-v3yO6cSPAoBSSyH67HWnXHzuhPhSNZhRmLY38JvCt2sqY8sPMOODpcU1D79iUMFf7k16DaMEbL4Mgx61ZhiC8Q==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 - '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 - reflect-metadata: ^0.1.12 + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 - '@nestjs/schematics@10.2.3': - resolution: {integrity: sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==} + '@nestjs/schematics@11.0.7': + resolution: {integrity: sha512-t8dNYYMwEeEsrlwc2jbkfwCfXczq4AeNEgx1KVQuJ6wYibXk0ZbXbPdfp8scnEAaQv1grpncNV5gWgzi7ZwbvQ==} peerDependencies: typescript: '>=4.8.2' - '@nestjs/swagger@7.4.2': - resolution: {integrity: sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ==} + '@nestjs/swagger@11.2.0': + resolution: {integrity: sha512-5wolt8GmpNcrQv34tIPUtPoV1EeFbCetm40Ij3+M0FNNnf2RJ3FyWfuQvI8SBlcJyfaounYVTKzKHreFXsUyOg==} peerDependencies: - '@fastify/static': ^6.0.0 || ^7.0.0 - '@nestjs/common': ^9.0.0 || ^10.0.0 - '@nestjs/core': ^9.0.0 || ^10.0.0 + '@fastify/static': ^8.0.0 + '@nestjs/common': ^11.0.1 + '@nestjs/core': ^11.0.1 class-transformer: '*' class-validator: '*' reflect-metadata: ^0.1.12 || ^0.2.0 @@ -1065,34 +1265,34 @@ packages: class-validator: optional: true - '@nestjs/testing@10.4.19': - resolution: {integrity: sha512-YfzkjTmwEcoWqo8xr8YiTZMC4FjBEOg4uRTAPI2p6iGLWu+27tYau1CtAKFHY0uSAK3FzgtsAuYoxBSlfr9mWA==} + '@nestjs/testing@11.1.6': + resolution: {integrity: sha512-srYzzDNxGvVCe1j0SpTS9/ix75PKt6Sn6iMaH1rpJ6nj2g8vwNrhK0CoJJXvpCYgrnI+2WES2pprYnq8rAMYHA==} peerDependencies: - '@nestjs/common': ^10.0.0 - '@nestjs/core': ^10.0.0 - '@nestjs/microservices': ^10.0.0 - '@nestjs/platform-express': ^10.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + '@nestjs/microservices': ^11.0.0 + '@nestjs/platform-express': ^11.0.0 peerDependenciesMeta: '@nestjs/microservices': optional: true '@nestjs/platform-express': optional: true - '@nestjs/typeorm@10.0.2': - resolution: {integrity: sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==} + '@nestjs/typeorm@11.0.0': + resolution: {integrity: sha512-SOeUQl70Lb2OfhGkvnh4KXWlsd+zA08RuuQgT7kKbzivngxzSo1Oc7Usu5VxCxACQC9wc2l9esOHILSJeK7rJA==} peerDependencies: - '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 - '@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0 + '@nestjs/common': ^10.0.0 || ^11.0.0 + '@nestjs/core': ^10.0.0 || ^11.0.0 reflect-metadata: ^0.1.13 || ^0.2.0 rxjs: ^7.2.0 typeorm: ^0.3.0 - '@nestjs/websockets@10.4.19': - resolution: {integrity: sha512-3HhNZU40/ozB64ZZJ1W1bOOYSbxGuJwmM5Ui8y1uPwbzpL1Uov3wOG3eRp1IflSBK4Ia0wb8Iv3ChpFSTzrNiA==} + '@nestjs/websockets@11.1.6': + resolution: {integrity: sha512-jlBX5QpqhfEVfxkwxTesIjgl0bdhgFMoORQYzjRg1i+Z+Qouf4KmjNPv5DZE3DZRDg91E+3Bpn0VgW0Yfl94ng==} peerDependencies: - '@nestjs/common': ^10.0.0 - '@nestjs/core': ^10.0.0 - '@nestjs/platform-socket.io': ^10.0.0 + '@nestjs/common': ^11.0.0 + '@nestjs/core': ^11.0.0 + '@nestjs/platform-socket.io': ^11.0.0 reflect-metadata: ^0.1.12 || ^0.2.0 rxjs: ^7.1.0 peerDependenciesMeta: @@ -1115,9 +1315,9 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nuxtjs/opencollective@0.3.2': - resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} + '@nuxt/opencollective@0.4.1': + resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} + engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} hasBin: true '@opentelemetry/api-logs@0.202.0': @@ -1146,6 +1346,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.1.0': + resolution: {integrity: sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/exporter-logs-otlp-grpc@0.202.0': resolution: {integrity: sha512-Y84L8Yja/A2qjGEzC/To0yrMUXHrtwJzHtZ2za1/ulZplRe5QFsLNyHixIS42ZYUKuNyWMDgOFhnN2Pz5uThtg==} engines: {node: ^18.19.0 || >=20.6.0} @@ -1212,8 +1418,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 - '@opentelemetry/instrumentation-express@0.51.0': - resolution: {integrity: sha512-v1mgfvyeQh7yfsZ8wZlr+jgFGk9FxzLfNH0EH0UYGO9das8fCIkixsEasZMWhjwAJKjlf+ElTZ2jE2pT7I3DyQ==} + '@opentelemetry/instrumentation-express@0.51.1': + resolution: {integrity: sha512-cKmzev7RolYGedQ82hVUoH+74BP4E0xmhUCEagOxmW3aKilXYx01KwsNN6wnx3IXR7u2nlYugQsEsLLA4d829A==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -1224,8 +1430,8 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/instrumentation-nestjs-core@0.48.0': - resolution: {integrity: sha512-ytK4ABSkWcD9vyMU8GpinvodAGaRxBFuxybP/m7sgLtEboXMJjdWnEHb7lH/CX1ICiVKRXWdYg9npdu6yBCW5Q==} + '@opentelemetry/instrumentation-nestjs-core@0.48.1': + resolution: {integrity: sha512-rH0IUQRf9wjxEkiPfltM17DVqgSe/rgeIlg1CKRDAhuxWkbXlcHwdOnBfngGKhJNGOlGUo6HzZesavPAlmm3Fw==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': ^1.3.0 @@ -1278,6 +1484,12 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/resources@2.1.0': + resolution: {integrity: sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-logs@0.202.0': resolution: {integrity: sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ==} engines: {node: ^18.19.0 || >=20.6.0} @@ -1318,8 +1530,8 @@ packages: resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} - '@opentelemetry/semantic-conventions@1.34.0': - resolution: {integrity: sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==} + '@opentelemetry/semantic-conventions@1.37.0': + resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==} engines: {node: '>=14'} '@paralleldrive/cuid2@2.2.2': @@ -1426,27 +1638,27 @@ packages: '@sqltools/formatter@1.2.5': resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} - '@supabase/auth-js@2.70.0': - resolution: {integrity: sha512-BaAK/tOAZFJtzF1sE3gJ2FwTjLf4ky3PSvcvLGEgEmO4BSBkwWKu8l67rLLIBZPDnCyV7Owk2uPyKHa0kj5QGg==} + '@supabase/auth-js@2.71.1': + resolution: {integrity: sha512-mMIQHBRc+SKpZFRB2qtupuzulaUhFYupNyxqDj5Jp/LyPvcWvjaJzZzObv6URtL/O6lPxkanASnotGtNpS3H2Q==} - '@supabase/functions-js@2.4.4': - resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + '@supabase/functions-js@2.4.6': + resolution: {integrity: sha512-bhjZ7rmxAibjgmzTmQBxJU6ZIBCCJTc3Uwgvdi4FewueUTAGO5hxZT1Sj6tiD+0dSXf9XI87BDdJrg12z8Uaew==} '@supabase/node-fetch@2.6.15': resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} engines: {node: 4.x || >=6.0.0} - '@supabase/postgrest-js@1.19.4': - resolution: {integrity: sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==} + '@supabase/postgrest-js@1.21.4': + resolution: {integrity: sha512-TxZCIjxk6/dP9abAi89VQbWWMBbybpGWyvmIzTd79OeravM13OjR/YEYeyUOPcM1C3QyvXkvPZhUfItvmhY1IQ==} - '@supabase/realtime-js@2.11.10': - resolution: {integrity: sha512-SJKVa7EejnuyfImrbzx+HaD9i6T784khuw1zP+MBD7BmJYChegGxYigPzkKX8CK8nGuDntmeSD3fvriaH0EGZA==} + '@supabase/realtime-js@2.15.5': + resolution: {integrity: sha512-/Rs5Vqu9jejRD8ZeuaWXebdkH+J7V6VySbCZ/zQM93Ta5y3mAmocjioa/nzlB6qvFmyylUgKVS1KpE212t30OA==} - '@supabase/storage-js@2.7.1': - resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + '@supabase/storage-js@2.12.1': + resolution: {integrity: sha512-QWg3HV6Db2J81VQx0PqLq0JDBn4Q8B1FYn1kYcbla8+d5WDmTdwwMr+EJAxNOSs9W4mhKMv+EYCpCrTFlTj4VQ==} - '@supabase/supabase-js@2.50.0': - resolution: {integrity: sha512-M1Gd5tPaaghYZ9OjeO1iORRqbTWFEz/cF3pPubRnMPzA+A8SiUsXXWDP+DWsASZcjEcVEcVQIAF38i5wrijYOg==} + '@supabase/supabase-js@2.57.4': + resolution: {integrity: sha512-LcbTzFhHYdwfQ7TRPfol0z04rLEyHabpGYANME6wkQ/kLtKNmI+Vy+WEM8HxeOZAtByUFxoUTTLwhXmrh+CcVw==} '@swc/helpers@0.3.17': resolution: {integrity: sha512-tb7Iu+oZ+zWJZ3HJqwx8oNwSDIU440hmVMDPhpACWQWnrZHK99Bxs70gT1L2dnr5Hg50ZRWEFkQCAnOVVV0z1Q==} @@ -1485,8 +1697,8 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} @@ -1548,11 +1760,11 @@ packages: '@types/jsonwebtoken@9.0.10': resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} - '@types/jsonwebtoken@9.0.5': - resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} + '@types/jsonwebtoken@9.0.7': + resolution: {integrity: sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==} - '@types/luxon@3.3.8': - resolution: {integrity: sha512-jYvz8UMLDgy3a5SkGJne8H7VA7zPV2Lwohjx0V8V31+SqAjNmurWMkk9cQhfvlcnXWudBpK9xPM1n4rljOcHYQ==} + '@types/luxon@3.7.1': + resolution: {integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==} '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} @@ -1566,8 +1778,8 @@ packages: '@types/multer@1.4.13': resolution: {integrity: sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw==} - '@types/node@20.19.1': - resolution: {integrity: sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==} + '@types/node@20.19.17': + resolution: {integrity: sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==} '@types/passport-jwt@3.0.9': resolution: {integrity: sha512-5XJt+79emfgpuBvBQusUPylFIVtW1QVAAkTRwCbRJAmxUjmLtIqUU6V1ovpnHPu6Qut3mR5Juc+s7kd06roNTg==} @@ -1596,8 +1808,8 @@ packages: '@types/retry@0.12.5': resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} - '@types/semver@7.7.0': - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/semver@7.7.1': + resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} '@types/send@0.17.5': resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} @@ -1617,8 +1829,8 @@ packages: '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} - '@types/validator@13.15.2': - resolution: {integrity: sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==} + '@types/validator@13.15.3': + resolution: {integrity: sha512-7bcUmDyS6PN3EuD9SlGGOxM77F8WLVsrwkxyWxKnxzmXoequ6c7741QBrANq6htVRGOITJ7z72mTP6Z4XyuG+Q==} '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -1782,6 +1994,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-import-assertions@1.9.0: resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} deprecated: package has been renamed to acorn-import-attributes @@ -1793,6 +2009,12 @@ packages: peerDependencies: acorn: ^8 + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -1814,8 +2036,8 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} agentkeepalive@4.6.0: @@ -1830,6 +2052,14 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: @@ -1843,9 +2073,6 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -1865,8 +2092,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -1877,14 +2104,18 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} ansis@3.17.0: resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} engines: {node: '>=14'} + ansis@4.1.0: + resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==} + engines: {node: '>=14'} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1896,8 +2127,8 @@ packages: append-field@1.0.0: resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} - aproba@2.0.0: - resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + aproba@2.1.0: + resolution: {integrity: sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==} are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} @@ -2011,8 +2242,13 @@ packages: axios@0.26.1: resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + b4a@1.7.1: + resolution: {integrity: sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -2028,10 +2264,10 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-preset-current-node-syntax@1.1.0: - resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + babel-preset-current-node-syntax@1.2.0: + resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0 || ^8.0.0-0 babel-preset-jest@29.6.3: resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} @@ -2042,8 +2278,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + bare-events@2.7.0: + resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} base64-js@0.0.8: resolution: {integrity: sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==} @@ -2056,6 +2292,10 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + baseline-browser-mapping@2.8.6: + resolution: {integrity: sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw==} + hasBin: true + basic-auth@2.0.1: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} @@ -2075,10 +2315,6 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - binary-search@1.3.6: resolution: {integrity: sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==} @@ -2104,6 +2340,10 @@ packages: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + brace-expansion@1.1.12: resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} @@ -2120,8 +2360,8 @@ packages: brotli@1.3.3: resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} - browserslist@4.25.0: - resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} + browserslist@4.26.2: + resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2205,8 +2445,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001724: - resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==} + caniuse-lite@1.0.30001743: + resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -2222,20 +2462,16 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -2288,10 +2524,6 @@ packages: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} @@ -2388,8 +2620,9 @@ packages: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} engines: {'0': node >= 6.0} - consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} @@ -2401,6 +2634,10 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} @@ -2415,6 +2652,10 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} @@ -2474,8 +2715,9 @@ packages: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} engines: {node: '>=12.0.0'} - cron@2.4.3: - resolution: {integrity: sha512-YBvExkQYF7w0PxyeFLRyr817YVDhGxaCi5/uRRMqa4aWD3IFKRd+uNbpW1VWMdqQy8PZ7CElc+accXJcauPKzQ==} + cron@4.3.3: + resolution: {integrity: sha512-B/CJj5yL3sjtlun6RtYHvoSB26EmQ2NUmhq9ZiJSyKIM4K/fqfh9aelDFlIayD2YMeFZqWLi9hHV+c+pq2Djkw==} + engines: {node: '>=18.x'} cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} @@ -2511,8 +2753,8 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -2548,8 +2790,8 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2561,8 +2803,8 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - dedent@1.6.0: - resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} + dedent@1.7.0: + resolution: {integrity: sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -2618,8 +2860,8 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.1.0: + resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} engines: {node: '>=8'} detect-newline@3.1.0: @@ -2661,16 +2903,16 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dotenv-expand@10.0.0: - resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + dotenv-expand@12.0.1: + resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==} engines: {node: '>=12'} - dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} dunder-proto@1.0.1: @@ -2692,17 +2934,12 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true - elastic-apm-node@3.52.2: resolution: {integrity: sha512-NVFthDcoBOpTwtppF7b+BIeIu4Xon3RBNpddIaJv+DtjL6Q61x4j7ClYdiXjv3XKgyp7yUlOnLjU6PY/EYXwLQ==} engines: {node: '>=8.6.0'} - electron-to-chromium@1.5.173: - resolution: {integrity: sha512-2bFhXP2zqSfQHugjqJIDFVwa+qIxyNApenmXTp9EjaKtdPrES5Qcn9/aSFy/NaP2E+fWG/zxKu/LBvY36p5VNQ==} + electron-to-chromium@1.5.222: + resolution: {integrity: sha512-gA7psSwSwQRE60CEoLz6JBCQPIxNeuzB2nL8vE03GK/OHxlvykbLyeiumQy1iH5C2f3YbRAZpGCMT12a/9ih9w==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -2739,8 +2976,8 @@ packages: resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.18.2: - resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} + enhanced-resolve@5.18.3: + resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==} engines: {node: '>=10.13.0'} env-paths@2.2.1: @@ -2751,8 +2988,8 @@ packages: resolution: {integrity: sha512-V877Ch4FC4FN178fDK1fsrHN4I1YQIBdtjKrHh3BUHMnh3SMvwUVrqkaOgDpUuevgSNna0RBq6Ox9SGlxYrigA==} engines: {node: '>=6.x'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -2801,10 +3038,6 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -2818,8 +3051,8 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-prettier@8.10.0: - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + eslint-config-prettier@8.10.2: + resolution: {integrity: sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -2890,8 +3123,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-prettier@4.2.1: - resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + eslint-plugin-prettier@4.2.5: + resolution: {integrity: sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==} engines: {node: '>=12.0.0'} peerDependencies: eslint: '>=7.28.0' @@ -2979,6 +3212,9 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@1.1.1: resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} engines: {node: '>=0.4.x'} @@ -3011,13 +3247,13 @@ packages: resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} engines: {node: '>= 0.10.0'} + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - extract-zip@1.7.0: resolution: {integrity: sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==} hasBin: true @@ -3060,8 +3296,8 @@ packages: fast-stream-to-buffer@1.0.0: resolution: {integrity: sha512-bI/544WUQlD2iXBibQbOMSmG07Hay7YrpXlKaeGTPT7H7pC0eitt3usak5vUwEvCGK/O7rUAM3iyQValGU22TQ==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -3078,10 +3314,6 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -3089,12 +3321,9 @@ packages: file-stream-rotator@0.6.1: resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} - file-type@20.4.1: - resolution: {integrity: sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==} - engines: {node: '>=18'} - - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + file-type@21.0.0: + resolution: {integrity: sha512-ek5xNX2YBYlXhiUXui3D/BXa3LdqPmoLJ7rqEx2bKJ7EAUEfmXgW0Das7Dc6Nr9MvqaOnIqiPV0mZk/r/UpNAg==} + engines: {node: '>=20'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -3104,6 +3333,10 @@ packages: resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3125,8 +3358,8 @@ packages: fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -3148,9 +3381,9 @@ packages: forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - fork-ts-checker-webpack-plugin@9.0.2: - resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + fork-ts-checker-webpack-plugin@9.1.0: + resolution: {integrity: sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==} + engines: {node: '>=14.21.3'} peerDependencies: typescript: '>3.6.0' webpack: ^5.11.0 @@ -3159,8 +3392,8 @@ packages: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} - form-data@4.0.3: - resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} formidable@2.1.5: @@ -3177,6 +3410,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fs-extra@1.0.0: resolution: {integrity: sha512-VerQV6vEKuhDWD2HGOybV6v5I73syoc/cXAbKlgTC7M/oFVEtklWlp9QH2Ijw3IaWDOQcMkldSPa7zXy79Z/UQ==} @@ -3188,8 +3425,8 @@ packages: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs-monkey@1.1.0: + resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -3261,8 +3498,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} getpass@0.1.7: @@ -3283,6 +3520,11 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.3: + resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + engines: {node: 20 || >=22} + hasBin: true + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3291,10 +3533,6 @@ packages: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} engines: {node: '>=16 || 14 >=14.17'} - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -3435,6 +3673,14 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + idtoken-verifier@2.2.4: resolution: {integrity: sha512-5t7O8cNHpJBB8FnwLD0qFZqy/+qGICObQKUl0njD6vXKHhpZPLEe8LU7qv/GBWB3Qv5e/wAIFHYVi4SoQwdOxQ==} @@ -3477,24 +3723,16 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} - - inquirer@9.2.15: - resolution: {integrity: sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==} - engines: {node: '>=18'} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ioredis@5.6.1: - resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==} + ioredis@5.8.0: + resolution: {integrity: sha512-AUXbKn9gvo9hHKvk6LbZJQSKn/qIfkWXrnsyL9Yrf+oeXmla9Nmf6XEumOddyhM8neynpK5oAV6r9r99KBuwzA==} engines: {node: '>=12.22.0'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} engines: {node: '>= 12'} ipaddr.js@1.9.1: @@ -3512,8 +3750,8 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} @@ -3523,10 +3761,6 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} @@ -3612,6 +3846,9 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -3699,8 +3936,8 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} - istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + istanbul-reports@3.2.0: + resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} iterare@1.2.1: @@ -3710,10 +3947,9 @@ packages: 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 + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} @@ -3916,17 +4152,14 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} - jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsonfile@2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -3980,8 +4213,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.12.9: - resolution: {integrity: sha512-VWwAdNeJgN7jFOD+wN4qx83DTPMVPPAUyx9/TUkBXKLiNkuWWk6anV0439tgdtwaJDrEdqkvdN22iA6J4bUCZg==} + libphonenumber-js@1.12.18: + resolution: {integrity: sha512-k0pdkX8DXHqVrby7yJ23WBcHMCX1lhwvX/Uazh0vf3wfGQa0qDIyRB2Z2C01JREGGt8Assfwl1yZduq59OjXXQ==} lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -4016,6 +4249,10 @@ packages: enquirer: optional: true + load-esm@1.0.2: + resolution: {integrity: sha512-nVAvWk/jeyrWyXEAs84mpQCYccxRqgKY4OznLuJhJCa0XsPSfdOIr2zvBZEj3IHEHbX97jjscKRRV539bW0Gpw==} + engines: {node: '>=13.2.0'} + loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -4099,6 +4336,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.1: + resolution: {integrity: sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==} + engines: {node: 20 || >=22} + lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -4116,17 +4357,12 @@ packages: lru-memoizer@2.3.0: resolution: {integrity: sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==} - luxon@3.3.0: - resolution: {integrity: sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==} - engines: {node: '>=12'} - - luxon@3.6.1: - resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} + luxon@3.7.2: + resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} engines: {node: '>=12'} - magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} @@ -4161,6 +4397,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memfs@3.5.3: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} @@ -4168,6 +4408,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4191,10 +4435,18 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -4216,13 +4468,13 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + 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'} @@ -4282,8 +4534,8 @@ packages: monitor-event-loop-delay@1.0.0: resolution: {integrity: sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q==} - morgan@1.10.0: - resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + morgan@1.10.1: + resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==} engines: {node: '>= 0.8.0'} ms@2.0.0: @@ -4299,24 +4551,21 @@ packages: resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} hasBin: true - msgpackr@1.11.4: - resolution: {integrity: sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==} + msgpackr@1.11.5: + resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==} multer@1.4.5-lts.1: resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} engines: {node: '>= 6.0.0'} deprecated: Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version. - multer@2.0.1: - resolution: {integrity: sha512-Ug8bXeTIUlxurg8xLTEskKShvcKDZALo1THEX5E41pYCD2sCVub5/kIRIGqWNoqV6szyLyQKV6mD4QUrWE5GCQ==} + multer@2.0.2: + resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} engines: {node: '>= 10.16.0'} - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} nanoid@4.0.2: resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} @@ -4334,15 +4583,19 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - nestjs-cls@4.5.0: - resolution: {integrity: sha512-oi3GNCc5pnsnVI5WJKMDwmg4NP+JyEw+edlwgepyUba5+RGGtJzpbVaaxXGW1iPbDuQde3/fA8Jdjq9j88BVcQ==} - engines: {node: '>=16'} + nestjs-cls@6.0.1: + resolution: {integrity: sha512-FnU8MI5/RKdbNvGmlUMD7nuFs7zUiueNzTjO+sxj7BJbsf7cUmosarppPLXRJ7C1WaZ/gLE9ZAcM6//0q1CQIA==} + engines: {node: '>=18'} peerDependencies: - '@nestjs/common': '> 7.0.0 < 11' - '@nestjs/core': '> 7.0.0 < 11' + '@nestjs/common': '>= 10 < 12' + '@nestjs/core': '>= 10 < 12' reflect-metadata: '*' rxjs: '>= 7' @@ -4401,8 +4654,8 @@ packages: resolution: {integrity: sha512-Xoxe53XsEriaVLWJTl3YtHE54qaZnO2GeoNKKALLy6cKUAjYZuFlTaNCcsVkfoIbZv2YYWuggeuqhTQ1XPbvgw==} engines: {node: '>=10.17.0'} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.21: + resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -4482,8 +4735,8 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} once@1.4.0: @@ -4514,10 +4767,6 @@ packages: original-url@1.2.3: resolution: {integrity: sha512-BYm+pKYLtS4mVe/mgT3YKGtWV5HzN/XKiaIu1aK4rsxyjuHeTW9N+xVBEpJcY1onB3nccfH0RbzUEoimMqFUHQ==} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -4609,11 +4858,16 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - path-to-regexp@3.3.0: - resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -4634,8 +4888,8 @@ packages: performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - pg-cloudflare@1.2.6: - resolution: {integrity: sha512-uxmJAnmIgmYgnSFzgOf2cqGQBzwnRYcrEgXuFjJNEkpedEIPBSEzxY7ph4uA9k1mI+l/GR0HjPNS6FKNZe8SBQ==} + pg-cloudflare@1.2.7: + resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==} pg-connection-string@2.9.1: resolution: {integrity: sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==} @@ -4649,15 +4903,15 @@ packages: peerDependencies: pg: '>=8.0' - pg-protocol@1.10.2: - resolution: {integrity: sha512-Ci7jy8PbaWxfsck2dwZdERcDG2A0MG8JoQILs+uZNjABFuBuItAZCWUNz8sXRDMoui24rJw7WlXqgpMdBSN/vQ==} + pg-protocol@1.10.3: + resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} pg-types@2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} - pg@8.16.2: - resolution: {integrity: sha512-OtLWF0mKLmpxelOt9BqVq83QV6bTfsS0XLegIeAKqKjurRnRKie1Dc1iL89MugmSLhftxw6NNCyZhm1yQFLMEQ==} + pg@8.16.3: + resolution: {integrity: sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==} engines: {node: '>= 16.0.0'} peerDependencies: pg-native: '>=3.0.1' @@ -4680,8 +4934,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.1: - resolution: {integrity: sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} pidtree@0.6.0: @@ -4751,8 +5005,8 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.6.0: - resolution: {integrity: sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true @@ -4794,8 +5048,8 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - protobufjs@7.5.3: - resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: @@ -4898,6 +5152,10 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + raw-body@3.0.1: + resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + engines: {node: '>= 0.10'} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -4908,9 +5166,9 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} redis-commands@1.7.0: resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} @@ -5030,17 +5288,13 @@ packages: engines: {node: '>=14'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + rsync@0.6.1: resolution: {integrity: sha512-39HcwWuM67CQ9tHloazShXWUOWa2m3SGqX6XQhQMSj0VCQMkSI9PodoxM7/+hKf2p4v2umbhfoarYqd1gwII/w==} - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} - run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -5105,6 +5359,10 @@ packages: resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} @@ -5112,6 +5370,10 @@ packages: resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -5133,8 +5395,9 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} hasBin: true shallow-clone-shim@2.0.0: @@ -5171,8 +5434,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -5208,8 +5471,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.5: - resolution: {integrity: sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==} + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sonic-boom@1.4.1: @@ -5229,9 +5492,14 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} + source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} @@ -5240,9 +5508,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sql-highlight@6.1.0: resolution: {integrity: sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==} engines: {node: '>=14'} @@ -5272,6 +5537,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -5283,8 +5552,8 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - streamx@2.22.1: - resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + streamx@2.23.0: + resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -5324,8 +5593,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom@3.0.0: @@ -5348,8 +5617,8 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strtok3@10.3.1: - resolution: {integrity: sha512-3JWEZM6mfix/GCJBBUrkA8p2Id2pBkyTkVCJKto55w080QBKZ+8R171fGrbiSp+yMO/u6F8/yUh7K4V9K+YCnw==} + strtok3@10.3.4: + resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==} engines: {node: '>=18'} superagent@7.1.6: @@ -5379,11 +5648,11 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swagger-ui-dist@5.17.14: - resolution: {integrity: sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==} + swagger-ui-dist@5.21.0: + resolution: {integrity: sha512-E0K3AB6HvQd8yQNSMR7eE5bk+323AUxjtCz/4ZNKiahOlPhPJxqn3UPIGs00cyY/dhrTDJ61L7C/a8u6zhGrZg==} - swagger-ui-dist@5.25.2: - resolution: {integrity: sha512-V4JyoygUe5nCbn7bAD0fVKSC0yNcL3ROIQtGC7M0NATKuyosCSmMU6T0yDZIIuGpSxjsjZh/D2Ejb8lnF2jjxw==} + swagger-ui-dist@5.29.0: + resolution: {integrity: sha512-gqs7Md3AxP4mbpXAq31o5QW+wGUZsUzVatg70yXpUR245dfIis5jAzufBd+UQM/w2xSfrhvA1eqsrgnl2PbezQ==} swagger-ui-express@5.0.1: resolution: {integrity: sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==} @@ -5395,8 +5664,8 @@ packages: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} engines: {node: '>=0.10'} - tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + tapable@2.2.3: + resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==} engines: {node: '>=6'} tar-fs@3.0.4: @@ -5425,8 +5694,8 @@ packages: uglify-js: optional: true - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} hasBin: true @@ -5452,13 +5721,13 @@ packages: tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-buffer@1.2.1: + resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + engines: {node: '>= 0.4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5470,8 +5739,8 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - token-types@6.0.0: - resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} + token-types@6.1.1: + resolution: {integrity: sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==} engines: {node: '>=14.16'} tough-cookie@2.5.0: @@ -5501,8 +5770,8 @@ packages: peerDependencies: typescript: '>=4.2.0' - ts-jest@29.4.0: - resolution: {integrity: sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==} + ts-jest@29.4.4: + resolution: {integrity: sha512-ccVcRABct5ZELCT5U0+DZwkXMCcOCLi2doHRrKy1nK/s7J7bch6TzJMsrY09WxgUUIP/ITfmcDS8D2yl63rnXw==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -5528,8 +5797,8 @@ packages: jest-util: optional: true - ts-loader@9.5.2: - resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} + ts-loader@9.5.4: + resolution: {integrity: sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==} engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' @@ -5613,6 +5882,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -5632,15 +5905,14 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typeorm@0.3.25: - resolution: {integrity: sha512-fTKDFzWXKwAaBdEMU4k661seZewbNYET4r1J/z3Jwf+eAvlzMVpTLKAVcAzg75WwQk7GDmtsmkZ5MfkmXCiFWg==} + typeorm@0.3.27: + resolution: {integrity: sha512-pNV1bn+1n8qEe8tUNsNdD8ejuPcMAg47u2lUGnbsajiNUr3p2Js1XLKQjBMH0yMRMDfdX8T+fIRejFmIwy9x4A==} engines: {node: '>=16.13.0'} hasBin: true peerDependencies: '@google-cloud/spanner': ^5.18.0 || ^6.0.0 || ^7.0.0 - '@sap/hana-client': ^2.12.25 - better-sqlite3: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 - hdb-pool: ^0.1.6 + '@sap/hana-client': ^2.14.22 + better-sqlite3: ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 ioredis: ^5.0.4 mongodb: ^5.8.0 || ^6.0.0 mssql: ^9.1.1 || ^10.0.1 || ^11.0.1 @@ -5649,7 +5921,7 @@ packages: pg: ^8.5.1 pg-native: ^3.0.0 pg-query-stream: ^4.0.0 - redis: ^3.1.1 || ^4.0.0 + redis: ^3.1.1 || ^4.0.0 || ^5.0.14 reflect-metadata: ^0.1.14 || ^0.2.0 sql.js: ^1.4.0 sqlite3: ^5.0.3 @@ -5662,8 +5934,6 @@ packages: optional: true better-sqlite3: optional: true - hdb-pool: - optional: true ioredis: optional: true mongodb: @@ -5691,13 +5961,13 @@ packages: typeorm-aurora-data-api-driver: optional: true - typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -5710,8 +5980,8 @@ packages: resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} engines: {node: '>=8'} - uint8array-extras@1.4.0: - resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + uint8array-extras@1.5.0: + resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} unbox-primitive@1.1.0: @@ -5850,8 +6120,8 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} - webpack@5.97.1: - resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} + webpack@5.100.2: + resolution: {integrity: sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -5980,8 +6250,8 @@ packages: utf-8-validate: optional: true - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6063,40 +6333,40 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} -snapshots: + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} + engines: {node: '>=18'} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 +snapshots: - '@angular-devkit/core@17.3.11(chokidar@3.6.0)': + '@angular-devkit/core@19.2.15(chokidar@4.0.3)': dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - jsonc-parser: 3.2.1 - picomatch: 4.0.1 + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + jsonc-parser: 3.3.1 + picomatch: 4.0.2 rxjs: 7.8.1 source-map: 0.7.4 optionalDependencies: - chokidar: 3.6.0 + chokidar: 4.0.3 - '@angular-devkit/schematics-cli@17.3.11(chokidar@3.6.0)': + '@angular-devkit/schematics-cli@19.2.15(@types/node@20.19.17)(chokidar@4.0.3)': dependencies: - '@angular-devkit/core': 17.3.11(chokidar@3.6.0) - '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) + '@angular-devkit/core': 19.2.15(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) + '@inquirer/prompts': 7.3.2(@types/node@20.19.17) ansi-colors: 4.1.3 - inquirer: 9.2.15 symbol-observable: 4.0.0 yargs-parser: 21.1.1 transitivePeerDependencies: + - '@types/node' - chokidar - '@angular-devkit/schematics@17.3.11(chokidar@3.6.0)': + '@angular-devkit/schematics@19.2.15(chokidar@4.0.3)': dependencies: - '@angular-devkit/core': 17.3.11(chokidar@3.6.0) - jsonc-parser: 3.2.1 - magic-string: 0.30.8 + '@angular-devkit/core': 19.2.15(chokidar@4.0.3) + jsonc-parser: 3.3.1 + magic-string: 0.30.17 ora: 5.4.1 rxjs: 7.8.1 transitivePeerDependencies: @@ -6108,57 +6378,59 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.27.5': {} + '@babel/compat-data@7.28.4': {} - '@babel/core@7.27.4': + '@babel/core@7.28.4': dependencies: - '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 + '@babel/generator': 7.28.3 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.4) - '@babel/helpers': 7.27.6 - '@babel/parser': 7.27.5 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.1 + debug: 4.4.3 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.27.5': + '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.27.5 + '@babel/compat-data': 7.28.4 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.0 + browserslist: 4.26.2 lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-globals@7.28.0': {} + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.4)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -6170,125 +6442,127 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.27.6': + '@babel/helpers@7.28.4': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.28.4 - '@babel/parser@7.27.5': + '@babel/parser@7.28.4': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.28.4 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.4)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.4)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.4)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.4)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.4)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.4)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.4)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.4)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.4)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@babel/helper-plugin-utils': 7.27.1 '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@babel/traverse@7.27.4': + '@babel/traverse@7.28.4': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 '@babel/template': 7.27.2 - '@babel/types': 7.27.6 - debug: 4.4.1 - globals: 11.12.0 + '@babel/types': 7.28.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color - '@babel/types@7.27.6': + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@0.2.3': {} + '@borewit/text-codec@0.1.1': {} + '@colors/colors@1.5.0': optional: true @@ -6319,14 +6593,14 @@ snapshots: '@elastic/elasticsearch@7.17.14': dependencies: - debug: 4.4.1 + debug: 4.4.3 hpagent: 0.1.2 ms: 2.1.3 secure-json-parse: 2.7.0 transitivePeerDependencies: - supports-color - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 @@ -6336,7 +6610,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.4.1 + debug: 4.4.3 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -6349,22 +6623,22 @@ snapshots: '@eslint/js@8.57.1': {} - '@grpc/grpc-js@1.13.4': + '@grpc/grpc-js@1.14.0': dependencies: - '@grpc/proto-loader': 0.7.15 + '@grpc/proto-loader': 0.8.0 '@js-sdsl/ordered-map': 4.4.2 - '@grpc/proto-loader@0.7.15': + '@grpc/proto-loader@0.8.0': dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 7.5.3 + protobufjs: 7.5.4 yargs: 17.7.2 '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.1 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6373,13 +6647,159 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@ioredis/commands@1.2.0': {} + '@inquirer/ansi@1.0.0': {} + + '@inquirer/checkbox@4.2.4(@types/node@20.19.17)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/confirm@5.1.18(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/core@10.2.2(@types/node@20.19.17)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/editor@4.2.20(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/external-editor': 1.0.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/expand@4.0.20(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/external-editor@1.0.2(@types/node@20.19.17)': + dependencies: + chardet: 2.1.0 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/figures@1.0.13': {} + + '@inquirer/input@4.2.4(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/number@3.0.20(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/password@4.0.20(@types/node@20.19.17)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/prompts@7.3.2(@types/node@20.19.17)': + dependencies: + '@inquirer/checkbox': 4.2.4(@types/node@20.19.17) + '@inquirer/confirm': 5.1.18(@types/node@20.19.17) + '@inquirer/editor': 4.2.20(@types/node@20.19.17) + '@inquirer/expand': 4.0.20(@types/node@20.19.17) + '@inquirer/input': 4.2.4(@types/node@20.19.17) + '@inquirer/number': 3.0.20(@types/node@20.19.17) + '@inquirer/password': 4.0.20(@types/node@20.19.17) + '@inquirer/rawlist': 4.1.8(@types/node@20.19.17) + '@inquirer/search': 3.1.3(@types/node@20.19.17) + '@inquirer/select': 4.3.4(@types/node@20.19.17) + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/prompts@7.8.0(@types/node@20.19.17)': + dependencies: + '@inquirer/checkbox': 4.2.4(@types/node@20.19.17) + '@inquirer/confirm': 5.1.18(@types/node@20.19.17) + '@inquirer/editor': 4.2.20(@types/node@20.19.17) + '@inquirer/expand': 4.0.20(@types/node@20.19.17) + '@inquirer/input': 4.2.4(@types/node@20.19.17) + '@inquirer/number': 3.0.20(@types/node@20.19.17) + '@inquirer/password': 4.0.20(@types/node@20.19.17) + '@inquirer/rawlist': 4.1.8(@types/node@20.19.17) + '@inquirer/search': 3.1.3(@types/node@20.19.17) + '@inquirer/select': 4.3.4(@types/node@20.19.17) + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/rawlist@4.1.8(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/search@3.1.3(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/select@4.3.4(@types/node@20.19.17)': + dependencies: + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/type@3.0.8(@types/node@20.19.17)': + optionalDependencies: + '@types/node': 20.19.17 + + '@ioredis/commands@1.4.0': {} + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -6397,27 +6817,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 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(@types/node@20.19.1)(typescript@5.8.3))': + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2))': 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.19.1 + '@types/node': 20.19.17 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.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -6442,7 +6862,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -6460,7 +6880,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.19.1 + '@types/node': 20.19.17 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6481,8 +6901,8 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.19.1 + '@jridgewell/trace-mapping': 0.3.31 + '@types/node': 20.19.17 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -6492,7 +6912,7 @@ snapshots: istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.7 + istanbul-reports: 3.2.0 jest-message-util: 29.7.0 jest-util: 29.7.0 jest-worker: 29.7.0 @@ -6509,7 +6929,7 @@ snapshots: '@jest/source-map@29.6.3': dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 callsites: 3.1.0 graceful-fs: 4.2.11 @@ -6529,9 +6949,9 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 convert-source-map: 2.0.0 @@ -6552,48 +6972,46 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/set-array@1.2.1': {} + '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.11': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@js-sdsl/ordered-map@4.4.2': {} - '@ljharb/through@2.3.14': - dependencies: - call-bind: 1.0.8 - '@lukeed/csprng@1.1.0': {} '@mapbox/node-pre-gyp@1.0.11': dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.0 https-proxy-agent: 5.0.1 make-dir: 3.1.0 node-fetch: 2.7.0 @@ -6626,63 +7044,66 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true - '@nestjs/axios@3.1.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(axios@0.26.1)(rxjs@7.8.2)': + '@nestjs/axios@4.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(axios@0.26.1)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) axios: 0.26.1 rxjs: 7.8.2 - '@nestjs/bull-shared@10.2.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)': + '@nestjs/bull-shared@11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) tslib: 2.8.1 - '@nestjs/bull@10.2.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(bull@4.16.5)': + '@nestjs/bull@11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(bull@4.16.5)': dependencies: - '@nestjs/bull-shared': 10.2.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19) - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/bull-shared': 11.0.3(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) bull: 4.16.5 tslib: 2.8.1 - '@nestjs/cache-manager@2.3.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(cache-manager@5.7.6)(rxjs@7.8.2)': + '@nestjs/cache-manager@3.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(cache-manager@5.7.6)(keyv@4.5.4)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) cache-manager: 5.7.6 + keyv: 4.5.4 rxjs: 7.8.2 - '@nestjs/cli@10.4.9': + '@nestjs/cli@11.0.10(@types/node@20.19.17)': dependencies: - '@angular-devkit/core': 17.3.11(chokidar@3.6.0) - '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) - '@angular-devkit/schematics-cli': 17.3.11(chokidar@3.6.0) - '@nestjs/schematics': 10.2.3(chokidar@3.6.0)(typescript@5.7.2) - chalk: 4.1.2 - chokidar: 3.6.0 + '@angular-devkit/core': 19.2.15(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) + '@angular-devkit/schematics-cli': 19.2.15(@types/node@20.19.17)(chokidar@4.0.3) + '@inquirer/prompts': 7.8.0(@types/node@20.19.17) + '@nestjs/schematics': 11.0.7(chokidar@4.0.3)(typescript@5.8.3) + ansis: 4.1.0 + chokidar: 4.0.3 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.7.2)(webpack@5.97.1) - glob: 10.4.5 - inquirer: 8.2.6 + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.8.3)(webpack@5.100.2) + glob: 11.0.3 node-emoji: 1.11.0 ora: 5.4.1 tree-kill: 1.2.2 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 - typescript: 5.7.2 - webpack: 5.97.1 + typescript: 5.8.3 + webpack: 5.100.2 webpack-node-externals: 3.0.0 transitivePeerDependencies: + - '@types/node' - esbuild - uglify-js - webpack-cli - '@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)': + '@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2)': dependencies: - file-type: 20.4.1 + file-type: 21.0.0 iterare: 1.2.1 + load-esm: 1.0.2 reflect-metadata: 0.1.14 rxjs: 7.8.2 tslib: 2.8.1 @@ -6693,82 +7114,80 @@ snapshots: transitivePeerDependencies: - supports-color - '@nestjs/config@3.3.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(rxjs@7.8.2)': + '@nestjs/config@4.0.2(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - dotenv: 16.4.5 - dotenv-expand: 10.0.0 + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + dotenv: 16.4.7 + dotenv-expand: 12.0.1 lodash: 4.17.21 rxjs: 7.8.2 - '@nestjs/core@10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2)': + '@nestjs/core@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nuxtjs/opencollective': 0.3.2 + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nuxt/opencollective': 0.4.1 fast-safe-stringify: 2.1.1 iterare: 1.2.1 - path-to-regexp: 3.3.0 + path-to-regexp: 8.2.0 reflect-metadata: 0.1.14 rxjs: 7.8.2 tslib: 2.8.1 uid: 2.0.2 optionalDependencies: - '@nestjs/microservices': 10.4.19(@grpc/grpc-js@1.13.4)(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/websockets@10.4.19)(cache-manager@5.7.6)(ioredis@5.6.1)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/platform-express': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19) - '@nestjs/websockets': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/platform-socket.io@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) - transitivePeerDependencies: - - encoding + '@nestjs/microservices': 11.1.6(@grpc/grpc-js@1.14.0)(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/websockets@11.1.6)(cache-manager@5.7.6)(ioredis@5.8.0)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/platform-express': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6) + '@nestjs/websockets': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-socket.io@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/jwt@10.2.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))': + '@nestjs/jwt@11.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@types/jsonwebtoken': 9.0.5 + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@types/jsonwebtoken': 9.0.7 jsonwebtoken: 9.0.2 - '@nestjs/mapped-types@2.0.5(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)': + '@nestjs/mapped-types@2.1.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) reflect-metadata: 0.1.14 optionalDependencies: class-transformer: 0.5.1 class-validator: 0.14.2 - '@nestjs/microservices@10.4.19(@grpc/grpc-js@1.13.4)(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/websockets@10.4.19)(cache-manager@5.7.6)(ioredis@5.6.1)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2)': + '@nestjs/microservices@11.1.6(@grpc/grpc-js@1.14.0)(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/websockets@11.1.6)(cache-manager@5.7.6)(ioredis@5.8.0)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) iterare: 1.2.1 reflect-metadata: 0.1.14 rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@grpc/grpc-js': 1.13.4 - '@nestjs/websockets': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/platform-socket.io@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@grpc/grpc-js': 1.14.0 + '@nestjs/websockets': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-socket.io@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) cache-manager: 5.7.6 - ioredis: 5.6.1 + ioredis: 5.8.0 nats: 2.29.3 - '@nestjs/passport@10.0.3(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(passport@0.6.0)': + '@nestjs/passport@11.0.5(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(passport@0.6.0)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) passport: 0.6.0 - '@nestjs/platform-express@10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)': + '@nestjs/platform-express@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) - body-parser: 1.20.3 + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) cors: 2.8.5 - express: 4.21.2 - multer: 2.0.1 + express: 5.1.0 + multer: 2.0.2 + path-to-regexp: 8.2.0 tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@nestjs/platform-socket.io@10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/websockets@10.4.19)(rxjs@7.8.2)': + '@nestjs/platform-socket.io@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/websockets@11.1.6)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/websockets': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/platform-socket.io@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/websockets': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-socket.io@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) rxjs: 7.8.2 socket.io: 4.8.1 tslib: 2.8.1 @@ -6777,80 +7196,77 @@ snapshots: - supports-color - utf-8-validate - '@nestjs/schedule@3.0.4(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(reflect-metadata@0.1.14)': + '@nestjs/schedule@6.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) - cron: 2.4.3 - reflect-metadata: 0.1.14 - uuid: 9.0.1 + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) + cron: 4.3.3 - '@nestjs/schematics@10.2.3(chokidar@3.6.0)(typescript@5.7.2)': + '@nestjs/schematics@11.0.7(chokidar@4.0.3)(typescript@5.8.3)': dependencies: - '@angular-devkit/core': 17.3.11(chokidar@3.6.0) - '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) + '@angular-devkit/core': 19.2.15(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) comment-json: 4.2.5 jsonc-parser: 3.3.1 pluralize: 8.0.0 - typescript: 5.7.2 + typescript: 5.8.3 transitivePeerDependencies: - chokidar - '@nestjs/schematics@10.2.3(chokidar@3.6.0)(typescript@5.8.3)': + '@nestjs/schematics@11.0.7(chokidar@4.0.3)(typescript@5.9.2)': dependencies: - '@angular-devkit/core': 17.3.11(chokidar@3.6.0) - '@angular-devkit/schematics': 17.3.11(chokidar@3.6.0) + '@angular-devkit/core': 19.2.15(chokidar@4.0.3) + '@angular-devkit/schematics': 19.2.15(chokidar@4.0.3) comment-json: 4.2.5 jsonc-parser: 3.3.1 pluralize: 8.0.0 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - chokidar - '@nestjs/swagger@7.4.2(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)': + '@nestjs/swagger@11.2.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)': dependencies: '@microsoft/tsdoc': 0.15.1 - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/mapped-types': 2.0.5(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/mapped-types': 2.1.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14) js-yaml: 4.1.0 lodash: 4.17.21 - path-to-regexp: 3.3.0 + path-to-regexp: 8.2.0 reflect-metadata: 0.1.14 - swagger-ui-dist: 5.17.14 + swagger-ui-dist: 5.21.0 optionalDependencies: class-transformer: 0.5.1 class-validator: 0.14.2 - '@nestjs/testing@10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)': + '@nestjs/testing@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) tslib: 2.8.1 optionalDependencies: - '@nestjs/microservices': 10.4.19(@grpc/grpc-js@1.13.4)(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/websockets@10.4.19)(cache-manager@5.7.6)(ioredis@5.6.1)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/platform-express': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19) + '@nestjs/microservices': 11.1.6(@grpc/grpc-js@1.14.0)(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/websockets@11.1.6)(cache-manager@5.7.6)(ioredis@5.8.0)(nats@2.29.3)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/platform-express': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6) - '@nestjs/typeorm@10.0.2(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)))': + '@nestjs/typeorm@11.0.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2)(typeorm@0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)))': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) reflect-metadata: 0.1.14 rxjs: 7.8.2 - typeorm: 0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) - uuid: 9.0.1 + typeorm: 0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) - '@nestjs/websockets@10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(@nestjs/platform-socket.io@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2)': + '@nestjs/websockets@11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(@nestjs/platform-socket.io@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) iterare: 1.2.1 object-hash: 3.0.0 reflect-metadata: 0.1.14 rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@nestjs/platform-socket.io': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/websockets@10.4.19)(rxjs@7.8.2) + '@nestjs/platform-socket.io': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/websockets@11.1.6)(rxjs@7.8.2) '@noble/hashes@1.8.0': {} @@ -6866,13 +7282,9 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nuxtjs/opencollective@0.3.2': + '@nuxt/opencollective@0.4.1': dependencies: - chalk: 4.1.2 - consola: 2.15.3 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding + consola: 3.4.2 '@opentelemetry/api-logs@0.202.0': dependencies: @@ -6893,11 +7305,16 @@ snapshots: '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 + + '@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.37.0 '@opentelemetry/exporter-logs-otlp-grpc@0.202.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) @@ -6927,7 +7344,7 @@ snapshots: '@opentelemetry/exporter-metrics-otlp-grpc@0.202.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/exporter-metrics-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) @@ -6965,7 +7382,7 @@ snapshots: '@opentelemetry/exporter-trace-otlp-grpc@0.202.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) @@ -6998,14 +7415,14 @@ snapshots: '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 - '@opentelemetry/instrumentation-express@0.51.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-express@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color @@ -7014,16 +7431,16 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 forwarded-parse: 2.1.2 transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-nestjs-core@0.48.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/instrumentation-nestjs-core@0.48.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color @@ -7044,7 +7461,7 @@ snapshots: '@opentelemetry/otlp-grpc-exporter-base@0.202.0(@opentelemetry/api@1.9.0)': dependencies: - '@grpc/grpc-js': 1.13.4 + '@grpc/grpc-js': 1.14.0 '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) @@ -7059,7 +7476,7 @@ snapshots: '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - protobufjs: 7.5.3 + protobufjs: 7.5.4 '@opentelemetry/propagator-b3@2.0.1(@opentelemetry/api@1.9.0)': dependencies: @@ -7082,7 +7499,13 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 + + '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.37.0 '@opentelemetry/sdk-logs@0.202.0(@opentelemetry/api@1.9.0)': dependencies: @@ -7128,7 +7551,7 @@ snapshots: '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 transitivePeerDependencies: - supports-color @@ -7137,7 +7560,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/semantic-conventions': 1.37.0 '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)': dependencies: @@ -7149,7 +7572,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.28.0': optional: true - '@opentelemetry/semantic-conventions@1.34.0': {} + '@opentelemetry/semantic-conventions@1.37.0': {} '@paralleldrive/cuid2@2.2.2': dependencies: @@ -7216,6 +7639,7 @@ snapshots: unbzip2-stream: 1.4.3 yargs: 17.7.1 transitivePeerDependencies: + - react-native-b4a - supports-color '@puppeteer/browsers@1.9.1': @@ -7228,6 +7652,7 @@ snapshots: unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: + - react-native-b4a - supports-color '@rtsao/scc@1.1.0': {} @@ -7266,11 +7691,11 @@ snapshots: '@sqltools/formatter@1.2.5': {} - '@supabase/auth-js@2.70.0': + '@supabase/auth-js@2.71.1': dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/functions-js@2.4.4': + '@supabase/functions-js@2.4.6': dependencies: '@supabase/node-fetch': 2.6.15 @@ -7278,32 +7703,32 @@ snapshots: dependencies: whatwg-url: 5.0.0 - '@supabase/postgrest-js@1.19.4': + '@supabase/postgrest-js@1.21.4': dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/realtime-js@2.11.10': + '@supabase/realtime-js@2.15.5': dependencies: '@supabase/node-fetch': 2.6.15 '@types/phoenix': 1.6.6 '@types/ws': 8.18.1 - ws: 8.18.2 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - utf-8-validate - '@supabase/storage-js@2.7.1': + '@supabase/storage-js@2.12.1': dependencies: '@supabase/node-fetch': 2.6.15 - '@supabase/supabase-js@2.50.0': + '@supabase/supabase-js@2.57.4': dependencies: - '@supabase/auth-js': 2.70.0 - '@supabase/functions-js': 2.4.4 + '@supabase/auth-js': 2.71.1 + '@supabase/functions-js': 2.4.6 '@supabase/node-fetch': 2.6.15 - '@supabase/postgrest-js': 1.19.4 - '@supabase/realtime-js': 2.11.10 - '@supabase/storage-js': 2.7.1 + '@supabase/postgrest-js': 1.21.4 + '@supabase/realtime-js': 2.15.5 + '@supabase/storage-js': 2.12.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -7314,9 +7739,9 @@ snapshots: '@tokenizer/inflate@0.2.7': dependencies: - debug: 4.4.1 + debug: 4.4.3 fflate: 0.8.2 - token-types: 6.0.0 + token-types: 6.1.1 transitivePeerDependencies: - supports-color @@ -7338,39 +7763,39 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 + '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.28.4 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.27.5 - '@babel/types': 7.27.6 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 - '@types/babel__traverse@7.20.7': + '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.28.4 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/connect@3.4.38': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/cookiejar@2.1.5': {} '@types/cors@2.8.19': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/crypto-js@4.2.2': {} @@ -7388,7 +7813,7 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -7402,7 +7827,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/http-errors@2.0.5': {} @@ -7425,20 +7850,20 @@ snapshots: '@types/json2csv@5.0.7': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/json5@0.0.29': {} '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 20.19.1 + '@types/node': 20.19.17 - '@types/jsonwebtoken@9.0.5': + '@types/jsonwebtoken@9.0.7': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 - '@types/luxon@3.3.8': {} + '@types/luxon@3.7.1': {} '@types/methods@1.1.4': {} @@ -7450,7 +7875,7 @@ snapshots: dependencies: '@types/express': 4.17.23 - '@types/node@20.19.1': + '@types/node@20.19.17': dependencies: undici-types: 6.21.0 @@ -7477,7 +7902,7 @@ snapshots: '@types/pdfkit@0.12.12': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/phoenix@1.6.6': {} @@ -7487,17 +7912,17 @@ snapshots: '@types/retry@0.12.5': {} - '@types/semver@7.7.0': {} + '@types/semver@7.7.1': {} '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/send': 0.17.5 '@types/stack-utils@2.0.3': {} @@ -7506,8 +7931,8 @@ snapshots: dependencies: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 - '@types/node': 20.19.1 - form-data: 4.0.3 + '@types/node': 20.19.17 + form-data: 4.0.4 '@types/supertest@2.0.16': dependencies: @@ -7515,11 +7940,11 @@ snapshots: '@types/triple-beam@1.3.5': {} - '@types/validator@13.15.2': {} + '@types/validator@13.15.3': {} '@types/ws@8.18.1': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 '@types/yargs-parser@21.0.3': {} @@ -7529,51 +7954,51 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 optional: true - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1 + debug: 4.4.3 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.7.2 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) - debug: 4.4.1 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.9.2) + debug: 4.4.3 eslint: 8.57.1 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1 + debug: 4.4.3 eslint: 8.57.1 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -7587,15 +8012,15 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.1 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.9.2) + debug: 4.4.3 eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -7603,43 +8028,43 @@ snapshots: '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.1 + debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 semver: 7.7.2 - tsutils: 3.21.0(typescript@5.8.3) + tsutils: 3.21.0(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.4.1 + debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.7.2 - ts-api-utils: 1.4.3(typescript@5.8.3) + ts-api-utils: 1.4.3(typescript@5.9.2) optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.0 + '@types/semver': 7.7.1 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) eslint: 8.57.1 semver: 7.7.2 transitivePeerDependencies: @@ -7745,6 +8170,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + acorn-import-assertions@1.9.0(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -7754,6 +8184,10 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-import-phases@1.0.4(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -7769,22 +8203,22 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color - agent-base@7.1.3: {} + agent-base@7.1.4: {} agentkeepalive@4.6.0: dependencies: humanize-ms: 1.2.1 optional: true - ajv-formats@2.1.1(ajv@8.12.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.12.0 + ajv: 8.17.1 - ajv-formats@2.1.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -7804,17 +8238,10 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.12.0: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -7830,7 +8257,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: @@ -7838,10 +8265,12 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} ansis@3.17.0: {} + ansis@4.1.0: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 @@ -7851,7 +8280,7 @@ snapshots: append-field@1.0.0: {} - aproba@2.0.0: {} + aproba@2.1.0: {} are-we-there-yet@2.0.0: dependencies: @@ -8007,19 +8436,19 @@ snapshots: axios@0.26.1: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.15.11 transitivePeerDependencies: - debug - b4a@1.6.7: {} + b4a@1.7.1: {} - babel-jest@29.7.0(@babel/core@7.27.4): + babel-jest@29.7.0(@babel/core@7.28.4): dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@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.27.4) + babel-preset-jest: 29.6.3(@babel/core@7.28.4) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -8039,39 +8468,38 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.6 + '@babel/types': 7.28.4 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.7 - - babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.4): - dependencies: - '@babel/core': 7.27.4 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.4) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.4) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.4) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.4) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.4) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.4) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.4) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.4) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.4) - - babel-preset-jest@29.6.3(@babel/core@7.27.4): - dependencies: - '@babel/core': 7.27.4 + '@types/babel__traverse': 7.28.0 + + babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.4) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.4) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.4) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.4) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.4) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.4) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.4) + + babel-preset-jest@29.6.3(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) balanced-match@1.0.2: {} - bare-events@2.5.4: - optional: true + bare-events@2.7.0: {} base64-js@0.0.8: {} @@ -8079,6 +8507,8 @@ snapshots: base64id@2.0.0: {} + baseline-browser-mapping@2.8.6: {} + basic-auth@2.0.1: dependencies: safe-buffer: 5.1.2 @@ -8100,8 +8530,6 @@ snapshots: big-integer@1.6.52: {} - binary-extensions@2.3.0: {} - binary-search@1.3.6: optional: true @@ -8143,6 +8571,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.1 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 @@ -8165,12 +8607,13 @@ snapshots: dependencies: base64-js: 1.5.1 - browserslist@4.25.0: + browserslist@4.26.2: dependencies: - caniuse-lite: 1.0.30001724 - electron-to-chromium: 1.5.173 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.0) + baseline-browser-mapping: 2.8.6 + caniuse-lite: 1.0.30001743 + electron-to-chromium: 1.5.222 + node-releases: 2.0.21 + update-browserslist-db: 1.1.3(browserslist@4.26.2) bs-logger@0.2.6: dependencies: @@ -8214,9 +8657,9 @@ snapshots: dependencies: cron-parser: 4.9.0 get-port: 5.1.1 - ioredis: 5.6.1 + ioredis: 5.8.0 lodash: 4.17.21 - msgpackr: 1.11.4 + msgpackr: 1.11.5 semver: 7.7.2 uuid: 8.3.2 transitivePeerDependencies: @@ -8262,7 +8705,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001724: {} + caniuse-lite@1.0.30001743: {} caseless@0.12.0: optional: true @@ -8278,23 +8721,13 @@ snapshots: chalk@5.3.0: {} - chalk@5.4.1: {} - char-regex@1.0.2: {} - chardet@0.7.0: {} + chardet@2.1.0: {} - chokidar@3.6.0: + chokidar@4.0.3: dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + readdirp: 4.1.2 chownr@2.0.0: {} @@ -8319,8 +8752,8 @@ snapshots: class-validator@0.14.2: dependencies: - '@types/validator': 13.15.2 - libphonenumber-js: 1.12.9 + '@types/validator': 13.15.3 + libphonenumber-js: 1.12.18 validator: 13.15.15 cli-cursor@3.1.0: @@ -8344,8 +8777,6 @@ snapshots: slice-ansi: 5.0.0 string-width: 5.1.2 - cli-width@3.0.0: {} - cli-width@4.1.0: {} cliui@6.0.0: @@ -8385,7 +8816,7 @@ snapshots: color-string@1.9.1: dependencies: color-name: 1.1.4 - simple-swizzle: 0.2.2 + simple-swizzle: 0.2.4 color-support@1.1.3: {} @@ -8439,7 +8870,7 @@ snapshots: readable-stream: 3.6.2 typedarray: 0.0.6 - consola@2.15.3: {} + consola@3.4.2: {} console-control-strings@1.1.0: {} @@ -8450,6 +8881,10 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + content-type@1.0.5: {} convert-source-map@2.0.0: {} @@ -8461,6 +8896,8 @@ snapshots: cookie-signature@1.0.6: {} + cookie-signature@1.2.2: {} + cookie@0.5.0: optional: true @@ -8487,31 +8924,31 @@ snapshots: parse-json: 5.2.0 path-type: 4.0.0 - cosmiconfig@8.3.6(typescript@5.7.2): + cosmiconfig@8.3.6(typescript@5.8.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.7.2 + typescript: 5.8.3 - cosmiconfig@9.0.0(typescript@5.8.3): + cosmiconfig@9.0.0(typescript@5.9.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 - create-jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + create-jest@29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)): 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.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -8524,12 +8961,12 @@ snapshots: cron-parser@4.9.0: dependencies: - luxon: 3.6.1 + luxon: 3.7.2 - cron@2.4.3: + cron@4.3.3: dependencies: - '@types/luxon': 3.3.8 - luxon: 3.3.0 + '@types/luxon': 3.7.1 + luxon: 3.7.2 cross-fetch@4.0.0: dependencies: @@ -8574,7 +9011,7 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - dayjs@1.11.13: {} + dayjs@1.11.18: {} debug@2.6.9: dependencies: @@ -8592,13 +9029,13 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.1: + debug@4.4.3: dependencies: ms: 2.1.3 decamelize@1.2.0: {} - dedent@1.6.0: {} + dedent@1.7.0: {} deep-equal@2.2.3: dependencies: @@ -8659,7 +9096,7 @@ snapshots: destroy@1.2.0: {} - detect-libc@2.0.4: {} + detect-libc@2.1.0: {} detect-newline@3.1.0: {} @@ -8692,11 +9129,13 @@ snapshots: dependencies: esutils: 2.0.3 - dotenv-expand@10.0.0: {} + dotenv-expand@12.0.1: + dependencies: + dotenv: 16.6.1 - dotenv@16.4.5: {} + dotenv@16.4.7: {} - dotenv@16.5.0: {} + dotenv@16.6.1: {} dunder-proto@1.0.1: dependencies: @@ -8722,10 +9161,6 @@ snapshots: ee-first@1.1.1: {} - ejs@3.1.10: - dependencies: - jake: 10.9.2 - elastic-apm-node@3.52.2: dependencies: '@elastic/ecs-pino-format': 1.5.0 @@ -8770,7 +9205,7 @@ snapshots: - supports-color optional: true - electron-to-chromium@1.5.173: {} + electron-to-chromium@1.5.222: {} emittery@0.13.1: {} @@ -8805,7 +9240,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 20.19.1 + '@types/node': 20.19.17 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -8818,17 +9253,17 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.18.2: + enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.2.3 env-paths@2.2.1: {} error-callsites@2.0.4: optional: true - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 @@ -8939,8 +9374,6 @@ snapshots: escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} @@ -8953,27 +9386,27 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@8.10.0(eslint@8.57.1): + eslint-config-prettier@8.10.2(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-config-standard-with-typescript@37.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.8.3): + eslint-config-standard-with-typescript@37.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2))(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1)(typescript@5.9.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.9.2) eslint: 8.57.1 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) eslint-plugin-n: 15.7.0(eslint@8.57.1) eslint-plugin-promise: 6.6.0(eslint@8.57.1) - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): + eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1) eslint-plugin-n: 15.7.0(eslint@8.57.1) eslint-plugin-promise: 6.6.0(eslint@8.57.1) @@ -8985,11 +9418,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -9001,7 +9434,7 @@ snapshots: eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -9012,7 +9445,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -9024,7 +9457,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -9042,13 +9475,13 @@ snapshots: resolve: 1.22.10 semver: 7.7.2 - eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.0): + eslint-plugin-prettier@4.2.5(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2): dependencies: eslint: 8.57.1 - prettier: 3.6.0 + prettier: 3.6.2 prettier-linter-helpers: 1.0.0 optionalDependencies: - eslint-config-prettier: 8.10.0(eslint@8.57.1) + eslint-config-prettier: 8.10.2(eslint@8.57.1) eslint-plugin-promise@6.6.0(eslint@8.57.1): dependencies: @@ -9081,7 +9514,7 @@ snapshots: eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.1 @@ -9092,7 +9525,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -9148,6 +9581,10 @@ snapshots: eventemitter3@5.0.1: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.7.0 + events@1.1.1: {} events@3.3.0: {} @@ -9224,15 +9661,41 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + extend@3.0.2: optional: true - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - extract-zip@1.7.0: dependencies: concat-stream: 1.6.2 @@ -9245,7 +9708,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.4.3 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -9284,7 +9747,7 @@ snapshots: end-of-stream: 1.4.5 optional: true - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fastq@1.19.1: dependencies: @@ -9302,10 +9765,6 @@ snapshots: fflate@0.8.2: {} - figures@3.2.0: - dependencies: - escape-string-regexp: 1.0.5 - file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -9314,19 +9773,15 @@ snapshots: dependencies: moment: 2.30.1 - file-type@20.4.1: + file-type@21.0.0: dependencies: '@tokenizer/inflate': 0.2.7 - strtok3: 10.3.1 - token-types: 6.0.0 - uint8array-extras: 1.4.0 + strtok3: 10.3.4 + token-types: 6.1.1 + uint8array-extras: 1.5.0 transitivePeerDependencies: - supports-color - filelist@1.0.4: - dependencies: - minimatch: 5.1.6 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -9343,6 +9798,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.0: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -9366,7 +9832,7 @@ snapshots: fn.name@1.1.0: {} - follow-redirects@1.15.9: {} + follow-redirects@1.15.11: {} fontkit@1.9.0: dependencies: @@ -9392,12 +9858,12 @@ snapshots: forever-agent@0.6.1: optional: true - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.7.2)(webpack@5.97.1): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.8.3)(webpack@5.100.2): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 8.3.6(typescript@5.7.2) + chokidar: 4.0.3 + cosmiconfig: 8.3.6(typescript@5.8.3) deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 @@ -9405,9 +9871,9 @@ snapshots: node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.2 - tapable: 2.2.2 - typescript: 5.7.2 - webpack: 5.97.1 + tapable: 2.2.3 + typescript: 5.8.3 + webpack: 5.100.2 form-data@2.3.3: dependencies: @@ -9416,7 +9882,7 @@ snapshots: mime-types: 2.1.35 optional: true - form-data@4.0.3: + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -9437,6 +9903,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + fs-extra@1.0.0: dependencies: graceful-fs: 4.2.11 @@ -9447,14 +9915,14 @@ snapshots: fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - fs-monkey@1.0.6: {} + fs-monkey@1.1.0: {} fs.realpath@1.0.0: {} @@ -9485,7 +9953,7 @@ snapshots: gauge@3.0.2: dependencies: - aproba: 2.0.0 + aproba: 2.1.0 color-support: 1.1.3 console-control-strings: 1.1.0 has-unicode: 2.0.1 @@ -9535,11 +10003,11 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-uri@6.0.4: + get-uri@6.0.5: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9567,6 +10035,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.3: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.3 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -9583,8 +10060,6 @@ snapshots: minipass: 4.2.8 path-scurry: 1.11.1 - globals@11.12.0: {} - globals@13.24.0: dependencies: type-fest: 0.20.2 @@ -9688,8 +10163,8 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 - debug: 4.3.4 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9705,14 +10180,14 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 - debug: 4.4.1 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9731,6 +10206,14 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + idtoken-verifier@2.2.4: dependencies: base64-js: 1.5.1 @@ -9782,53 +10265,17 @@ snapshots: inherits@2.0.4: {} - inquirer@8.2.6: - dependencies: - ansi-escapes: 4.3.2 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-width: 3.0.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 0.0.8 - ora: 5.4.1 - run-async: 2.4.1 - rxjs: 7.8.2 - string-width: 4.2.3 - strip-ansi: 6.0.1 - through: 2.3.8 - wrap-ansi: 6.2.0 - - inquirer@9.2.15: - dependencies: - '@ljharb/through': 2.3.14 - ansi-escapes: 4.3.2 - chalk: 5.4.1 - cli-cursor: 3.1.0 - cli-width: 4.1.0 - external-editor: 3.1.0 - figures: 3.2.0 - lodash: 4.17.21 - mute-stream: 1.0.0 - ora: 5.4.1 - run-async: 3.0.0 - rxjs: 7.8.2 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.1.0 - ioredis@5.6.1: + ioredis@5.8.0: dependencies: - '@ioredis/commands': 1.2.0 + '@ioredis/commands': 1.4.0 cluster-key-slot: 1.1.2 - debug: 4.4.1 + debug: 4.4.3 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -9838,10 +10285,7 @@ snapshots: transitivePeerDependencies: - supports-color - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.0.1: {} ipaddr.js@1.9.1: {} @@ -9858,7 +10302,7 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} + is-arrayish@0.3.4: {} is-async-function@2.1.1: dependencies: @@ -9872,10 +10316,6 @@ snapshots: dependencies: has-bigints: 1.1.0 - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - is-boolean-object@1.2.2: dependencies: call-bound: 1.0.4 @@ -9953,6 +10393,8 @@ snapshots: is-path-inside@3.0.3: {} + is-promise@4.0.0: {} + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -10017,8 +10459,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.27.5 + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -10027,8 +10469,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.27.4 - '@babel/parser': 7.27.5 + '@babel/core': 7.28.4 + '@babel/parser': 7.28.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.2 @@ -10043,13 +10485,13 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.3 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - istanbul-reports@3.1.7: + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 @@ -10062,12 +10504,9 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.9.2: + jackspeak@4.1.1: dependencies: - async: 3.2.6 - chalk: 4.1.2 - filelist: 1.0.4 - minimatch: 3.1.2 + '@isaacs/cliui': 8.0.2 jest-changed-files@29.7.0: dependencies: @@ -10081,10 +10520,10 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 chalk: 4.1.2 co: 4.6.0 - dedent: 1.6.0 + dedent: 1.7.0 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -10101,16 +10540,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + jest-cli@29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + create-jest: 29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-config: 29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10120,12 +10559,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + jest-config@29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)): dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.27.4) + babel-jest: 29.7.0(@babel/core@7.28.4) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -10145,8 +10584,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.19.1 - ts-node: 10.9.2(@types/node@20.19.1)(typescript@5.8.3) + '@types/node': 20.19.17 + ts-node: 10.9.2(@types/node@20.19.17)(typescript@5.9.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -10175,7 +10614,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -10185,7 +10624,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.19.1 + '@types/node': 20.19.17 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -10224,7 +10663,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -10259,7 +10698,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -10287,7 +10726,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -10307,15 +10746,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.27.4 - '@babel/generator': 7.27.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.4) - '@babel/types': 7.27.6 + '@babel/core': 7.28.4 + '@babel/generator': 7.28.3 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.4 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.4) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.4) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -10333,7 +10772,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10352,7 +10791,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.19.1 + '@types/node': 20.19.17 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -10361,23 +10800,23 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.19.1 + '@types/node': 20.19.17 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + jest@29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + jest-cli: 29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -10436,8 +10875,6 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.2.1: {} - jsonc-parser@3.3.1: {} jsonfile@2.4.0: @@ -10445,7 +10882,7 @@ snapshots: graceful-fs: 4.2.11 optional: true - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -10490,7 +10927,7 @@ snapshots: dependencies: '@types/express': 4.17.23 '@types/jsonwebtoken': 9.0.10 - debug: 4.4.1 + debug: 4.4.3 jose: 4.15.9 limiter: 1.1.5 lru-memoizer: 2.3.0 @@ -10530,7 +10967,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.12.9: {} + libphonenumber-js@1.12.18: {} lilconfig@2.1.0: {} @@ -10572,6 +11009,8 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 8.1.0 + load-esm@1.0.2: {} + loader-runner@4.3.0: {} locate-path@5.0.0: @@ -10627,7 +11066,7 @@ snapshots: ansi-escapes: 5.0.0 cli-cursor: 4.0.0 slice-ansi: 5.0.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrap-ansi: 8.1.0 logform@2.7.0: @@ -10643,6 +11082,8 @@ snapshots: lru-cache@10.4.3: {} + lru-cache@11.2.1: {} + lru-cache@4.1.5: dependencies: pseudomap: 1.0.2 @@ -10664,13 +11105,11 @@ snapshots: lodash.clonedeep: 4.5.0 lru-cache: 6.0.0 - luxon@3.3.0: {} - - luxon@3.6.1: {} + luxon@3.7.2: {} - magic-string@0.30.8: + magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 make-dir@3.1.0: dependencies: @@ -10707,12 +11146,16 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs@3.5.3: dependencies: - fs-monkey: 1.0.6 + fs-monkey: 1.1.0 merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -10731,10 +11174,16 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mime@2.6.0: {} @@ -10745,13 +11194,13 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@3.1.2: + minimatch@10.0.3: dependencies: - brace-expansion: 1.1.12 + '@isaacs/brace-expansion': 5.0.0 - minimatch@5.1.6: + minimatch@3.1.2: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 1.1.12 minimatch@8.0.4: dependencies: @@ -10799,13 +11248,13 @@ snapshots: monitor-event-loop-delay@1.0.0: optional: true - morgan@1.10.0: + morgan@1.10.1: dependencies: basic-auth: 2.0.1 debug: 2.6.9 depd: 2.0.0 on-finished: 2.3.0 - on-headers: 1.0.2 + on-headers: 1.1.0 transitivePeerDependencies: - supports-color @@ -10827,7 +11276,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 optional: true - msgpackr@1.11.4: + msgpackr@1.11.5: optionalDependencies: msgpackr-extract: 3.0.3 @@ -10841,7 +11290,7 @@ snapshots: type-is: 1.6.18 xtend: 4.0.2 - multer@2.0.1: + multer@2.0.2: dependencies: append-field: 1.0.0 busboy: 1.6.0 @@ -10851,9 +11300,7 @@ snapshots: type-is: 1.6.18 xtend: 4.0.2 - mute-stream@0.0.8: {} - - mute-stream@1.0.0: {} + mute-stream@2.0.0: {} nanoid@4.0.2: {} @@ -10865,12 +11312,14 @@ snapshots: negotiator@0.6.3: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} - nestjs-cls@4.5.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2): + nestjs-cls@6.0.1(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/core@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2): dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - '@nestjs/core': 10.4.19(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@10.4.19)(@nestjs/platform-express@10.4.19)(@nestjs/websockets@10.4.19)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + '@nestjs/core': 11.1.6(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(@nestjs/microservices@11.1.6)(@nestjs/platform-express@11.1.6)(@nestjs/websockets@11.1.6)(reflect-metadata@0.1.14)(rxjs@7.8.2) reflect-metadata: 0.1.14 rxjs: 7.8.2 @@ -10880,10 +11329,10 @@ snapshots: nestjs-supabase-auth@1.0.9: {} - nestjs-typeorm-paginate@4.1.0(@nestjs/common@10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(typeorm@0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3))): + nestjs-typeorm-paginate@4.1.0(@nestjs/common@11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2))(typeorm@0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2))): dependencies: - '@nestjs/common': 10.4.19(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) - typeorm: 0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + '@nestjs/common': 11.1.6(class-transformer@0.5.1)(class-validator@0.14.2)(reflect-metadata@0.1.14)(rxjs@7.8.2) + typeorm: 0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) netmask@2.0.2: {} @@ -10908,7 +11357,7 @@ snapshots: node-gyp-build-optional-packages@5.2.2: dependencies: - detect-libc: 2.0.4 + detect-libc: 2.1.0 optional: true node-html-to-image@4.0.0: @@ -10919,6 +11368,7 @@ snapshots: transitivePeerDependencies: - bufferutil - encoding + - react-native-b4a - supports-color - utf-8-validate @@ -10926,7 +11376,7 @@ snapshots: node-qpdf2@2.0.0: {} - node-releases@2.0.19: {} + node-releases@2.0.21: {} nopt@5.0.0: dependencies: @@ -11018,7 +11468,7 @@ snapshots: dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} + on-headers@1.1.0: {} once@1.4.0: dependencies: @@ -11065,8 +11515,6 @@ snapshots: forwarded-parse: 2.1.2 optional: true - os-tmpdir@1.0.2: {} - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -11094,9 +11542,9 @@ snapshots: pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 - debug: 4.3.4 - get-uri: 6.0.4 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 pac-resolver: 7.0.1 @@ -11122,7 +11570,7 @@ snapshots: parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -11160,9 +11608,14 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.2.1 + minipass: 7.1.2 + path-to-regexp@0.1.12: {} - path-to-regexp@3.3.0: {} + path-to-regexp@8.2.0: {} path-type@4.0.0: {} @@ -11185,18 +11638,18 @@ snapshots: performance-now@2.1.0: optional: true - pg-cloudflare@1.2.6: + pg-cloudflare@1.2.7: optional: true pg-connection-string@2.9.1: {} pg-int8@1.0.1: {} - pg-pool@3.10.1(pg@8.16.2): + pg-pool@3.10.1(pg@8.16.3): dependencies: - pg: 8.16.2 + pg: 8.16.3 - pg-protocol@1.10.2: {} + pg-protocol@1.10.3: {} pg-types@2.2.0: dependencies: @@ -11206,15 +11659,15 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 - pg@8.16.2: + pg@8.16.3: dependencies: pg-connection-string: 2.9.1 - pg-pool: 3.10.1(pg@8.16.2) - pg-protocol: 1.10.2 + pg-pool: 3.10.1(pg@8.16.3) + pg-protocol: 1.10.3 pg-types: 2.2.0 pgpass: 1.0.5 optionalDependencies: - pg-cloudflare: 1.2.6 + pg-cloudflare: 1.2.7 pgpass@1.0.5: dependencies: @@ -11239,7 +11692,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.1: {} + picomatch@4.0.2: {} pidtree@0.6.0: {} @@ -11295,7 +11748,7 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.6.0: {} + prettier@3.6.2: {} pretty-format@29.7.0: dependencies: @@ -11332,7 +11785,7 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - protobufjs@7.5.3: + protobufjs@7.5.4: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -11344,7 +11797,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.19.1 + '@types/node': 20.19.17 long: 5.3.2 proxy-addr@2.0.7: @@ -11354,8 +11807,8 @@ snapshots: proxy-agent@6.3.0: dependencies: - agent-base: 7.1.3 - debug: 4.3.4 + agent-base: 7.1.4 + debug: 4.4.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -11367,8 +11820,8 @@ snapshots: proxy-agent@6.3.1: dependencies: - agent-base: 7.1.3 - debug: 4.3.4 + agent-base: 7.1.4 + debug: 4.4.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -11399,7 +11852,7 @@ snapshots: puppeteer-cluster@0.23.0(puppeteer@21.0.1): dependencies: - debug: 4.4.1 + debug: 4.4.3 puppeteer: 21.0.1 transitivePeerDependencies: - supports-color @@ -11415,6 +11868,7 @@ snapshots: transitivePeerDependencies: - bufferutil - encoding + - react-native-b4a - supports-color - utf-8-validate @@ -11429,6 +11883,7 @@ snapshots: transitivePeerDependencies: - bufferutil - encoding + - react-native-b4a - supports-color - utf-8-validate @@ -11440,17 +11895,19 @@ snapshots: transitivePeerDependencies: - bufferutil - encoding + - react-native-b4a - supports-color - utf-8-validate - puppeteer@21.11.0(typescript@5.8.3): + puppeteer@21.11.0(typescript@5.9.2): dependencies: '@puppeteer/browsers': 1.9.1 - cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig: 9.0.0(typescript@5.9.2) puppeteer-core: 21.11.0 transitivePeerDependencies: - bufferutil - encoding + - react-native-b4a - supports-color - typescript - utf-8-validate @@ -11496,6 +11953,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.1: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.7.0 + unpipe: 1.0.0 + react-is@18.3.1: {} readable-stream@2.3.8: @@ -11514,9 +11978,7 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 - readdirp@3.6.0: - dependencies: - picomatch: 2.3.1 + readdirp@4.1.2: {} redis-commands@1.7.0: {} @@ -11597,7 +12059,7 @@ snapshots: require-in-the-middle@7.5.2: dependencies: - debug: 4.4.1 + debug: 4.4.3 module-details-from-path: 1.0.4 resolve: 1.22.10 transitivePeerDependencies: @@ -11651,11 +12113,17 @@ snapshots: dependencies: glob: 9.3.5 - rsync@0.6.1: {} - - run-async@2.4.1: {} + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color - run-async@3.0.0: {} + rsync@0.6.1: {} run-parallel@1.2.0: dependencies: @@ -11737,6 +12205,22 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.2.0: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -11750,6 +12234,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -11778,10 +12271,11 @@ snapshots: setprototypeof@1.2.0: {} - sha.js@2.4.11: + sha.js@2.4.12: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + to-buffer: 1.2.1 shallow-clone-shim@2.0.0: optional: true @@ -11824,9 +12318,9 @@ snapshots: signal-exit@4.1.0: {} - simple-swizzle@0.2.2: + simple-swizzle@0.2.4: dependencies: - is-arrayish: 0.3.2 + is-arrayish: 0.3.4 sisteransi@1.0.5: {} @@ -11834,7 +12328,7 @@ snapshots: slice-ansi@5.0.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 smart-buffer@4.2.0: {} @@ -11882,15 +12376,15 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 - debug: 4.3.4 - socks: 2.8.5 + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 transitivePeerDependencies: - supports-color - socks@2.8.5: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.0.1 smart-buffer: 4.2.0 sonic-boom@1.4.1: @@ -11913,6 +12407,8 @@ snapshots: source-map@0.7.4: {} + source-map@0.7.6: {} + source-map@0.8.0-beta.0: dependencies: whatwg-url: 7.1.0 @@ -11922,8 +12418,6 @@ snapshots: sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - sql-highlight@6.1.0: {} sql-summary@1.0.1: @@ -11955,6 +12449,8 @@ snapshots: statuses@2.0.1: {} + statuses@2.0.2: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -11967,12 +12463,13 @@ snapshots: streamsearch@1.1.0: {} - streamx@2.22.1: + streamx@2.23.0: dependencies: + events-universal: 1.0.1 fast-fifo: 1.3.2 text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.5.4 + transitivePeerDependencies: + - react-native-b4a string-argv@0.3.2: {} @@ -11991,7 +12488,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string.prototype.trim@1.2.10: dependencies: @@ -12028,9 +12525,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom@3.0.0: {} @@ -12042,7 +12539,7 @@ snapshots: strip-json-comments@3.1.1: {} - strtok3@10.3.1: + strtok3@10.3.4: dependencies: '@tokenizer/token': 0.3.0 @@ -12050,9 +12547,9 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.1 + debug: 4.4.3 fast-safe-stringify: 2.1.1 - form-data: 4.0.3 + form-data: 4.0.4 formidable: 2.1.5 methods: 1.1.2 mime: 2.6.0 @@ -12066,9 +12563,9 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.1 + debug: 4.4.3 fast-safe-stringify: 2.1.1 - form-data: 4.0.3 + form-data: 4.0.4 formidable: 2.1.5 methods: 1.1.2 mime: 2.6.0 @@ -12094,32 +12591,38 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swagger-ui-dist@5.17.14: {} + swagger-ui-dist@5.21.0: + dependencies: + '@scarf/scarf': 1.4.0 - swagger-ui-dist@5.25.2: + swagger-ui-dist@5.29.0: dependencies: '@scarf/scarf': 1.4.0 swagger-ui-express@5.0.1(express@4.21.2): dependencies: express: 4.21.2 - swagger-ui-dist: 5.25.2 + swagger-ui-dist: 5.29.0 symbol-observable@4.0.0: {} - tapable@2.2.2: {} + tapable@2.2.3: {} tar-fs@3.0.4: dependencies: mkdirp-classic: 0.5.3 pump: 3.0.3 tar-stream: 3.1.7 + transitivePeerDependencies: + - react-native-b4a tar-stream@3.1.7: dependencies: - b4a: 1.6.7 + b4a: 1.7.1 fast-fifo: 1.3.2 - streamx: 2.22.1 + streamx: 2.23.0 + transitivePeerDependencies: + - react-native-b4a tar@6.2.1: dependencies: @@ -12130,18 +12633,18 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - terser-webpack-plugin@5.3.14(webpack@5.97.1): + terser-webpack-plugin@5.3.14(webpack@5.100.2): dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.97.1 + terser: 5.44.0 + webpack: 5.100.2 - terser@5.43.1: + terser@5.44.0: dependencies: - '@jridgewell/source-map': 0.3.6 + '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -12154,7 +12657,9 @@ snapshots: text-decoder@1.2.3: dependencies: - b4a: 1.6.7 + b4a: 1.7.1 + transitivePeerDependencies: + - react-native-b4a text-hex@1.0.0: {} @@ -12167,12 +12672,14 @@ snapshots: tiny-inflate@1.0.3: {} - tmp@0.0.33: - dependencies: - os-tmpdir: 1.0.2 - tmpl@1.0.5: {} + to-buffer@1.2.1: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -12184,8 +12691,9 @@ snapshots: toidentifier@1.0.1: {} - token-types@6.0.0: + token-types@6.1.1: dependencies: + '@borewit/text-codec': 0.1.1 '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -12208,63 +12716,63 @@ snapshots: triple-beam@1.4.1: {} - ts-api-utils@1.4.3(typescript@5.8.3): + ts-api-utils@1.4.3(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - ts-jest@29.4.0(@babel/core@7.27.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.27.4))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)))(typescript@5.8.3): + ts-jest@29.4.4(@babel/core@7.28.4)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.4))(jest-util@29.7.0)(jest@29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)))(typescript@5.9.2): dependencies: bs-logger: 0.2.6 - ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)) + handlebars: 4.7.8 + jest: 29.7.0(@types/node@20.19.17)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.7.2 type-fest: 4.41.0 - typescript: 5.8.3 + typescript: 5.9.2 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.27.4) + babel-jest: 29.7.0(@babel/core@7.28.4) jest-util: 29.7.0 - ts-loader@9.5.2(typescript@5.8.3)(webpack@5.97.1): + ts-loader@9.5.4(typescript@5.9.2)(webpack@5.100.2): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.18.2 + enhanced-resolve: 5.18.3 micromatch: 4.0.8 semver: 7.7.2 - source-map: 0.7.4 - typescript: 5.8.3 - webpack: 5.97.1 + source-map: 0.7.6 + typescript: 5.9.2 + webpack: 5.100.2 - ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3): + ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2): 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.19.1 + '@types/node': 20.19.17 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.8.3 + typescript: 5.9.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.18.2 - tapable: 2.2.2 + enhanced-resolve: 5.18.3 + tapable: 2.2.3 tsconfig-paths: 4.2.0 tsconfig-paths@3.15.0: @@ -12284,10 +12792,10 @@ snapshots: tslib@2.8.1: {} - tsutils@3.21.0(typescript@5.8.3): + tsutils@3.21.0(typescript@5.9.2): dependencies: tslib: 1.14.1 - typescript: 5.8.3 + typescript: 5.9.2 tunnel-agent@0.6.0: dependencies: @@ -12320,6 +12828,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -12355,36 +12869,36 @@ snapshots: typedarray@0.0.6: {} - typeorm@0.3.25(ioredis@5.6.1)(pg@8.16.2)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.1)(typescript@5.8.3)): + typeorm@0.3.27(ioredis@5.8.0)(pg@8.16.3)(redis@3.1.2)(reflect-metadata@0.1.14)(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.9.2)): dependencies: '@sqltools/formatter': 1.2.5 ansis: 3.17.0 app-root-path: 3.1.0 buffer: 6.0.3 - dayjs: 1.11.13 - debug: 4.4.1 - dedent: 1.6.0 - dotenv: 16.5.0 + dayjs: 1.11.18 + debug: 4.4.3 + dedent: 1.7.0 + dotenv: 16.6.1 glob: 10.4.5 reflect-metadata: 0.1.14 - sha.js: 2.4.11 + sha.js: 2.4.12 sql-highlight: 6.1.0 tslib: 2.8.1 uuid: 11.1.0 yargs: 17.7.2 optionalDependencies: - ioredis: 5.6.1 - pg: 8.16.2 + ioredis: 5.8.0 + pg: 8.16.3 redis: 3.1.2 - ts-node: 10.9.2(@types/node@20.19.1)(typescript@5.8.3) + ts-node: 10.9.2(@types/node@20.19.17)(typescript@5.9.2) transitivePeerDependencies: - babel-plugin-macros - supports-color - typescript@5.7.2: {} - typescript@5.8.3: {} + typescript@5.9.2: {} + uglify-js@3.19.3: optional: true @@ -12392,7 +12906,7 @@ snapshots: dependencies: '@lukeed/csprng': 1.1.0 - uint8array-extras@1.4.0: {} + uint8array-extras@1.5.0: {} unbox-primitive@1.1.0: dependencies: @@ -12446,9 +12960,9 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - update-browserslist-db@1.1.3(browserslist@4.25.0): + update-browserslist-db@1.1.3(browserslist@4.26.2): dependencies: - browserslist: 4.25.0 + browserslist: 4.26.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -12496,7 +13010,7 @@ snapshots: v8-to-istanbul@9.3.0: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 @@ -12543,17 +13057,19 @@ snapshots: webpack-sources@3.3.3: {} - webpack@5.97.1: + webpack@5.100.2: dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 - browserslist: 4.25.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.26.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.2 + enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -12563,9 +13079,9 @@ snapshots: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.97.1) + schema-utils: 4.3.2 + tapable: 2.2.3 + terser-webpack-plugin: 5.3.14(webpack@5.100.2) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -12654,8 +13170,8 @@ snapshots: winston-elasticsearch@0.16.0: dependencies: '@elastic/elasticsearch': 7.17.14 - dayjs: 1.11.13 - debug: 4.4.1 + dayjs: 1.11.18 + debug: 4.4.3 lodash.defaults: 4.2.0 lodash.omit: 4.5.0 promise: 8.3.0 @@ -12703,9 +13219,9 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} @@ -12720,7 +13236,7 @@ snapshots: ws@8.17.1: {} - ws@8.18.2: {} + ws@8.18.3: {} xml-js@1.6.11: dependencies: @@ -12799,3 +13315,5 @@ snapshots: yn@3.1.1: {} yocto-queue@0.1.0: {} + + yoctocolors-cjs@2.1.3: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8f80f0cab..8327ccd5e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,27 @@ packages: - 'apps/*' - 'libs/*' + +catalog: + "@nestjs/common": ^11.1.6 + "@nestjs/core": ^11.1.6 + "@nestjs/platform-express": ^11.1.6 + "@nestjs/axios": ^4.0.1 + "@nestjs/bull": ^11.0.3 + "@nestjs/cache-manager": ^3.0.1 + "@nestjs/config": ^4.0.2 + "@nestjs/jwt": ^11.0.0 + "@nestjs/microservices": ^11.1.6 + "@nestjs/passport": ^11.0.5 + "@nestjs/platform-socket.io": ^11.1.6 + "@nestjs/schedule": ^6.0.1 + "@nestjs/swagger": ^11.2.0 + "@nestjs/typeorm": ^11.0.0 + "@nestjs/websockets": ^11.1.6 + "nestjs-cls": ^6.0.1 + "@nestjs/cli": ^11.0.10 + "@nestjs/schematics": ^11.0.7 + "@nestjs/testing": ^11.1.6 + "nestjs-rate-limiter": ^3.1.0 + "nestjs-supabase-auth": ^1.0.9 + "nestjs-typeorm-paginate": ^4.0.4