From e06642225ae5713416783981d8be303affc9723d Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Thu, 14 Aug 2025 14:40:08 +0300 Subject: [PATCH 01/45] feat: working on creating parent card --- src/app.module.ts | 6 +- src/card/card.module.ts | 12 +++- src/card/controllers/cards.controller.ts | 39 ++++++++++++ src/card/controllers/index.ts | 1 + src/card/dtos/responses/card.response.dto.ts | 56 +++++++++++++++++ src/card/dtos/responses/index.ts | 1 + .../mappers/card-status-description.mapper.ts | 5 +- src/card/repositories/card.repository.ts | 7 ++- src/card/services/card.service.ts | 42 ++++++++++--- src/card/services/transaction.service.ts | 2 +- .../__mocks__/card-embossing-details.mock.ts | 38 ++++++++++++ src/common/modules/neoleap/__mocks__/index.ts | 1 + .../neoleap/__mocks__/kyc-callback.mock.ts | 6 ++ .../neoleap/controllers/neotest.controller.ts | 62 ------------------- .../dtos/requests/kyc-webhook.request.dto.ts | 30 +++++++++ .../card-embossing-details.response.dto.ts | 26 ++++++++ .../modules/neoleap/dtos/response/index.ts | 1 + src/common/modules/neoleap/neoleap.module.ts | 13 ++-- src/common/modules/neoleap/services/index.ts | 2 +- .../neoleap/services/neoleap.service.ts | 46 +++++++++++--- src/customer/customer.module.ts | 7 +-- src/customer/services/customer.service.ts | 9 ++- src/i18n/ar/app.json | 3 +- src/i18n/en/app.json | 3 +- src/webhook/controllers/index.ts | 0 .../neoleap-webhooks.controller.ts | 4 +- src/webhook/services/index.ts | 1 + .../services/neoleap-webook.service.ts | 7 ++- src/webhook/webhook.module.ts | 12 ++++ 29 files changed, 328 insertions(+), 114 deletions(-) create mode 100644 src/card/controllers/cards.controller.ts create mode 100644 src/card/controllers/index.ts create mode 100644 src/card/dtos/responses/card.response.dto.ts create mode 100644 src/card/dtos/responses/index.ts create mode 100644 src/common/modules/neoleap/__mocks__/card-embossing-details.mock.ts delete mode 100644 src/common/modules/neoleap/controllers/neotest.controller.ts create mode 100644 src/common/modules/neoleap/dtos/response/card-embossing-details.response.dto.ts create mode 100644 src/webhook/controllers/index.ts rename src/{common/modules/neoleap => webhook}/controllers/neoleap-webhooks.controller.ts (92%) create mode 100644 src/webhook/services/index.ts rename src/{common/modules/neoleap => webhook}/services/neoleap-webook.service.ts (82%) create mode 100644 src/webhook/webhook.module.ts diff --git a/src/app.module.ts b/src/app.module.ts index b47eeb7..2e3db91 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -9,6 +9,7 @@ import { LoggerModule } from 'nestjs-pino'; import { DataSource } from 'typeorm'; import { addTransactionalDataSource } from 'typeorm-transactional'; import { AuthModule } from './auth/auth.module'; +import { CardModule } from './card/card.module'; import { CacheModule } from './common/modules/cache/cache.module'; import { LookupModule } from './common/modules/lookup/lookup.module'; import { NeoLeapModule } from './common/modules/neoleap/neoleap.module'; @@ -26,7 +27,7 @@ import { GuardianModule } from './guardian/guardian.module'; import { HealthModule } from './health/health.module'; import { JuniorModule } from './junior/junior.module'; import { UserModule } from './user/user.module'; -import { CardModule } from './card/card.module'; +import { WebhookModule } from './webhook/webhook.module'; @Module({ controllers: [], @@ -61,6 +62,7 @@ import { CardModule } from './card/card.module'; CustomerModule, JuniorModule, GuardianModule, + CardModule, NotificationModule, OtpModule, @@ -71,7 +73,7 @@ import { CardModule } from './card/card.module'; CronModule, NeoLeapModule, - CardModule, + WebhookModule, ], providers: [ // Global Pipes diff --git a/src/card/card.module.ts b/src/card/card.module.ts index 92500ad..896a435 100644 --- a/src/card/card.module.ts +++ b/src/card/card.module.ts @@ -1,5 +1,8 @@ -import { Module } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { NeoLeapModule } from '~/common/modules/neoleap/neoleap.module'; +import { CustomerModule } from '~/customer/customer.module'; +import { CardsController } from './controllers'; import { Card } from './entities'; import { Account } from './entities/account.entity'; import { Transaction } from './entities/transaction.entity'; @@ -11,7 +14,11 @@ import { AccountService } from './services/account.service'; import { TransactionService } from './services/transaction.service'; @Module({ - imports: [TypeOrmModule.forFeature([Card, Account, Transaction])], + imports: [ + TypeOrmModule.forFeature([Card, Account, Transaction]), + forwardRef(() => NeoLeapModule), + forwardRef(() => CustomerModule), // <-- add forwardRef here + ], providers: [ CardService, CardRepository, @@ -21,5 +28,6 @@ import { TransactionService } from './services/transaction.service'; AccountRepository, ], exports: [CardService, TransactionService], + controllers: [CardsController], }) export class CardModule {} diff --git a/src/card/controllers/cards.controller.ts b/src/card/controllers/cards.controller.ts new file mode 100644 index 0000000..385958a --- /dev/null +++ b/src/card/controllers/cards.controller.ts @@ -0,0 +1,39 @@ +import { Controller, Get, Post, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { IJwtPayload } from '~/auth/interfaces'; +import { AuthenticatedUser } from '~/common/decorators'; +import { AccessTokenGuard } from '~/common/guards'; +import { CardEmbossingDetailsResponseDto } from '~/common/modules/neoleap/dtos/response'; +import { ApiDataResponse } from '~/core/decorators'; +import { ResponseFactory } from '~/core/utils'; +import { CardResponseDto } from '../dtos/responses'; +import { CardService } from '../services'; + +@Controller('cards') +@ApiBearerAuth() +@ApiTags('Cards') +@UseGuards(AccessTokenGuard) +export class CardsController { + constructor(private readonly cardService: CardService) {} + + @Post() + @ApiDataResponse(CardResponseDto) + async createCard(@AuthenticatedUser() { sub }: IJwtPayload) { + const card = await this.cardService.createCard(sub); + return ResponseFactory.data(new CardResponseDto(card)); + } + + @Get('current') + @ApiDataResponse(CardResponseDto) + async getCurrentCard(@AuthenticatedUser() { sub }: IJwtPayload) { + const card = await this.cardService.getCardByCustomerId(sub); + return ResponseFactory.data(new CardResponseDto(card)); + } + + @Get('embossing-details') + @ApiDataResponse(CardEmbossingDetailsResponseDto) + async getCardById(@AuthenticatedUser() { sub }: IJwtPayload) { + const res = await this.cardService.getEmbossingInformation(sub); + return ResponseFactory.data(res); + } +} diff --git a/src/card/controllers/index.ts b/src/card/controllers/index.ts new file mode 100644 index 0000000..ae6254e --- /dev/null +++ b/src/card/controllers/index.ts @@ -0,0 +1 @@ +export * from './cards.controller'; diff --git a/src/card/dtos/responses/card.response.dto.ts b/src/card/dtos/responses/card.response.dto.ts new file mode 100644 index 0000000..53c13f1 --- /dev/null +++ b/src/card/dtos/responses/card.response.dto.ts @@ -0,0 +1,56 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Card } from '~/card/entities'; +import { CardScheme, CardStatus, CustomerType } from '~/card/enums'; +import { CardStatusDescriptionMapper } from '~/card/mappers/card-status-description.mapper'; +import { UserLocale } from '~/core/enums'; + +export class CardResponseDto { + @ApiProperty({ + example: 'b34df8c2-5d3e-4b1a-9c2f-7e3b1a2d3f4e', + }) + id!: string; + + @ApiProperty({ + example: '123456', + description: 'The first six digits of the card number.', + }) + firstSixDigits!: string; + + @ApiProperty({ example: '7890', description: 'The last four digits of the card number.' }) + lastFourDigits!: string; + + @ApiProperty({ + enum: CardScheme, + description: 'The card scheme (e.g., VISA, MASTERCARD).', + }) + scheme!: CardScheme; + + @ApiProperty({ + enum: CardStatus, + description: 'The current status of the card (e.g., ACTIVE, PENDING).', + }) + status!: CardStatus; + + @ApiProperty({ + example: 'The card is active', + description: 'A description of the card status.', + }) + statusDescription!: string; + + @ApiProperty({ + example: 2000.0, + description: 'The credit limit of the card.', + }) + balance!: number; + + constructor(card: Card) { + this.id = card.id; + this.firstSixDigits = card.firstSixDigits; + this.lastFourDigits = card.lastFourDigits; + this.scheme = card.scheme; + this.status = card.status; + this.statusDescription = CardStatusDescriptionMapper[card.statusDescription][UserLocale.ENGLISH].description; + this.balance = + card.customerType === CustomerType.CHILD ? Math.min(card.limit, card.account.balance) : card.account.balance; + } +} diff --git a/src/card/dtos/responses/index.ts b/src/card/dtos/responses/index.ts new file mode 100644 index 0000000..5f2d4bb --- /dev/null +++ b/src/card/dtos/responses/index.ts @@ -0,0 +1 @@ +export * from './card.response.dto'; diff --git a/src/card/mappers/card-status-description.mapper.ts b/src/card/mappers/card-status-description.mapper.ts index 85fe6d9..202c0e0 100644 --- a/src/card/mappers/card-status-description.mapper.ts +++ b/src/card/mappers/card-status-description.mapper.ts @@ -1,7 +1,10 @@ import { UserLocale } from '~/core/enums'; import { CardStatusDescription } from '../enums'; -export const CardStatusMapper: Record = { +export const CardStatusDescriptionMapper: Record< + CardStatusDescription, + { [key in UserLocale]: { description: string } } +> = { [CardStatusDescription.NORMAL]: { [UserLocale.ENGLISH]: { description: 'The card is active' }, [UserLocale.ARABIC]: { description: 'البطاقة نشطة' }, diff --git a/src/card/repositories/card.repository.ts b/src/card/repositories/card.repository.ts index a6e8cb6..3ee34ce 100644 --- a/src/card/repositories/card.repository.ts +++ b/src/card/repositories/card.repository.ts @@ -28,7 +28,7 @@ export class CardRepository { } getCardById(id: string): Promise { - return this.cardRepository.findOne({ where: { id } }); + return this.cardRepository.findOne({ where: { id }, relations: ['account'] }); } getCardByReferenceNumber(referenceNumber: string): Promise { @@ -42,9 +42,10 @@ export class CardRepository { }); } - getActiveCardForCustomer(customerId: string): Promise { + getCardByCustomerId(customerId: string): Promise { return this.cardRepository.findOne({ - where: { customerId, status: CardStatus.ACTIVE }, + where: { customerId }, + relations: ['account'], }); } diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 6d48d0f..89a0c7a 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -1,7 +1,9 @@ -import { BadRequestException, Injectable } from '@nestjs/common'; +import { BadRequestException, forwardRef, Inject, Injectable } from '@nestjs/common'; import { Transactional } from 'typeorm-transactional'; import { AccountCardStatusChangedWebhookRequest } from '~/common/modules/neoleap/dtos/requests'; -import { CreateApplicationResponse } from '~/common/modules/neoleap/dtos/response'; +import { NeoLeapService } from '~/common/modules/neoleap/services'; +import { KycStatus } from '~/customer/enums'; +import { CustomerService } from '~/customer/services'; import { Card } from '../entities'; import { CardStatusMapper } from '../mappers/card-status.mapper'; import { CardRepository } from '../repositories'; @@ -9,12 +11,30 @@ import { AccountService } from './account.service'; @Injectable() export class CardService { - constructor(private readonly cardRepository: CardRepository, private readonly accountService: AccountService) {} + constructor( + private readonly cardRepository: CardRepository, + private readonly accountService: AccountService, + @Inject(forwardRef(() => NeoLeapService)) private readonly neoleapService: NeoLeapService, + @Inject(forwardRef(() => CustomerService)) private readonly customerService: CustomerService, + ) {} @Transactional() - async createCard(customerId: string, cardData: CreateApplicationResponse): Promise { - const account = await this.accountService.createAccount(cardData); - return this.cardRepository.createCard(customerId, account.id, cardData); + async createCard(customerId: string): Promise { + const customer = await this.customerService.findCustomerById(customerId); + + if (customer.kycStatus !== KycStatus.APPROVED) { + throw new BadRequestException('CUSTOMER.KYC_NOT_APPROVED'); + } + + if (customer.cards.length > 0) { + throw new BadRequestException('CUSTOMER.ALREADY_HAS_CARD'); + } + + const data = await this.neoleapService.createApplication(customer); + const account = await this.accountService.createAccount(data); + const createdCard = await this.cardRepository.createCard(customerId, account.id, data); + + return this.getCardById(createdCard.id); } async getCardById(id: string): Promise { @@ -46,8 +66,8 @@ export class CardService { return card; } - async getActiveCardForCustomer(customerId: string): Promise { - const card = await this.cardRepository.getActiveCardForCustomer(customerId); + async getCardByCustomerId(customerId: string): Promise { + const card = await this.cardRepository.getCardByCustomerId(customerId); if (!card) { throw new BadRequestException('CARD.NOT_FOUND'); } @@ -60,4 +80,10 @@ export class CardService { return this.cardRepository.updateCardStatus(card.id, status, description); } + + async getEmbossingInformation(customerId: string) { + const card = await this.getCardByCustomerId(customerId); + + return this.neoleapService.getEmbossingInformation(card); + } } diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index ff22aef..d195368 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -14,8 +14,8 @@ import { CardService } from './card.service'; export class TransactionService { constructor( private readonly transactionRepository: TransactionRepository, - private readonly cardService: CardService, private readonly accountService: AccountService, + private readonly cardService: CardService, ) {} @Transactional() diff --git a/src/common/modules/neoleap/__mocks__/card-embossing-details.mock.ts b/src/common/modules/neoleap/__mocks__/card-embossing-details.mock.ts new file mode 100644 index 0000000..00e8c8f --- /dev/null +++ b/src/common/modules/neoleap/__mocks__/card-embossing-details.mock.ts @@ -0,0 +1,38 @@ +export const CARD_EMBOSSING_DETAILS_MOCK = { + ResponseHeader: { + Version: '1.0.0', + MsgUid: 'adaa1893-9f95-48a8-b7a1-0422bcf629b5', + Source: 'ZOD', + ServiceId: 'GetEmbossingInformation', + ReqDateTime: '2025-06-11T07:32:16.304Z', + RspDateTime: '2025-08-14T10:01:14.205', + ResponseCode: '000', + ResponseType: 'Success', + ProcessingTime: 67, + EncryptionKey: null, + ResponseDescription: 'Operation Successful', + LocalizedResponseDescription: null, + CustomerSpecificResponseDescriptionList: null, + HeaderUserDataList: null, + }, + GetEmbossingInformationResponseDetails: { + icvv: '259', + Track1: '%B4017786818471184^AMMAR/QAFFAF^31102261029800997000000?', + Track2: ';4017786818471184=31102261029899700?', + Track3: null, + EmvTrack1: '1029800259000000', + EmvTrack2: '4017786818471184D31102261029825900', + ClearPan: '4017786818471184', + PinBlock: '663B1A71D8112D97', + Cvv: '997', + Cvv2: '834', + iCvv: '259', + Pvv: '0298', + EmbossingName: 'AMMAR QAFFAF', + ExpiryDate: '20311031', + OldPlasticExpiryDate: null, + CardStatus: '30', + OldPlasticCardStatus: ' ', + EmbossingRecord: null, + }, +}; diff --git a/src/common/modules/neoleap/__mocks__/index.ts b/src/common/modules/neoleap/__mocks__/index.ts index 98ef2c9..96a5d45 100644 --- a/src/common/modules/neoleap/__mocks__/index.ts +++ b/src/common/modules/neoleap/__mocks__/index.ts @@ -1,3 +1,4 @@ +export * from './card-embossing-details.mock'; export * from './create-application.mock'; export * from './initiate-kyc.mock'; export * from './inquire-application.mock'; diff --git a/src/common/modules/neoleap/__mocks__/kyc-callback.mock.ts b/src/common/modules/neoleap/__mocks__/kyc-callback.mock.ts index 5ce59e0..88d4e5b 100644 --- a/src/common/modules/neoleap/__mocks__/kyc-callback.mock.ts +++ b/src/common/modules/neoleap/__mocks__/kyc-callback.mock.ts @@ -19,5 +19,11 @@ export const getKycCallbackMock = (nationalId: string) => { professionTitle: 'Software Engineer', professionType: 'Full-Time', isPep: 'N', + country: '682', + region: 'Mecca', + city: 'At-Taif', + neighborhood: 'Al-Hamra', + street: 'Al-Masjid Al-Haram', + building: '123', }; }; diff --git a/src/common/modules/neoleap/controllers/neotest.controller.ts b/src/common/modules/neoleap/controllers/neotest.controller.ts deleted file mode 100644 index 5ea191d..0000000 --- a/src/common/modules/neoleap/controllers/neotest.controller.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { Body, Controller, Post, UseGuards } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; -import { IJwtPayload } from '~/auth/interfaces'; -import { CardService } from '~/card/services'; -import { AuthenticatedUser } from '~/common/decorators'; -import { AccessTokenGuard } from '~/common/guards'; -import { ApiDataResponse } from '~/core/decorators'; -import { ResponseFactory } from '~/core/utils'; -import { CustomerResponseDto } from '~/customer/dtos/response'; -import { CustomerService } from '~/customer/services'; -import { UpdateCardControlsRequestDto } from '../dtos/requests'; -import { CreateApplicationResponse, InquireApplicationResponse } from '../dtos/response'; -import { NeoLeapService } from '../services/neoleap.service'; - -@Controller('neotest') -@ApiTags('Neoleap Test API , for testing purposes only, will be removed in production') -@UseGuards(AccessTokenGuard) -@ApiBearerAuth() -export class NeoTestController { - constructor( - private readonly neoleapService: NeoLeapService, - private readonly customerService: CustomerService, - private readonly cardService: CardService, - private readonly configService: ConfigService, - ) {} - - @Post('update-kys') - @ApiDataResponse(CustomerResponseDto) - async updateKys(@AuthenticatedUser() user: IJwtPayload) { - const customer = await this.customerService.updateKyc(user.sub); - - return ResponseFactory.data(new CustomerResponseDto(customer)); - } - - @Post('inquire-application') - @ApiDataResponse(InquireApplicationResponse) - async inquireApplication(@AuthenticatedUser() user: IJwtPayload) { - const customer = await this.customerService.findCustomerById(user.sub); - const data = await this.neoleapService.inquireApplication(customer.applicationNumber.toString()); - return ResponseFactory.data(data); - } - - @Post('create-application') - @ApiDataResponse(CreateApplicationResponse) - async createApplication(@AuthenticatedUser() user: IJwtPayload) { - const customer = await this.customerService.findCustomerById(user.sub); - const data = await this.neoleapService.createApplication(customer); - await this.cardService.createCard(customer.id, data); - return ResponseFactory.data(data); - } - - @Post('update-card-controls') - async updateCardControls( - @AuthenticatedUser() user: IJwtPayload, - @Body() { amount, count }: UpdateCardControlsRequestDto, - ) { - const card = await this.cardService.getActiveCardForCustomer(user.sub); - await this.neoleapService.updateCardControl(card.cardReference, amount, count); - return ResponseFactory.data({ message: 'Card controls updated successfully' }); - } -} diff --git a/src/common/modules/neoleap/dtos/requests/kyc-webhook.request.dto.ts b/src/common/modules/neoleap/dtos/requests/kyc-webhook.request.dto.ts index 427af17..92d8504 100644 --- a/src/common/modules/neoleap/dtos/requests/kyc-webhook.request.dto.ts +++ b/src/common/modules/neoleap/dtos/requests/kyc-webhook.request.dto.ts @@ -96,4 +96,34 @@ export class KycWebhookRequest { @IsString() @ApiProperty({ example: 'N' }) isPep!: string; + + @Expose() + @IsString() + @ApiProperty({ example: '682' }) + country!: string; + + @Expose() + @IsString() + @ApiProperty({ example: 'Mecca' }) + region!: string; + + @Expose() + @IsString() + @ApiProperty({ example: 'At-Taif' }) + city!: string; + + @Expose() + @IsString() + @ApiProperty({ example: 'Al-Hamra' }) + neighborhood!: string; + + @Expose() + @IsString() + @ApiProperty({ example: 'Al-Masjid Al-Haram' }) + street!: string; + + @Expose() + @IsString() + @ApiProperty({ example: '123' }) + building!: string; } diff --git a/src/common/modules/neoleap/dtos/response/card-embossing-details.response.dto.ts b/src/common/modules/neoleap/dtos/response/card-embossing-details.response.dto.ts new file mode 100644 index 0000000..0561e64 --- /dev/null +++ b/src/common/modules/neoleap/dtos/response/card-embossing-details.response.dto.ts @@ -0,0 +1,26 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Expose } from 'class-transformer'; + +export class CardEmbossingDetailsResponseDto { + @ApiProperty({ + example: '997', + }) + @Expose({ name: 'Cvv' }) + cvv!: string; + + @ApiProperty({ example: '4017786818471184' }) + @Expose({ name: 'ClearPan' }) + cardNumber!: string; + + @ApiProperty({ + example: '20311031', + }) + @Expose({ name: 'ExpiryDate' }) + expiryDate!: string; + + @ApiProperty({ + example: 'AMMAR QAFFAF', + }) + @Expose({ name: 'EmbossingName' }) + cardHolderName!: string; +} diff --git a/src/common/modules/neoleap/dtos/response/index.ts b/src/common/modules/neoleap/dtos/response/index.ts index 5b616e5..f6b5943 100644 --- a/src/common/modules/neoleap/dtos/response/index.ts +++ b/src/common/modules/neoleap/dtos/response/index.ts @@ -1,3 +1,4 @@ +export * from './card-embossing-details.response.dto'; export * from './create-application.response.dto'; export * from './initiate-kyc.response.dto'; export * from './inquire-application.response'; diff --git a/src/common/modules/neoleap/neoleap.module.ts b/src/common/modules/neoleap/neoleap.module.ts index 5b1043a..bc27f27 100644 --- a/src/common/modules/neoleap/neoleap.module.ts +++ b/src/common/modules/neoleap/neoleap.module.ts @@ -1,16 +1,11 @@ import { HttpModule } from '@nestjs/axios'; -import { forwardRef, Module } from '@nestjs/common'; -import { CardModule } from '~/card/card.module'; -import { CustomerModule } from '~/customer/customer.module'; -import { NeoLeapWebhooksController } from './controllers/neoleap-webhooks.controller'; -import { NeoTestController } from './controllers/neotest.controller'; -import { NeoLeapWebhookService } from './services'; +import { Module } from '@nestjs/common'; import { NeoLeapService } from './services/neoleap.service'; @Module({ - imports: [HttpModule, CardModule, forwardRef(() => CustomerModule)], - controllers: [NeoTestController, NeoLeapWebhooksController], - providers: [NeoLeapService, NeoLeapWebhookService], + imports: [HttpModule], + controllers: [], + providers: [NeoLeapService], exports: [NeoLeapService], }) export class NeoLeapModule {} diff --git a/src/common/modules/neoleap/services/index.ts b/src/common/modules/neoleap/services/index.ts index 4fac8d7..bedb316 100644 --- a/src/common/modules/neoleap/services/index.ts +++ b/src/common/modules/neoleap/services/index.ts @@ -1,2 +1,2 @@ -export * from './neoleap-webook.service'; +export * from '../../../../webhook/services/neoleap-webook.service'; export * from './neoleap.service'; diff --git a/src/common/modules/neoleap/services/neoleap.service.ts b/src/common/modules/neoleap/services/neoleap.service.ts index 2d2eee7..ad89036 100644 --- a/src/common/modules/neoleap/services/neoleap.service.ts +++ b/src/common/modules/neoleap/services/neoleap.service.ts @@ -4,13 +4,20 @@ import { ConfigService } from '@nestjs/config'; import { ClassConstructor, plainToInstance } from 'class-transformer'; import moment from 'moment'; import { v4 as uuid } from 'uuid'; +import { Card } from '~/card/entities'; import { CountriesNumericISO } from '~/common/constants'; import { InitiateKycRequestDto } from '~/customer/dtos/request'; import { Customer } from '~/customer/entities'; -import { Gender, KycStatus } from '~/customer/enums'; -import { CREATE_APPLICATION_MOCK, INITIATE_KYC_MOCK, INQUIRE_APPLICATION_MOCK } from '../__mocks__/'; +import { Gender } from '~/customer/enums'; +import { + CARD_EMBOSSING_DETAILS_MOCK, + CREATE_APPLICATION_MOCK, + INITIATE_KYC_MOCK, + INQUIRE_APPLICATION_MOCK, +} from '../__mocks__/'; import { getKycCallbackMock } from '../__mocks__/kyc-callback.mock'; import { + CardEmbossingDetailsResponseDto, CreateApplicationResponse, InitiateKycResponseDto, InquireApplicationResponse, @@ -85,14 +92,6 @@ export class NeoLeapService { async createApplication(customer: Customer) { const responseKey = 'CreateNewApplicationResponseDetails'; - if (customer.kycStatus !== KycStatus.APPROVED) { - throw new BadRequestException('CUSTOMER.KYC_NOT_APPROVED'); - } - - if (customer.cards.length > 0) { - throw new BadRequestException('CUSTOMER.ALREADY_HAS_CARD'); - } - if (!this.useGateway) { return plainToInstance(CreateApplicationResponse, CREATE_APPLICATION_MOCK[responseKey], { excludeExtraneousValues: true, @@ -225,6 +224,33 @@ export class NeoLeapService { ); } + async getEmbossingInformation(card: Card) { + const responseKey = 'GetEmbossingInformationResponseDetails'; + if (!this.useGateway) { + return plainToInstance(CardEmbossingDetailsResponseDto, CARD_EMBOSSING_DETAILS_MOCK[responseKey], { + excludeExtraneousValues: true, + }); + } + + const payload = { + GetEmbossingInformationRequestDetails: { + InstitutionCode: this.institutionCode, + CardIdentifier: { + InstitutionCode: this.institutionCode, + Id: card.cardReference, + }, + }, + RequestHeader: this.prepareHeaders('GetEmbossingInformation'), + }; + + return this.sendRequestToNeoLeap( + 'cardembossing/CardEmbossingDetails', + payload, + responseKey, + CardEmbossingDetailsResponseDto, + ); + } + private prepareHeaders(serviceName: string): INeoleapHeaderRequest['RequestHeader'] { return { Version: '1.0.0', diff --git a/src/customer/customer.module.ts b/src/customer/customer.module.ts index 4f11d0a..e2b6b88 100644 --- a/src/customer/customer.module.ts +++ b/src/customer/customer.module.ts @@ -9,12 +9,7 @@ import { CustomerRepository } from './repositories/customer.repository'; import { CustomerService } from './services'; @Module({ - imports: [ - TypeOrmModule.forFeature([Customer]), - forwardRef(() => UserModule), - GuardianModule, - forwardRef(() => NeoLeapModule), - ], + imports: [TypeOrmModule.forFeature([Customer]), GuardianModule, forwardRef(() => UserModule), NeoLeapModule], controllers: [CustomerController], providers: [CustomerService, CustomerRepository], exports: [CustomerService], diff --git a/src/customer/services/customer.service.ts b/src/customer/services/customer.service.ts index b1aef8d..6d77eda 100644 --- a/src/customer/services/customer.service.ts +++ b/src/customer/services/customer.service.ts @@ -104,13 +104,18 @@ export class CustomerService { dateOfBirth: moment(body.dob, 'YYYYMMDD').toDate(), nationalId: body.nationalId, nationalIdExpiry: moment(body.nationalIdExpiry, 'YYYYMMDD').toDate(), - countryOfResidence: NumericToCountryIso[body.nationality], - country: NumericToCountryIso[body.nationality], + countryOfResidence: NumericToCountryIso[body.country], + country: NumericToCountryIso[body.country], gender: body.gender === 'M' ? Gender.MALE : Gender.FEMALE, sourceOfIncome: body.incomeSource, profession: body.professionTitle, professionType: body.professionType, isPep: body.isPep === 'Y', + city: body.city, + region: body.region, + neighborhood: body.neighborhood, + street: body.street, + building: body.building, }); } diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index 2b8c4cf..7f63e13 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -50,7 +50,8 @@ "CUSTOMER": { "NOT_FOUND": "لم يتم العثور على العميل.", "ALREADY_EXISTS": "العميل موجود بالفعل.", - "KYC_NOT_APPROVED": "لم يتم الموافقة على هوية العميل بعد." + "KYC_NOT_APPROVED": "لم يتم الموافقة على هوية العميل بعد.", + "ALREADY_HAS_CARD": "العميل لديه بطاقة بالفعل." }, "GIFT": { diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index 1bee066..c9d6a8d 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -49,7 +49,8 @@ "CUSTOMER": { "NOT_FOUND": "The customer was not found.", "ALREADY_EXISTS": "The customer already exists.", - "KYC_NOT_APPROVED": "The customer's KYC has not been approved yet." + "KYC_NOT_APPROVED": "The customer's KYC has not been approved yet.", + "ALREADY_HAS_CARD": "The customer already has a card." }, "GIFT": { diff --git a/src/webhook/controllers/index.ts b/src/webhook/controllers/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/common/modules/neoleap/controllers/neoleap-webhooks.controller.ts b/src/webhook/controllers/neoleap-webhooks.controller.ts similarity index 92% rename from src/common/modules/neoleap/controllers/neoleap-webhooks.controller.ts rename to src/webhook/controllers/neoleap-webhooks.controller.ts index 1fda1ac..b54e93e 100644 --- a/src/common/modules/neoleap/controllers/neoleap-webhooks.controller.ts +++ b/src/webhook/controllers/neoleap-webhooks.controller.ts @@ -6,8 +6,8 @@ import { AccountTransactionWebhookRequest, CardTransactionWebhookRequest, KycWebhookRequest, -} from '../dtos/requests'; -import { NeoLeapWebhookService } from '../services'; +} from '../../common/modules/neoleap/dtos/requests'; +import { NeoLeapWebhookService } from '../../common/modules/neoleap/services'; @Controller('neoleap-webhooks') @ApiTags('Neoleap Webhooks') diff --git a/src/webhook/services/index.ts b/src/webhook/services/index.ts new file mode 100644 index 0000000..01468fb --- /dev/null +++ b/src/webhook/services/index.ts @@ -0,0 +1 @@ +export * from './neoleap-webook.service'; diff --git a/src/common/modules/neoleap/services/neoleap-webook.service.ts b/src/webhook/services/neoleap-webook.service.ts similarity index 82% rename from src/common/modules/neoleap/services/neoleap-webook.service.ts rename to src/webhook/services/neoleap-webook.service.ts index 5c605b8..0beb630 100644 --- a/src/common/modules/neoleap/services/neoleap-webook.service.ts +++ b/src/webhook/services/neoleap-webook.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { forwardRef, Inject, Injectable } from '@nestjs/common'; import { CardService } from '~/card/services'; import { TransactionService } from '~/card/services/transaction.service'; import { CustomerService } from '~/customer/services'; @@ -7,14 +7,15 @@ import { AccountTransactionWebhookRequest, CardTransactionWebhookRequest, KycWebhookRequest, -} from '../dtos/requests'; +} from '../../common/modules/neoleap/dtos/requests'; @Injectable() export class NeoLeapWebhookService { constructor( + @Inject(forwardRef(() => CustomerService)) + private readonly customerService: CustomerService, private readonly transactionService: TransactionService, private readonly cardService: CardService, - private customerService: CustomerService, ) {} handleCardTransactionWebhook(body: CardTransactionWebhookRequest) { diff --git a/src/webhook/webhook.module.ts b/src/webhook/webhook.module.ts new file mode 100644 index 0000000..0e42c87 --- /dev/null +++ b/src/webhook/webhook.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { CardModule } from '~/card/card.module'; +import { CustomerModule } from '~/customer/customer.module'; +import { NeoLeapWebhooksController } from './controllers/neoleap-webhooks.controller'; +import { NeoLeapWebhookService } from './services'; + +@Module({ + providers: [NeoLeapWebhookService], + controllers: [NeoLeapWebhooksController], + imports: [CustomerModule, CardModule], +}) +export class WebhookModule {} From d437b21dc3429c276421e0a872a1dd89b8ef5c0d Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sat, 23 Aug 2025 19:30:29 +0300 Subject: [PATCH 02/45] fix: make kyc run on mocks --- package-lock.json | 9003 ++++++++++++----- .../neoleap/services/neoleap.service.ts | 4 +- 2 files changed, 6578 insertions(+), 2429 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3cd82fa..61460cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -99,6 +99,8 @@ "../libraries/test-package": {}, "node_modules/@abdalhamid/hello": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@abdalhamid/hello/-/hello-2.0.0.tgz", + "integrity": "sha512-hEERD/wDiELslvBxdZODuSuvwPhVYGzelDthjn/Wh+JD4BsVo7hCBCLsmL0+lW3uL+MhoNyDmbrLcbT7JCIx2A==", "license": "MIT", "dependencies": { "@nestjs/common": "^10.4.4", @@ -111,24 +113,10 @@ "@nestjs/common": "^6.0.0" } }, - "node_modules/@acuminous/bitsyntax": { - "version": "0.1.2", - "license": "MIT", - "dependencies": { - "buffer-more-ints": "~1.0.0", - "debug": "^4.3.4", - "safe-buffer": "~5.1.2" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/@acuminous/bitsyntax/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -141,6 +129,8 @@ }, "node_modules/@angular-devkit/core": { "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.11.tgz", + "integrity": "sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -165,8 +155,20 @@ } } }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@angular-devkit/schematics": { "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.11.tgz", + "integrity": "sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -184,6 +186,8 @@ }, "node_modules/@angular-devkit/schematics-cli": { "version": "17.3.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.11.tgz", + "integrity": "sha512-kcOMqp+PHAKkqRad7Zd7PbpqJ0LqLaNZdY1+k66lLWmkEBozgq8v4ASn/puPWf9Bo0HpCiK+EzLf0VHE8Z/y6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -204,7 +208,9 @@ } }, "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { - "version": "5.3.0", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.0.tgz", + "integrity": "sha512-46QrSQFyVSEyYAgQ22hQ+zDa60YHA4fBstHmtSApj1Y5vKtG27fWowW03jCk5KcbXEWPZUIR894aARCA/G1kfQ==", "dev": true, "license": "MIT", "engines": { @@ -216,6 +222,8 @@ }, "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, "license": "ISC", "engines": { @@ -224,6 +232,8 @@ }, "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { "version": "9.2.15", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", + "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", "dev": true, "license": "MIT", "dependencies": { @@ -249,6 +259,8 @@ }, "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "license": "ISC", "engines": { @@ -257,27 +269,715 @@ }, "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", + "node_modules/@angular-devkit/schematics-cli/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-ses": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.864.0.tgz", + "integrity": "sha512-cmsOrJZsrNa892gD2cAsbVkweDulgmC8PE38cz//bM//1BW/R1MMFClapF+Q9gACtsRVTRBXNtsIsBq8Gm1Urw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-node": "3.864.0", + "@aws-sdk/middleware-host-header": "3.862.0", + "@aws-sdk/middleware-logger": "3.862.0", + "@aws-sdk/middleware-recursion-detection": "3.862.0", + "@aws-sdk/middleware-user-agent": "3.864.0", + "@aws-sdk/region-config-resolver": "3.862.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@aws-sdk/util-user-agent-browser": "3.862.0", + "@aws-sdk/util-user-agent-node": "3.864.0", + "@smithy/config-resolver": "^4.1.5", + "@smithy/core": "^3.8.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/hash-node": "^4.0.5", + "@smithy/invalid-dependency": "^4.0.5", + "@smithy/middleware-content-length": "^4.0.5", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-retry": "^4.1.19", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.26", + "@smithy/util-defaults-mode-node": "^4.0.26", + "@smithy/util-endpoints": "^3.0.7", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.864.0.tgz", + "integrity": "sha512-THiOp0OpQROEKZ6IdDCDNNh3qnNn/kFFaTSOiugDpgcE5QdsOxh1/RXq7LmHpTJum3cmnFf8jG59PHcz9Tjnlw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/middleware-host-header": "3.862.0", + "@aws-sdk/middleware-logger": "3.862.0", + "@aws-sdk/middleware-recursion-detection": "3.862.0", + "@aws-sdk/middleware-user-agent": "3.864.0", + "@aws-sdk/region-config-resolver": "3.862.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@aws-sdk/util-user-agent-browser": "3.862.0", + "@aws-sdk/util-user-agent-node": "3.864.0", + "@smithy/config-resolver": "^4.1.5", + "@smithy/core": "^3.8.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/hash-node": "^4.0.5", + "@smithy/invalid-dependency": "^4.0.5", + "@smithy/middleware-content-length": "^4.0.5", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-retry": "^4.1.19", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.26", + "@smithy/util-defaults-mode-node": "^4.0.26", + "@smithy/util-endpoints": "^3.0.7", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.864.0.tgz", + "integrity": "sha512-LFUREbobleHEln+Zf7IG83lAZwvHZG0stI7UU0CtwyuhQy5Yx0rKksHNOCmlM7MpTEbSCfntEhYi3jUaY5e5lg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@aws-sdk/xml-builder": "3.862.0", + "@smithy/core": "^3.8.0", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/property-provider": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/signature-v4": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.864.0.tgz", + "integrity": "sha512-StJPOI2Rt8UE6lYjXUpg6tqSZaM72xg46ljPg8kIevtBAAfdtq9K20qT/kSliWGIBocMFAv0g2mC0hAa+ECyvg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.864.0.tgz", + "integrity": "sha512-E/RFVxGTuGnuD+9pFPH2j4l6HvrXzPhmpL8H8nOoJUosjx7d4v93GJMbbl1v/fkDLqW9qN4Jx2cI6PAjohA6OA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/property-provider": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/util-stream": "^4.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.864.0.tgz", + "integrity": "sha512-PlxrijguR1gxyPd5EYam6OfWLarj2MJGf07DvCx9MAuQkw77HBnsu6+XbV8fQriFuoJVTBLn9ROhMr/ROAYfUg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.864.0", + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/credential-provider-imds": "^4.0.7", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.864.0.tgz", + "integrity": "sha512-2BEymFeXURS+4jE9tP3vahPwbYRl0/1MVaFZcijj6pq+nf5EPGvkFillbdBRdc98ZI2NedZgSKu3gfZXgYdUhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.864.0", + "@aws-sdk/credential-provider-http": "3.864.0", + "@aws-sdk/credential-provider-ini": "3.864.0", + "@aws-sdk/credential-provider-process": "3.864.0", + "@aws-sdk/credential-provider-sso": "3.864.0", + "@aws-sdk/credential-provider-web-identity": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/credential-provider-imds": "^4.0.7", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.864.0.tgz", + "integrity": "sha512-Zxnn1hxhq7EOqXhVYgkF4rI9MnaO3+6bSg/tErnBQ3F8kDpA7CFU24G1YxwaJXp2X4aX3LwthefmSJHwcVP/2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.864.0.tgz", + "integrity": "sha512-UPyPNQbxDwHVGmgWdGg9/9yvzuedRQVF5jtMkmP565YX9pKZ8wYAcXhcYdNPWFvH0GYdB0crKOmvib+bmCuwkw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.864.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/token-providers": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.864.0.tgz", + "integrity": "sha512-nNcjPN4SYg8drLwqK0vgVeSvxeGQiD0FxOaT38mV2H8cu0C5NzpvA+14Xy+W6vT84dxgmJYKk71Cr5QL2Oz+rA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.862.0.tgz", + "integrity": "sha512-jDje8dCFeFHfuCAxMDXBs8hy8q9NCTlyK4ThyyfAj3U4Pixly2mmzY2u7b7AyGhWsjJNx8uhTjlYq5zkQPQCYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.862.0.tgz", + "integrity": "sha512-N/bXSJznNBR/i7Ofmf9+gM6dx/SPBK09ZWLKsW5iQjqKxAKn/2DozlnE54uiEs1saHZWoNDRg69Ww4XYYSlG1Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.862.0.tgz", + "integrity": "sha512-KVoo3IOzEkTq97YKM4uxZcYFSNnMkhW/qj22csofLegZi5fk90ztUnnaeKfaEJHfHp/tm1Y3uSoOXH45s++kKQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.864.0.tgz", + "integrity": "sha512-wrddonw4EyLNSNBrApzEhpSrDwJiNfjxDm5E+bn8n32BbAojXASH8W8jNpxz/jMgNkkJNxCfyqybGKzBX0OhbQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@smithy/core": "^3.8.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.864.0.tgz", + "integrity": "sha512-H1C+NjSmz2y8Tbgh7Yy89J20yD/hVyk15hNoZDbCYkXg0M358KS7KVIEYs8E2aPOCr1sK3HBE819D/yvdMgokA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.864.0", + "@aws-sdk/middleware-host-header": "3.862.0", + "@aws-sdk/middleware-logger": "3.862.0", + "@aws-sdk/middleware-recursion-detection": "3.862.0", + "@aws-sdk/middleware-user-agent": "3.864.0", + "@aws-sdk/region-config-resolver": "3.862.0", + "@aws-sdk/types": "3.862.0", + "@aws-sdk/util-endpoints": "3.862.0", + "@aws-sdk/util-user-agent-browser": "3.862.0", + "@aws-sdk/util-user-agent-node": "3.864.0", + "@smithy/config-resolver": "^4.1.5", + "@smithy/core": "^3.8.0", + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/hash-node": "^4.0.5", + "@smithy/invalid-dependency": "^4.0.5", + "@smithy/middleware-content-length": "^4.0.5", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-retry": "^4.1.19", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/protocol-http": "^5.1.3", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.26", + "@smithy/util-defaults-mode-node": "^4.0.26", + "@smithy/util-endpoints": "^3.0.7", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.862.0.tgz", + "integrity": "sha512-VisR+/HuVFICrBPY+q9novEiE4b3mvDofWqyvmxHcWM7HumTz9ZQSuEtnlB/92GVM3KDUrR9EmBHNRrfXYZkcQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.864.0.tgz", + "integrity": "sha512-gTc2QHOBo05SCwVA65dUtnJC6QERvFaPiuppGDSxoF7O5AQNK0UR/kMSenwLqN8b5E1oLYvQTv3C1idJLRX0cg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.864.0", + "@aws-sdk/nested-clients": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.862.0.tgz", + "integrity": "sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.862.0.tgz", + "integrity": "sha512-eCZuScdE9MWWkHGM2BJxm726MCmWk/dlHjOKvkM0sN1zxBellBMw5JohNss1Z8/TUmnW2gb9XHTOiHuGjOdksA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-endpoints": "^3.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.862.0.tgz", + "integrity": "sha512-BmPTlm0r9/10MMr5ND9E92r8KMZbq5ltYXYpVcUbAsnB1RJ8ASJuRoLne5F7mB3YMx0FJoOTuSq7LdQM3LgW3Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.862.0", + "@smithy/types": "^4.3.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.864.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.864.0.tgz", + "integrity": "sha512-d+FjUm2eJEpP+FRpVR3z6KzMdx1qwxEYDz8jzNKwxYLBBquaBaP/wfoMtMQKAcbrR7aT9FZVZF7zDgzNxUvQlQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.864.0", + "@aws-sdk/types": "3.862.0", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.862.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.862.0.tgz", + "integrity": "sha512-6Ed0kmC1NMbuFTEgNmamAUU1h5gShgxL1hBVLbEzUa3trX5aJBz1vU4bXaBTvOYUAnOHtiy1Ml4AMStd6hJnFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, "license": "MIT", "engines": { @@ -285,20 +985,22 @@ } }, "node_modules/@babel/core": { - "version": "7.26.0", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -315,6 +1017,8 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -322,14 +1026,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -337,12 +1043,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -353,32 +1061,48 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -388,7 +1112,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -396,7 +1122,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "devOptional": true, "license": "MIT", "engines": { @@ -404,7 +1132,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "devOptional": true, "license": "MIT", "engines": { @@ -412,7 +1142,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, "license": "MIT", "engines": { @@ -420,23 +1152,27 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.26.2", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.28.2" }, "bin": { "parser": "bin/babel-parser.js" @@ -447,6 +1183,8 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "license": "MIT", "dependencies": { @@ -458,6 +1196,8 @@ }, "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, "license": "MIT", "dependencies": { @@ -469,6 +1209,8 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "license": "MIT", "dependencies": { @@ -480,6 +1222,8 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "license": "MIT", "dependencies": { @@ -493,11 +1237,13 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -508,6 +1254,8 @@ }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "license": "MIT", "dependencies": { @@ -519,6 +1267,8 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "license": "MIT", "dependencies": { @@ -529,11 +1279,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -544,6 +1296,8 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "license": "MIT", "dependencies": { @@ -555,6 +1309,8 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -566,6 +1322,8 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "license": "MIT", "dependencies": { @@ -577,6 +1335,8 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "license": "MIT", "dependencies": { @@ -588,6 +1348,8 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -599,6 +1361,8 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "license": "MIT", "dependencies": { @@ -610,6 +1374,8 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "license": "MIT", "dependencies": { @@ -624,6 +1390,8 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "license": "MIT", "dependencies": { @@ -637,11 +1405,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -651,61 +1421,58 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", "license": "MIT", "optional": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.25.9", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.9", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.26.0", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "devOptional": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -713,11 +1480,25 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true, "license": "MIT" }, + "node_modules/@borewit/text-codec": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", + "integrity": "sha512-5L/uBxmjaCIX5h8Z+uu+kA9BQLkc/Wl06UGR5ajNRxu+/XjonB5i8JpgFMrPj3LXTCPA0pv8yxUvbUi+QthGGA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, "license": "MIT", "optional": true, @@ -727,6 +1508,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -738,6 +1521,8 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -747,6 +1532,8 @@ }, "node_modules/@css-inline/css-inline": { "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline/-/css-inline-0.14.1.tgz", + "integrity": "sha512-u4eku+hnPqqHIGq/ZUQcaP0TrCbYeLIYBaK7qClNRGZbnh8RC4gVxLEIo8Pceo1nOK9E5G4Lxzlw5KnXcvflfA==", "license": "MIT", "engines": { "node": ">= 10" @@ -764,8 +1551,122 @@ "@css-inline/css-inline-win32-x64-msvc": "0.14.1" } }, + "node_modules/@css-inline/css-inline-android-arm-eabi": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-android-arm-eabi/-/css-inline-android-arm-eabi-0.14.1.tgz", + "integrity": "sha512-LNUR8TY4ldfYi0mi/d4UNuHJ+3o8yLQH9r2Nt6i4qeg1i7xswfL3n/LDLRXvGjBYqeEYNlhlBQzbPwMX1qrU6A==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-android-arm64": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-android-arm64/-/css-inline-android-arm64-0.14.1.tgz", + "integrity": "sha512-tH5us0NYGoTNBHOUHVV7j9KfJ4DtFOeTLA3cM0XNoMtArNu2pmaaBMFJPqECzavfXkLc7x5Z22UPZYjoyHfvCA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-darwin-arm64": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-arm64/-/css-inline-darwin-arm64-0.14.1.tgz", + "integrity": "sha512-QE5W1YRIfRayFrtrcK/wqEaxNaqLULPI0gZB4ArbFRd3d56IycvgBasDTHPre5qL2cXCO3VyPx+80XyHOaVkag==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-darwin-x64": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-darwin-x64/-/css-inline-darwin-x64-0.14.1.tgz", + "integrity": "sha512-mAvv2sN8awNFsbvBzlFkZPbCNZ6GCWY5/YcIz7V5dPYw+bHHRbjnlkNTEZq5BsDxErVrMIGvz05PGgzuNvZvdQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-arm-gnueabihf": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm-gnueabihf/-/css-inline-linux-arm-gnueabihf-0.14.1.tgz", + "integrity": "sha512-AWC44xL0X7BgKvrWEqfSqkT2tJA5kwSGrAGT+m0gt11wnTYySvQ6YpX0fTY9i3ppYGu4bEdXFjyK2uY1DTQMHA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-arm64-gnu": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-gnu/-/css-inline-linux-arm64-gnu-0.14.1.tgz", + "integrity": "sha512-drj0ciiJgdP3xKXvNAt4W+FH4KKMs8vB5iKLJ3HcH07sNZj58Sx++2GxFRS1el3p+GFp9OoYA6dgouJsGEqt0Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@css-inline/css-inline-linux-arm64-musl": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-arm64-musl/-/css-inline-linux-arm64-musl-0.14.1.tgz", + "integrity": "sha512-FzknI+st8eA8YQSdEJU9ykcM0LZjjigBuynVF5/p7hiMm9OMP8aNhWbhZ8LKJpKbZrQsxSGS4g9Vnr6n6FiSdQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@css-inline/css-inline-linux-x64-gnu": { "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-gnu/-/css-inline-linux-x64-gnu-0.14.1.tgz", + "integrity": "sha512-yubbEye+daDY/4vXnyASAxH88s256pPati1DfVoZpU1V0+KP0BZ1dByZOU1ktExurbPH3gZOWisAnBE9xon0Uw==", "cpu": [ "x64" ], @@ -780,6 +1681,8 @@ }, "node_modules/@css-inline/css-inline-linux-x64-musl": { "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-linux-x64-musl/-/css-inline-linux-x64-musl-0.14.1.tgz", + "integrity": "sha512-6CRAZzoy1dMLPC/tns2rTt1ZwPo0nL/jYBEIAsYTCWhfAnNnpoLKVh5Nm+fSU3OOwTTqU87UkGrFJhObD/wobQ==", "cpu": [ "x64" ], @@ -792,8 +1695,26 @@ "node": ">= 10" } }, + "node_modules/@css-inline/css-inline-win32-x64-msvc": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@css-inline/css-inline-win32-x64-msvc/-/css-inline-win32-x64-msvc-0.14.1.tgz", + "integrity": "sha512-nzotGiaiuiQW78EzsiwsHZXbxEt6DiMUFcDJ6dhiliomXxnlaPyBfZb6/FMBgRJOf6sknDt/5695OttNmbMYzg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -811,6 +1732,8 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -819,6 +1742,8 @@ }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -841,6 +1766,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -854,33 +1781,17 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@eslint/js": { "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "license": "MIT", "engines": { @@ -888,9 +1799,9 @@ } }, "node_modules/@fastify/busboy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.1.1.tgz", - "integrity": "sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", "license": "MIT" }, "node_modules/@firebase/app-check-interop-types": { @@ -912,96 +1823,99 @@ "license": "Apache-2.0" }, "node_modules/@firebase/component": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.11.tgz", - "integrity": "sha512-eQbeCgPukLgsKD0Kw5wQgsMDX5LeoI1MIrziNDjmc6XDq5ZQnuUymANQgAb2wp1tSF9zDSXyxJmIUXaKgN58Ug==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", "license": "Apache-2.0", "dependencies": { - "@firebase/util": "1.10.2", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@firebase/database": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.10.tgz", - "integrity": "sha512-sWp2g92u7xT4BojGbTXZ80iaSIaL6GAL0pwvM0CO/hb0nHSnABAqsH7AhnWGsGvXuEvbPr7blZylPaR9J+GSuQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", + "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", "license": "Apache-2.0", "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", - "@firebase/component": "0.6.11", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.10.2", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "faye-websocket": "0.11.4", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@firebase/database-compat": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.0.1.tgz", - "integrity": "sha512-IsFivOjdE1GrjTeKoBU/ZMenESKDXidFDzZzHBPQ/4P20ptGdrl3oLlWrV/QJqJ9lND4IidE3z4Xr5JyfUW1vg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", + "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", "license": "Apache-2.0", "dependencies": { - "@firebase/component": "0.6.11", - "@firebase/database": "1.0.10", - "@firebase/database-types": "1.0.7", - "@firebase/logger": "0.4.4", - "@firebase/util": "1.10.2", + "@firebase/component": "0.7.0", + "@firebase/database": "1.1.0", + "@firebase/database-types": "1.0.16", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@firebase/database-types": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.7.tgz", - "integrity": "sha512-I7zcLfJXrM0WM+ksFmFdAMdlq/DFmpeMNa+/GNsLyFo5u/lX5zzkPzGe3srVWqaBQBY5KprylDGxOsP6ETfL0A==", + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", + "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", "license": "Apache-2.0", "dependencies": { "@firebase/app-types": "0.9.3", - "@firebase/util": "1.10.2" + "@firebase/util": "1.13.0" } }, "node_modules/@firebase/logger": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.4.tgz", - "integrity": "sha512-mH0PEh1zoXGnaR8gD1DeGeNZtWFKbnz9hDO91dIml3iou1gpOnLqXQ2dJfB71dj6dpmUjcQ6phY3ZZJbjErr9g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@firebase/util": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.10.2.tgz", - "integrity": "sha512-qnSHIoE9FK+HYnNhTI8q14evyqbc/vHRivfB4TgCIUOl4tosmKSQlp7ltymOlMP4xVIJTg5wrkfcZ60X4nUf7Q==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" }, "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } }, "node_modules/@golevelup/ts-jest": { - "version": "0.6.0", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@golevelup/ts-jest/-/ts-jest-0.6.2.tgz", + "integrity": "sha512-ks82vcWbnRuwHSKlrZTGCPPWXZEKlsn1VA2OiYfJ+tVMcMsI4y9ExWkf7FnmYypYJIRWKS9b9N5QVVrCOmaVlg==", "dev": true, "license": "MIT" }, "node_modules/@google-cloud/firestore": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.0.tgz", - "integrity": "sha512-88uZ+jLsp1aVMj7gh3EKYH1aulTAMFAp8sH/v5a9w8q8iqSG27RiWLoxSAFr/XocZ9hGiWH1kEnBw+zl3xAgNA==", + "version": "7.11.3", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.3.tgz", + "integrity": "sha512-qsM3/WHpawF07SRVvEJJVRwhYzM7o9qtuksyuqnrMig6fxIrwWnsezECWsG/D5TyYru51Fv5c/RTqNDQ2yU+4w==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -1050,15 +1964,15 @@ } }, "node_modules/@google-cloud/storage": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.14.0.tgz", - "integrity": "sha512-H41bPL2cMfSi4EEnFzKvg7XSb7T67ocSXrmF7MPjfgFB0L6CKGzfIYJheAZi1iqXjz6XaCT1OBf6HCG5vDBTOQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.17.0.tgz", + "integrity": "sha512-5m9GoZqKh52a1UqkxDBu/+WVFDALNtHg5up5gNmNbXQWBcV813tzJKsyDtKjOPrlR1em1TxtD7NSPCrObH7koQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@google-cloud/paginator": "^5.0.0", "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "^4.0.0", + "@google-cloud/promisify": "<4.1.0", "abort-controller": "^3.0.0", "async-retry": "^1.3.3", "duplexify": "^4.1.3", @@ -1076,19 +1990,38 @@ "node": ">=14" } }, - "node_modules/@google-cloud/storage/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "node_modules/@google-cloud/storage/node_modules/fast-xml-parser": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], "license": "MIT", "optional": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "strnum": "^1.1.1" }, - "engines": { - "node": ">=10.0.0" + "bin": { + "fxparser": "src/cli/cli.js" } }, + "node_modules/@google-cloud/storage/node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true + }, "node_modules/@google-cloud/storage/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -1100,9 +2033,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.12.5", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.5.tgz", - "integrity": "sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", + "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -1114,9 +2047,9 @@ } }, "node_modules/@grpc/proto-loader": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", - "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -1138,6 +2071,9 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1149,28 +2085,10 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1183,17 +2101,16 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -1208,7 +2125,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", "license": "MIT", "engines": { "node": ">=12" @@ -1219,6 +2138,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "license": "MIT", "engines": { "node": ">=12" @@ -1229,10 +2150,14 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -1248,6 +2173,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -1261,6 +2188,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -1276,6 +2205,8 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -1291,14 +2222,28 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -1311,6 +2256,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -1323,6 +2270,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -1334,6 +2283,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -1348,6 +2299,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -1359,6 +2312,8 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -1367,6 +2322,8 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -1375,6 +2332,8 @@ }, "node_modules/@jest/console": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, "license": "MIT", "dependencies": { @@ -1391,6 +2350,8 @@ }, "node_modules/@jest/core": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, "license": "MIT", "dependencies": { @@ -1437,6 +2398,8 @@ }, "node_modules/@jest/environment": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, "license": "MIT", "dependencies": { @@ -1451,6 +2414,8 @@ }, "node_modules/@jest/expect": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1463,6 +2428,8 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, "license": "MIT", "dependencies": { @@ -1474,6 +2441,8 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1490,6 +2459,8 @@ }, "node_modules/@jest/globals": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1504,6 +2475,8 @@ }, "node_modules/@jest/reporters": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, "license": "MIT", "dependencies": { @@ -1544,17 +2517,11 @@ } } }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/@jest/reporters/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -1572,19 +2539,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@jest/schemas": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "license": "MIT", "dependencies": { @@ -1596,6 +2554,8 @@ }, "node_modules/@jest/source-map": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, "license": "MIT", "dependencies": { @@ -1609,6 +2569,8 @@ }, "node_modules/@jest/test-result": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, "license": "MIT", "dependencies": { @@ -1623,6 +2585,8 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, "license": "MIT", "dependencies": { @@ -1637,6 +2601,8 @@ }, "node_modules/@jest/transform": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, "license": "MIT", "dependencies": { @@ -1662,6 +2628,8 @@ }, "node_modules/@jest/types": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "license": "MIT", "dependencies": { @@ -1677,36 +2645,30 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "devOptional": true, "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { @@ -1715,12 +2677,16 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "devOptional": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1740,51 +2706,36 @@ } }, "node_modules/@keyv/redis": { - "version": "4.0.2", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@keyv/redis/-/redis-4.6.0.tgz", + "integrity": "sha512-FP3FP42RiQ3j0UC6f4Maf7ISTLAIivm37/SdfG5xvhqceMMq3kabtC6T4a2h5byMnh4S8PjP51DY/9CpyrcfsQ==", "license": "MIT", "dependencies": { - "keyv": "*", - "redis": "^4.7.0" + "@redis/client": "^1.6.0", + "cluster-key-slot": "^1.1.2", + "hookified": "^1.10.0" }, "engines": { "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.3.4" } }, "node_modules/@keyv/serialize": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3" - } - }, - "node_modules/@keyv/serialize/node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.0.tgz", + "integrity": "sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==", + "license": "MIT" }, "node_modules/@ljharb/through": { - "version": "2.3.13", + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz", + "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bind": "^1.0.8" }, "engines": { "node": ">= 0.4" @@ -1792,6 +2743,8 @@ }, "node_modules/@lukeed/csprng": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", "license": "MIT", "engines": { "node": ">=8" @@ -1799,6 +2752,8 @@ }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "license": "BSD-3-Clause", "dependencies": { "detect-libc": "^2.0.0", @@ -1815,49 +2770,16 @@ "node-pre-gyp": "bin/node-pre-gyp" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { - "version": "5.0.0", - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@microsoft/tsdoc": { - "version": "0.15.0", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", "license": "MIT" }, "node_modules/@nestjs-modules/mailer": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nestjs-modules/mailer/-/mailer-2.0.2.tgz", + "integrity": "sha512-+z4mADQasg0H1ZaGu4zZTuKv2pu+XdErqx99PLFPzCDNTN/q9U59WPgkxVaHnsvKHNopLj5Xap7G4ZpptduoYw==", "license": "MIT", "dependencies": { "@css-inline/css-inline": "0.14.1", @@ -1889,44 +2811,10 @@ "pug": ">=3.0.1" } }, - "node_modules/@nestjs-modules/mailer/node_modules/glob": { - "version": "10.3.12", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@nestjs-modules/mailer/node_modules/jackspeak": { - "version": "2.3.6", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/@nestjs/axios": { - "version": "3.1.2", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.1.3.tgz", + "integrity": "sha512-RZ/63c1tMxGLqyG3iOCVt7A72oy4x1eM6QEhd4KzCYpaVWW0igq0WSREeRoEZhIxRcZfDfIIkvsOMiM7yfVGZQ==", "license": "MIT", "peerDependencies": { "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", @@ -1935,7 +2823,9 @@ } }, "node_modules/@nestjs/cli": { - "version": "10.4.7", + "version": "10.4.9", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.9.tgz", + "integrity": "sha512-s8qYd97bggqeK7Op3iD49X2MpFtW4LVNLAwXFkfbRxKME6IYT7X0muNTJ2+QfI8hpbNx9isWkrLWIp+g5FOhiA==", "dev": true, "license": "MIT", "dependencies": { @@ -1948,15 +2838,15 @@ "cli-table3": "0.6.5", "commander": "4.1.1", "fork-ts-checker-webpack-plugin": "9.0.2", - "glob": "10.4.2", + "glob": "10.4.5", "inquirer": "8.2.6", "node-emoji": "1.11.0", "ora": "5.4.1", "tree-kill": "1.2.2", "tsconfig-paths": "4.2.0", - "tsconfig-paths-webpack-plugin": "4.1.0", - "typescript": "5.6.3", - "webpack": "5.96.1", + "tsconfig-paths-webpack-plugin": "4.2.0", + "typescript": "5.7.2", + "webpack": "5.97.1", "webpack-node-externals": "3.0.0" }, "bin": { @@ -1978,12 +2868,139 @@ } } }, - "node_modules/@nestjs/common": { - "version": "10.4.7", + "node_modules/@nestjs/cli/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, "license": "MIT", "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@nestjs/cli/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@nestjs/cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@nestjs/cli/node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@nestjs/cli/node_modules/webpack": { + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/@nestjs/common": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.20.tgz", + "integrity": "sha512-hxJxZF7jcKGuUzM9EYbuES80Z/36piJbiqmPy86mk8qOn5gglFebBTvcx7PWVbRNSb4gngASYnefBj/Y2HAzpQ==", + "license": "MIT", + "dependencies": { + "file-type": "20.4.1", "iterare": "1.2.1", - "tslib": "2.7.0", + "tslib": "2.8.1", "uid": "2.0.2" }, "funding": { @@ -2007,6 +3024,8 @@ }, "node_modules/@nestjs/config": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.3.0.tgz", + "integrity": "sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==", "license": "MIT", "dependencies": { "dotenv": "16.4.5", @@ -2019,7 +3038,9 @@ } }, "node_modules/@nestjs/core": { - "version": "10.4.7", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.20.tgz", + "integrity": "sha512-kRdtyKA3+Tu70N3RQ4JgmO1E3LzAMs/eppj7SfjabC7TgqNWoS4RLhWl4BqmsNVmjj6D5jgfPVtHtgYkU3AfpQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2027,7 +3048,7 @@ "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", "path-to-regexp": "3.3.0", - "tslib": "2.7.0", + "tslib": "2.8.1", "uid": "2.0.2" }, "funding": { @@ -2056,6 +3077,8 @@ }, "node_modules/@nestjs/event-emitter": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@nestjs/event-emitter/-/event-emitter-2.1.1.tgz", + "integrity": "sha512-6L6fBOZTyfFlL7Ih/JDdqlCzZeCW0RjCX28wnzGyg/ncv5F/EOeT1dfopQr1loBRQ3LTgu8OWM7n4zLN4xigsg==", "license": "MIT", "dependencies": { "eventemitter2": "6.4.9" @@ -2067,6 +3090,8 @@ }, "node_modules/@nestjs/jwt": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.2.0.tgz", + "integrity": "sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==", "license": "MIT", "dependencies": { "@types/jsonwebtoken": "9.0.5", @@ -2076,35 +3101,10 @@ "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/@nestjs/jwt/node_modules/@types/jsonwebtoken": { - "version": "9.0.5", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@nestjs/jwt/node_modules/jsonwebtoken": { - "version": "9.0.2", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, "node_modules/@nestjs/mapped-types": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.6.tgz", + "integrity": "sha512-84ze+CPfp1OWdpRi1/lOu59hOhTz38eVzJvRKrg9ykRFwDz+XleKfMsG0gUqNZYFa6v53XYzeD+xItt8uDW7NQ==", "license": "MIT", "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", @@ -2122,11 +3122,13 @@ } }, "node_modules/@nestjs/microservices": { - "version": "10.4.7", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.4.20.tgz", + "integrity": "sha512-zu/o84Z0uTUClNnGIGfIjcrO3z6T60h/pZPSJK50o4mehbEvJ76fijj6R/WTW0VP+1N16qOv/NsiYLKJA5Cc3w==", "license": "MIT", "dependencies": { "iterare": "1.2.1", - "tslib": "2.7.0" + "tslib": "2.8.1" }, "funding": { "type": "opencollective", @@ -2179,6 +3181,8 @@ }, "node_modules/@nestjs/passport": { "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-10.0.3.tgz", + "integrity": "sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==", "license": "MIT", "peerDependencies": { "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", @@ -2186,14 +3190,16 @@ } }, "node_modules/@nestjs/platform-express": { - "version": "10.4.8", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.4.20.tgz", + "integrity": "sha512-rh97mX3rimyf4xLMLHuTOBKe6UD8LOJ14VlJ1F/PTd6C6ZK9Ak6EHuJvdaGcSFQhd3ZMBh3I6CuujKGW9pNdIg==", "license": "MIT", "dependencies": { "body-parser": "1.20.3", "cors": "2.8.5", - "express": "4.21.1", - "multer": "1.4.4-lts.1", - "tslib": "2.7.0" + "express": "4.21.2", + "multer": "2.0.2", + "tslib": "2.8.1" }, "funding": { "type": "opencollective", @@ -2218,21 +3224,10 @@ "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0" } }, - "node_modules/@nestjs/schedule/node_modules/uuid": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", - "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, "node_modules/@nestjs/schematics": { "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", + "integrity": "sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==", "dev": true, "license": "MIT", "dependencies": { @@ -2248,11 +3243,15 @@ }, "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", "dev": true, "license": "MIT" }, "node_modules/@nestjs/swagger": { - "version": "8.0.5", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-8.1.1.tgz", + "integrity": "sha512-5Mda7H1DKnhKtlsb0C7PYshcvILv8UFyUotHzxmWh0G65Z21R3LZH/J8wmpnlzL4bmXIfr42YwbEwRxgzpJ5sQ==", "license": "MIT", "dependencies": { "@microsoft/tsdoc": "^0.15.0", @@ -2283,7 +3282,9 @@ } }, "node_modules/@nestjs/terminus": { - "version": "10.2.3", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@nestjs/terminus/-/terminus-10.3.0.tgz", + "integrity": "sha512-vOJGCwt1OgrFuuxWQwPoaHqy9m9CfIk2qMUX2mosZLK5dFVJSEjHXrklkh3/Fw9PiUnfzvYFfiAdJRzUaxx+5Q==", "license": "MIT", "dependencies": { "boxen": "5.1.2", @@ -2351,11 +3352,13 @@ } }, "node_modules/@nestjs/testing": { - "version": "10.4.7", + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.20.tgz", + "integrity": "sha512-nMkRDukDKskdPruM6EsgMq7yJua+CPZM6I6FrLP8yXw8BiVSPv9Nm0CtcGGwt3kgZF9hfxKjGqLjsvVBsv6Vfw==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "2.7.0" + "tslib": "2.8.1" }, "funding": { "type": "opencollective", @@ -2377,16 +3380,20 @@ } }, "node_modules/@nestjs/throttler": { - "version": "6.2.1", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@nestjs/throttler/-/throttler-6.4.0.tgz", + "integrity": "sha512-osL67i0PUuwU5nqSuJjtUJZMkxAnYB4VldgYUMGzvYRJDCqGRFMWbsbzm/CkUtPLRL30I8T74Xgt/OQxnYokiA==", "license": "MIT", "peerDependencies": { - "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", + "@nestjs/core": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", "reflect-metadata": "^0.1.13 || ^0.2.0" } }, "node_modules/@nestjs/typeorm": { "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-10.0.2.tgz", + "integrity": "sha512-H738bJyydK4SQkRCTeh1aFBxoO1E9xdL/HaLGThwrqN95os5mEyAtK7BLADOS+vldP4jDZ2VQPLj4epWwRqCeQ==", "license": "MIT", "dependencies": { "uuid": "9.0.1" @@ -2399,8 +3406,36 @@ "typeorm": "^0.3.0" } }, + "node_modules/@nestjs/typeorm/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { @@ -2413,6 +3448,8 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -2421,6 +3458,8 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { @@ -2433,6 +3472,8 @@ }, "node_modules/@nuxtjs/opencollective": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", "license": "MIT", "dependencies": { "chalk": "^4.1.0", @@ -2449,6 +3490,8 @@ }, "node_modules/@one-ini/wasm": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", "license": "MIT", "optional": true }, @@ -2462,8 +3505,20 @@ "node": ">=8.0.0" } }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "license": "MIT", "optional": true, "engines": { @@ -2544,15 +3599,10 @@ "license": "BSD-3-Clause", "optional": true }, - "node_modules/@redis/bloom": { - "version": "1.2.0", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, "node_modules/@redis/client": { - "version": "1.6.0", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.1.tgz", + "integrity": "sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==", "license": "MIT", "dependencies": { "cluster-key-slot": "1.1.2", @@ -2563,45 +3613,17 @@ "node": ">=14" } }, - "node_modules/@redis/client/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@redis/graph": { - "version": "1.1.1", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/json": { - "version": "1.0.7", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/search": { - "version": "1.2.0", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/time-series": { - "version": "1.1.0", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, "node_modules/@scarf/scarf": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", "hasInstallScript": true, "license": "Apache-2.0" }, "node_modules/@selderee/plugin-htmlparser2": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", + "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", "license": "MIT", "optional": true, "dependencies": { @@ -2614,11 +3636,15 @@ }, "node_modules/@sinclair/typebox": { "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, "license": "MIT" }, "node_modules/@sinonjs/commons": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -2627,14 +3653,708 @@ }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@smithy/abort-controller": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.5.tgz", + "integrity": "sha512-jcrqdTQurIrBbUm4W2YdLVMQDoL0sA9DTxYd2s+R/y+2U9NLOP7Xf/YqfSg1FZhlZIYEnvk2mwbyvIfdLEPo8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.5.tgz", + "integrity": "sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.8.0.tgz", + "integrity": "sha512-EYqsIYJmkR1VhVE9pccnk353xhs+lB6btdutJEtsp7R055haMJp2yE16eSxw8fv+G0WUY6vqxyYOP8kOqawxYQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.9", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-stream": "^4.2.4", + "@smithy/util-utf8": "^4.0.0", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core/node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@smithy/core/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.7.tgz", + "integrity": "sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/property-provider": "^4.0.5", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.1.tgz", + "integrity": "sha512-61WjM0PWmZJR+SnmzaKI7t7G0UkkNFboDpzIdzSoy7TByUzlxo18Qlh9s71qug4AY4hlH/CwXdubMtkcNEb/sQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.3", + "@smithy/querystring-builder": "^4.0.5", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.5.tgz", + "integrity": "sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.5.tgz", + "integrity": "sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.5.tgz", + "integrity": "sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.1.18", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.18.tgz", + "integrity": "sha512-ZhvqcVRPZxnZlokcPaTwb+r+h4yOIOCJmx0v2d1bpVlmP465g3qpVSf7wxcq5zZdu4jb0H4yIMxuPwDJSQc3MQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.8.0", + "@smithy/middleware-serde": "^4.0.9", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "@smithy/url-parser": "^4.0.5", + "@smithy/util-middleware": "^4.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.1.19", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.19.tgz", + "integrity": "sha512-X58zx/NVECjeuUB6A8HBu4bhx72EoUz+T5jTMIyeNKx2lf+Gs9TmWPNNkH+5QF0COjpInP/xSpJGJ7xEnAklQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/protocol-http": "^5.1.3", + "@smithy/service-error-classification": "^4.0.7", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-retry": "^4.0.7", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@smithy/middleware-retry/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.9.tgz", + "integrity": "sha512-uAFFR4dpeoJPGz8x9mhxp+RPjo5wW0QEEIPPPbLXiRRWeCATf/Km3gKIVR5vaP8bN1kgsPhcEeh+IZvUlBv6Xg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.5.tgz", + "integrity": "sha512-/yoHDXZPh3ocRVyeWQFvC44u8seu3eYzZRveCMfgMOBcNKnAmOvjbL9+Cp5XKSIi9iYA9PECUuW2teDAk8T+OQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.4.tgz", + "integrity": "sha512-+UDQV/k42jLEPPHSn39l0Bmc4sB1xtdI9Gd47fzo/0PbXzJ7ylgaOByVjF5EeQIumkepnrJyfx86dPa9p47Y+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.5", + "@smithy/shared-ini-file-loader": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.1.tgz", + "integrity": "sha512-RHnlHqFpoVdjSPPiYy/t40Zovf3BBHc2oemgD7VsVTFFZrU5erFFe0n52OANZZ/5sbshgD93sOh5r6I35Xmpaw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/querystring-builder": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.5.tgz", + "integrity": "sha512-R/bswf59T/n9ZgfgUICAZoWYKBHcsVDurAGX88zsiUtOTA/xUAPyiT+qkNCPwFn43pZqN84M4MiUsbSGQmgFIQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.3.tgz", + "integrity": "sha512-fCJd2ZR7D22XhDY0l+92pUag/7je2BztPRQ01gU5bMChcyI0rlly7QFibnYHzcxDvccMjlpM/Q1ev8ceRIb48w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.5.tgz", + "integrity": "sha512-NJeSCU57piZ56c+/wY+AbAw6rxCCAOZLCIniRE7wqvndqxcKKDOXzwWjrY7wGKEISfhL9gBbAaWWgHsUGedk+A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.5.tgz", + "integrity": "sha512-6SV7md2CzNG/WUeTjVe6Dj8noH32r4MnUeFKZrnVYsQxpGSIcphAanQMayi8jJLZAWm6pdM9ZXvKCpWOsIGg0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.7.tgz", + "integrity": "sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.5.tgz", + "integrity": "sha512-YVVwehRDuehgoXdEL4r1tAAzdaDgaC9EQvhK0lEbfnbrd0bd5+CTQumbdPryX3J2shT7ZqQE+jPW4lmNBAB8JQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.3.tgz", + "integrity": "sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.5", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.10.tgz", + "integrity": "sha512-iW6HjXqN0oPtRS0NK/zzZ4zZeGESIFcxj2FkWed3mcK8jdSdHzvnCKXSjvewESKAgGKAbJRA+OsaqKhkdYRbQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.8.0", + "@smithy/middleware-endpoint": "^4.1.18", + "@smithy/middleware-stack": "^4.0.5", + "@smithy/protocol-http": "^5.1.3", + "@smithy/types": "^4.3.2", + "@smithy/util-stream": "^4.2.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.2.tgz", + "integrity": "sha512-QO4zghLxiQ5W9UZmX2Lo0nta2PuE1sSrXUYDoaB6HMR762C0P7v/HEPHf6ZdglTVssJG1bsrSBxdc3quvDSihw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.5.tgz", + "integrity": "sha512-j+733Um7f1/DXjYhCbvNXABV53NyCRRA54C7bNEIxNPs0YjfRxeMKjjgm2jvTYrciZyCjsicHwQ6Q0ylo+NAUw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.26.tgz", + "integrity": "sha512-xgl75aHIS/3rrGp7iTxQAOELYeyiwBu+eEgAk4xfKwJJ0L8VUjhO2shsDpeil54BOFsqmk5xfdesiewbUY5tKQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.5", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.26.tgz", + "integrity": "sha512-z81yyIkGiLLYVDetKTUeCZQ8x20EEzvQjrqJtb/mXnevLq2+w3XCEWTJ2pMp401b6BkEkHVfXb/cROBpVauLMQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.5", + "@smithy/credential-provider-imds": "^4.0.7", + "@smithy/node-config-provider": "^4.1.4", + "@smithy/property-provider": "^4.0.5", + "@smithy/smithy-client": "^4.4.10", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.7.tgz", + "integrity": "sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.4", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.5.tgz", + "integrity": "sha512-N40PfqsZHRSsByGB81HhSo+uvMxEHT+9e255S53pfBw/wI6WKDI7Jw9oyu5tJTLwZzV5DsMha3ji8jk9dsHmQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.7.tgz", + "integrity": "sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.7", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.4.tgz", + "integrity": "sha512-vSKnvNZX2BXzl0U2RgCLOwWaAP9x/ddd/XobPK02pCbzRm5s55M53uwb1rl/Ts7RXZvdJZerPkA+en2FDghLuQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.1.1", + "@smithy/node-http-handler": "^4.1.1", + "@smithy/types": "^4.3.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.7.tgz", + "integrity": "sha512-mYqtQXPmrwvUljaHyGxYUIIRI3qjBTEb/f5QFi3A6VlxhpmZd5mWXn9W+qUkf2pVE1Hv3SqxefiZOPGdxmO64A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.5", + "@smithy/types": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@sqltools/formatter": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "license": "MIT" + }, + "node_modules/@tokenizer/inflate": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", + "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fflate": "^0.8.2", + "token-types": "^6.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "license": "MIT" }, "node_modules/@tootallnate/once": { @@ -2649,26 +4369,36 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "devOptional": true, "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "devOptional": true, "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", "dependencies": { @@ -2680,7 +4410,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.8", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "license": "MIT", "dependencies": { @@ -2689,6 +4421,8 @@ }, "node_modules/@types/babel__template": { "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "license": "MIT", "dependencies": { @@ -2697,15 +4431,19 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.6", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/bcrypt": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz", + "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2713,7 +4451,9 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.5", + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "license": "MIT", "dependencies": { "@types/connect": "*", @@ -2729,6 +4469,8 @@ }, "node_modules/@types/cls-hooked": { "version": "4.3.9", + "resolved": "https://registry.npmjs.org/@types/cls-hooked/-/cls-hooked-4.3.9.tgz", + "integrity": "sha512-CMtHMz6Q/dkfcHarq9nioXH8BDPP+v5xvd+N90lBQ2bdmu06UvnLDqxTKoOJzz4SzIwb/x9i4UXGAAcnUDuIvg==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -2736,6 +4478,8 @@ }, "node_modules/@types/connect": { "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -2743,16 +4487,22 @@ }, "node_modules/@types/cookiejar": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", + "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", "dev": true, "license": "MIT" }, "node_modules/@types/ejs": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz", + "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==", "license": "MIT", "optional": true }, "node_modules/@types/eslint": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "license": "MIT", "dependencies": { @@ -2762,6 +4512,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", "dependencies": { @@ -2770,23 +4522,28 @@ } }, "node_modules/@types/estree": { - "version": "1.0.6", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/express": { - "version": "5.0.0", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", + "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.1", + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.7.tgz", + "integrity": "sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2798,11 +4555,15 @@ }, "node_modules/@types/google-libphonenumber": { "version": "7.4.30", + "resolved": "https://registry.npmjs.org/@types/google-libphonenumber/-/google-libphonenumber-7.4.30.tgz", + "integrity": "sha512-Td1X1ayRxePEm6/jPHUBs2tT6TzW1lrVB6ZX7ViPGellyzO/0xMNi+wx5nH6jEitjznq276VGIqjK5qAju0XVw==", "dev": true, "license": "MIT" }, "node_modules/@types/graceful-fs": { "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2810,20 +4571,28 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.4", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", "license": "MIT" }, "node_modules/@types/isomorphic-fetch": { "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@types/isomorphic-fetch/-/isomorphic-fetch-0.0.35.tgz", + "integrity": "sha512-DaZNUvLDCAnCTjgwxgiL1eQdxIKEpNLOlTNtAgnZc50bG2copGhRrFN9/PxPBuJe+tZVLCbQ7ls0xveXVRPkvw==", "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "license": "MIT", "dependencies": { @@ -2832,6 +4601,8 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2840,6 +4611,8 @@ }, "node_modules/@types/jest": { "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2849,11 +4622,15 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.0", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -2861,6 +4638,8 @@ }, "node_modules/@types/jssha": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/jssha/-/jssha-2.0.0.tgz", + "integrity": "sha512-oBnY3csYnXfqZXDRBJwP1nDDJCW/+VMJ88UHT4DCy0deSXpJIQvMCwYlnmdW4M+u7PiSfQc44LmiFcUbJ8hLEw==", "license": "MIT" }, "node_modules/@types/jwk-to-pem": { @@ -2871,7 +4650,9 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.13", + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", "dev": true, "license": "MIT" }, @@ -2890,15 +4671,21 @@ }, "node_modules/@types/methods": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", + "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", "dev": true, "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "license": "MIT" }, "node_modules/@types/mjml": { "version": "4.7.4", + "resolved": "https://registry.npmjs.org/@types/mjml/-/mjml-4.7.4.tgz", + "integrity": "sha512-vyi1vzWgMzFMwZY7GSZYX0GU0dmtC8vLHwpgk+NWmwbwRSrlieVyJ9sn5elodwUfklJM7yGl0zQeet1brKTWaQ==", "license": "MIT", "optional": true, "dependencies": { @@ -2906,12 +4693,16 @@ } }, "node_modules/@types/mjml-core": { - "version": "4.15.1", + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/@types/mjml-core/-/mjml-core-4.15.2.tgz", + "integrity": "sha512-Q7SxFXgoX979HP57DEVsRI50TV8x1V4lfCA4Up9AvfINDM5oD/X9ARgfoyX1qS987JCnDLv85JjkqAjt3hZSiQ==", "license": "MIT", "optional": true }, "node_modules/@types/multer": { - "version": "1.4.12", + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.13.tgz", + "integrity": "sha512-bhhdtPw7JqCiEfC9Jimx5LqX9BDIPJEh2q/fQ4bqbBPtyEZYr3cvF22NwG0DmPZNYA0CAf2CnqDB4KIGGpJcaw==", "dev": true, "license": "MIT", "dependencies": { @@ -2919,22 +4710,29 @@ } }, "node_modules/@types/node": { - "version": "20.17.6", + "version": "20.19.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.11.tgz", + "integrity": "sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow==", "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/nodemailer": { - "version": "6.4.16", + "version": "6.4.18", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.18.tgz", + "integrity": "sha512-K+OGGXYCxIGkZ59EzoEFkKDkxUT2yQ4f5zgLb+bOJ+pPTZd8M2i/DGMVYrRigUwFnL76URW5VMqMCkgHgjLX0w==", "dev": true, "license": "MIT", "dependencies": { + "@aws-sdk/client-ses": "^3.731.1", "@types/node": "*" } }, "node_modules/@types/opossum": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@types/opossum/-/opossum-4.1.1.tgz", + "integrity": "sha512-9TMnd8AWRVtnZMqBbbzceQoJdafErgUViogFaQ3eetsbeLtiFFZ695mepNaLtlfJi4uRP3GmHfe3CJ2DZKaxYA==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -2942,6 +4740,8 @@ }, "node_modules/@types/passport": { "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.17.tgz", + "integrity": "sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==", "dev": true, "license": "MIT", "dependencies": { @@ -2950,6 +4750,8 @@ }, "node_modules/@types/passport-jwt": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2959,6 +4761,8 @@ }, "node_modules/@types/passport-strategy": { "version": "0.2.38", + "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.38.tgz", + "integrity": "sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==", "dev": true, "license": "MIT", "dependencies": { @@ -2968,6 +4772,8 @@ }, "node_modules/@types/pug": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", "license": "MIT", "optional": true }, @@ -2982,36 +4788,42 @@ } }, "node_modules/@types/qs": { - "version": "6.9.17", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "license": "MIT" }, "node_modules/@types/request": { - "version": "2.48.12", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", - "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "version": "2.48.13", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz", + "integrity": "sha512-FGJ6udDNUCjd19pp0Q3iTiDkwhYup7J8hpMW9c4k53NrccQFFWKRho6hvtPPEhnXWKvukfwAlB6DbDz4yhH5Gg==", "license": "MIT", "optional": true, "dependencies": { "@types/caseless": "*", "@types/node": "*", "@types/tough-cookie": "*", - "form-data": "^2.5.0" + "form-data": "^2.5.5" } }, "node_modules/@types/request/node_modules/form-data": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.2.tgz", - "integrity": "sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", "license": "MIT", "optional": true, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" }, "engines": { @@ -3019,12 +4831,16 @@ } }, "node_modules/@types/semver": { - "version": "7.5.8", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", "dev": true, "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "license": "MIT", "dependencies": { "@types/mime": "^1", @@ -3032,7 +4848,9 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.7", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", "license": "MIT", "dependencies": { "@types/http-errors": "*", @@ -3042,6 +4860,8 @@ }, "node_modules/@types/sshpk": { "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@types/sshpk/-/sshpk-1.10.3.tgz", + "integrity": "sha512-cru1waDhHZnZuB18E6Dgf2UXf8U93mdOEDcKYe5jTri+fpucidSs7DLmGICpLxN+95aYkwtgeyny9fBFzQVdmA==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -3049,11 +4869,15 @@ }, "node_modules/@types/stack-utils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true, "license": "MIT" }, "node_modules/@types/superagent": { "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", + "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3064,7 +4888,9 @@ } }, "node_modules/@types/supertest": { - "version": "6.0.2", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", + "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", "dev": true, "license": "MIT", "dependencies": { @@ -3081,15 +4907,21 @@ }, "node_modules/@types/uuid": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", "dev": true, "license": "MIT" }, "node_modules/@types/validator": { - "version": "13.12.2", + "version": "13.15.2", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.2.tgz", + "integrity": "sha512-y7pa/oEJJ4iGYBxOpfAKn5b9+xuihvzDVnC/OSvlVnGxVg0pOqmjiMafiJ1KVNQEaPZf9HsEp5icEwGg8uIe5Q==", "license": "MIT" }, "node_modules/@types/yargs": { "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, "license": "MIT", "dependencies": { @@ -3098,11 +4930,15 @@ }, "node_modules/@types/yargs-parser": { "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "license": "MIT", "dependencies": { @@ -3136,6 +4972,8 @@ }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3162,6 +5000,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "dependencies": { @@ -3178,6 +5018,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "license": "MIT", "dependencies": { @@ -3204,6 +5046,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { @@ -3216,6 +5060,8 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3242,6 +5088,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3265,28 +5113,10 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { @@ -3302,12 +5132,16 @@ } }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, "license": "ISC" }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3317,21 +5151,29 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", "dependencies": { @@ -3342,11 +5184,15 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -3358,6 +5204,8 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", "dependencies": { @@ -3366,6 +5214,8 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3374,11 +5224,15 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3394,6 +5248,8 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", "dependencies": { @@ -3406,6 +5262,8 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -3417,6 +5275,8 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3430,6 +5290,8 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", "dependencies": { @@ -3439,21 +5301,23 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/abbrev": { - "version": "2.0.0", - "license": "ISC", - "optional": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" }, "node_modules/abort-controller": { "version": "3.0.0", @@ -3470,10 +5334,14 @@ }, "node_modules/accept-language-parser": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/accept-language-parser/-/accept-language-parser-1.5.0.tgz", + "integrity": "sha512-QhyTbMLYo0BBGg1aWbeMG4ekWtds/31BrEU+DONOg/7ax23vxpL03Pb7/zBmha2v7vdD3AyzZVWBVGEZxKOXWw==", "license": "MIT" }, "node_modules/accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -3484,7 +5352,9 @@ } }, "node_modules/acorn": { - "version": "8.14.0", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, "license": "MIT", "bin": { @@ -3494,8 +5364,24 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -3504,6 +5390,8 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3515,6 +5403,8 @@ }, "node_modules/agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "license": "MIT", "dependencies": { "debug": "4" @@ -3525,6 +5415,8 @@ }, "node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "license": "MIT", "dependencies": { @@ -3540,6 +5432,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", "dependencies": { @@ -3554,8 +5448,23 @@ } } }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, "node_modules/alce": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/alce/-/alce-1.2.0.tgz", + "integrity": "sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==", "license": "MIT", "optional": true, "dependencies": { @@ -3568,6 +5477,8 @@ }, "node_modules/alce/node_modules/esprima": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz", + "integrity": "sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==", "optional": true, "bin": { "esparse": "bin/esparse.js", @@ -3579,6 +5490,8 @@ }, "node_modules/alce/node_modules/estraverse": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", "optional": true, "engines": { "node": ">=0.10.0" @@ -3586,6 +5499,8 @@ }, "node_modules/amqp-connection-manager": { "version": "4.1.14", + "resolved": "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-4.1.14.tgz", + "integrity": "sha512-1km47dIvEr0HhMUazqovSvNwIlSvDX2APdUpULaINtHpiki1O+cLRaTeXb/jav4OLtH+k6GBXx5gsKOT9kcGKQ==", "license": "MIT", "dependencies": { "promise-breaker": "^6.0.0" @@ -3599,38 +5514,22 @@ } }, "node_modules/amqplib": { - "version": "0.10.4", + "version": "0.10.8", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.10.8.tgz", + "integrity": "sha512-Tfn1O9sFgAP8DqeMEpt2IacsVTENBpblB3SqLdn0jK2AeX8iyCvbptBc8lyATT9bQ31MsjVwUSQ1g8f4jHOUfw==", "license": "MIT", "dependencies": { - "@acuminous/bitsyntax": "^0.1.2", "buffer-more-ints": "~1.0.0", - "readable-stream": "1.x >=1.1.9", "url-parse": "~1.5.10" }, "engines": { "node": ">=10" } }, - "node_modules/amqplib/node_modules/isarray": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/amqplib/node_modules/readable-stream": { - "version": "1.1.14", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/amqplib/node_modules/string_decoder": { - "version": "0.10.31", - "license": "MIT" - }, "node_modules/ansi-align": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "license": "ISC", "dependencies": { "string-width": "^4.1.0" @@ -3638,6 +5537,8 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "devOptional": true, "license": "MIT", "engines": { @@ -3646,6 +5547,8 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3660,6 +5563,8 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -3671,6 +5576,8 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -3678,6 +5585,8 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3689,12 +5598,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "license": "MIT" + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } }, "node_modules/anymatch": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -3706,6 +5622,8 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -3716,6 +5634,8 @@ }, "node_modules/app-root-path": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", "license": "MIT", "engines": { "node": ">= 6.0.0" @@ -3723,14 +5643,21 @@ }, "node_modules/append-field": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", "license": "MIT" }, "node_modules/aproba": { - "version": "2.0.0", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", "license": "ISC" }, "node_modules/are-we-there-yet": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "delegates": "^1.0.0", @@ -3740,38 +5667,36 @@ "node": ">=10" } }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/arg": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "devOptional": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, "node_modules/array-flatten": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, "node_modules/array-timsort": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", "dev": true, "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { @@ -3790,11 +5715,15 @@ }, "node_modules/asap": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "devOptional": true, "license": "MIT" }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" @@ -3813,12 +5742,16 @@ } }, "node_modules/assert-never": { - "version": "1.3.0", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", + "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", "license": "MIT", "optional": true }, "node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "license": "MIT", "engines": { "node": ">=0.8" @@ -3826,11 +5759,15 @@ }, "node_modules/async": { "version": "3.2.6", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT", + "optional": true }, "node_modules/async-hook-jl": { "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", "license": "MIT", "dependencies": { "stack-chain": "^1.3.7" @@ -3851,30 +5788,55 @@ }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/atomic-sleep": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "license": "MIT", "engines": { "node": ">=8.0.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/await-semaphore": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/await-semaphore/-/await-semaphore-0.1.3.tgz", + "integrity": "sha512-d1W2aNSYcz/sxYO4pMGX9vq65qOTu0P800epMud+6cYYX0QcT7zyqcxec3VWzpgvdXo57UWmVbZpLMjX2m1I7Q==", "license": "MIT" }, "node_modules/axios": { - "version": "1.7.7", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", + "form-data": "^4.0.4", "proxy-from-env": "^1.1.0" } }, "node_modules/babel-jest": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, "license": "MIT", "dependencies": { @@ -3895,6 +5857,8 @@ }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3910,6 +5874,8 @@ }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -3925,6 +5891,8 @@ }, "node_modules/babel-plugin-istanbul/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -3933,6 +5901,8 @@ }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, "license": "MIT", "dependencies": { @@ -3946,7 +5916,9 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -3967,11 +5939,13 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, "license": "MIT", "dependencies": { @@ -3987,6 +5961,8 @@ }, "node_modules/babel-walk": { "version": "3.0.0-canary-5", + "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", + "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", "license": "MIT", "optional": true, "dependencies": { @@ -3998,10 +5974,14 @@ }, "node_modules/balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -4020,6 +6000,8 @@ }, "node_modules/bcrypt": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -4032,15 +6014,17 @@ }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/bignumber.js": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", - "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", "license": "MIT", "engines": { "node": "*" @@ -4048,6 +6032,8 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "license": "MIT", "engines": { "node": ">=8" @@ -4058,6 +6044,8 @@ }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { @@ -4066,27 +6054,16 @@ "readable-stream": "^3.4.0" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bn.js": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4109,6 +6086,8 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4116,15 +6095,28 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/boolbase": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "license": "ISC", "optional": true }, + "node_modules/bowser": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.0.tgz", + "integrity": "sha512-HcOcTudTeEWgbHh0Y1Tyb6fdeR71m4b/QACf0D4KswGTsNeIJQmg38mRENZPAYPZvGFN3fk3604XbQEPdxXdKg==", + "dev": true, + "license": "MIT" + }, "node_modules/boxen": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", "license": "MIT", "dependencies": { "ansi-align": "^3.0.0", @@ -4143,40 +6135,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/camelcase": { - "version": "6.3.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/brace-expansion": { - "version": "2.0.1", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4192,7 +6164,9 @@ "license": "MIT" }, "node_modules/browserslist": { - "version": "4.24.2", + "version": "4.25.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.3.tgz", + "integrity": "sha512-cDGv1kkDI4/0e5yON9yM5G/0A5u8sf5TnmdX5C9qHzI9PPu++sQ9zjm1k9NiOrf3riY4OkK0zSGqfvJyJsgCBQ==", "dev": true, "funding": [ { @@ -4210,10 +6184,10 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" + "caniuse-lite": "^1.0.30001735", + "electron-to-chromium": "^1.5.204", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -4224,6 +6198,8 @@ }, "node_modules/bs-logger": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, "license": "MIT", "dependencies": { @@ -4235,6 +6211,8 @@ }, "node_modules/bser": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -4243,6 +6221,8 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -4266,18 +6246,26 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, "node_modules/buffer-more-ints": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", + "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==", "license": "MIT" }, "node_modules/busboy": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -4287,56 +6275,33 @@ }, "node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/cache-manager": { - "version": "5.7.6", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "eventemitter3": "^5.0.1", - "lodash.clonedeep": "^4.5.0", - "lru-cache": "^10.2.2", - "promise-coalesce": "^1.1.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/cache-manager/node_modules/lru-cache": { - "version": "10.4.3", - "license": "ISC", - "optional": true, - "peer": true - }, "node_modules/cacheable": { - "version": "1.8.5", + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.10.4.tgz", + "integrity": "sha512-Gd7ccIUkZ9TE2odLQVS+PDjIvQCdJKUlLdJRVvZu0aipj07Qfx+XIej7hhDrKGGoIxV5m5fT/kOJNJPQhQneRg==", "license": "MIT", "dependencies": { - "hookified": "^1.5.0", - "keyv": "^5.2.1" - } - }, - "node_modules/cacheable/node_modules/keyv": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "@keyv/serialize": "*" + "hookified": "^1.11.0", + "keyv": "^5.5.0" } }, "node_modules/call-bind": { - "version": "1.0.7", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -4346,9 +6311,9 @@ } }, "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -4359,14 +6324,13 @@ } }, "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", - "optional": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -4377,6 +6341,8 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -4385,6 +6351,8 @@ }, "node_modules/camel-case": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", "license": "MIT", "optional": true, "dependencies": { @@ -4393,14 +6361,21 @@ } }, "node_modules/camelcase": { - "version": "5.3.1", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001679", + "version": "1.0.30001735", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", + "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", "dev": true, "funding": [ { @@ -4420,6 +6395,8 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -4434,6 +6411,8 @@ }, "node_modules/char-regex": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, "license": "MIT", "engines": { @@ -4442,6 +6421,8 @@ }, "node_modules/character-parser": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", "license": "MIT", "optional": true, "dependencies": { @@ -4450,11 +6431,15 @@ }, "node_modules/chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, "license": "MIT" }, "node_modules/check-disk-space": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/check-disk-space/-/check-disk-space-3.4.0.tgz", + "integrity": "sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==", "license": "MIT", "engines": { "node": ">=16" @@ -4462,6 +6447,8 @@ }, "node_modules/cheerio": { "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", "license": "MIT", "optional": true, "dependencies": { @@ -4482,6 +6469,8 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -4496,31 +6485,10 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio/node_modules/parse5": { - "version": "7.2.1", - "license": "MIT", - "optional": true, - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/cheerio/node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "license": "MIT", - "optional": true, - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/chokidar": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -4543,6 +6511,8 @@ }, "node_modules/chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "license": "ISC", "engines": { "node": ">=10" @@ -4550,6 +6520,8 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", "engines": { @@ -4558,6 +6530,8 @@ }, "node_modules/ci-info": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "devOptional": true, "funding": [ { @@ -4571,25 +6545,33 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.4.1", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", "dev": true, "license": "MIT" }, "node_modules/class-transformer": { "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", "license": "MIT" }, "node_modules/class-validator": { - "version": "0.14.1", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.2.tgz", + "integrity": "sha512-3kMVRF2io8N8pY1IFIXlho9r8IPUUIfHe2hYVtiebvAzU2XeQFXTv+XI4WX+TnXmtwXMDcjngcpkiPM0O9PvLw==", "license": "MIT", "dependencies": { "@types/validator": "^13.11.8", - "libphonenumber-js": "^1.10.53", + "libphonenumber-js": "^1.11.1", "validator": "^13.9.0" } }, "node_modules/clean-css": { "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "license": "MIT", "optional": true, "dependencies": { @@ -4601,6 +6583,8 @@ }, "node_modules/clean-css/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "optional": true, "engines": { @@ -4609,6 +6593,8 @@ }, "node_modules/cli-boxes": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", "license": "MIT", "engines": { "node": ">=6" @@ -4619,6 +6605,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -4628,74 +6616,10 @@ "node": ">=8" } }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "license": "ISC", - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-highlight/node_modules/cliui": { - "version": "7.0.4", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cli-highlight/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/yargs": { - "version": "16.2.0", - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cli-highlight/node_modules/yargs-parser": { - "version": "20.2.9", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/cli-spinners": { "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "license": "MIT", "engines": { @@ -4707,6 +6631,8 @@ }, "node_modules/cli-table3": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4721,6 +6647,8 @@ }, "node_modules/cli-truncate": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", "dev": true, "license": "MIT", "dependencies": { @@ -4735,7 +6663,9 @@ } }, "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.1.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", "dev": true, "license": "MIT", "engines": { @@ -4747,11 +6677,15 @@ }, "node_modules/cli-truncate/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -4768,6 +6702,8 @@ }, "node_modules/cli-truncate/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4782,6 +6718,8 @@ }, "node_modules/cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "license": "ISC", "engines": { @@ -4790,6 +6728,8 @@ }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -4800,23 +6740,10 @@ "node": ">=12" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { @@ -4825,6 +6752,8 @@ }, "node_modules/cls-hooked": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", + "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", "license": "BSD-2-Clause", "dependencies": { "async-hook-jl": "^1.7.6", @@ -4837,6 +6766,8 @@ }, "node_modules/cls-hooked/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "license": "ISC", "bin": { "semver": "bin/semver" @@ -4844,6 +6775,8 @@ }, "node_modules/cluster-key-slot": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", "license": "Apache-2.0", "engines": { "node": ">=0.10.0" @@ -4851,6 +6784,8 @@ }, "node_modules/co": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "license": "MIT", "engines": { @@ -4860,11 +6795,15 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true, "license": "MIT" }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -4875,10 +6814,14 @@ }, "node_modules/color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "license": "ISC", "bin": { "color-support": "bin.js" @@ -4886,10 +6829,14 @@ }, "node_modules/colorette": { "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -4900,6 +6847,8 @@ }, "node_modules/commander": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "license": "MIT", "engines": { @@ -4908,6 +6857,8 @@ }, "node_modules/comment-json": { "version": "4.2.5", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", + "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", "dev": true, "license": "MIT", "dependencies": { @@ -4923,6 +6874,8 @@ }, "node_modules/component-emitter": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, "license": "MIT", "funding": { @@ -4931,23 +6884,29 @@ }, "node_modules/concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/concat-stream": { - "version": "1.6.2", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "engines": [ - "node >= 0.8" + "node >= 6.0" ], "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", - "readable-stream": "^2.2.2", + "readable-stream": "^3.0.2", "typedarray": "^0.0.6" } }, "node_modules/config-chain": { "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "license": "MIT", "optional": true, "dependencies": { @@ -4957,14 +6916,20 @@ }, "node_modules/consola": { "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "license": "MIT" }, "node_modules/console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "license": "ISC" }, "node_modules/constantinople": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", + "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", "license": "MIT", "optional": true, "dependencies": { @@ -4974,6 +6939,8 @@ }, "node_modules/content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -4984,6 +6951,8 @@ }, "node_modules/content-type": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -4991,11 +6960,15 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/cookie": { "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5003,19 +6976,28 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, "node_modules/cookiejar": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true, "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -5027,6 +7009,8 @@ }, "node_modules/cosmiconfig": { "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", "dependencies": { @@ -5052,6 +7036,8 @@ }, "node_modules/create-jest": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -5072,6 +7058,8 @@ }, "node_modules/create-require": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "devOptional": true, "license": "MIT" }, @@ -5086,7 +7074,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.5", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5098,7 +7088,9 @@ } }, "node_modules/css-select": { - "version": "5.1.0", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -5113,7 +7105,9 @@ } }, "node_modules/css-what": { - "version": "6.1.0", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "license": "BSD-2-Clause", "optional": true, "engines": { @@ -5125,6 +7119,8 @@ }, "node_modules/dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" @@ -5135,6 +7131,8 @@ }, "node_modules/dateformat": { "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "license": "MIT", "engines": { "node": "*" @@ -5142,10 +7140,14 @@ }, "node_modules/dayjs": { "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", "license": "MIT" }, "node_modules/debug": { - "version": "4.3.7", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5175,8 +7177,9 @@ "license": "MIT" }, "node_modules/dedent": { - "version": "1.5.3", - "dev": true, + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" @@ -5189,6 +7192,8 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", "optional": true, "engines": { @@ -5197,11 +7202,15 @@ }, "node_modules/deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "devOptional": true, "license": "MIT", "engines": { @@ -5210,6 +7219,8 @@ }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -5221,6 +7232,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -5236,6 +7249,8 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -5243,19 +7258,14 @@ }, "node_modules/delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "license": "MIT" }, - "node_modules/denque": { - "version": "2.1.0", - "license": "Apache-2.0", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5263,6 +7273,8 @@ }, "node_modules/destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { "node": ">= 0.8", @@ -5271,6 +7283,8 @@ }, "node_modules/detect-indent": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "license": "MIT", "optional": true, "engines": { @@ -5278,7 +7292,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.3", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -5286,6 +7302,8 @@ }, "node_modules/detect-newline": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "devOptional": true, "license": "MIT", "engines": { @@ -5294,11 +7312,15 @@ }, "node_modules/detect-node": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "license": "MIT", "optional": true }, "node_modules/dezalgo": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, "license": "ISC", "dependencies": { @@ -5308,6 +7330,8 @@ }, "node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "devOptional": true, "license": "BSD-3-Clause", "engines": { @@ -5316,6 +7340,8 @@ }, "node_modules/diff-sequences": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "license": "MIT", "engines": { @@ -5330,6 +7356,8 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -5341,6 +7369,8 @@ }, "node_modules/display-notification": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/display-notification/-/display-notification-2.0.0.tgz", + "integrity": "sha512-TdmtlAcdqy1NU+j7zlkDdMnCL878zriLaBmoD9quOoq1ySSSGv03l0hXK5CvIFZlIfFI/hizqdQuW+Num7xuhw==", "license": "MIT", "optional": true, "dependencies": { @@ -5353,6 +7383,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5364,11 +7396,15 @@ }, "node_modules/doctypes": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", "license": "MIT", "optional": true }, "node_modules/dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", "optional": true, "dependencies": { @@ -5382,6 +7418,8 @@ }, "node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", @@ -5393,6 +7431,8 @@ }, "node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -5406,7 +7446,9 @@ } }, "node_modules/domutils": { - "version": "3.1.0", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -5420,6 +7462,8 @@ }, "node_modules/dotenv": { "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -5430,6 +7474,8 @@ }, "node_modules/dotenv-expand": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -5462,27 +7508,16 @@ "stream-shift": "^1.0.2" } }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, "node_modules/ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "license": "MIT", "dependencies": { "jsbn": "~0.1.0", @@ -5491,6 +7526,8 @@ }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -5498,6 +7535,8 @@ }, "node_modules/editorconfig": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", "license": "MIT", "optional": true, "dependencies": { @@ -5513,8 +7552,20 @@ "node": ">=14" } }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/editorconfig/node_modules/commander": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "license": "MIT", "optional": true, "engines": { @@ -5523,6 +7574,8 @@ }, "node_modules/editorconfig/node_modules/minimatch": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", "license": "ISC", "optional": true, "dependencies": { @@ -5537,12 +7590,16 @@ }, "node_modules/ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", - "devOptional": true, + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "license": "Apache-2.0", + "optional": true, "dependencies": { "jake": "^10.8.5" }, @@ -5554,7 +7611,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.55", + "version": "1.5.207", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.207.tgz", + "integrity": "sha512-mryFrrL/GXDTmAtIVMVf+eIXM09BBPlO5IQ7lUyKmK8d+A4VpRGG+M3ofoVef6qyF8s60rJei8ymlJxjUA8Faw==", "dev": true, "license": "ISC" }, @@ -5575,6 +7634,8 @@ }, "node_modules/emitter-listener": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", "license": "BSD-2-Clause", "dependencies": { "shimmer": "^1.2.0" @@ -5582,6 +7643,8 @@ }, "node_modules/emittery": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, "license": "MIT", "engines": { @@ -5593,17 +7656,23 @@ }, "node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/encoding-japanese": { - "version": "2.1.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.2.0.tgz", + "integrity": "sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==", "license": "MIT", "optional": true, "engines": { @@ -5611,14 +7680,18 @@ } }, "node_modules/end-of-stream": { - "version": "1.4.4", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { @@ -5631,6 +7704,8 @@ }, "node_modules/entities": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "license": "BSD-2-Clause", "optional": true, "engines": { @@ -5642,6 +7717,8 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "license": "MIT", "dependencies": { @@ -5659,20 +7736,24 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.5.4", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -5681,12 +7762,31 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-promise": { "version": "4.2.6", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", + "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", "license": "MIT" }, "node_modules/escalade": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -5694,6 +7794,8 @@ }, "node_modules/escape-goat": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", + "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", "license": "MIT", "optional": true, "engines": { @@ -5705,10 +7807,14 @@ }, "node_modules/escape-html": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-applescript": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/escape-string-applescript/-/escape-string-applescript-1.0.0.tgz", + "integrity": "sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA==", "license": "MIT", "optional": true, "engines": { @@ -5717,6 +7823,8 @@ }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", "engines": { @@ -5728,6 +7836,9 @@ }, "node_modules/eslint": { "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { @@ -5781,7 +7892,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.10.0", + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", + "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", "dev": true, "license": "MIT", "bin": { @@ -5792,7 +7905,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", + "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", "dev": true, "license": "MIT", "dependencies": { @@ -5813,6 +7928,8 @@ }, "node_modules/eslint-plugin-security": { "version": "1.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz", + "integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5820,22 +7937,23 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=8.0.0" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5847,6 +7965,8 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -5860,17 +7980,37 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -5882,22 +8022,15 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5914,6 +8047,8 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -5926,6 +8061,8 @@ }, "node_modules/esquery": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5935,8 +8072,20 @@ "node": ">=0.10" } }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5946,8 +8095,20 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -5956,6 +8117,8 @@ }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -5964,6 +8127,8 @@ }, "node_modules/etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5981,15 +8146,21 @@ }, "node_modules/eventemitter2": { "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", "license": "MIT" }, "node_modules/eventemitter3": { "version": "5.0.1", - "devOptional": true, + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, "license": "MIT" }, "node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "license": "MIT", "engines": { @@ -5998,6 +8169,8 @@ }, "node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6020,11 +8193,15 @@ }, "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/exit": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -6032,6 +8209,8 @@ }, "node_modules/expect": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, "license": "MIT", "dependencies": { @@ -6046,7 +8225,9 @@ } }, "node_modules/express": { - "version": "4.21.1", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -6068,7 +8249,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -6083,10 +8264,16 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6094,10 +8281,14 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/extend": { @@ -6108,11 +8299,15 @@ }, "node_modules/extend-object": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extend-object/-/extend-object-1.0.0.tgz", + "integrity": "sha512-0dHDIXC7y7LDmCh/lp1oYkmv73K25AMugQI07r8eFopkW6f7Ufn1q+ETMsJjnV9Am14SlElkqy3O92r6xEaxPw==", "license": "MIT", "optional": true }, "node_modules/external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "license": "MIT", "dependencies": { @@ -6126,6 +8321,8 @@ }, "node_modules/extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "engines": [ "node >=0.6.0" ], @@ -6142,20 +8339,28 @@ }, "node_modules/fast-copy": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "devOptional": true, "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, "node_modules/fast-glob": { - "version": "3.3.2", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -6163,7 +8368,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -6171,16 +8376,22 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/fast-redact": { "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "license": "MIT", "engines": { "node": ">=6" @@ -6188,33 +8399,33 @@ }, "node_modules/fast-safe-stringify": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "license": "MIT" }, "node_modules/fast-xml-parser": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.1.tgz", - "integrity": "sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" } ], "license": "MIT", - "optional": true, "dependencies": { - "strnum": "^1.0.5" + "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "node_modules/fastq": { - "version": "1.17.1", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -6235,14 +8446,24 @@ }, "node_modules/fb-watchman": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { @@ -6257,6 +8478,8 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -6265,6 +8488,8 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "license": "MIT", "dependencies": { @@ -6274,18 +8499,50 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-type": { + "version": "20.4.1", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.4.1.tgz", + "integrity": "sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.2.6", + "strtok3": "^10.2.0", + "token-types": "^6.0.0", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, "node_modules/filelist": { "version": "1.0.4", - "devOptional": true, + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "license": "Apache-2.0", + "optional": true, "dependencies": { "minimatch": "^5.0.1" } }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "devOptional": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "license": "ISC", + "optional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6295,6 +8552,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -6305,6 +8564,8 @@ }, "node_modules/finalhandler": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -6321,6 +8582,8 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6328,10 +8591,14 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -6346,9 +8613,9 @@ } }, "node_modules/firebase-admin": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.0.2.tgz", - "integrity": "sha512-YWVpoN+tZVSRXF0qC0gojoF5bSqvBRbnBk8+xUtFiguM2L4vB7f0moAwV1VVWDDHvTnvQ68OyTMpdp6wKo/clw==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.4.0.tgz", + "integrity": "sha512-Y8DcyKK+4pl4B93ooiy1G8qvdyRMkcNFfBSh+8rbVcw4cW8dgG0VXCCTp5NUwub8sn9vSPsOwpb9tE2OuFmcfQ==", "license": "Apache-2.0", "dependencies": { "@fastify/busboy": "^3.0.0", @@ -6371,35 +8638,18 @@ } }, "node_modules/firebase-admin/node_modules/@types/node": { - "version": "22.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", - "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", + "version": "22.17.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.2.tgz", + "integrity": "sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/firebase-admin/node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, - "node_modules/firebase-admin/node_modules/uuid": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", - "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" + "undici-types": "~6.21.0" } }, "node_modules/fixpack": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fixpack/-/fixpack-4.0.0.tgz", + "integrity": "sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==", "license": "MIT", "optional": true, "dependencies": { @@ -6416,6 +8666,8 @@ }, "node_modules/fixpack/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "license": "MIT", "optional": true, "dependencies": { @@ -6428,6 +8680,8 @@ }, "node_modules/flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "license": "MIT", "dependencies": { @@ -6439,13 +8693,27 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/flatted": { - "version": "3.3.1", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.9", + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "funding": [ { "type": "individual", @@ -6462,11 +8730,28 @@ } } }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/foreground-child": { - "version": "3.3.0", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -6478,6 +8763,8 @@ }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", + "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", "dev": true, "license": "MIT", "dependencies": { @@ -6503,32 +8790,16 @@ "webpack": "^5.11.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/form-data": { - "version": "4.0.1", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { @@ -6536,20 +8807,27 @@ } }, "node_modules/formidable": { - "version": "3.5.2", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", + "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "dev": true, "license": "MIT", "dependencies": { + "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", - "hexoid": "^2.0.0", "once": "^1.4.0" }, + "engines": { + "node": ">=14.0.0" + }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } }, "node_modules/forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6557,6 +8835,8 @@ }, "node_modules/fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6564,6 +8844,8 @@ }, "node_modules/fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6577,6 +8859,8 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "license": "ISC", "dependencies": { "minipass": "^3.0.0" @@ -6587,6 +8871,8 @@ }, "node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -6595,21 +8881,37 @@ "node": ">=8" } }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/fs-monkey": { - "version": "1.0.6", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", + "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", "dev": true, "license": "Unlicense" }, "node_modules/fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6624,6 +8926,9 @@ }, "node_modules/gauge": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", @@ -6642,6 +8947,8 @@ }, "node_modules/gauge/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, "node_modules/gaxios": { @@ -6661,9 +8968,9 @@ } }, "node_modules/gaxios/node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { "node": ">= 14" @@ -6682,13 +8989,27 @@ "node": ">= 14" } }, + "node_modules/gaxios/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/gcp-metadata": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", - "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz", + "integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==", "license": "Apache-2.0", "dependencies": { - "gaxios": "^6.0.0", + "gaxios": "^6.1.1", + "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" }, "engines": { @@ -6697,6 +9018,8 @@ }, "node_modules/generic-pool": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", + "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", "license": "MIT", "engines": { "node": ">= 4" @@ -6704,6 +9027,8 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -6712,27 +9037,29 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", - "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "dunder-proto": "^1.0.0", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "math-intrinsics": "^1.0.0" + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -6743,6 +9070,8 @@ }, "node_modules/get-package-type": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "license": "MIT", "engines": { @@ -6751,6 +9080,8 @@ }, "node_modules/get-port": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "license": "MIT", "optional": true, "engines": { @@ -6760,8 +9091,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -6773,27 +9119,30 @@ }, "node_modules/getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { - "version": "10.4.2", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6801,6 +9150,8 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -6811,11 +9162,39 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true, "license": "BSD-2-Clause" }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6830,6 +9209,8 @@ }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { @@ -6848,9 +9229,9 @@ } }, "node_modules/google-auth-library": { - "version": "9.15.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.0.tgz", - "integrity": "sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==", + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", + "integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", @@ -6864,31 +9245,10 @@ "node": ">=14" } }, - "node_modules/google-auth-library/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/google-auth-library/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, "node_modules/google-gax": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.4.1.tgz", - "integrity": "sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.6.1.tgz", + "integrity": "sha512-V6eky/xz2mcKfAd1Ioxyd6nmA61gao3n01C+YeuIwu3vzM9EDR6wcVzMSIbLMDXWeoi9SHYctXuKYC5uJUT3eQ==", "license": "Apache-2.0", "optional": true, "dependencies": { @@ -6909,13 +9269,38 @@ "node": ">=14" } }, + "node_modules/google-gax/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/google-libphonenumber": { - "version": "3.2.39", + "version": "3.2.42", + "resolved": "https://registry.npmjs.org/google-libphonenumber/-/google-libphonenumber-3.2.42.tgz", + "integrity": "sha512-60jm6Lu72WmlUJXUBJmmuZlHG2vDJ2gQ9pL5gcFsSe1Q4eigsm0Z1ayNHjMgqGUl0zey8JqKtO4QCHPV+5LCNQ==", "license": "(MIT AND Apache-2.0)", "engines": { "node": ">=0.10" } }, + "node_modules/google-logging-utils": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz", + "integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -6930,11 +9315,15 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, @@ -6951,29 +9340,10 @@ "node": ">=14.0.0" } }, - "node_modules/gtoken/node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/gtoken/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, "node_modules/handlebars": { "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "license": "MIT", "dependencies": { "minimist": "^1.2.5", @@ -7002,6 +9372,8 @@ }, "node_modules/handlebars/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -7009,6 +9381,8 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -7016,6 +9390,8 @@ }, "node_modules/has-own-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", + "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", "dev": true, "license": "MIT", "engines": { @@ -7024,6 +9400,8 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -7046,8 +9424,9 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", - "optional": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -7060,6 +9439,8 @@ }, "node_modules/has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "license": "ISC" }, "node_modules/hash.js": { @@ -7074,6 +9455,8 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7084,6 +9467,8 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "license": "MIT", "optional": true, "bin": { @@ -7092,23 +9477,10 @@ }, "node_modules/help-me": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", "license": "MIT" }, - "node_modules/hexoid": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -7121,13 +9493,15 @@ } }, "node_modules/hookified": { - "version": "1.5.1", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.11.0.tgz", + "integrity": "sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==", "license": "MIT" }, "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", "funding": [ { "type": "github", @@ -7143,11 +9517,15 @@ }, "node_modules/html-escaper": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/html-minifier": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", "license": "MIT", "optional": true, "dependencies": { @@ -7168,11 +9546,15 @@ }, "node_modules/html-minifier/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT", "optional": true }, "node_modules/html-to-text": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", + "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", "license": "MIT", "optional": true, "dependencies": { @@ -7188,6 +9570,8 @@ }, "node_modules/htmlparser2": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -7206,6 +9590,8 @@ }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -7219,9 +9605,9 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", "license": "MIT" }, "node_modules/http-proxy-agent": { @@ -7241,6 +9627,8 @@ }, "node_modules/http-signature": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.1.tgz", + "integrity": "sha512-Y29YKEc8MQsjch/VzkUVJ+2MXd9WcR42fK5u36CZf4G8bXw2DXMTWuESiB0R6m59JAWxlPPw5/Fri/t/AyyueA==", "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", @@ -7253,6 +9641,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "license": "MIT", "dependencies": { "agent-base": "6", @@ -7264,6 +9654,8 @@ }, "node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7281,6 +9673,8 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -7291,6 +9685,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -7309,6 +9705,8 @@ }, "node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -7316,7 +9714,9 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7332,6 +9732,8 @@ }, "node_modules/import-local": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "license": "MIT", "dependencies": { @@ -7350,6 +9752,8 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -7358,6 +9762,9 @@ }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -7366,15 +9773,21 @@ }, "node_modules/inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "license": "ISC", - "optional": true + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "devOptional": true, + "license": "ISC" }, "node_modules/inquirer": { "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", "dev": true, "license": "MIT", "dependencies": { @@ -7398,32 +9811,25 @@ "node": ">=12.0.0" } }, - "node_modules/ioredis": { - "version": "5.4.1", + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" + "node": ">=8" } }, "node_modules/ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -7431,11 +9837,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -7444,8 +9854,22 @@ "node": ">=8" } }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-core-module": { - "version": "2.15.1", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "devOptional": true, "license": "MIT", "dependencies": { @@ -7460,6 +9884,8 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", "optional": true, "bin": { @@ -7474,6 +9900,8 @@ }, "node_modules/is-expression": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", + "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", "license": "MIT", "optional": true, "dependencies": { @@ -7483,6 +9911,8 @@ }, "node_modules/is-expression/node_modules/acorn": { "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "license": "MIT", "optional": true, "bin": { @@ -7494,20 +9924,30 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-generator-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, "license": "MIT", "engines": { @@ -7516,6 +9956,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -7526,6 +9968,8 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, "license": "MIT", "engines": { @@ -7534,6 +9978,8 @@ }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -7541,6 +9987,8 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", "engines": { @@ -7549,6 +9997,8 @@ }, "node_modules/is-promise": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", "license": "MIT", "optional": true }, @@ -7573,6 +10023,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", "engines": { "node": ">=8" @@ -7581,8 +10033,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -7594,6 +10063,8 @@ }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "optional": true, "dependencies": { @@ -7604,15 +10075,21 @@ } }, "node_modules/isarray": { - "version": "1.0.0", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isomorphic-fetch": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", "license": "MIT", "dependencies": { "node-fetch": "^2.6.1", @@ -7621,6 +10098,8 @@ }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7629,6 +10108,8 @@ }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7644,6 +10125,8 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7655,8 +10138,26 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7670,6 +10171,8 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7677,7 +10180,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7690,17 +10195,24 @@ }, "node_modules/iterare": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", "license": "ISC", "engines": { "node": ">=6" } }, "node_modules/jackspeak": { - "version": "3.4.3", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": ">=14" + }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -7709,14 +10221,15 @@ } }, "node_modules/jake": { - "version": "10.9.2", - "devOptional": true, + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", + "async": "^3.2.6", "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" @@ -7725,28 +10238,10 @@ "node": ">=10" } }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "devOptional": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "devOptional": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, "license": "MIT", "dependencies": { @@ -7772,6 +10267,8 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, "license": "MIT", "dependencies": { @@ -7785,6 +10282,8 @@ }, "node_modules/jest-circus": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, "license": "MIT", "dependencies": { @@ -7815,6 +10314,8 @@ }, "node_modules/jest-cli": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, "license": "MIT", "dependencies": { @@ -7847,6 +10348,8 @@ }, "node_modules/jest-config": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7889,17 +10392,11 @@ } } }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/jest-config/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -7917,19 +10414,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest-diff": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "license": "MIT", "dependencies": { @@ -7944,6 +10432,8 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "license": "MIT", "dependencies": { @@ -7955,6 +10445,8 @@ }, "node_modules/jest-each": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7970,6 +10462,8 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, "license": "MIT", "dependencies": { @@ -7986,6 +10480,8 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, "license": "MIT", "engines": { @@ -7994,6 +10490,8 @@ }, "node_modules/jest-haste-map": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "license": "MIT", "dependencies": { @@ -8018,6 +10516,8 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "license": "MIT", "dependencies": { @@ -8030,6 +10530,8 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, "license": "MIT", "dependencies": { @@ -8044,6 +10546,8 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, "license": "MIT", "dependencies": { @@ -8063,6 +10567,8 @@ }, "node_modules/jest-mock": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "license": "MIT", "dependencies": { @@ -8076,6 +10582,8 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, "license": "MIT", "engines": { @@ -8092,6 +10600,8 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "license": "MIT", "engines": { @@ -8100,6 +10610,8 @@ }, "node_modules/jest-resolve": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, "license": "MIT", "dependencies": { @@ -8119,6 +10631,8 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, "license": "MIT", "dependencies": { @@ -8131,6 +10645,8 @@ }, "node_modules/jest-runner": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8162,6 +10678,8 @@ }, "node_modules/jest-runner/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8170,6 +10688,8 @@ }, "node_modules/jest-runner/node_modules/source-map-support": { "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "license": "MIT", "dependencies": { @@ -8179,6 +10699,8 @@ }, "node_modules/jest-runtime": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8209,17 +10731,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -8237,19 +10753,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/jest-snapshot": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "license": "MIT", "dependencies": { @@ -8280,6 +10787,8 @@ }, "node_modules/jest-util": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "license": "MIT", "dependencies": { @@ -8296,6 +10805,8 @@ }, "node_modules/jest-util/node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -8307,6 +10818,8 @@ }, "node_modules/jest-validate": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, "license": "MIT", "dependencies": { @@ -8321,19 +10834,10 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest-watcher": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "license": "MIT", "dependencies": { @@ -8352,6 +10856,8 @@ }, "node_modules/jest-worker": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "license": "MIT", "dependencies": { @@ -8366,6 +10872,8 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8389,21 +10897,25 @@ }, "node_modules/joycon": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/js-beautify": { - "version": "1.15.1", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", + "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==", "license": "MIT", "optional": true, "dependencies": { "config-chain": "^1.1.13", "editorconfig": "^1.0.4", - "glob": "^10.3.3", + "glob": "^10.4.2", "js-cookie": "^3.0.5", - "nopt": "^7.2.0" + "nopt": "^7.2.1" }, "bin": { "css-beautify": "js/bin/css-beautify.js", @@ -8414,8 +10926,99 @@ "node": ">=14" } }, + "node_modules/js-beautify/node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/js-beautify/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "optional": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "optional": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/js-cookie": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "license": "MIT", "optional": true, "engines": { @@ -8424,16 +11027,22 @@ }, "node_modules/js-stringify": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", "license": "MIT", "optional": true }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -8444,10 +11053,14 @@ }, "node_modules/jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "license": "MIT" }, "node_modules/jsesc": { - "version": "3.0.2", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -8468,29 +11081,42 @@ }, "node_modules/json-buffer": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -8502,11 +11128,15 @@ }, "node_modules/jsonc-parser": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true, "license": "MIT" }, "node_modules/jsonfile": { - "version": "6.1.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -8517,21 +11147,52 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.0", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "license": "MIT", "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", "npm": ">=6" } }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "license": "MIT", "dependencies": { "assert-plus": "1.0.0", @@ -8545,6 +11206,9 @@ }, "node_modules/jssha": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/jssha/-/jssha-2.4.1.tgz", + "integrity": "sha512-77DN1YurYgh+7FPCTJ2CQ6hVDHgIWiHxm4Y5/mAdnpETKYagX22pVWMz4xfKF5fcpNfMaztgVj+/B1bt2k23Eg==", + "deprecated": "jsSHA versions < 3.0.0 will no longer receive feature updates", "license": "BSD-3-Clause", "engines": { "node": "*" @@ -8552,6 +11216,8 @@ }, "node_modules/jstransformer": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", "license": "MIT", "optional": true, "dependencies": { @@ -8561,6 +11227,8 @@ }, "node_modules/juice": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/juice/-/juice-10.0.1.tgz", + "integrity": "sha512-ZhJT1soxJCkOiO55/mz8yeBKTAJhRzX9WBO+16ZTqNTONnnVlUPyVBIzQ7lDRjaBdTbid+bAnyIon/GM3yp4cA==", "license": "MIT", "optional": true, "dependencies": { @@ -8579,6 +11247,8 @@ }, "node_modules/juice/node_modules/commander": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "license": "MIT", "optional": true, "engines": { @@ -8586,10 +11256,12 @@ } }, "node_modules/jwa": { - "version": "1.4.1", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } @@ -8606,15 +11278,15 @@ } }, "node_modules/jwks-rsa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.1.0.tgz", - "integrity": "sha512-v7nqlfezb9YfHHzYII3ef2a2j1XnGeSE/bK3WfumaYCqONAIstJbrEGapz4kadScZzEt7zYCN7bucj8C0Mv/Rg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.0.tgz", + "integrity": "sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==", "license": "MIT", "dependencies": { - "@types/express": "^4.17.17", - "@types/jsonwebtoken": "^9.0.2", + "@types/express": "^4.17.20", + "@types/jsonwebtoken": "^9.0.4", "debug": "^4.3.4", - "jose": "^4.14.6", + "jose": "^4.15.4", "limiter": "^1.1.5", "lru-memoizer": "^2.2.0" }, @@ -8623,9 +11295,9 @@ } }, "node_modules/jwks-rsa/node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "license": "MIT", "dependencies": { "@types/body-parser": "*", @@ -8646,32 +11318,29 @@ "@types/send": "*" } }, - "node_modules/jwks-rsa/node_modules/@types/jsonwebtoken": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz", - "integrity": "sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/jws": { - "version": "3.2.2", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", "license": "MIT", "dependencies": { - "jwa": "^1.4.1", + "jwa": "^2.0.0", "safe-buffer": "^5.0.1" } }, "node_modules/keyv": { - "version": "4.5.4", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.0.tgz", + "integrity": "sha512-QG7qR2tijh1ftOvClut4YKKg1iW6cx3GZsKoGyJPxHkGWK9oJhG9P3j5deP0QQOGDowBMVQFaP+Vm4NpGYvmIQ==", "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "@keyv/serialize": "^1.1.0" } }, "node_modules/kleur": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, "license": "MIT", "engines": { @@ -8680,6 +11349,8 @@ }, "node_modules/leac": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", + "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", "license": "MIT", "optional": true, "funding": { @@ -8688,6 +11359,8 @@ }, "node_modules/leven": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, "license": "MIT", "engines": { @@ -8696,6 +11369,8 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8708,22 +11383,28 @@ }, "node_modules/libbase64": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-1.3.0.tgz", + "integrity": "sha512-GgOXd0Eo6phYgh0DJtjQ2tO8dc0IVINtZJeARPeiIJqge+HdsWSuaDTe8ztQ7j/cONByDZ3zeB325AHiv5O0dg==", "license": "MIT", "optional": true }, "node_modules/libmime": { - "version": "5.3.5", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-5.3.7.tgz", + "integrity": "sha512-FlDb3Wtha8P01kTL3P9M+ZDNDWPKPmKHWaU/cG/lg5pfuAwdflVpZE+wm9m7pKmC5ww6s+zTxBKS1p6yl3KpSw==", "license": "MIT", "optional": true, "dependencies": { - "encoding-japanese": "2.1.0", + "encoding-japanese": "2.2.0", "iconv-lite": "0.6.3", "libbase64": "1.3.0", - "libqp": "2.1.0" + "libqp": "2.1.1" } }, "node_modules/libmime/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "optional": true, "dependencies": { @@ -8734,16 +11415,22 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.11.14", + "version": "1.12.12", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.12.tgz", + "integrity": "sha512-aWVR6xXYYRvnK0v/uIwkf5Lthq9Jpn0N8TISW/oDTWlYB2sOimuiLn9Q26aUw4KxkJoiT8ACdiw44Y8VwKFIfQ==", "license": "MIT" }, "node_modules/libqp": { - "version": "2.1.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-2.1.1.tgz", + "integrity": "sha512-0Wd+GPz1O134cP62YU2GTOPNA7Qgl09XwCqM5zpBv87ERCXdfDtyKXvV7c9U22yWJh44QZqBocFnXN11K96qow==", "license": "MIT", "optional": true }, "node_modules/lilconfig": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, "license": "MIT", "engines": { @@ -8757,11 +11444,15 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/linkify-it": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "license": "MIT", "optional": true, "dependencies": { @@ -8770,6 +11461,8 @@ }, "node_modules/lint-staged": { "version": "13.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.3.0.tgz", + "integrity": "sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8796,6 +11489,8 @@ }, "node_modules/lint-staged/node_modules/chalk": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, "license": "MIT", "engines": { @@ -8807,6 +11502,8 @@ }, "node_modules/lint-staged/node_modules/commander": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", + "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", "dev": true, "license": "MIT", "engines": { @@ -8815,6 +11512,8 @@ }, "node_modules/lint-staged/node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8831,6 +11530,8 @@ }, "node_modules/lint-staged/node_modules/execa": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, "license": "MIT", "dependencies": { @@ -8853,6 +11554,8 @@ }, "node_modules/lint-staged/node_modules/human-signals": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -8861,6 +11564,8 @@ }, "node_modules/lint-staged/node_modules/is-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", "engines": { @@ -8872,6 +11577,8 @@ }, "node_modules/lint-staged/node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "license": "MIT", "dependencies": { @@ -8884,6 +11591,8 @@ }, "node_modules/lint-staged/node_modules/mimic-fn": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "license": "MIT", "engines": { @@ -8895,11 +11604,15 @@ }, "node_modules/lint-staged/node_modules/ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true, "license": "MIT" }, "node_modules/lint-staged/node_modules/npm-run-path": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8914,6 +11627,8 @@ }, "node_modules/lint-staged/node_modules/onetime": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8928,6 +11643,8 @@ }, "node_modules/lint-staged/node_modules/path-key": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", "engines": { @@ -8939,6 +11656,8 @@ }, "node_modules/lint-staged/node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -8950,11 +11669,15 @@ }, "node_modules/lint-staged/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/lint-staged/node_modules/strip-final-newline": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "license": "MIT", "engines": { @@ -8965,7 +11688,9 @@ } }, "node_modules/liquidjs": { - "version": "10.18.0", + "version": "10.21.1", + "resolved": "https://registry.npmjs.org/liquidjs/-/liquidjs-10.21.1.tgz", + "integrity": "sha512-NZXmCwv3RG5nire3fmIn9HsOyJX3vo+ptp0yaXUHAMzSNBhx74Hm+dAGJvscUA6lNqbLuYfXgNavRQ9UbUJhQQ==", "license": "MIT", "optional": true, "dependencies": { @@ -8985,6 +11710,8 @@ }, "node_modules/liquidjs/node_modules/commander": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "license": "MIT", "optional": true, "engines": { @@ -8993,6 +11720,8 @@ }, "node_modules/listr2": { "version": "6.6.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-6.6.1.tgz", + "integrity": "sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==", "dev": true, "license": "MIT", "dependencies": { @@ -9016,7 +11745,9 @@ } }, "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.1.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", "dev": true, "license": "MIT", "engines": { @@ -9028,6 +11759,8 @@ }, "node_modules/listr2/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -9039,11 +11772,15 @@ }, "node_modules/listr2/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -9060,6 +11797,8 @@ }, "node_modules/listr2/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9074,6 +11813,8 @@ }, "node_modules/listr2/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9090,6 +11831,8 @@ }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "license": "MIT", "engines": { @@ -9098,6 +11841,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -9112,6 +11857,8 @@ }, "node_modules/lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.camelcase": { @@ -9123,60 +11870,70 @@ }, "node_modules/lodash.clonedeep": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", "license": "MIT" }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/lodash.includes": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", "license": "MIT" }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/lodash.isboolean": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -9192,6 +11949,8 @@ }, "node_modules/log-update": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz", + "integrity": "sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==", "dev": true, "license": "MIT", "dependencies": { @@ -9210,6 +11969,8 @@ }, "node_modules/log-update/node_modules/ansi-escapes": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", + "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "license": "MIT", "dependencies": { @@ -9223,7 +11984,9 @@ } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.0.tgz", + "integrity": "sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==", "dev": true, "license": "MIT", "engines": { @@ -9235,6 +11998,8 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -9246,6 +12011,8 @@ }, "node_modules/log-update/node_modules/cli-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "license": "MIT", "dependencies": { @@ -9260,11 +12027,15 @@ }, "node_modules/log-update/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/log-update/node_modules/restore-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "license": "MIT", "dependencies": { @@ -9280,11 +12051,15 @@ }, "node_modules/log-update/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/log-update/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -9301,6 +12076,8 @@ }, "node_modules/log-update/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9315,6 +12092,8 @@ }, "node_modules/log-update/node_modules/type-fest": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9326,6 +12105,8 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9341,25 +12122,36 @@ } }, "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", "license": "Apache-2.0", "optional": true }, "node_modules/lower-case": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", "license": "MIT", "optional": true }, "node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, + "node_modules/lru-cache/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/lru-memoizer": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", @@ -9382,12 +12174,6 @@ "node": ">=10" } }, - "node_modules/lru-memoizer/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, "node_modules/luxon": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.5.0.tgz", @@ -9399,6 +12185,8 @@ }, "node_modules/magic-string": { "version": "0.30.8", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", + "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9409,24 +12197,28 @@ } }, "node_modules/mailparser": { - "version": "3.7.1", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/mailparser/-/mailparser-3.7.4.tgz", + "integrity": "sha512-Beh4yyR4jLq3CZZ32asajByrXnW8dLyKCAQD3WvtTiBnMtFWhxO+wa93F6sJNjDmfjxXs4NRNjw3XAGLqZR3Vg==", "license": "MIT", "optional": true, "dependencies": { - "encoding-japanese": "2.1.0", + "encoding-japanese": "2.2.0", "he": "1.2.0", "html-to-text": "9.0.5", "iconv-lite": "0.6.3", - "libmime": "5.3.5", + "libmime": "5.3.7", "linkify-it": "5.0.0", - "mailsplit": "5.4.0", - "nodemailer": "6.9.13", + "mailsplit": "5.4.5", + "nodemailer": "7.0.4", "punycode.js": "2.3.1", - "tlds": "1.252.0" + "tlds": "1.259.0" } }, "node_modules/mailparser/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "optional": true, "dependencies": { @@ -9437,7 +12229,9 @@ } }, "node_modules/mailparser/node_modules/nodemailer": { - "version": "6.9.13", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.4.tgz", + "integrity": "sha512-9O00Vh89/Ld2EcVCqJ/etd7u20UhME0f/NToPfArwPEe1Don1zy4mAIz6ariRr7mJ2RDxtaDzN0WJVdVXPtZaw==", "license": "MIT-0", "optional": true, "engines": { @@ -9445,76 +12239,52 @@ } }, "node_modules/mailsplit": { - "version": "5.4.0", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/mailsplit/-/mailsplit-5.4.5.tgz", + "integrity": "sha512-oMfhmvclR689IIaQmIcR5nODnZRRVwAKtqFT407TIvmhX2OLUBnshUTcxzQBt3+96sZVDud9NfSe1NxAkUNXEQ==", "license": "(MIT OR EUPL-1.1+)", "optional": true, "dependencies": { - "libbase64": "1.2.1", - "libmime": "5.2.0", - "libqp": "2.0.1" + "libbase64": "1.3.0", + "libmime": "5.3.7", + "libqp": "2.1.1" } }, - "node_modules/mailsplit/node_modules/encoding-japanese": { - "version": "2.0.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/mailsplit/node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mailsplit/node_modules/libbase64": { - "version": "1.2.1", - "license": "MIT", - "optional": true - }, - "node_modules/mailsplit/node_modules/libmime": { - "version": "5.2.0", - "license": "MIT", - "optional": true, - "dependencies": { - "encoding-japanese": "2.0.0", - "iconv-lite": "0.6.3", - "libbase64": "1.2.1", - "libqp": "2.0.1" - } - }, - "node_modules/mailsplit/node_modules/libqp": { - "version": "2.0.1", - "license": "MIT", - "optional": true - }, "node_modules/make-dir": { - "version": "4.0.0", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "license": "MIT", "dependencies": { - "semver": "^7.5.3" + "semver": "^6.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/make-error": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "devOptional": true, "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -9532,6 +12302,8 @@ }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9539,6 +12311,8 @@ }, "node_modules/memfs": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "dev": true, "license": "Unlicense", "dependencies": { @@ -9550,11 +12324,15 @@ }, "node_modules/mensch": { "version": "0.3.4", + "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", + "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==", "license": "MIT", "optional": true }, "node_modules/merge-descriptors": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9562,11 +12340,15 @@ }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { @@ -9575,6 +12357,8 @@ }, "node_modules/methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9582,6 +12366,8 @@ }, "node_modules/micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -9594,6 +12380,8 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -9604,17 +12392,22 @@ } }, "node_modules/mime": { - "version": "1.6.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "license": "MIT", + "optional": true, "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9622,6 +12415,8 @@ }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -9632,6 +12427,8 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -9651,20 +12448,21 @@ "license": "MIT" }, "node_modules/minimatch": { - "version": "9.0.5", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, "node_modules/minimist": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9672,6 +12470,8 @@ }, "node_modules/minipass": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -9679,6 +12479,8 @@ }, "node_modules/minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "license": "MIT", "dependencies": { "minipass": "^3.0.0", @@ -9690,6 +12492,8 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -9698,12 +12502,10 @@ "node": ">=8" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/mjml": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.15.3.tgz", + "integrity": "sha512-bW2WpJxm6HS+S3Yu6tq1DUPFoTxU9sPviUSmnL7Ua+oVO3WA5ILFWqvujUlz+oeuM+HCwEyMiP5xvKNPENVjYA==", "license": "MIT", "optional": true, "dependencies": { @@ -9720,6 +12522,8 @@ }, "node_modules/mjml-accordion": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-accordion/-/mjml-accordion-4.15.3.tgz", + "integrity": "sha512-LPNVSj1LyUVYT9G1gWwSw3GSuDzDsQCu0tPB2uDsq4VesYNnU6v3iLCQidMiR6azmIt13OEozG700ygAUuA6Ng==", "license": "MIT", "optional": true, "dependencies": { @@ -9730,6 +12534,8 @@ }, "node_modules/mjml-body": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-body/-/mjml-body-4.15.3.tgz", + "integrity": "sha512-7pfUOVPtmb0wC+oUOn4xBsAw4eT5DyD6xqaxj/kssu6RrFXOXgJaVnDPAI9AzIvXJ/5as9QrqRGYAddehwWpHQ==", "license": "MIT", "optional": true, "dependencies": { @@ -9740,6 +12546,8 @@ }, "node_modules/mjml-button": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-button/-/mjml-button-4.15.3.tgz", + "integrity": "sha512-79qwn9AgdGjJR1vLnrcm2rq2AsAZkKC5JPwffTMG+Nja6zGYpTDZFZ56ekHWr/r1b5WxkukcPj2PdevUug8c+Q==", "license": "MIT", "optional": true, "dependencies": { @@ -9750,6 +12558,8 @@ }, "node_modules/mjml-carousel": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-carousel/-/mjml-carousel-4.15.3.tgz", + "integrity": "sha512-3ju6I4l7uUhPRrJfN3yK9AMsfHvrYbRkcJ1GRphFHzUj37B2J6qJOQUpzA547Y4aeh69TSb7HFVf1t12ejQxVw==", "license": "MIT", "optional": true, "dependencies": { @@ -9760,6 +12570,8 @@ }, "node_modules/mjml-cli": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-cli/-/mjml-cli-4.15.3.tgz", + "integrity": "sha512-+V2TDw3tXUVEptFvLSerz125C2ogYl8klIBRY1m5BHd4JvGVf3yhx8N3PngByCzA6PGcv/eydGQN+wy34SHf0Q==", "license": "MIT", "optional": true, "dependencies": { @@ -9780,8 +12592,36 @@ "mjml-cli": "bin/mjml" } }, + "node_modules/mjml-cli/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mjml-cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mjml-column": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-column/-/mjml-column-4.15.3.tgz", + "integrity": "sha512-hYdEFdJGHPbZJSEysykrevEbB07yhJGSwfDZEYDSbhQQFjV2tXrEgYcFD5EneMaowjb55e3divSJxU4c5q4Qgw==", "license": "MIT", "optional": true, "dependencies": { @@ -9792,6 +12632,8 @@ }, "node_modules/mjml-core": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-core/-/mjml-core-4.15.3.tgz", + "integrity": "sha512-Dmwk+2cgSD9L9GmTbEUNd8QxkTZtW9P7FN/ROZW/fGZD6Hq6/4TB0zEspg2Ow9eYjZXO2ofOJ3PaQEEShKV0kQ==", "license": "MIT", "optional": true, "dependencies": { @@ -9809,6 +12651,8 @@ }, "node_modules/mjml-divider": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-divider/-/mjml-divider-4.15.3.tgz", + "integrity": "sha512-vh27LQ9FG/01y0b9ntfqm+GT5AjJnDSDY9hilss2ixIUh0FemvfGRfsGVeV5UBVPBKK7Ffhvfqc7Rciob9Spzw==", "license": "MIT", "optional": true, "dependencies": { @@ -9819,6 +12663,8 @@ }, "node_modules/mjml-group": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-group/-/mjml-group-4.15.3.tgz", + "integrity": "sha512-HSu/rKnGZVKFq3ciT46vi1EOy+9mkB0HewO4+P6dP/Y0UerWkN6S3UK11Cxsj0cAp0vFwkPDCdOeEzRdpFEkzA==", "license": "MIT", "optional": true, "dependencies": { @@ -9829,6 +12675,8 @@ }, "node_modules/mjml-head": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head/-/mjml-head-4.15.3.tgz", + "integrity": "sha512-o3mRuuP/MB5fZycjD3KH/uXsnaPl7Oo8GtdbJTKtH1+O/3pz8GzGMkscTKa97l03DAG2EhGrzzLcU2A6eshwFw==", "license": "MIT", "optional": true, "dependencies": { @@ -9839,6 +12687,8 @@ }, "node_modules/mjml-head-attributes": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-attributes/-/mjml-head-attributes-4.15.3.tgz", + "integrity": "sha512-2ISo0r5ZKwkrvJgDou9xVPxxtXMaETe2AsAA02L89LnbB2KC0N5myNsHV0sEysTw9+CfCmgjAb0GAI5QGpxKkQ==", "license": "MIT", "optional": true, "dependencies": { @@ -9849,6 +12699,8 @@ }, "node_modules/mjml-head-breakpoint": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-breakpoint/-/mjml-head-breakpoint-4.15.3.tgz", + "integrity": "sha512-Eo56FA5C2v6ucmWQL/JBJ2z641pLOom4k0wP6CMZI2utfyiJ+e2Uuinj1KTrgDcEvW4EtU9HrfAqLK9UosLZlg==", "license": "MIT", "optional": true, "dependencies": { @@ -9859,6 +12711,8 @@ }, "node_modules/mjml-head-font": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-font/-/mjml-head-font-4.15.3.tgz", + "integrity": "sha512-CzV2aDPpiNIIgGPHNcBhgyedKY4SX3BJoTwOobSwZVIlEA6TAWB4Z9WwFUmQqZOgo1AkkiTHPZQvGcEhFFXH6g==", "license": "MIT", "optional": true, "dependencies": { @@ -9869,6 +12723,8 @@ }, "node_modules/mjml-head-html-attributes": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-html-attributes/-/mjml-head-html-attributes-4.15.3.tgz", + "integrity": "sha512-MDNDPMBOgXUZYdxhosyrA2kudiGO8aogT0/cODyi2Ed9o/1S7W+je11JUYskQbncqhWKGxNyaP4VWa+6+vUC/g==", "license": "MIT", "optional": true, "dependencies": { @@ -9879,6 +12735,8 @@ }, "node_modules/mjml-head-preview": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-preview/-/mjml-head-preview-4.15.3.tgz", + "integrity": "sha512-J2PxCefUVeFwsAExhrKo4lwxDevc5aKj888HBl/wN4EuWOoOg06iOGCxz4Omd8dqyFsrqvbBuPqRzQ+VycGmaA==", "license": "MIT", "optional": true, "dependencies": { @@ -9889,6 +12747,8 @@ }, "node_modules/mjml-head-style": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-style/-/mjml-head-style-4.15.3.tgz", + "integrity": "sha512-9J+JuH+mKrQU65CaJ4KZegACUgNIlYmWQYx3VOBR/tyz+8kDYX7xBhKJCjQ1I4wj2Tvga3bykd89Oc2kFZ5WOw==", "license": "MIT", "optional": true, "dependencies": { @@ -9899,6 +12759,8 @@ }, "node_modules/mjml-head-title": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-head-title/-/mjml-head-title-4.15.3.tgz", + "integrity": "sha512-IM59xRtsxID4DubQ0iLmoCGXguEe+9BFG4z6y2xQDrscIa4QY3KlfqgKGT69ojW+AVbXXJPEVqrAi4/eCsLItQ==", "license": "MIT", "optional": true, "dependencies": { @@ -9909,6 +12771,8 @@ }, "node_modules/mjml-hero": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-hero/-/mjml-hero-4.15.3.tgz", + "integrity": "sha512-9cLAPuc69yiuzNrMZIN58j+HMK1UWPaq2i3/Fg2ZpimfcGFKRcPGCbEVh0v+Pb6/J0+kf8yIO0leH20opu3AyQ==", "license": "MIT", "optional": true, "dependencies": { @@ -9919,6 +12783,8 @@ }, "node_modules/mjml-image": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-image/-/mjml-image-4.15.3.tgz", + "integrity": "sha512-g1OhSdofIytE9qaOGdTPmRIp7JsCtgO0zbsn1Fk6wQh2gEL55Z40j/VoghslWAWTgT2OHFdBKnMvWtN6U5+d2Q==", "license": "MIT", "optional": true, "dependencies": { @@ -9929,6 +12795,8 @@ }, "node_modules/mjml-migrate": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-migrate/-/mjml-migrate-4.15.3.tgz", + "integrity": "sha512-sr/+35RdxZroNQVegjpfRHJ5hda9XCgaS4mK2FGO+Mb1IUevKfeEPII3F/cHDpNwFeYH3kAgyqQ22ClhGLWNBA==", "license": "MIT", "optional": true, "dependencies": { @@ -9945,6 +12813,8 @@ }, "node_modules/mjml-navbar": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-navbar/-/mjml-navbar-4.15.3.tgz", + "integrity": "sha512-VsKH/Jdlf8Yu3y7GpzQV5n7JMdpqvZvTSpF6UQXL0PWOm7k6+LX+sCZimOfpHJ+wCaaybpxokjWZ71mxOoCWoA==", "license": "MIT", "optional": true, "dependencies": { @@ -9955,6 +12825,8 @@ }, "node_modules/mjml-parser-xml": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-parser-xml/-/mjml-parser-xml-4.15.3.tgz", + "integrity": "sha512-Tz0UX8/JVYICLjT+U8J1f/TFxIYVYjzZHeh4/Oyta0pLpRLeZlxEd71f3u3kdnulCKMP4i37pFRDmyLXAlEuLw==", "license": "MIT", "optional": true, "dependencies": { @@ -9966,6 +12838,8 @@ }, "node_modules/mjml-parser-xml/node_modules/htmlparser2": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -9984,6 +12858,8 @@ }, "node_modules/mjml-preset-core": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-preset-core/-/mjml-preset-core-4.15.3.tgz", + "integrity": "sha512-1zZS8P4O0KweWUqNS655+oNnVMPQ1Rq1GaZq5S9JfwT1Vh/m516lSmiTW9oko6gGHytt5s6Yj6oOeu5Zm8FoLw==", "license": "MIT", "optional": true, "dependencies": { @@ -10017,6 +12893,8 @@ }, "node_modules/mjml-raw": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-raw/-/mjml-raw-4.15.3.tgz", + "integrity": "sha512-IGyHheOYyRchBLiAEgw3UM11kFNmBSMupu2BDdejC6ZiDhEAdG+tyERlsCwDPYtXanvFpGWULIu3XlsUPc+RZw==", "license": "MIT", "optional": true, "dependencies": { @@ -10027,6 +12905,8 @@ }, "node_modules/mjml-section": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-section/-/mjml-section-4.15.3.tgz", + "integrity": "sha512-JfVPRXH++Hd933gmQfG8JXXCBCR6fIzC3DwiYycvanL/aW1cEQ2EnebUfQkt5QzlYjOkJEH+JpccAsq3ln6FZQ==", "license": "MIT", "optional": true, "dependencies": { @@ -10037,6 +12917,8 @@ }, "node_modules/mjml-social": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-social/-/mjml-social-4.15.3.tgz", + "integrity": "sha512-7sD5FXrESOxpT9Z4Oh36bS6u/geuUrMP1aCg2sjyAwbPcF1aWa2k9OcatQfpRf6pJEhUZ18y6/WBBXmMVmSzXg==", "license": "MIT", "optional": true, "dependencies": { @@ -10047,6 +12929,8 @@ }, "node_modules/mjml-spacer": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-spacer/-/mjml-spacer-4.15.3.tgz", + "integrity": "sha512-3B7Qj+17EgDdAtZ3NAdMyOwLTX1jfmJuY7gjyhS2HtcZAmppW+cxqHUBwCKfvSRgTQiccmEvtNxaQK+tfyrZqA==", "license": "MIT", "optional": true, "dependencies": { @@ -10057,6 +12941,8 @@ }, "node_modules/mjml-table": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-table/-/mjml-table-4.15.3.tgz", + "integrity": "sha512-FLx7DcRKTdKdcOCbMyBaeudeHaHpwPveRrBm6WyQe3LXx6FfdmOh59i71/16LFQMgBOD3N4/UJkzxLzlTJzMqQ==", "license": "MIT", "optional": true, "dependencies": { @@ -10067,6 +12953,8 @@ }, "node_modules/mjml-text": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-text/-/mjml-text-4.15.3.tgz", + "integrity": "sha512-+C0hxCmw9kg0XzT6vhE5mFkK6y225nC8UEQcN94K0fBCjPKkM+HqZMwGX205fzdGRi+Bxa55b/VhrIVwdv+8vw==", "license": "MIT", "optional": true, "dependencies": { @@ -10077,6 +12965,8 @@ }, "node_modules/mjml-validator": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-validator/-/mjml-validator-4.15.3.tgz", + "integrity": "sha512-Xb72KdqRwjv/qM2rJpV22syyP2N3cRQ9VVDrN6u2FSzLq02buFNxmSPJ7CKhat3PrUNdVHU75KZwOf/tz4UEhA==", "license": "MIT", "optional": true, "dependencies": { @@ -10085,6 +12975,8 @@ }, "node_modules/mjml-wrapper": { "version": "4.15.3", + "resolved": "https://registry.npmjs.org/mjml-wrapper/-/mjml-wrapper-4.15.3.tgz", + "integrity": "sha512-ditsCijeHJrmBmObtJmQ18ddLxv5oPyMTdPU8Di8APOnD2zPk7Z4UAuJSl7HXB45oFiivr3MJf4koFzMUSZ6Gg==", "license": "MIT", "optional": true, "dependencies": { @@ -10096,6 +12988,8 @@ }, "node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "license": "MIT", "dependencies": { "minimist": "^1.2.6" @@ -10106,6 +13000,8 @@ }, "node_modules/moment": { "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "license": "MIT", "engines": { "node": "*" @@ -10113,50 +13009,53 @@ }, "node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/multer": { - "version": "1.4.4-lts.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", + "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", "license": "MIT", "dependencies": { "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" + "type-is": "^1.6.18", + "xtend": "^4.0.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 10.16.0" } }, "node_modules/mute-stream": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, "license": "ISC" }, - "node_modules/mz": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true, "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10164,15 +13063,19 @@ }, "node_modules/neo-async": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "license": "MIT" }, "node_modules/nestjs-i18n": { - "version": "10.4.9", + "version": "10.5.1", + "resolved": "https://registry.npmjs.org/nestjs-i18n/-/nestjs-i18n-10.5.1.tgz", + "integrity": "sha512-cJJFz+RUfav23QACpGCq1pdXNLYC3tBesrP14RGoE/YYcD4xosQPX2eyjvDNuo0Ti63Xtn6j57wDNEUKrZqmSw==", "license": "MIT", "dependencies": { "accept-language-parser": "^1.5.0", - "chokidar": "^3.5.3", - "cookie": "^0.5.0", + "chokidar": "^3.6.0", + "cookie": "^0.7.0", "iterare": "^1.2.1", "js-yaml": "^4.1.0", "string-format": "^2.0.0" @@ -10187,23 +13090,20 @@ "rxjs": "*" } }, - "node_modules/nestjs-i18n/node_modules/cookie": { - "version": "0.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/nestjs-pino": { - "version": "4.1.0", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/nestjs-pino/-/nestjs-pino-4.4.0.tgz", + "integrity": "sha512-+GMNlcNWDRrMtlQftfcxN+5pV2C25A4wsYIY7cfRJTMW4b8IFKYReDrG1lUp5LGql9fXemmnVJ2Ww10iIkCZPQ==", "hasInstallScript": true, "license": "MIT", "engines": { "node": ">= 14" }, "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "pino-http": "^6.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", + "pino": "^7.5.0 || ^8.0.0 || ^9.0.0", + "pino-http": "^6.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "rxjs": "^7.1.0" } }, "node_modules/nestjs-twilio": { @@ -10221,11 +13121,15 @@ }, "node_modules/nice-try": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "license": "MIT", "optional": true }, "node_modules/no-case": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "license": "MIT", "optional": true, "dependencies": { @@ -10234,15 +13138,21 @@ }, "node_modules/node-abort-controller": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true, "license": "MIT" }, "node_modules/node-addon-api": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", "license": "MIT" }, "node_modules/node-emoji": { "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, "license": "MIT", "dependencies": { @@ -10251,6 +13161,8 @@ }, "node_modules/node-fetch": { "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -10278,46 +13190,55 @@ }, "node_modules/node-int64": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true, "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.18", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, "node_modules/nodemailer": { - "version": "6.9.16", + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz", + "integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==", "license": "MIT-0", "engines": { "node": ">=6.0.0" } }, "node_modules/nopt": { - "version": "7.2.1", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "license": "ISC", - "optional": true, "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "1" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=6" } }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.2.tgz", - "integrity": "sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==", + "version": "10.9.3", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.3.tgz", + "integrity": "sha512-6Eh1u5Q+kIVXeA8e7l2c/HpnFFcwrkt37xDMujD5be1gloWa9p6j3Fsv3mByXXmqJHy+2cElRMML8opNT7xIJQ==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -10399,37 +13320,37 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/config": "^9.0.0", "@npmcli/fs": "^4.0.0", "@npmcli/map-workspaces": "^4.0.2", - "@npmcli/package-json": "^6.1.0", + "@npmcli/package-json": "^6.2.0", "@npmcli/promise-spawn": "^8.0.2", - "@npmcli/redact": "^3.0.0", - "@npmcli/run-script": "^9.0.1", - "@sigstore/tuf": "^3.0.0", - "abbrev": "^3.0.0", + "@npmcli/redact": "^3.2.2", + "@npmcli/run-script": "^9.1.0", + "@sigstore/tuf": "^3.1.1", + "abbrev": "^3.0.1", "archy": "~1.0.0", "cacache": "^19.0.1", - "chalk": "^5.3.0", - "ci-info": "^4.1.0", + "chalk": "^5.4.1", + "ci-info": "^4.2.0", "cli-columns": "^4.0.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", "glob": "^10.4.5", "graceful-fs": "^4.2.11", - "hosted-git-info": "^8.0.2", + "hosted-git-info": "^8.1.0", "ini": "^5.0.0", "init-package-json": "^7.0.2", - "is-cidr": "^5.1.0", + "is-cidr": "^5.1.1", "json-parse-even-better-errors": "^4.0.0", "libnpmaccess": "^9.0.0", - "libnpmdiff": "^7.0.0", - "libnpmexec": "^9.0.0", - "libnpmfund": "^6.0.0", + "libnpmdiff": "^7.0.1", + "libnpmexec": "^9.0.1", + "libnpmfund": "^6.0.1", "libnpmhook": "^11.0.0", "libnpmorg": "^7.0.0", - "libnpmpack": "^8.0.0", + "libnpmpack": "^8.0.1", "libnpmpublish": "^10.0.1", "libnpmsearch": "^8.0.0", "libnpmteam": "^7.0.0", @@ -10439,23 +13360,23 @@ "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^11.0.0", - "nopt": "^8.0.0", + "node-gyp": "^11.2.0", + "nopt": "^8.1.0", "normalize-package-data": "^7.0.0", "npm-audit-report": "^6.0.0", "npm-install-checks": "^7.1.1", - "npm-package-arg": "^12.0.0", + "npm-package-arg": "^12.0.2", "npm-pick-manifest": "^10.0.0", "npm-profile": "^11.0.1", "npm-registry-fetch": "^18.0.2", "npm-user-validate": "^3.0.0", - "p-map": "^4.0.0", + "p-map": "^7.0.3", "pacote": "^19.0.1", "parse-conflict-json": "^4.0.0", "proc-log": "^5.0.0", "qrcode-terminal": "^0.12.0", - "read": "^4.0.0", - "semver": "^7.6.3", + "read": "^4.1.0", + "semver": "^7.7.2", "spdx-expression-parse": "^4.0.0", "ssri": "^12.0.0", "supports-color": "^9.4.0", @@ -10463,7 +13384,7 @@ "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^6.0.0", + "validate-npm-package-name": "^6.0.1", "which": "^5.0.0", "write-file-atomic": "^6.0.0" }, @@ -10477,6 +13398,8 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "license": "MIT", "dependencies": { @@ -10588,7 +13511,7 @@ } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "8.0.0", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -10668,7 +13591,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "6.0.1", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -10678,7 +13601,6 @@ "lru-cache": "^10.0.1", "npm-pick-manifest": "^10.0.0", "proc-log": "^5.0.0", - "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", "which": "^5.0.0" @@ -10784,7 +13706,7 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "6.1.0", + "version": "6.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10793,9 +13715,9 @@ "glob": "^10.2.2", "hosted-git-info": "^8.0.0", "json-parse-even-better-errors": "^4.0.0", - "normalize-package-data": "^7.0.0", "proc-log": "^5.0.0", - "semver": "^7.5.3" + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -10814,19 +13736,19 @@ } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.1.2" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/redact": { - "version": "3.0.0", + "version": "3.2.2", "dev": true, "inBundle": true, "license": "ISC", @@ -10835,7 +13757,7 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "9.0.2", + "version": "9.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10862,21 +13784,21 @@ } }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", + "version": "0.4.3", "dev": true, "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "3.0.0", + "version": "3.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/protobuf-specs": "^0.4.1", "tuf-js": "^3.0.1" }, "engines": { @@ -10893,7 +13815,7 @@ } }, "node_modules/npm/node_modules/abbrev": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -10902,30 +13824,14 @@ } }, "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", + "version": "7.1.3", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/ansi-regex": { "version": "5.0.1", "dev": true, @@ -10994,7 +13900,7 @@ } }, "node_modules/npm/node_modules/brace-expansion": { - "version": "2.0.1", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "MIT", @@ -11034,19 +13940,6 @@ "node": ">=18" } }, - "node_modules/npm/node_modules/cacache/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { "version": "3.0.1", "dev": true, @@ -11062,18 +13955,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/cacache/node_modules/p-map": { - "version": "7.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/npm/node_modules/cacache/node_modules/tar": { "version": "7.4.3", "dev": true, @@ -11101,7 +13982,7 @@ } }, "node_modules/npm/node_modules/chalk": { - "version": "5.3.0", + "version": "5.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -11122,7 +14003,7 @@ } }, "node_modules/npm/node_modules/ci-info": { - "version": "4.1.0", + "version": "4.2.0", "dev": true, "funding": [ { @@ -11137,7 +14018,7 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.1.1", + "version": "4.1.3", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -11148,15 +14029,6 @@ "node": ">=14" } }, - "node_modules/npm/node_modules/clean-stack": { - "version": "2.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/npm/node_modules/cli-columns": { "version": "4.0.0", "dev": true, @@ -11245,7 +14117,7 @@ } }, "node_modules/npm/node_modules/debug": { - "version": "4.3.7", + "version": "4.4.1", "dev": true, "inBundle": true, "license": "MIT", @@ -11308,7 +14180,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/exponential-backoff": { - "version": "3.1.1", + "version": "3.1.2", "dev": true, "inBundle": true, "license": "Apache-2.0" @@ -11323,12 +14195,12 @@ } }, "node_modules/npm/node_modules/foreground-child": { - "version": "3.3.0", + "version": "3.3.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -11377,7 +14249,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "8.0.2", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -11389,7 +14261,7 @@ } }, "node_modules/npm/node_modules/http-cache-semantics": { - "version": "4.1.1", + "version": "4.2.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause" @@ -11408,12 +14280,12 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.5", + "version": "7.0.6", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -11454,15 +14326,6 @@ "node": ">=0.8.19" } }, - "node_modules/npm/node_modules/indent-string": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/ini": { "version": "5.0.0", "dev": true, @@ -11516,7 +14379,7 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.1.0", + "version": "5.1.1", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -11616,12 +14479,12 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "7.0.0", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/installed-package-contents": "^3.0.0", "binary-extensions": "^2.3.0", "diff": "^5.1.0", @@ -11635,12 +14498,12 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "9.0.0", + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/run-script": "^9.0.1", "ci-info": "^4.0.0", "npm-package-arg": "^12.0.0", @@ -11656,12 +14519,12 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "6.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0" + "@npmcli/arborist": "^8.0.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -11694,12 +14557,12 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "8.0.0", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^8.0.0", + "@npmcli/arborist": "^8.0.1", "@npmcli/run-script": "^9.0.1", "npm-package-arg": "^12.0.0", "pacote": "^19.0.0" @@ -11842,7 +14705,7 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "4.0.0", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "MIT", @@ -11858,19 +14721,6 @@ "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", "dev": true, @@ -11944,28 +14794,15 @@ } }, "node_modules/npm/node_modules/minizlib": { - "version": "2.1.2", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^7.1.2" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" + "node": ">= 18" } }, "node_modules/npm/node_modules/mkdirp": { @@ -11996,20 +14833,20 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "11.0.0", + "version": "11.2.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", "make-fetch-happen": "^14.0.3", "nopt": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "tar": "^7.4.3", + "tinyglobby": "^0.2.12", "which": "^5.0.0" }, "bin": { @@ -12028,19 +14865,6 @@ "node": ">=18" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { "version": "3.0.1", "dev": true, @@ -12083,12 +14907,12 @@ } }, "node_modules/npm/node_modules/nopt": { - "version": "8.0.0", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" @@ -12097,15 +14921,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/nopt/node_modules/abbrev": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/normalize-package-data": { "version": "7.0.0", "dev": true, @@ -12163,7 +14978,7 @@ } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "12.0.0", + "version": "12.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -12236,19 +15051,6 @@ "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/npm/node_modules/npm-user-validate": { "version": "3.0.0", "dev": true, @@ -12259,15 +15061,12 @@ } }, "node_modules/npm/node_modules/p-map": { - "version": "4.0.0", + "version": "7.0.3", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -12350,7 +15149,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.1.2", + "version": "7.1.0", "dev": true, "inBundle": true, "license": "MIT", @@ -12398,12 +15197,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm/node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/promise-retry": { "version": "2.0.1", "dev": true, @@ -12438,7 +15231,7 @@ } }, "node_modules/npm/node_modules/read": { - "version": "4.0.0", + "version": "4.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -12480,21 +15273,6 @@ "node": ">= 4" } }, - "node_modules/npm/node_modules/rimraf": { - "version": "5.0.10", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", "dev": true, @@ -12503,7 +15281,7 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.6.3", + "version": "7.7.2", "dev": true, "inBundle": true, "license": "ISC", @@ -12548,29 +15326,29 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^3.0.0", - "@sigstore/tuf": "^3.0.0", - "@sigstore/verify": "^2.0.0" + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/bundle": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.4.0" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -12586,15 +15364,15 @@ } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/sign": { - "version": "3.0.0", + "version": "3.1.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^14.0.1", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", "proc-log": "^5.0.0", "promise-retry": "^2.0.1" }, @@ -12603,14 +15381,14 @@ } }, "node_modules/npm/node_modules/sigstore/node_modules/@sigstore/verify": { - "version": "2.0.0", + "version": "2.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^3.0.0", + "@sigstore/bundle": "^3.1.0", "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.4.1" }, "engines": { "node": "^18.17.0 || >=20.5.0" @@ -12627,7 +15405,7 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.8.3", + "version": "2.8.5", "dev": true, "inBundle": true, "license": "MIT", @@ -12641,12 +15419,12 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.4", + "version": "8.0.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.1.1", + "agent-base": "^7.1.2", "debug": "^4.3.4", "socks": "^2.8.3" }, @@ -12691,7 +15469,7 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.20", + "version": "3.0.21", "dev": true, "inBundle": true, "license": "CC0-1.0" @@ -12830,6 +15608,31 @@ "node": ">=8" } }, + "node_modules/npm/node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/npm/node_modules/text-table": { "version": "0.2.0", "dev": true, @@ -12842,6 +15645,48 @@ "inBundle": true, "license": "MIT" }, + "node_modules/npm/node_modules/tinyglobby": { + "version": "0.2.14", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.6", + "dev": true, + "inBundle": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/npm/node_modules/treeverse": { "version": "3.0.0", "dev": true, @@ -12929,7 +15774,7 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "6.0.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -13088,6 +15933,9 @@ }, "node_modules/npmlog": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "are-we-there-yet": "^2.0.0", @@ -13098,6 +15946,8 @@ }, "node_modules/nth-check": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -13109,6 +15959,8 @@ }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13125,7 +15977,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.3", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -13135,247 +15989,319 @@ } }, "node_modules/oci-accessgovernancecp": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-accessgovernancecp/-/oci-accessgovernancecp-2.116.0.tgz", + "integrity": "sha512-7tjZFMMzp60D6kt/bLNgjj1Qj1uCT+2W0HMFjATgk1lqZWEMs2fmsp1Hjlwnr9fhNSGlv2yoKYptlvErm4FE1g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-adm": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-adm/-/oci-adm-2.116.0.tgz", + "integrity": "sha512-56RQNyvr1UXH+vA7ClihzS81l9WDhAReUNOrUCZo6pgno2Mep760lgLOwxaujEfvBUMbjxW90skgDk6HzEl3Lw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" - } - }, - "node_modules/oci-aianomalydetection": { - "version": "2.99.0", - "license": "(UPL-1.0 OR Apache-2.0)", - "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-aidocument": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-aidocument/-/oci-aidocument-2.116.0.tgz", + "integrity": "sha512-g51hwuuLQgPUNbqEoZY4hXD3nxGMaEQd51cLSxsprzlEW7sZH36VQ/VwElYipN5YeFRzb+uT1aiTpkrGR0Wtag==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-ailanguage": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-ailanguage/-/oci-ailanguage-2.116.0.tgz", + "integrity": "sha512-t6INRVgFg0pDZKlbQArsYXYW5MF11p/3kZI1BJdXLqAhzfc46eIuXTt2+4T1gSXlwuGl5Lu/9vtWK3AUemut8g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-aispeech": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-aispeech/-/oci-aispeech-2.116.0.tgz", + "integrity": "sha512-NuVzjXuoVTMypQwgyMn3niRltL026UJMdQS0tyFy0hUw6u7CcsyxYSgTmRym0qP+oVSpdejOzb/ljv58dS9o2Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-aivision": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-aivision/-/oci-aivision-2.116.0.tgz", + "integrity": "sha512-26QS+i+f3STX9BNVXHpEhkpWZs+cQFsLkjDj9d8dr4BeCTCLtFtj9FOVqQ5RN3KVhVipCUM3HbLF7O8SFWmN5Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-analytics": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-analytics/-/oci-analytics-2.116.0.tgz", + "integrity": "sha512-eIPs7fM+uIYTpZDEVJDm3RsxGZ4pMt0gUEbZROB+u1uncS/2fZwpMlxP2BABqGs1Tgi3CwP1+AglvEGDwGdvkQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-announcementsservice": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-announcementsservice/-/oci-announcementsservice-2.116.0.tgz", + "integrity": "sha512-QUnfCpWg5U4GGDNfYbQgwYOllEIc2epkPuq4jr7YRu2w3UZzjDvtSHz4sARKxuKRllLYUhh9iyJ46ON5vWb9+Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-apiaccesscontrol": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-apiaccesscontrol/-/oci-apiaccesscontrol-2.116.0.tgz", + "integrity": "sha512-OKamtsIkA3AnP2ITw3NKiA4bA5UZNUdTjwqYZSM7omOAqPQGq8hmHHPhzFDPxiqxuKDUPOQz/q1YfuoDEAD17g==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-apigateway": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-apigateway/-/oci-apigateway-2.116.0.tgz", + "integrity": "sha512-wdCvbdvGFYGuc4m/jMdXHCumVeQUhHrjKmRe8mPEXu8KASf6f/1wFFXqbC/02xDE6raCIe3UbNJDSWxLtjLgHA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-apiplatform": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-apiplatform/-/oci-apiplatform-2.116.0.tgz", + "integrity": "sha512-8T3dwDfWXqL+LXyymvEAturJgDVef+1yTUCBfzN2tTHy48l26OWuENuxoLeSplasViqU8ZMuJf81h8gMdw9YhA==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-apmconfig": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-apmconfig/-/oci-apmconfig-2.116.0.tgz", + "integrity": "sha512-xQ0Vy57e2we0Axqxhe8kEp6lv+8qEwjIh/FtpOmK7meK7P26thMjquDy7sqk9LZAjU5ZJf5iImtB2N8rCfYzRg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-apmcontrolplane": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-apmcontrolplane/-/oci-apmcontrolplane-2.116.0.tgz", + "integrity": "sha512-pOvmEbDNiQ4RQFD09DSzctM3Xb8o91TbrCJ946tuIhWH18nmmCuxvI0hhcT8iwYVQbCrxH7zS+KnJ8q4E1wgcg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-apmsynthetics": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-apmsynthetics/-/oci-apmsynthetics-2.116.0.tgz", + "integrity": "sha512-IgQ3rnLlsZlG1gaiSuNOHW3syKSb8e7awvD0wVARvwgBlf0K0ZpUffI79yESuZq3/+xvi30MZ9TsIqV9M1Vqnw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-apmtraces": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-apmtraces/-/oci-apmtraces-2.116.0.tgz", + "integrity": "sha512-Z3e4Z5jjeAL0a76ojlDGLQqvtAixUmYjA41wHIshgQwHTnYNNPQVJas5sDAcRufoBIbWcfn+WcAOHifv6GTLOg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-appmgmtcontrol": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-appmgmtcontrol/-/oci-appmgmtcontrol-2.116.0.tgz", + "integrity": "sha512-4jwm997T5IjFD39sR/mhaT75dERObwt24U0EZHFG1T01wNV0UA+zoGyChq3snzxqchpIeQtBfMTThIVeHDrRWg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-artifacts": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-artifacts/-/oci-artifacts-2.116.0.tgz", + "integrity": "sha512-1rWhINzmvP3BJ2zNedI+3JosOtE7FmZXAwaiEL0FrxB9lUzSTUCR4N4JcLYtkxmnMWRorPIDBWMxV+zmxes1DQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-audit": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-audit/-/oci-audit-2.116.0.tgz", + "integrity": "sha512-IYbY39hy1JBaeaiAyf0TxWidKC6TjtJBKNDltyOI54XcqeXz+lX6jbw/YTYGht3cW3PxzfAeIQtMER1FJ6hyrA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-autoscaling": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-autoscaling/-/oci-autoscaling-2.116.0.tgz", + "integrity": "sha512-Fz46HxFllUu85xJp6jgJk1eUz3X9nB/nVX4G6LQQUEmYoeL+0wxoC/apYx1+BUwUm6fath39rMEEGYxWCo6ZyA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-bastion": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-bastion/-/oci-bastion-2.116.0.tgz", + "integrity": "sha512-R3U+++fiCngDwxr712JThFuEUQbnOCyLHmZuUG02T04P+/YmwqyahwK9v8UH9XF4WvO5CYU+OhoaCNByeYMc4A==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-bds": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-bds/-/oci-bds-2.116.0.tgz", + "integrity": "sha512-whYh3AyrKbFmN8wUegpgcoixFJiwnn+A2Hu6ouOxzy/m/agw3VhJEY8rN+RioSnuN1aBDIyZyxunw0mkXAlM2Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-blockchain": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-blockchain/-/oci-blockchain-2.116.0.tgz", + "integrity": "sha512-8+Vg/BaKms9/ScxKuZ7hvQUncLYSNNOJSjHs9qJenqwLZ1GywseHX3HyTMFsqmVqPS1DhBy6NdGGxu6w2G6tYA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-budget": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-budget/-/oci-budget-2.116.0.tgz", + "integrity": "sha512-jAY5cMHc1CtHOKkUSlt7fGBx5yfYXLcX2HGwB2WRh6LGhxV7yFM7JKg2BIsW2HfayesXQij6vIdTDGqQToU7Ew==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-capacitymanagement": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-capacitymanagement/-/oci-capacitymanagement-2.116.0.tgz", + "integrity": "sha512-5TfvmDQ/1t/zXBiQ7XkyUbJV3VmTNtCCRKv8BIPhU+4QqFPZirTCTcEWcRAUxyr0w63neY51n/iIRCs3WjngIQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-certificates": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-certificates/-/oci-certificates-2.116.0.tgz", + "integrity": "sha512-PCtoPdt1N1rEGnnJQP/ih/x9aOW7g+nMLVSmZ0uARucw/d4tYoyu/+pKEcFAdklTwEXj11jkzOcdTJAIsWhIhg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-certificatesmanagement": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-certificatesmanagement/-/oci-certificatesmanagement-2.116.0.tgz", + "integrity": "sha512-mcwXzI1I0ppxOMOP0ue8zFtD+DQsOrqHBwnVsJKoO0aB2vBI8gDZ7Lmmk5uRdjbvVQcDBEp3KQOxoteNu9hbIw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-cims": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-cims/-/oci-cims-2.116.0.tgz", + "integrity": "sha512-6OulmkmIRoHqoVuh+qnWfEKEaFe+G7nobKESwe9JI3UnznvZuROLLmnOY7N+Rzvn0BoQo5dXlH/nAwU8z+Pheg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-cloudbridge": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-cloudbridge/-/oci-cloudbridge-2.116.0.tgz", + "integrity": "sha512-ZZUTRosL62QQnfW+0Q+B5PsQU6wR3U4NY/Ev8Y1ag1Mnah0yCz+2dC0yF12tFKHLfBEBgGQaV0CyJyDt03Khmw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-cloudguard": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-cloudguard/-/oci-cloudguard-2.116.0.tgz", + "integrity": "sha512-nwEHU8E9wTU1LuKLdbPfgu04JhrPLtqsGzP2tlcHu7dKQxzkLDYXYtczea637y0TyGRWOig0Al6R+ROmc9mYzA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-cloudmigrations": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-cloudmigrations/-/oci-cloudmigrations-2.116.0.tgz", + "integrity": "sha512-HhmW/11xd9rOrg0KV8XwsML8x6SnfBPdOOg+/75f+AQAB5YfKE2opkKCgAkuVM/48/7OZWkXLJQ5LC80Y2MgLA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-clusterplacementgroups": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-clusterplacementgroups/-/oci-clusterplacementgroups-2.116.0.tgz", + "integrity": "sha512-kbGPZUwO0wMVWUS/Y0xiNEGDgOnXAhFAXqpWZQOe8Hh4tFY6BpSsXmPJVt5BSPIn2mn4lAK9c4z3EkhfH8vX/A==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-common": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-common/-/oci-common-2.116.0.tgz", + "integrity": "sha512-KHurk6gBYXx48oGCCnmQu199QwHew0c+b9QyL3CFnyIDPObPGH9YNaQkH55qHsuLqcREZshWu0ztHVsckltpkQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { "@types/isomorphic-fetch": "0.0.35", @@ -13393,1106 +16319,1449 @@ "uuid": "3.3.3" } }, + "node_modules/oci-common/node_modules/@types/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/oci-common/node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/oci-common/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/oci-common/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/oci-common/node_modules/uuid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/oci-computecloudatcustomer": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-computecloudatcustomer/-/oci-computecloudatcustomer-2.116.0.tgz", + "integrity": "sha512-lrXkwH5fbEdC2F5GZbUVYV7+1jI2ViUvQ8NzsEKIDTZURkdoXUv38iDoWMgTAw8XoTHEoCc2JRPwCHnL5S1teA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-computeinstanceagent": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-computeinstanceagent/-/oci-computeinstanceagent-2.116.0.tgz", + "integrity": "sha512-C29w26I3dtUF9TrlkscpVH2xyjB7rKYoIuOfJSOl/v065dbW0W4SyaawM1yJZGxZzZarjlu6FtkR2j3dIYe1yA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-containerengine": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-containerengine/-/oci-containerengine-2.116.0.tgz", + "integrity": "sha512-z4OaNtw//0LQ/aSKQ+f+CAR0ifvMKHW/+AdEFH2MiEtSXFJ/w9uChTr2cfzauhNoKqHLtsRjjnCvvHIomUdjeQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-containerinstances": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-containerinstances/-/oci-containerinstances-2.116.0.tgz", + "integrity": "sha512-fpfIqYusVivtURA+iR8azj55oG9jBD4QLtFtbm18ahZb1mHcvQezjtZLmuXYoiECGMEN4VYdzARBhEtv7qCzeQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-core": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-core/-/oci-core-2.116.0.tgz", + "integrity": "sha512-hb/UvyK7QHHut9AuA/5V0WIpaXJnHNANYyDLtm3v6bZ2kl7dW4YWlG1EYzHFnaFoFtowH0UMvIdeZgS5EWqSNA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-dashboardservice": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-dashboardservice/-/oci-dashboardservice-2.116.0.tgz", + "integrity": "sha512-3NfkiHEua9Ip8j1bUfytqARzNmjrkjmJ1b/ZMpwzE7AFEvCHsb8qfwEi15XDqyUGhrveMsmZoIlRexBMQoQeoA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-database": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-database/-/oci-database-2.116.0.tgz", + "integrity": "sha512-AHc+wsYQV/wYH7ZRJLdDToDE3Jd227T0IEh1Y/Zq6BSlYoYwyEZlaW6kfApmNi3hthGGtdlpI3VPWY/Yhhe8UQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-databasemanagement": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-databasemanagement/-/oci-databasemanagement-2.116.0.tgz", + "integrity": "sha512-Tj9PQimDELoEQwvM4evi3sS0oKUmBZ5HLm/4C99OyocQoTMBKVRt4BwtonxMe0zZnvdroUArO0jWclUts5inNw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-databasemigration": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-databasemigration/-/oci-databasemigration-2.116.0.tgz", + "integrity": "sha512-3eBCMlvlMZyyKbpNOV1lWPUjpAn1VHWoJ/TIVUt9BNWdDJMFjuNck7IRuEHAW/yp/mL5x35FnBu3aH4GISRR7g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-databasetools": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-databasetools/-/oci-databasetools-2.116.0.tgz", + "integrity": "sha512-IDBQRXLho79W/oPhG7H9sA/BmFI95EHizvXgaL4Y6SpQDhkCVfyaWdGNs7JQZb9uqVy0w4vlUfYh2Vi3KmoJxg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-datacatalog": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-datacatalog/-/oci-datacatalog-2.116.0.tgz", + "integrity": "sha512-xaYXV/gKnrPpBdaYWC+k2iLQVZor/4RsB26nrjVzDCAsIe/PfOwi+PR+zZhHGYMlXiAA6YA0Pt9tHiKbmXdXMQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-dataflow": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-dataflow/-/oci-dataflow-2.116.0.tgz", + "integrity": "sha512-NRq/yaZWkICXBVGdNwgM307pO3nTol8PG7SgnPN14UR1zoDXZZTH2S9KBGGu7NgKg7q215kU5xOHFpCcA/aQtg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-dataintegration": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-dataintegration/-/oci-dataintegration-2.116.0.tgz", + "integrity": "sha512-QJzWGA1hI6xV1lpnErcWLVCbFqnunBXhfHLasSKe2++m3wUxq+WqOexBoy8oLiBFLoTV7nfAuAA+NuaZ/S2cdQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-datalabelingservice": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-datalabelingservice/-/oci-datalabelingservice-2.116.0.tgz", + "integrity": "sha512-lWajkLtY2b2Lqt8akh36an/J1nhktPRMh4yrBSOjvqbQvTGk24vbuFn4oh2AksnvpUmp+yuEJcdn7tJztlmtxw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-datalabelingservicedataplane": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-datalabelingservicedataplane/-/oci-datalabelingservicedataplane-2.116.0.tgz", + "integrity": "sha512-ObDUH+6UFCJbtGwbHzYexglHV9Y3oAY0GQ8NuDXWQnKqn2nh2S2IyAyHALR1FC1tc7chQDYfeCt/W2K7czoDIw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-datasafe": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-datasafe/-/oci-datasafe-2.116.0.tgz", + "integrity": "sha512-Ruk2NgG2euqR15x36Y2UHfLloutQTDwguWSe5Un41DdQVGOUH3zFVEVlGxcTaUXMrjqSsq2KMZZ0QrEgd8Rm3A==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-datascience": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-datascience/-/oci-datascience-2.116.0.tgz", + "integrity": "sha512-5Y9paYeysPuJj8F2/uVgwG+pNFt9mo3ZFwVlUrlK7GbcWheudvndHyoRx5MFm+GwDbUcjgov5O0021q1t7mqNQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-dblm": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-dblm/-/oci-dblm-2.116.0.tgz", + "integrity": "sha512-ahbgYdU1HOFzgLe5f/QzPFe4nxitM81ZaxpTMzMPZYiVWgl6JLZkokJgvSfkkeCNI7QtDLc6LZQzk/15RDLwtw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-dbmulticloud": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-dbmulticloud/-/oci-dbmulticloud-2.116.0.tgz", + "integrity": "sha512-XEBtdqMenFJYmHPsd2DX0paLOU9FBhCTGe1/ZqbTYObkNWzm0/1zYYm7xosyvQXA1f2KD9T9yv94DL6MPmGduw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-delegateaccesscontrol": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-delegateaccesscontrol/-/oci-delegateaccesscontrol-2.116.0.tgz", + "integrity": "sha512-4s/9NEUJCUMVj4Sudw8MoOp1XCtAIhA2T6gTxlYFKFlIXHGhhWZqjHeMHDTswsnvDSH3vU4tLP5DQSgyRQUAIw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-demandsignal": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-demandsignal/-/oci-demandsignal-2.116.0.tgz", + "integrity": "sha512-rHLoxXh52uQ3CDljMeK/qwwAuXeFLz38LYUrVmKkQg3RkhD70zGlF1+BEwgHA+SlxD1sjvNW26kq0j0Lu2r3AQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-desktops": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-desktops/-/oci-desktops-2.116.0.tgz", + "integrity": "sha512-Q64W/01enw/Rb+pI+OL7n2k05BIu5F0X0S1ZD3sdsTajFV9n/gZIckBo5R3KQoqZIfnNGNYfJp0O3JvAriAKIw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-devops": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-devops/-/oci-devops-2.116.0.tgz", + "integrity": "sha512-tbVTBhyAsLmZ+E7oTvQB+YFjtRPzpIYPXsITbyF55/8FsIbWqaR4BLK1FoXiOjv4r8djoMR0kA271Y8ZR3aiXQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-disasterrecovery": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-disasterrecovery/-/oci-disasterrecovery-2.116.0.tgz", + "integrity": "sha512-NuMbylzV2MT/GM83rRCQjpqlwiSN/RLjSxMzat5XtBWNMn/2fcSl2hPz9UQ1WY61ED5aT2CBf4nftRRfhwDRWg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-distributeddatabase": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-distributeddatabase/-/oci-distributeddatabase-2.116.0.tgz", + "integrity": "sha512-j9lFO/vDUxteIXIKqLbAj5sKXpP6mwqbLBF3HdGg/mtn9gRKBSechK40Yp8LfyJ3dQTA+vHLOf0UjZC55F19Xg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-dns": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-dns/-/oci-dns-2.116.0.tgz", + "integrity": "sha512-sMe3a0DXuoNwxOQssBE5xDBdoGl+3fG37GMWMf5TArGTSasbZazewaDZ6n0EdvXyG9JQYo5xaUwXaYTvxpLu8w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" - } - }, - "node_modules/oci-dts": { - "version": "2.99.0", - "license": "(UPL-1.0 OR Apache-2.0)", - "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-email": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-email/-/oci-email-2.116.0.tgz", + "integrity": "sha512-62OwOMjILSRTiBLMNcXUNeBLn+1t0ovML2tBcgBM1Dq2U070FR5oLLSit/Lwsd+iMOR8gHqyM1fJBx9fHaq91Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-emaildataplane": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-emaildataplane/-/oci-emaildataplane-2.116.0.tgz", + "integrity": "sha512-uhoGTLtary5onfHPdUgwYMVHl1h8jL5+5a9+OmM2fkrWnzgXJ2+b7xjQA9Xe5nxCmrzO7O0Nb2se/5LGEhOIGg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-emwarehouse": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-emwarehouse/-/oci-emwarehouse-2.116.0.tgz", + "integrity": "sha512-0no0vlNphwQGnPzzs4pe8tpOAQX4QZqbRK0MB9TIivhaouwpyI6AaUJNAwITkPJ7qZxFumr9bI2JO9zahrhDug==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-events": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-events/-/oci-events-2.116.0.tgz", + "integrity": "sha512-qJ+hGl2ZRBFXn3Wev9sqNr5hlWJ7hnyU45F2K+Tf3DItqMCt3XKwJdLnLj/WyJgSmCNw4fJ7jCtYHCQ8lIWwsQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-filestorage": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-filestorage/-/oci-filestorage-2.116.0.tgz", + "integrity": "sha512-cipHiaZJTVFPlsTXT360m9sGXciLPT/WrNYTPwLBoXznKndDZ+0fmVzrjPQ4F/lz3ROpD8lsiV3WyAuhIcGsYA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-fleetappsmanagement": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-fleetappsmanagement/-/oci-fleetappsmanagement-2.116.0.tgz", + "integrity": "sha512-1QV2on7Xpjp8r0W3DlQgDrFy6cC8b4fn2DTg3z70Yu74ev49rLVSxqNfxH1CaTpbJxB6NC9h3YpK3I8mdtLoHA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-fleetsoftwareupdate": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-fleetsoftwareupdate/-/oci-fleetsoftwareupdate-2.116.0.tgz", + "integrity": "sha512-vvGamiRinI7qckXeP5hThigwKw9JqRIxJS8nPuYBLvG2tuZEA/yiF7wAXxBynxxTf2yVyT4bHaxrunVnDotXWA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-functions": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-functions/-/oci-functions-2.116.0.tgz", + "integrity": "sha512-NFtHkO2e2XoX1F7kOCbMDXA9nLGWXmEEYxXRIabKsHJkHR4FfoewX248ovvk0+iu2JQbJcjDZsuo2X2tGYp9WQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-fusionapps": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-fusionapps/-/oci-fusionapps-2.116.0.tgz", + "integrity": "sha512-4ULLYxO/SUvUkLlh7efjj7VDr3gb7ANqJYIbIDRffzKkDJw90CBqpf6q6R7Dhi7I5phbzZhSr0fxM2sJCpem8w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-generativeai": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-generativeai/-/oci-generativeai-2.116.0.tgz", + "integrity": "sha512-lr5PK9W+F3yJpI09QhFAkv8D54O1p+897AdgTi7fKG5CO8MyB2hbc17TqsxDteyWaBh8LAJI4oEfbCm0RmYwkg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-generativeaiagent": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-generativeaiagent/-/oci-generativeaiagent-2.116.0.tgz", + "integrity": "sha512-Pl5nl9WBogmdATFptnJ1w0pH6T2J+93+a+rD0bJSRFWKa1ap3GCwu5AyKiduuuiupK4WGSsRRmhr1iqJxHOxvw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-generativeaiagentruntime": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-generativeaiagentruntime/-/oci-generativeaiagentruntime-2.116.0.tgz", + "integrity": "sha512-OOtZBTtFEVEAZdJRvuS2ZIq0PI0YY6L8Ja13wNCP2fEsb12nsCROfjaMm3CGbZlVF+59TPKzc9Z2rMXm4yt+Uw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-generativeaiinference": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-generativeaiinference/-/oci-generativeaiinference-2.116.0.tgz", + "integrity": "sha512-81N17pU5ZiKTSrcJli4UyeD4ZyM0l1svTIuSzRNf9JEZqq/59BR385lUU8FNzL53OXfVv4VXpuOXro90CBG48w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-genericartifactscontent": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-genericartifactscontent/-/oci-genericartifactscontent-2.116.0.tgz", + "integrity": "sha512-9VFnIT7oHf10Gh6zBjEADBmLJQcdACUvKza0KxjOdvCjvNOYheywD4i0FHJfVBLd4n6ImYJcz9YbKYw8Dq6faQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-globallydistributeddatabase": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-globallydistributeddatabase/-/oci-globallydistributeddatabase-2.116.0.tgz", + "integrity": "sha512-+gBrG3W4FDa1lCT9El7yOrUG3CpP56SmnDCB/2rYNdjgWxbS15JzjKUmv3f7AEV8EutlpKFqoDFTOypQn56eqg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-goldengate": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-goldengate/-/oci-goldengate-2.116.0.tgz", + "integrity": "sha512-os0olX74bnHtIVCqo9Xn3jiCF0hzVAkGeabzZoUx1aoDPQ4avDakMi7DH+kJWp65SgHekacTrg66VS56UOh5sw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-governancerulescontrolplane": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-governancerulescontrolplane/-/oci-governancerulescontrolplane-2.116.0.tgz", + "integrity": "sha512-faxdrVybEe7m8Y1dkjsUeYQxVENUW6mdK4Q7iAz7XWGFNcrYPJdqfNCWqx4k/Kt/DG6yilIIdoXTW8KxVPcmdw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-healthchecks": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-healthchecks/-/oci-healthchecks-2.116.0.tgz", + "integrity": "sha512-ZyprjAkdyd4cdxwPLRsw8FC7pbzPWhWaclh7+hg/Iw2W+DRboma50oMl/Ne7x+/dzHvW/AH2xc+t1c5LHX648w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-identity": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-identity/-/oci-identity-2.116.0.tgz", + "integrity": "sha512-nv4Obyb+z3sR2hk/EBHVCbArVDw8gJnNk9xMB+utzqYTVaw2rLN8XQX++H/Fyqc9OV2pH73sS1+nQvcaZhuAjw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-identitydataplane": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-identitydataplane/-/oci-identitydataplane-2.116.0.tgz", + "integrity": "sha512-jvLiawDX/mNjPc2ChLztRD70uY925VEDl9K07eOMAEa88fDnvQxykPWIxJ/wH0Oq3nnSsNnAOo9UJrPy7qF7XA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-identitydomains": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-identitydomains/-/oci-identitydomains-2.116.0.tgz", + "integrity": "sha512-nPmOfhaxQTDRIzdKTTMdD/TiZwhAPrAZCRyrz2HC4OMQLEZhdMoz9ZDY0LcIwbfh3kWR792EHYmwDBfQT7FW0g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-integration": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-integration/-/oci-integration-2.116.0.tgz", + "integrity": "sha512-2nAHsrN+GzpWoIsXHVmsoeED1IISzVlBqtGg+cn4uVun7p56j+KscaA+TahW1pHmM4Ku03NDZSuwBA58hPvTKQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-jms": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-jms/-/oci-jms-2.116.0.tgz", + "integrity": "sha512-A04DC1ww/0ZwHiS+boxMZg7CMZx6rTpuA6cOshiYLxxdiqgvLmEEWYPt/CRIqmF12XzykMG/eIcckYvoBa8+Ew==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-jmsjavadownloads": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-jmsjavadownloads/-/oci-jmsjavadownloads-2.116.0.tgz", + "integrity": "sha512-Bib3SNnxwR78rrK0pa8/EkMQpIT9yLXjaQF2ehQIAkGS0xort5ICnWKgpuZs5zz2i2Wob6czRIGFRRLxAYY+Pw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-keymanagement": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-keymanagement/-/oci-keymanagement-2.116.0.tgz", + "integrity": "sha512-tHdmc3RbkYoJ5MbIsQHm+rlBH1SyasM+XvWG1LDUa675EsP9Cmq5N+aYhhMTskmNCXywkZtvYSFpweMcW6ppWQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-licensemanager": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-licensemanager/-/oci-licensemanager-2.116.0.tgz", + "integrity": "sha512-n/0Xov6Dtkjx3eRNZtU/1PMprESqTwmkm0XeEiTG1Ner/JbZNozmKz6tn0WvKSq95Lz7PTI0bAENc7U2UL6k7g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-limits": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-limits/-/oci-limits-2.116.0.tgz", + "integrity": "sha512-lMCyR2e6tBtYdyRamXLc+1mcxfnRn2PnY+0rp9iRAhkSexr9BCbrgbwiaO76rZ8OY5AuLQo6giNXLQQQMe8cyQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-loadbalancer": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-loadbalancer/-/oci-loadbalancer-2.116.0.tgz", + "integrity": "sha512-77GbI38XZgNLvqPONEavIyWTXfYVSSg6dYfq/aW+CWCgu3ObRxdjovxFiZ0b4CrjBWemz0wGUkvigrrZClLnKQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-lockbox": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-lockbox/-/oci-lockbox-2.116.0.tgz", + "integrity": "sha512-vNxi4k9doJAyZiY56zUjmQYgIRD6GknINiHvcvD3LJUAeQpxcsdQIayIKFSJEIn41BrsKEVSWggRSFuhrwbKIA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-loganalytics": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-loganalytics/-/oci-loganalytics-2.116.0.tgz", + "integrity": "sha512-8SMTtuLQUS59coXEPJHhnH1WoCAcwUZvmOBDjAxpbi4PiwPyNkvb3IRypb/41aDze6vlgQPBvSO0rIJ31RnZwA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-logging": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-logging/-/oci-logging-2.116.0.tgz", + "integrity": "sha512-sSXeqRzDK8eEyAymHiI/pfNQXz3ETQRQ8YVF57H782xH4emPromIMcDpchVoa0QKJPzrgY8gNht9OKo8G127FQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-loggingingestion": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-loggingingestion/-/oci-loggingingestion-2.116.0.tgz", + "integrity": "sha512-fMV5nmev0GWS2kyfQ8v2qzSg7TYoYJHfIb7IjuKWWCEyE3rzjJXZ4qDZT6Zvd7MRzVaA/GzHkVlLedyKOcp8aA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-loggingsearch": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-loggingsearch/-/oci-loggingsearch-2.116.0.tgz", + "integrity": "sha512-zEZm3KAtijs8SRkq/y18AoNHtYCzJYZNwhjPdpKnFtmQ2oJxcClaDnAJaenop3j3BnCv8HPW0rJN+LYjYHgx2w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-lustrefilestorage": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-lustrefilestorage/-/oci-lustrefilestorage-2.116.0.tgz", + "integrity": "sha512-uHNWUaqVlKer/s9f3ILGGN9Asy8yxmlveyEPXp7zDq5FEgFAJWCIeJYfF07XSOkjPalaImojiT5UEkJK3RStCg==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-managementagent": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-managementagent/-/oci-managementagent-2.116.0.tgz", + "integrity": "sha512-j+rtKQ7Ikwao2fkuYDlYb1U41tbnoVrKGbn3qzYR3dTi2fCJq64Yj2WqlTgKGj5yzfQaLaa5/42krWwIWlA0gw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-managementdashboard": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-managementdashboard/-/oci-managementdashboard-2.116.0.tgz", + "integrity": "sha512-V7qpxlHW6ymas7bm+ixiTuwEXcgGSPqv+fWOX0cm3BfJHMQ79MfwWR71lsO8w9TFOyP2MuF3ZkcQnbI4ZbhXuQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-marketplace": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-marketplace/-/oci-marketplace-2.116.0.tgz", + "integrity": "sha512-A5nUqfQ53CSbfFOGyXUwJEpJqMHl0cXoMnT3XiiZXJf9xs9LLxVAdeYc44xy/sQvlkwP+XuOlMzzeMkcYy8zAw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-marketplaceprivateoffer": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-marketplaceprivateoffer/-/oci-marketplaceprivateoffer-2.116.0.tgz", + "integrity": "sha512-GvlHZpLEzR9kojcCyCu17HVxDdSueHrye4OBAfE0XkORxK2kRRmzugILrXEC+Zg6J3JrvqRHiW2PEnVpGFhbsA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-marketplacepublisher": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-marketplacepublisher/-/oci-marketplacepublisher-2.116.0.tgz", + "integrity": "sha512-0Hl9VhzEr/GTYxdF8PFXMyhfSJ4LSVb7mogEb7A1zcPY6JNZneZNHGsSvr+2/9/BfPCT8jJydlOgoh7dfS/r3Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-mediaservices": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-mediaservices/-/oci-mediaservices-2.116.0.tgz", + "integrity": "sha512-2nnaBkFN1LVYRrGQkvCmo6KVXnkbSCMqMlH1G3k/twt293v7chWCr/eXOajJEUp5c64bBb3XtfXluGWBVO6vpw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-mngdmac": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-mngdmac/-/oci-mngdmac-2.116.0.tgz", + "integrity": "sha512-+S5/nWWtle130JZX0f8nP7dF1JJxA5CisvprVqsI4hkmYk4PSkwn7BA7xG/6GG1SnGYDEji7gKrOLkbPRIdKLQ==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-modeldeployment": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-modeldeployment/-/oci-modeldeployment-2.116.0.tgz", + "integrity": "sha512-t9wECn8RJBS3wdCc4V2be65imtkwqXE/Lca0E7a91rPh/DV6Lb27u+TgYtDIbbqj4plvLAw+WC62zX/NJyD45A==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-monitoring": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-monitoring/-/oci-monitoring-2.116.0.tgz", + "integrity": "sha512-6mep2ZCM8a8gO9Fi65TNvPS4YVK2TDXm7ln7qEkiJD8cDnY5osP59Ncy/cupevau4aS5QXjqPQ4shXJDP9T5MA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-multicloud": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-multicloud/-/oci-multicloud-2.116.0.tgz", + "integrity": "sha512-HCeymb4VraJR3kqy8vMNuuJXvd2UbfN1hTE6WBB8UA7aYdSAAOF83tAA1TdrVYs/DrQvgiiWEo+nOetR1hRN/Q==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-mysql": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-mysql/-/oci-mysql-2.116.0.tgz", + "integrity": "sha512-+Ig5hVZ7NCYgBnZzZs1/rhhRrmapdGq7nwhBhPAk63OmR7S6vdvpOOJyPcB9+/gDu7vP8Bp1XbA+9u82uD1svQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-networkfirewall": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-networkfirewall/-/oci-networkfirewall-2.116.0.tgz", + "integrity": "sha512-lvv1Pd+ZMA/7ODMpSm59QU+B/QMjugPU6WhVLgdifbz7eQoaTxjWLaJoqjECrArPdwC/FBxhP5v0+8tFthxS5Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-networkloadbalancer": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-networkloadbalancer/-/oci-networkloadbalancer-2.116.0.tgz", + "integrity": "sha512-6sGj7OPRyptB2J1c7peQM7sH9NBmVy32h7iCPlT9nDAUkWMVw3AyNh9b8OlExwyQfRTpTcuhlyIMYdN0EH1qBQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-nosql": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-nosql/-/oci-nosql-2.116.0.tgz", + "integrity": "sha512-IXPTpDAktnXgMYY+zzyqehVXNUmy/5MO8ty0Uh2y4IQBR1DocPkx4LjOq/PKriIIle4ERbqRclpkHEyHkCF2Mw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-objectstorage": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-objectstorage/-/oci-objectstorage-2.116.0.tgz", + "integrity": "sha512-8PuGU5D+pzSqxiVI8/YTojWxLHVCmeL5gus76AKy8F2tM2vswhUYbAmKcw0AFw/kqeLOszMrQa6iIhIRBE8KFQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { "await-semaphore": "^0.1.3", - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-oce": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-oce/-/oci-oce-2.116.0.tgz", + "integrity": "sha512-m+x2SuH5PTD4p+47xP3qayhf/yQGwgFRCQxUVin7p5KFvTJNF4510S1cpusSDgyH5fMyv5OTRkbq7HlnYd0s3g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-ocicontrolcenter": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-ocicontrolcenter/-/oci-ocicontrolcenter-2.116.0.tgz", + "integrity": "sha512-wIKdfiGn83JH+yhyQgy1nHzQF73oSzhxknt3rvU1HGvQ55z5m3gddZHNZu2qCjg54LupREFUTJhTAlYVORMDaw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-ocvp": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-ocvp/-/oci-ocvp-2.116.0.tgz", + "integrity": "sha512-Kpl6SGNGf8x17fLB8CMkGWrfZuxg+A9y8kOwn5UNWoN6PG5fVGSbaD6VpSFR6SkivWRzJIhce2FnJqVJ7vu6Pg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-oda": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-oda/-/oci-oda-2.116.0.tgz", + "integrity": "sha512-XGBYYMIDFWmKlTLb/Iwa/H55waYY1nSViNMqo/tfZO4NbHBMZsS6ra6NrA3k5PZadiyiK+lV/nLCr6h34s/S1Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-onesubscription": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-onesubscription/-/oci-onesubscription-2.116.0.tgz", + "integrity": "sha512-l6JJ6WZvaYoNvXUzLJ3wcmdJZ+UiLM61E1+9yqEpeL14Ft/6kTBFZAcDERqo5IBRDpjXQyFDcveCb+vUxRK7LA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-ons": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-ons/-/oci-ons-2.116.0.tgz", + "integrity": "sha512-NBB5mcA8W8fqVeBfERC1qACsME3SyGyPtPA99I8viiP2iawVVAyAdRs4JpWOwtrfuB6RTcsV4eelasREq9mo7A==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-opa": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-opa/-/oci-opa-2.116.0.tgz", + "integrity": "sha512-Hj0WWudQj1Fq+kMbd39xXDJ6PfSKnl2NyvLetjUesKARLi0vEK67FAWFIwwVIJnqP1mWCavVG/QBXP6bKONK4w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-opensearch": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-opensearch/-/oci-opensearch-2.116.0.tgz", + "integrity": "sha512-/SIUTdZku4YBzkoxi3oXdrOitsWRAMp5Cv8iws4CPwDPYiMkljLWymnM21GdgkNMdtOj5KfCe/V8RhHjbo1vlg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-operatoraccesscontrol": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-operatoraccesscontrol/-/oci-operatoraccesscontrol-2.116.0.tgz", + "integrity": "sha512-LeroZvQ8sZ4Jf7U4IyaiR5/MGdZPeWfQZXSdn2GXVdR0gToonkYXrIQEq1zoJ1Sr5HJOQBbwaRzUAcoIKJdqpA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-opsi": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-opsi/-/oci-opsi-2.116.0.tgz", + "integrity": "sha512-UzlXvcTeOxANcMg+qL+Rqv6UMqhsWVHYZtA81XcYBpcqWxvEZVve2E3A0DRkiaOV1A0fSAtgAlFxBM5g2XmvIw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-optimizer": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-optimizer/-/oci-optimizer-2.116.0.tgz", + "integrity": "sha512-QTTilisQuZqTe58gKcuiH5LbIYv3oTn1sH2S2fbe7zJEZIQ5hYFl5mEvoPNh251Ndbf8DEN/QPxXspoFslSb7g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" - } - }, - "node_modules/oci-osmanagement": { - "version": "2.99.0", - "license": "(UPL-1.0 OR Apache-2.0)", - "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-osmanagementhub": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-osmanagementhub/-/oci-osmanagementhub-2.116.0.tgz", + "integrity": "sha512-KnLCgUMMtYRNurxNgGXjgQV445SQf1mLiwSQbzt0pxz2zUDWztTCZqhQ0ikPMooMO8c2+Ofl5E0IyxJG4BFe/w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-ospgateway": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-ospgateway/-/oci-ospgateway-2.116.0.tgz", + "integrity": "sha512-eI8iEL8bab7WRJN6K+TUnYA0sTyzj947axkweawEehlGDiaUygJzdKNvlkU2//GnIGoriDzdbCG7xC2g+1+RrQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-osubbillingschedule": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-osubbillingschedule/-/oci-osubbillingschedule-2.116.0.tgz", + "integrity": "sha512-Z8C2ePofNcwBiI9NrvAw9DPr/K3zJ9GXXBhkblot0g3/Hz2vBv5qrF9HIxZMhFA6jXOcyc9hLMmB0hDmR4J0ag==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-osuborganizationsubscription": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-osuborganizationsubscription/-/oci-osuborganizationsubscription-2.116.0.tgz", + "integrity": "sha512-qbgjJhtqHucvIw/pi/z7UvYh23xGFhiKDG5q9QTD0pQ+RA5usFkRADcUkc2JDtbQ2NxEq5XzryzoP3vHd4nTBA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-osubsubscription": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-osubsubscription/-/oci-osubsubscription-2.116.0.tgz", + "integrity": "sha512-jHgQONmd9ZK+yKDt85djVQtA5VTl7ddp3QNbZel+z4UpVeDZPh6UfhudL8q8SbYYpK8jeGzLatQbWU8WvmKNaA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-osubusage": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-osubusage/-/oci-osubusage-2.116.0.tgz", + "integrity": "sha512-tzK9VAGNUMDR1DZ9Yoae8H8bBfX+nmdPjgVuSDGCLwe2F9Qlqni37Ggu8uCZKiGot9mkGAksLnrWUjqukTK4Fg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-psql": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-psql/-/oci-psql-2.116.0.tgz", + "integrity": "sha512-OStOnwL6GnzROIoRzcvZsv0FrY/cCA/nclfsLA/ZQGE2hByhP5o+6qGx0oNaaorEgVJdzseUTtU0LeTTJb8HEw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-queue": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-queue/-/oci-queue-2.116.0.tgz", + "integrity": "sha512-ZtMgglf3iw9U2QHEfKR9lSZgQX1acmLRkTGoEVpUVPRY1wl5+UzHrlDWHjDnGj+LeqzdgrcRb4fJJmHPfUA2pg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-recovery": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-recovery/-/oci-recovery-2.116.0.tgz", + "integrity": "sha512-J3wyNkTubr5cYqohRuo/bV7uhJ2Dtoa6F7bZo63Ho6cu6f388nCsOVkVWSvOT4whtvv+KYJv+CTXkyeFP6J06g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-redis": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-redis/-/oci-redis-2.116.0.tgz", + "integrity": "sha512-NTXImCQ+6n6uGYmhISuLsfoOiRBNEr+xtRDewtqXtBWjx3OrJWI0NRFGbKrH+2MlXXVGYoImcA1IL42pOu0HaA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-resourcemanager": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-resourcemanager/-/oci-resourcemanager-2.116.0.tgz", + "integrity": "sha512-hls7W1B16RimvJ/IYU9Y9O/vROOQbQs8FbYUSeq3t0GBuu+XmSqMMmLzRz1oRVYgERyjKVX4AGPhyGGBSp6i7w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-resourcescheduler": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-resourcescheduler/-/oci-resourcescheduler-2.116.0.tgz", + "integrity": "sha512-2Hq4AGJBiAQQw1X2nCgEXSoy22/NjS1QlTnRvBJILScZgYDeQIJtou1Uj0vMk5tFUAXPXtPhYuko6tIN8xKrpQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-resourcesearch": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-resourcesearch/-/oci-resourcesearch-2.116.0.tgz", + "integrity": "sha512-DE00/A0KKxzJAzK4hEdFeTPn43oNEBsEr4eSH0eTCruZ95fXPTKwQC8MNGref2OlPGa9XaRBOYN4+sgZ88kGvw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-rover": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-rover/-/oci-rover-2.116.0.tgz", + "integrity": "sha512-fxL2pK+CeYNsQFTldzlbHd0DlMAQHhG9TdPC7bQslCj2veG0RD5cX6U0+dx4/UtK5be68Xnp1P5jLvNYMDnJ9w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-sch": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-sch/-/oci-sch-2.116.0.tgz", + "integrity": "sha512-+I/bZ1cBfajy0vB+YrQeaRlF4PKWgJH29OnRAVZ8JIY/w2VZTQbTMU0lcwxONOu5aRmphncoSUV/MelcY23yWw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-sdk": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-sdk/-/oci-sdk-2.116.0.tgz", + "integrity": "sha512-mnZWiPjVZ4kiLdO1FT/QhuwRurVnrVzkOwblTbLYhoEPXmjM4Lq14MGbT7tIQ2XQoX425lsuuZt3PgoIQlIphw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-accessgovernancecp": "2.99.0", - "oci-adm": "2.99.0", - "oci-aianomalydetection": "2.99.0", - "oci-aidocument": "2.99.0", - "oci-ailanguage": "2.99.0", - "oci-aispeech": "2.99.0", - "oci-aivision": "2.99.0", - "oci-analytics": "2.99.0", - "oci-announcementsservice": "2.99.0", - "oci-apigateway": "2.99.0", - "oci-apmconfig": "2.99.0", - "oci-apmcontrolplane": "2.99.0", - "oci-apmsynthetics": "2.99.0", - "oci-apmtraces": "2.99.0", - "oci-appmgmtcontrol": "2.99.0", - "oci-artifacts": "2.99.0", - "oci-audit": "2.99.0", - "oci-autoscaling": "2.99.0", - "oci-bastion": "2.99.0", - "oci-bds": "2.99.0", - "oci-blockchain": "2.99.0", - "oci-budget": "2.99.0", - "oci-capacitymanagement": "2.99.0", - "oci-certificates": "2.99.0", - "oci-certificatesmanagement": "2.99.0", - "oci-cims": "2.99.0", - "oci-cloudbridge": "2.99.0", - "oci-cloudguard": "2.99.0", - "oci-cloudmigrations": "2.99.0", - "oci-clusterplacementgroups": "2.99.0", - "oci-common": "2.99.0", - "oci-computecloudatcustomer": "2.99.0", - "oci-computeinstanceagent": "2.99.0", - "oci-containerengine": "2.99.0", - "oci-containerinstances": "2.99.0", - "oci-core": "2.99.0", - "oci-dashboardservice": "2.99.0", - "oci-database": "2.99.0", - "oci-databasemanagement": "2.99.0", - "oci-databasemigration": "2.99.0", - "oci-databasetools": "2.99.0", - "oci-datacatalog": "2.99.0", - "oci-dataflow": "2.99.0", - "oci-dataintegration": "2.99.0", - "oci-datalabelingservice": "2.99.0", - "oci-datalabelingservicedataplane": "2.99.0", - "oci-datasafe": "2.99.0", - "oci-datascience": "2.99.0", - "oci-delegateaccesscontrol": "2.99.0", - "oci-demandsignal": "2.99.0", - "oci-desktops": "2.99.0", - "oci-devops": "2.99.0", - "oci-disasterrecovery": "2.99.0", - "oci-dns": "2.99.0", - "oci-dts": "2.99.0", - "oci-email": "2.99.0", - "oci-emaildataplane": "2.99.0", - "oci-emwarehouse": "2.99.0", - "oci-events": "2.99.0", - "oci-filestorage": "2.99.0", - "oci-fleetappsmanagement": "2.99.0", - "oci-fleetsoftwareupdate": "2.99.0", - "oci-functions": "2.99.0", - "oci-fusionapps": "2.99.0", - "oci-generativeai": "2.99.0", - "oci-generativeaiagent": "2.99.0", - "oci-generativeaiagentruntime": "2.99.0", - "oci-generativeaiinference": "2.99.0", - "oci-genericartifactscontent": "2.99.0", - "oci-globallydistributeddatabase": "2.99.0", - "oci-goldengate": "2.99.0", - "oci-governancerulescontrolplane": "2.99.0", - "oci-healthchecks": "2.99.0", - "oci-identity": "2.99.0", - "oci-identitydataplane": "2.99.0", - "oci-identitydomains": "2.99.0", - "oci-integration": "2.99.0", - "oci-jms": "2.99.0", - "oci-jmsjavadownloads": "2.99.0", - "oci-keymanagement": "2.99.0", - "oci-licensemanager": "2.99.0", - "oci-limits": "2.99.0", - "oci-loadbalancer": "2.99.0", - "oci-lockbox": "2.99.0", - "oci-loganalytics": "2.99.0", - "oci-logging": "2.99.0", - "oci-loggingingestion": "2.99.0", - "oci-loggingsearch": "2.99.0", - "oci-managementagent": "2.99.0", - "oci-managementdashboard": "2.99.0", - "oci-marketplace": "2.99.0", - "oci-marketplaceprivateoffer": "2.99.0", - "oci-marketplacepublisher": "2.99.0", - "oci-mediaservices": "2.99.0", - "oci-monitoring": "2.99.0", - "oci-mysql": "2.99.0", - "oci-networkfirewall": "2.99.0", - "oci-networkloadbalancer": "2.99.0", - "oci-nosql": "2.99.0", - "oci-objectstorage": "2.99.0", - "oci-oce": "2.99.0", - "oci-ocicontrolcenter": "2.99.0", - "oci-ocvp": "2.99.0", - "oci-oda": "2.99.0", - "oci-onesubscription": "2.99.0", - "oci-ons": "2.99.0", - "oci-opa": "2.99.0", - "oci-opensearch": "2.99.0", - "oci-operatoraccesscontrol": "2.99.0", - "oci-opsi": "2.99.0", - "oci-optimizer": "2.99.0", - "oci-osmanagement": "2.99.0", - "oci-osmanagementhub": "2.99.0", - "oci-ospgateway": "2.99.0", - "oci-osubbillingschedule": "2.99.0", - "oci-osuborganizationsubscription": "2.99.0", - "oci-osubsubscription": "2.99.0", - "oci-osubusage": "2.99.0", - "oci-psql": "2.99.0", - "oci-queue": "2.99.0", - "oci-recovery": "2.99.0", - "oci-redis": "2.99.0", - "oci-resourcemanager": "2.99.0", - "oci-resourcescheduler": "2.99.0", - "oci-resourcesearch": "2.99.0", - "oci-rover": "2.99.0", - "oci-sch": "2.99.0", - "oci-secrets": "2.99.0", - "oci-securityattribute": "2.99.0", - "oci-servicecatalog": "2.99.0", - "oci-servicemanagerproxy": "2.99.0", - "oci-servicemesh": "2.99.0", - "oci-stackmonitoring": "2.99.0", - "oci-streaming": "2.99.0", - "oci-tenantmanagercontrolplane": "2.99.0", - "oci-threatintelligence": "2.99.0", - "oci-usage": "2.99.0", - "oci-usageapi": "2.99.0", - "oci-vault": "2.99.0", - "oci-vbsinst": "2.99.0", - "oci-visualbuilder": "2.99.0", - "oci-vnmonitoring": "2.99.0", - "oci-vulnerabilityscanning": "2.99.0", - "oci-waa": "2.99.0", - "oci-waas": "2.99.0", - "oci-waf": "2.99.0", - "oci-workrequests": "2.99.0", - "oci-zpr": "2.99.0" + "oci-accessgovernancecp": "2.116.0", + "oci-adm": "2.116.0", + "oci-aidocument": "2.116.0", + "oci-ailanguage": "2.116.0", + "oci-aispeech": "2.116.0", + "oci-aivision": "2.116.0", + "oci-analytics": "2.116.0", + "oci-announcementsservice": "2.116.0", + "oci-apiaccesscontrol": "2.116.0", + "oci-apigateway": "2.116.0", + "oci-apiplatform": "2.116.0", + "oci-apmconfig": "2.116.0", + "oci-apmcontrolplane": "2.116.0", + "oci-apmsynthetics": "2.116.0", + "oci-apmtraces": "2.116.0", + "oci-appmgmtcontrol": "2.116.0", + "oci-artifacts": "2.116.0", + "oci-audit": "2.116.0", + "oci-autoscaling": "2.116.0", + "oci-bastion": "2.116.0", + "oci-bds": "2.116.0", + "oci-blockchain": "2.116.0", + "oci-budget": "2.116.0", + "oci-capacitymanagement": "2.116.0", + "oci-certificates": "2.116.0", + "oci-certificatesmanagement": "2.116.0", + "oci-cims": "2.116.0", + "oci-cloudbridge": "2.116.0", + "oci-cloudguard": "2.116.0", + "oci-cloudmigrations": "2.116.0", + "oci-clusterplacementgroups": "2.116.0", + "oci-common": "2.116.0", + "oci-computecloudatcustomer": "2.116.0", + "oci-computeinstanceagent": "2.116.0", + "oci-containerengine": "2.116.0", + "oci-containerinstances": "2.116.0", + "oci-core": "2.116.0", + "oci-dashboardservice": "2.116.0", + "oci-database": "2.116.0", + "oci-databasemanagement": "2.116.0", + "oci-databasemigration": "2.116.0", + "oci-databasetools": "2.116.0", + "oci-datacatalog": "2.116.0", + "oci-dataflow": "2.116.0", + "oci-dataintegration": "2.116.0", + "oci-datalabelingservice": "2.116.0", + "oci-datalabelingservicedataplane": "2.116.0", + "oci-datasafe": "2.116.0", + "oci-datascience": "2.116.0", + "oci-dblm": "2.116.0", + "oci-dbmulticloud": "2.116.0", + "oci-delegateaccesscontrol": "2.116.0", + "oci-demandsignal": "2.116.0", + "oci-desktops": "2.116.0", + "oci-devops": "2.116.0", + "oci-disasterrecovery": "2.116.0", + "oci-distributeddatabase": "2.116.0", + "oci-dns": "2.116.0", + "oci-email": "2.116.0", + "oci-emaildataplane": "2.116.0", + "oci-emwarehouse": "2.116.0", + "oci-events": "2.116.0", + "oci-filestorage": "2.116.0", + "oci-fleetappsmanagement": "2.116.0", + "oci-fleetsoftwareupdate": "2.116.0", + "oci-functions": "2.116.0", + "oci-fusionapps": "2.116.0", + "oci-generativeai": "2.116.0", + "oci-generativeaiagent": "2.116.0", + "oci-generativeaiagentruntime": "2.116.0", + "oci-generativeaiinference": "2.116.0", + "oci-genericartifactscontent": "2.116.0", + "oci-globallydistributeddatabase": "2.116.0", + "oci-goldengate": "2.116.0", + "oci-governancerulescontrolplane": "2.116.0", + "oci-healthchecks": "2.116.0", + "oci-identity": "2.116.0", + "oci-identitydataplane": "2.116.0", + "oci-identitydomains": "2.116.0", + "oci-integration": "2.116.0", + "oci-jms": "2.116.0", + "oci-jmsjavadownloads": "2.116.0", + "oci-keymanagement": "2.116.0", + "oci-licensemanager": "2.116.0", + "oci-limits": "2.116.0", + "oci-loadbalancer": "2.116.0", + "oci-lockbox": "2.116.0", + "oci-loganalytics": "2.116.0", + "oci-logging": "2.116.0", + "oci-loggingingestion": "2.116.0", + "oci-loggingsearch": "2.116.0", + "oci-lustrefilestorage": "2.116.0", + "oci-managementagent": "2.116.0", + "oci-managementdashboard": "2.116.0", + "oci-marketplace": "2.116.0", + "oci-marketplaceprivateoffer": "2.116.0", + "oci-marketplacepublisher": "2.116.0", + "oci-mediaservices": "2.116.0", + "oci-mngdmac": "2.116.0", + "oci-modeldeployment": "2.116.0", + "oci-monitoring": "2.116.0", + "oci-multicloud": "2.116.0", + "oci-mysql": "2.116.0", + "oci-networkfirewall": "2.116.0", + "oci-networkloadbalancer": "2.116.0", + "oci-nosql": "2.116.0", + "oci-objectstorage": "2.116.0", + "oci-oce": "2.116.0", + "oci-ocicontrolcenter": "2.116.0", + "oci-ocvp": "2.116.0", + "oci-oda": "2.116.0", + "oci-onesubscription": "2.116.0", + "oci-ons": "2.116.0", + "oci-opa": "2.116.0", + "oci-opensearch": "2.116.0", + "oci-operatoraccesscontrol": "2.116.0", + "oci-opsi": "2.116.0", + "oci-optimizer": "2.116.0", + "oci-osmanagementhub": "2.116.0", + "oci-ospgateway": "2.116.0", + "oci-osubbillingschedule": "2.116.0", + "oci-osuborganizationsubscription": "2.116.0", + "oci-osubsubscription": "2.116.0", + "oci-osubusage": "2.116.0", + "oci-psql": "2.116.0", + "oci-queue": "2.116.0", + "oci-recovery": "2.116.0", + "oci-redis": "2.116.0", + "oci-resourcemanager": "2.116.0", + "oci-resourcescheduler": "2.116.0", + "oci-resourcesearch": "2.116.0", + "oci-rover": "2.116.0", + "oci-sch": "2.116.0", + "oci-secrets": "2.116.0", + "oci-securityattribute": "2.116.0", + "oci-servicecatalog": "2.116.0", + "oci-servicemanagerproxy": "2.116.0", + "oci-stackmonitoring": "2.116.0", + "oci-streaming": "2.116.0", + "oci-tenantmanagercontrolplane": "2.116.0", + "oci-threatintelligence": "2.116.0", + "oci-usage": "2.116.0", + "oci-usageapi": "2.116.0", + "oci-vault": "2.116.0", + "oci-vbsinst": "2.116.0", + "oci-visualbuilder": "2.116.0", + "oci-vnmonitoring": "2.116.0", + "oci-vulnerabilityscanning": "2.116.0", + "oci-waa": "2.116.0", + "oci-waas": "2.116.0", + "oci-waf": "2.116.0", + "oci-wlms": "2.116.0", + "oci-workrequests": "2.116.0", + "oci-zpr": "2.116.0" } }, "node_modules/oci-secrets": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-secrets/-/oci-secrets-2.116.0.tgz", + "integrity": "sha512-PPrnZW+3AA2n6VmFzTOmdaQsSxg8euoKMMw8mlP2uIGCXNqyZ/yVzNcTqNUa1juajdmaYu8FCIyM5XH8cMOzBQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-securityattribute": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-securityattribute/-/oci-securityattribute-2.116.0.tgz", + "integrity": "sha512-+fqErOfjiP26sWj/eEZx9vaMlImsRmdRHluQ44VSO6gyRlH+3Faxumix18bs/EdXbshltmFykrb9b2H8sUUK2w==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-servicecatalog": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-servicecatalog/-/oci-servicecatalog-2.116.0.tgz", + "integrity": "sha512-sgtDgFVanH5nTJz0wM7oYKrcEncP2s2TnVpeedYMWyg22XzLwwScA+OgByAEYJluWCiJ1iPboVBtGsP10OzwRA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-servicemanagerproxy": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-servicemanagerproxy/-/oci-servicemanagerproxy-2.116.0.tgz", + "integrity": "sha512-hyna9rODmg2NXslDPsSEwGYa7ca2CcUZ/jPNMHr8REf3ygt+I+ix39doykaD4Kj281r1JGqba1izyNUXyysnzw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" - } - }, - "node_modules/oci-servicemesh": { - "version": "2.99.0", - "license": "(UPL-1.0 OR Apache-2.0)", - "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-stackmonitoring": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-stackmonitoring/-/oci-stackmonitoring-2.116.0.tgz", + "integrity": "sha512-msD1wxuzapKbuzD7Ko/XjtFiiX0CLSr4HD9HXEILUq/DmyRAzGSMCkzM0EmJlrA+hY1Tb2LD0Ko2rV8gsIxPng==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-streaming": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-streaming/-/oci-streaming-2.116.0.tgz", + "integrity": "sha512-bdtaRjlKjFSFH17gNRYSkqefsJLy1KwVnX/l61/q1u+24IyeiM4aA9KhLaJ0xjYtbLG0Gjl5YS9y9UQh8X3/VQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-tenantmanagercontrolplane": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-tenantmanagercontrolplane/-/oci-tenantmanagercontrolplane-2.116.0.tgz", + "integrity": "sha512-Kw+nUI6oBlmsUf9S37aGrumVRPF6iVk2Vvx3k0KxNi6c7I4nW//MJ6PE6b1oE0LHim9UKSi6mIW/jCarplvJGw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-threatintelligence": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-threatintelligence/-/oci-threatintelligence-2.116.0.tgz", + "integrity": "sha512-Itb5+cYZPVoik3SLEz58TlmQLgtI5+43m13q4hMEU8IKk150Jluwddb2lwTL+CzlVU3qlYErAPNw5eIWdvs8og==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-usage": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-usage/-/oci-usage-2.116.0.tgz", + "integrity": "sha512-+rAN70R3ORe01Yj0F0SRm8s2yZ3iqinhn8Gwh4bIn32TpGQXLJTN5N+dvRSEE9JiwM1DmL5fhaw2pc43ugD03A==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-usageapi": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-usageapi/-/oci-usageapi-2.116.0.tgz", + "integrity": "sha512-YkY2qJlZPgUggg6sRAaogc2XhtfPO05SXxf6NBYtiCfo4NwVZDTC7UOclti++8lnEf3S7/vXRiacwAu86ikcSQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-vault": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-vault/-/oci-vault-2.116.0.tgz", + "integrity": "sha512-B/FuwtxOiw4w3UJHz6lFM3dEbhOVjSjl8smpx7IF4piZ++7ug5mGeKBv05wccojZJHcVKXdR733lzRPAwtP88g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-vbsinst": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-vbsinst/-/oci-vbsinst-2.116.0.tgz", + "integrity": "sha512-m1doHQ6k5A16hjWCmubAww/yHFcr6gnqSemOWFPCKhRBgMcDa0nyGhydu8NeLBeZP55Pa6XEC77TgiFybVspMA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-visualbuilder": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-visualbuilder/-/oci-visualbuilder-2.116.0.tgz", + "integrity": "sha512-Qe23f4ridkorzNn81DGzPtadQNiBDZ6o9w0DRDMjXFiTmkueOYEyGzIqDjObzZDQxpD5BMDFtE4SC+AfryE1uA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-vnmonitoring": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-vnmonitoring/-/oci-vnmonitoring-2.116.0.tgz", + "integrity": "sha512-prKWW8QB0Do5xdUEnCmgVVHIFnl+yglQ6eyBD5rY9PKdTmm7tP0VlfDEo5K/qm/7D/wOAIJhD+r9M32ehImR+g==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-vulnerabilityscanning": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-vulnerabilityscanning/-/oci-vulnerabilityscanning-2.116.0.tgz", + "integrity": "sha512-D8Qu3+QywgsCyW7nNBespgIFrn4i13pOi0/cd3uLmuTcCjbEZhS+dhq4rH6gdRFdEAxsjyC2SjLS79/wGZ1yEQ==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-waa": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-waa/-/oci-waa-2.116.0.tgz", + "integrity": "sha512-KpvdUBoNAVixa2LdXLTaBvCN+YN7+KF31QHxVXGLxxo7kFR3PmLhVdkTSEGAPCAlskeSFnB4KX/5KPTI9VbXkA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-waas": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-waas/-/oci-waas-2.116.0.tgz", + "integrity": "sha512-SssGA1JPLe6GB4qKJcdL/MIqvVPrVG3zsaEfrIpMBhjmkzLeW77ELXSRPTNnz+XbHbAoSG9O/jZddzt0yaRt8Q==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-waf": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-waf/-/oci-waf-2.116.0.tgz", + "integrity": "sha512-XqkDuPL65k0vykcaHNji7jAFreovsVKWR9sCDu/hdOApjmjmgS3g/n07myZrfQRMA5rHetAj+mF9PpZbhcytnA==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" + } + }, + "node_modules/oci-wlms": { + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-wlms/-/oci-wlms-2.116.0.tgz", + "integrity": "sha512-msCqBOk5laJNXmCGEBNd3zBAi2sMp3ugRqio4aLsugLwIOBIrNWQ3FwD7Mm20+S+pEQPIBy7tn2UzPOG+mq8Aw==", + "license": "(UPL-1.0 OR Apache-2.0)", + "dependencies": { + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-workrequests": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-workrequests/-/oci-workrequests-2.116.0.tgz", + "integrity": "sha512-uECdTgMhfMOYOVcMdi/FsCMgKIY+Hxp588UvAIpudsiOOe6jy2HyjPltsmM1wCjb5Hj7FnovVO3MEIHNzk3zSg==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/oci-zpr": { - "version": "2.99.0", + "version": "2.116.0", + "resolved": "https://registry.npmjs.org/oci-zpr/-/oci-zpr-2.116.0.tgz", + "integrity": "sha512-6551X7Ldwe3SH1VjK1AfHe6uIHB7B4ufVw7ocL3siCDlM/9TX51CZj6gXngZ6EQlXyEk1zJzPVQ7HfAY1PpFBw==", "license": "(UPL-1.0 OR Apache-2.0)", "dependencies": { - "oci-common": "2.99.0", - "oci-workrequests": "2.99.0" + "oci-common": "2.116.0", + "oci-workrequests": "2.116.0" } }, "node_modules/on-exit-leak-free": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "license": "MIT", "engines": { "node": ">=14.0.0" @@ -14500,6 +17769,8 @@ }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -14510,6 +17781,8 @@ }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -14517,6 +17790,8 @@ }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -14531,6 +17806,8 @@ }, "node_modules/open": { "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "license": "MIT", "optional": true, "dependencies": { @@ -14546,6 +17823,8 @@ }, "node_modules/opossum": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/opossum/-/opossum-5.0.1.tgz", + "integrity": "sha512-iUDUQmFl3RanaBVLMDTZ6WtXj/Hk84pwJ5JWoJaQd1lXGifdApHhszI3biZvdBDdpTERCmB6x+7+uNvzhzVZIg==", "license": "Apache-2.0", "engines": { "node": ">= 10" @@ -14553,6 +17832,8 @@ }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -14569,6 +17850,8 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14591,6 +17874,8 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, "license": "MIT", "engines": { @@ -14599,6 +17884,8 @@ }, "node_modules/p-event": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "license": "MIT", "optional": true, "dependencies": { @@ -14613,6 +17900,8 @@ }, "node_modules/p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "license": "MIT", "optional": true, "engines": { @@ -14621,6 +17910,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -14635,6 +17926,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -14649,6 +17942,8 @@ }, "node_modules/p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "license": "MIT", "optional": true, "dependencies": { @@ -14660,6 +17955,8 @@ }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "license": "MIT", "engines": { "node": ">=6" @@ -14667,6 +17964,8 @@ }, "node_modules/p-wait-for": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", + "integrity": "sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==", "license": "MIT", "optional": true, "dependencies": { @@ -14681,10 +17980,14 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, "node_modules/param-case": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", "license": "MIT", "optional": true, "dependencies": { @@ -14693,6 +17996,8 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -14704,6 +18009,8 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -14720,22 +18027,49 @@ } }, "node_modules/parse5": { - "version": "5.1.1", - "license": "MIT" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "license": "MIT", + "optional": true, "dependencies": { - "parse5": "^6.0.1" + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { "version": "6.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "optional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/parseley": { "version": "0.12.1", + "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", + "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", "license": "MIT", "optional": true, "dependencies": { @@ -14748,6 +18082,8 @@ }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -14755,6 +18091,8 @@ }, "node_modules/passport": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", + "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", "license": "MIT", "dependencies": { "passport-strategy": "1.x.x", @@ -14771,6 +18109,8 @@ }, "node_modules/passport-jwt": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", "license": "MIT", "dependencies": { "jsonwebtoken": "^9.0.0", @@ -14779,12 +18119,16 @@ }, "node_modules/passport-strategy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "license": "MIT", "engines": { "node": ">=8" @@ -14792,6 +18136,8 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14799,6 +18145,8 @@ }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -14806,11 +18154,15 @@ }, "node_modules/path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "devOptional": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -14825,14 +18177,20 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, "node_modules/path-to-regexp": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -14840,10 +18198,14 @@ } }, "node_modules/pause": { - "version": "0.0.1" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" }, "node_modules/peberminta": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", + "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", "license": "MIT", "optional": true, "funding": { @@ -14851,20 +18213,22 @@ } }, "node_modules/pg": { - "version": "8.13.1", + "version": "8.16.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz", + "integrity": "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw==", "license": "MIT", "dependencies": { - "pg-connection-string": "^2.7.0", - "pg-pool": "^3.7.0", - "pg-protocol": "^1.7.0", - "pg-types": "^2.1.0", - "pgpass": "1.x" + "pg-connection-string": "^2.9.1", + "pg-pool": "^3.10.1", + "pg-protocol": "^1.10.3", + "pg-types": "2.2.0", + "pgpass": "1.0.5" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 16.0.0" }, "optionalDependencies": { - "pg-cloudflare": "^1.1.1" + "pg-cloudflare": "^1.2.7" }, "peerDependencies": { "pg-native": ">=3.0.1" @@ -14876,34 +18240,46 @@ } }, "node_modules/pg-cloudflare": { - "version": "1.1.1", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz", + "integrity": "sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==", "license": "MIT", "optional": true }, "node_modules/pg-connection-string": { - "version": "2.7.0", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.9.1.tgz", + "integrity": "sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w==", "license": "MIT" }, "node_modules/pg-int8": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", "license": "ISC", "engines": { "node": ">=4.0.0" } }, "node_modules/pg-pool": { - "version": "3.7.0", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.10.1.tgz", + "integrity": "sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg==", "license": "MIT", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.7.0", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.10.3.tgz", + "integrity": "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==", "license": "MIT" }, "node_modules/pg-types": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", "license": "MIT", "dependencies": { "pg-int8": "1.0.1", @@ -14918,6 +18294,8 @@ }, "node_modules/pgpass": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", "license": "MIT", "dependencies": { "split2": "^4.1.0" @@ -14925,11 +18303,15 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "dev": true, + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "devOptional": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", + "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", "dev": true, "license": "MIT", "engines": { @@ -14941,6 +18323,8 @@ }, "node_modules/pidtree": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, "license": "MIT", "bin": { @@ -14951,7 +18335,9 @@ } }, "node_modules/pino": { - "version": "9.5.0", + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.9.0.tgz", + "integrity": "sha512-zxsRIQG9HzG+jEljmvmZupOMDUQ0Jpj0yAgE28jQvvrdYTlEaiGwelJpdndMl/MBuRr70heIj83QyqJUWaU8mQ==", "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", @@ -14959,7 +18345,7 @@ "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", - "process-warning": "^4.0.0", + "process-warning": "^5.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", @@ -14972,23 +18358,29 @@ }, "node_modules/pino-abstract-transport": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", "license": "MIT", "dependencies": { "split2": "^4.0.0" } }, "node_modules/pino-http": { - "version": "10.3.0", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-10.5.0.tgz", + "integrity": "sha512-hD91XjgaKkSsdn8P7LaebrNzhGTdB086W3pyPihX0EzGPjq5uBJBXo4N5guqNaK6mUjg9aubMF7wDViYek9dRA==", "license": "MIT", "dependencies": { "get-caller-file": "^2.0.5", "pino": "^9.0.0", "pino-std-serializers": "^7.0.0", - "process-warning": "^4.0.0" + "process-warning": "^5.0.0" } }, "node_modules/pino-pretty": { - "version": "13.0.0", + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.1.tgz", + "integrity": "sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA==", "license": "MIT", "dependencies": { "colorette": "^2.0.7", @@ -15001,20 +18393,36 @@ "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pump": "^3.0.0", - "secure-json-parse": "^2.4.0", + "secure-json-parse": "^4.0.0", "sonic-boom": "^4.0.1", - "strip-json-comments": "^3.1.1" + "strip-json-comments": "^5.0.2" }, "bin": { "pino-pretty": "bin.js" } }, + "node_modules/pino-pretty/node_modules/strip-json-comments": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", + "integrity": "sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/pino-std-serializers": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", "license": "MIT" }, "node_modules/pirates": { - "version": "4.0.6", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", "engines": { @@ -15023,6 +18431,8 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15034,6 +18444,8 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -15046,6 +18458,8 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -15057,6 +18471,8 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -15071,6 +18487,8 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -15082,6 +18500,8 @@ }, "node_modules/pluralize": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, "license": "MIT", "engines": { @@ -15097,8 +18517,19 @@ "node": ">=10.13.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postgres-array": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", "license": "MIT", "engines": { "node": ">=4" @@ -15106,6 +18537,8 @@ }, "node_modules/postgres-bytea": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15113,6 +18546,8 @@ }, "node_modules/postgres-date": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15120,6 +18555,8 @@ }, "node_modules/postgres-interval": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", "license": "MIT", "dependencies": { "xtend": "^4.0.0" @@ -15130,6 +18567,8 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -15138,6 +18577,8 @@ }, "node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -15152,6 +18593,8 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "license": "MIT", "dependencies": { @@ -15163,6 +18606,8 @@ }, "node_modules/pretty-format": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15176,6 +18621,8 @@ }, "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { @@ -15187,6 +18634,8 @@ }, "node_modules/preview-email": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/preview-email/-/preview-email-3.1.0.tgz", + "integrity": "sha512-ZtV1YrwscEjlrUzYrTSs6Nwo49JM3pXLM4fFOBSC3wSni+bxaWlw9/Qgk75PZO8M7cX2EybmL2iwvaV3vkAttw==", "license": "MIT", "optional": true, "dependencies": { @@ -15206,16 +18655,40 @@ "node": ">=14" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" + "node_modules/preview-email/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, "node_modules/process-warning": { - "version": "4.0.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.0.0.tgz", + "integrity": "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], "license": "MIT" }, "node_modules/promise": { "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "license": "MIT", "optional": true, "dependencies": { @@ -15224,19 +18697,14 @@ }, "node_modules/promise-breaker": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz", + "integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==", "license": "MIT" }, - "node_modules/promise-coalesce": { - "version": "1.1.2", - "license": "BSD-3-Clause", - "optional": true, - "peer": true, - "engines": { - "node": ">=16" - } - }, "node_modules/prompts": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15249,6 +18717,8 @@ }, "node_modules/proto-list": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "license": "ISC", "optional": true }, @@ -15266,9 +18736,9 @@ } }, "node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.4.tgz", + "integrity": "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==", "hasInstallScript": true, "license": "BSD-3-Clause", "optional": true, @@ -15292,6 +18762,8 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -15303,10 +18775,14 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, "node_modules/pug": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.3.tgz", + "integrity": "sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==", "license": "MIT", "optional": true, "dependencies": { @@ -15322,6 +18798,8 @@ }, "node_modules/pug-attrs": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", + "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", "license": "MIT", "optional": true, "dependencies": { @@ -15332,6 +18810,8 @@ }, "node_modules/pug-code-gen": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.3.tgz", + "integrity": "sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==", "license": "MIT", "optional": true, "dependencies": { @@ -15347,11 +18827,15 @@ }, "node_modules/pug-error": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", + "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", "license": "MIT", "optional": true }, "node_modules/pug-filters": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", + "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", "license": "MIT", "optional": true, "dependencies": { @@ -15364,6 +18848,8 @@ }, "node_modules/pug-lexer": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", + "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", "license": "MIT", "optional": true, "dependencies": { @@ -15374,6 +18860,8 @@ }, "node_modules/pug-linker": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", + "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", "license": "MIT", "optional": true, "dependencies": { @@ -15383,6 +18871,8 @@ }, "node_modules/pug-load": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", + "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", "license": "MIT", "optional": true, "dependencies": { @@ -15392,6 +18882,8 @@ }, "node_modules/pug-parser": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", + "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", "license": "MIT", "optional": true, "dependencies": { @@ -15401,11 +18893,15 @@ }, "node_modules/pug-runtime": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", + "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", "license": "MIT", "optional": true }, "node_modules/pug-strip-comments": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", + "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", "license": "MIT", "optional": true, "dependencies": { @@ -15414,11 +18910,15 @@ }, "node_modules/pug-walk": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", + "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", "license": "MIT", "optional": true }, "node_modules/pump": { - "version": "3.0.2", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -15427,6 +18927,8 @@ }, "node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -15435,6 +18937,8 @@ }, "node_modules/punycode.js": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "license": "MIT", "optional": true, "engines": { @@ -15443,6 +18947,8 @@ }, "node_modules/pure-rand": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -15473,6 +18979,15 @@ "node": ">=10.13.0" } }, + "node_modules/qrcode/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qrcode/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -15536,6 +19051,20 @@ "node": ">=8" } }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/qrcode/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -15579,6 +19108,8 @@ }, "node_modules/qs": { "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -15592,10 +19123,14 @@ }, "node_modules/querystringify": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -15615,10 +19150,14 @@ }, "node_modules/quick-format-unescaped": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15627,6 +19166,8 @@ }, "node_modules/range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -15634,6 +19175,8 @@ }, "node_modules/raw-body": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -15647,6 +19190,8 @@ }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "optional": true, "dependencies": { @@ -15661,6 +19206,8 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", "optional": true, "engines": { @@ -15669,28 +19216,29 @@ }, "node_modules/react-is": { "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, "license": "MIT" }, "node_modules/readable-stream": { - "version": "2.3.8", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -15701,6 +19249,8 @@ }, "node_modules/readdirp/node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -15711,58 +19261,23 @@ }, "node_modules/real-require": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "license": "MIT", "engines": { "node": ">= 12.13.0" } }, - "node_modules/redis": { - "version": "4.7.0", - "license": "MIT", - "workspaces": [ - "./packages/*" - ], - "dependencies": { - "@redis/bloom": "1.2.0", - "@redis/client": "1.6.0", - "@redis/graph": "1.1.1", - "@redis/json": "1.0.7", - "@redis/search": "1.2.0", - "@redis/time-series": "1.1.0" - } - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/reflect-metadata": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "license": "MIT", - "optional": true - }, "node_modules/regexp-tree": { "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", "dev": true, "license": "MIT", "bin": { @@ -15771,6 +19286,8 @@ }, "node_modules/relateurl": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "license": "MIT", "optional": true, "engines": { @@ -15779,6 +19296,8 @@ }, "node_modules/repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, "license": "MIT", "engines": { @@ -15787,6 +19306,8 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15794,6 +19315,8 @@ }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "license": "MIT", "engines": { @@ -15808,26 +19331,35 @@ }, "node_modules/requires-port": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "devOptional": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "license": "MIT", "dependencies": { @@ -15839,6 +19371,8 @@ }, "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -15847,6 +19381,8 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -15854,7 +19390,9 @@ } }, "node_modules/resolve.exports": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -15863,6 +19401,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -15875,6 +19415,8 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, @@ -15904,7 +19446,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -15914,11 +19458,16 @@ }, "node_modules/rfdc": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -15930,16 +19479,11 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -15956,18 +19500,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/run-applescript": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", + "integrity": "sha512-Ep0RsvAjnRcBX1p5vogbaBdAGu/8j/ewpvGqnQYunnLd9SM0vWcPJewPKNnWFggf0hF0pwIgwV5XK7qQ7UZ8Qg==", "license": "MIT", "optional": true, "dependencies": { @@ -15978,7 +19514,9 @@ } }, "node_modules/run-applescript/node_modules/cross-spawn": { - "version": "6.0.5", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "license": "MIT", "optional": true, "dependencies": { @@ -15994,6 +19532,8 @@ }, "node_modules/run-applescript/node_modules/execa": { "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "license": "MIT", "optional": true, "dependencies": { @@ -16011,6 +19551,8 @@ }, "node_modules/run-applescript/node_modules/get-stream": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "license": "MIT", "optional": true, "engines": { @@ -16019,6 +19561,8 @@ }, "node_modules/run-applescript/node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "license": "MIT", "optional": true, "engines": { @@ -16027,6 +19571,8 @@ }, "node_modules/run-applescript/node_modules/npm-run-path": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "license": "MIT", "optional": true, "dependencies": { @@ -16038,6 +19584,8 @@ }, "node_modules/run-applescript/node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "license": "MIT", "optional": true, "engines": { @@ -16046,6 +19594,8 @@ }, "node_modules/run-applescript/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "license": "ISC", "optional": true, "bin": { @@ -16054,6 +19604,8 @@ }, "node_modules/run-applescript/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "license": "MIT", "optional": true, "dependencies": { @@ -16065,6 +19617,8 @@ }, "node_modules/run-applescript/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "license": "MIT", "optional": true, "engines": { @@ -16073,11 +19627,15 @@ }, "node_modules/run-applescript/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC", "optional": true }, "node_modules/run-applescript/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "license": "ISC", "optional": true, "dependencies": { @@ -16089,6 +19647,8 @@ }, "node_modules/run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, "license": "MIT", "engines": { @@ -16097,6 +19657,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -16118,7 +19680,9 @@ } }, "node_modules/rxjs": { - "version": "7.8.1", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -16126,6 +19690,8 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -16144,6 +19710,8 @@ }, "node_modules/safe-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "license": "MIT", "dependencies": { @@ -16152,6 +19720,8 @@ }, "node_modules/safe-stable-stringify": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "license": "MIT", "engines": { "node": ">=10" @@ -16159,10 +19729,14 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/schema-utils": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "license": "MIT", "dependencies": { @@ -16180,6 +19754,8 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -16195,6 +19771,8 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -16203,6 +19781,8 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, @@ -16213,11 +19793,25 @@ "license": "BSD-3-Clause" }, "node_modules/secure-json-parse": { - "version": "2.7.0", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.0.0.tgz", + "integrity": "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], "license": "BSD-3-Clause" }, "node_modules/selderee": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", + "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", "license": "MIT", "optional": true, "dependencies": { @@ -16228,7 +19822,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -16239,6 +19835,8 @@ }, "node_modules/send": { "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -16261,6 +19859,8 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -16268,17 +19868,35 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -16287,6 +19905,8 @@ }, "node_modules/serve-static": { "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -16300,10 +19920,14 @@ }, "node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -16319,21 +19943,34 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/sha.js": { - "version": "2.4.11", + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -16344,6 +19981,8 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -16351,16 +19990,74 @@ }, "node_modules/shimmer": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", "license": "BSD-2-Clause" }, "node_modules/side-channel": { - "version": "1.0.6", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -16371,6 +20068,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -16381,11 +20080,15 @@ }, "node_modules/sisteransi": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true, "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", "engines": { @@ -16394,6 +20097,8 @@ }, "node_modules/slice-ansi": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16409,6 +20114,8 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, "license": "MIT", "engines": { @@ -16418,19 +20125,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/slick": { "version": "1.12.2", + "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", + "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", "license": "MIT (http://mootools.net/license.txt)", "optional": true, "engines": { @@ -16439,6 +20137,8 @@ }, "node_modules/sonic-boom": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" @@ -16446,6 +20146,8 @@ }, "node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -16454,6 +20156,8 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -16463,6 +20167,8 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -16471,6 +20177,8 @@ }, "node_modules/split2": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "license": "ISC", "engines": { "node": ">= 10.x" @@ -16478,11 +20186,31 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, + "node_modules/sql-highlight": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sql-highlight/-/sql-highlight-6.1.0.tgz", + "integrity": "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==", + "funding": [ + "https://github.com/scriptcoded/sql-highlight?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/scriptcoded" + } + ], + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/sshpk": { "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "license": "MIT", "dependencies": { "asn1": "~0.2.3", @@ -16506,10 +20234,14 @@ }, "node_modules/stack-chain": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==", "license": "MIT" }, "node_modules/stack-utils": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16521,20 +20253,18 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "license": "MIT", - "optional": true, - "peer": true - }, "node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -16559,23 +20289,25 @@ }, "node_modules/streamsearch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } }, "node_modules/string_decoder": { - "version": "1.1.1", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, "node_modules/string-argv": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -16584,10 +20316,14 @@ }, "node_modules/string-format": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", "license": "WTFPL OR MIT" }, "node_modules/string-length": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16600,6 +20336,8 @@ }, "node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -16613,6 +20351,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -16623,8 +20363,28 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -16636,6 +20396,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -16646,6 +20408,8 @@ }, "node_modules/strip-bom": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -16654,6 +20418,8 @@ }, "node_modules/strip-eof": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "license": "MIT", "optional": true, "engines": { @@ -16662,6 +20428,8 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -16670,6 +20438,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -16679,11 +20450,33 @@ } }, "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/strtok3": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", "license": "MIT", - "optional": true + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } }, "node_modules/stubs": { "version": "3.0.0", @@ -16693,19 +20486,21 @@ "optional": true }, "node_modules/superagent": { - "version": "9.0.2", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.3.tgz", + "integrity": "sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig==", "dev": true, "license": "MIT", "dependencies": { - "component-emitter": "^1.3.0", + "component-emitter": "^1.3.1", "cookiejar": "^2.1.4", - "debug": "^4.3.4", + "debug": "^4.3.7", "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^3.5.1", + "form-data": "^4.0.4", + "formidable": "^3.5.4", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.11.0" + "qs": "^6.11.2" }, "engines": { "node": ">=14.18.0" @@ -16713,6 +20508,8 @@ }, "node_modules/superagent/node_modules/mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, "license": "MIT", "bin": { @@ -16723,12 +20520,14 @@ } }, "node_modules/supertest": { - "version": "7.0.0", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.4.tgz", + "integrity": "sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg==", "dev": true, "license": "MIT", "dependencies": { "methods": "^1.1.2", - "superagent": "^9.0.1" + "superagent": "^10.2.3" }, "engines": { "node": ">=14.18.0" @@ -16736,6 +20535,8 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -16746,6 +20547,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "devOptional": true, "license": "MIT", "engines": { @@ -16757,6 +20560,8 @@ }, "node_modules/swagger-ui-dist": { "version": "5.18.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.18.2.tgz", + "integrity": "sha512-J+y4mCw/zXh1FOj5wGJvnAajq6XgHOyywsa9yITmwxIlJbMqITq3gYRZHaeqLVH/eV/HOPphE6NjF+nbSNC5Zw==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "=1.4.0" @@ -16764,6 +20569,8 @@ }, "node_modules/symbol-observable": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true, "license": "MIT", "engines": { @@ -16771,7 +20578,9 @@ } }, "node_modules/tapable": { - "version": "2.2.1", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "dev": true, "license": "MIT", "engines": { @@ -16780,6 +20589,8 @@ }, "node_modules/tar": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "license": "ISC", "dependencies": { "chownr": "^2.0.0", @@ -16795,6 +20606,8 @@ }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "license": "ISC", "engines": { "node": ">=8" @@ -16802,6 +20615,8 @@ }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -16810,10 +20625,6 @@ "node": ">=10" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/teeny-request": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", @@ -16831,13 +20642,29 @@ "node": ">=14" } }, + "node_modules/teeny-request/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/terser": { - "version": "5.36.0", + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.14.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -16849,15 +20676,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -16883,6 +20712,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { @@ -16894,8 +20725,30 @@ "node": ">= 10.13.0" } }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16910,11 +20763,15 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", "dependencies": { @@ -16926,17 +20783,11 @@ "node": ">=8" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -16954,41 +20805,17 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, "license": "MIT" }, - "node_modules/thenify": { - "version": "3.3.1", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/thread-stream": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", + "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", "license": "MIT", "dependencies": { "real-require": "^0.2.0" @@ -16996,11 +20823,15 @@ }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/tlds": { - "version": "1.252.0", + "version": "1.259.0", + "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.259.0.tgz", + "integrity": "sha512-AldGGlDP0PNgwppe2quAvuBl18UcjuNtOnDuUkqhd6ipPqrYYBt3aTxK1QTsBVknk97lS2JcafWMghjGWFtunw==", "license": "MIT", "optional": true, "bin": { @@ -17009,6 +20840,8 @@ }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "license": "MIT", "dependencies": { @@ -17020,11 +20853,29 @@ }, "node_modules/tmpl": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true, "license": "BSD-3-Clause" }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -17035,6 +20886,8 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -17042,15 +20895,39 @@ }, "node_modules/token-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", + "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", "license": "MIT", "optional": true }, + "node_modules/token-types": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.1.tgz", + "integrity": "sha512-kh9LVIWH5CnL63Ipf0jhlBIy0UsrMj/NJDfpsy1SqOXlLKEVyXXYrnFxFT1yOOYVGBSApeVnjPw/sBz5BfEjAQ==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.1.0", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/tr46": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, "node_modules/tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, "license": "MIT", "bin": { @@ -17058,18 +20935,20 @@ } }, "node_modules/ts-jest": { - "version": "29.2.5", + "version": "29.4.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.1.tgz", + "integrity": "sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==", "dev": true, "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", - "ejs": "^3.1.10", "fast-json-stable-stringify": "^2.1.0", - "jest-util": "^29.0.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", "lodash.memoize": "^4.1.2", "make-error": "^1.3.6", - "semver": "^7.6.3", + "semver": "^7.7.2", + "type-fest": "^4.41.0", "yargs-parser": "^21.1.1" }, "bin": { @@ -17080,10 +20959,11 @@ }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { @@ -17101,11 +20981,29 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-loader": { - "version": "9.5.1", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, "license": "MIT", "dependencies": { @@ -17125,6 +21023,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -17167,6 +21067,8 @@ }, "node_modules/tsconfig-paths": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "license": "MIT", "dependencies": { @@ -17179,12 +21081,15 @@ } }, "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.1.0", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz", + "integrity": "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==", "dev": true, "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.7.0", + "tapable": "^2.2.1", "tsconfig-paths": "^4.1.2" }, "engines": { @@ -17193,6 +21098,8 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -17200,11 +21107,15 @@ } }, "node_modules/tslib": { - "version": "2.7.0", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "license": "MIT", "dependencies": { @@ -17219,20 +21130,24 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "license": "0BSD" }, "node_modules/tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "license": "Unlicense" }, "node_modules/twilio": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/twilio/-/twilio-5.4.0.tgz", - "integrity": "sha512-kEmxzdOLTzXzUEXIkBVwT1Itxlbp+rtGrQogNfPtSE3EjoEsxrxB/9tdMIEbrsioL8CzTk/+fiKNJekAyHxjuQ==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/twilio/-/twilio-5.8.0.tgz", + "integrity": "sha512-aJLBvI7ODLmFHI7ZYLBiMZKIdHuF9PrPeRM/GBMDg/AAzGXs4V8gEnNPHyTVThK0/8J48YHSqXMlQ+WJR5nxoQ==", "license": "MIT", "dependencies": { - "axios": "^1.7.4", + "axios": "^1.11.0", "dayjs": "^1.11.9", "https-proxy-agent": "^5.0.0", "jsonwebtoken": "^9.0.2", @@ -17244,30 +21159,10 @@ "node": ">=14.0" } }, - "node_modules/twilio/node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -17279,6 +21174,8 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "license": "MIT", "engines": { @@ -17287,6 +21184,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -17297,6 +21196,8 @@ }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -17306,29 +21207,46 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/typedarray": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "license": "MIT" }, "node_modules/typeorm": { - "version": "0.3.20", + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.26.tgz", + "integrity": "sha512-o2RrBNn3lczx1qv4j+JliVMmtkPSqEGpG0UuZkt9tCfWkoXKu8MZnjvp2GjWPll1SehwemQw6xrbVRhmOglj8Q==", "license": "MIT", "dependencies": { "@sqltools/formatter": "^1.2.5", + "ansis": "^3.17.0", "app-root-path": "^3.1.0", "buffer": "^6.0.3", - "chalk": "^4.1.2", - "cli-highlight": "^2.1.11", - "dayjs": "^1.11.9", - "debug": "^4.3.4", - "dotenv": "^16.0.3", - "glob": "^10.3.10", - "mkdirp": "^2.1.3", - "reflect-metadata": "^0.2.1", + "dayjs": "^1.11.13", + "debug": "^4.4.0", + "dedent": "^1.6.0", + "dotenv": "^16.4.7", + "glob": "^10.4.5", "sha.js": "^2.4.11", - "tslib": "^2.5.0", - "uuid": "^9.0.0", - "yargs": "^17.6.2" + "sql-highlight": "^6.0.0", + "tslib": "^2.8.1", + "uuid": "^11.1.0", + "yargs": "^17.7.2" }, "bin": { "typeorm": "cli.js", @@ -17342,23 +21260,23 @@ "url": "https://opencollective.com/typeorm" }, "peerDependencies": { - "@google-cloud/spanner": "^5.18.0", - "@sap/hana-client": "^2.12.25", - "better-sqlite3": "^7.1.2 || ^8.0.0 || ^9.0.0", - "hdb-pool": "^0.1.6", + "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0", + "@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", - "mssql": "^9.1.1 || ^10.0.1", + "mongodb": "^5.8.0 || ^6.0.0", + "mssql": "^9.1.1 || ^10.0.1 || ^11.0.1", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^6.3.0", "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", "ts-node": "^10.7.0", - "typeorm-aurora-data-api-driver": "^2.0.0" + "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { @@ -17370,9 +21288,6 @@ "better-sqlite3": { "optional": true }, - "hdb-pool": { - "optional": true - }, "ioredis": { "optional": true }, @@ -17416,6 +21331,8 @@ }, "node_modules/typeorm-transactional": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/typeorm-transactional/-/typeorm-transactional-0.5.0.tgz", + "integrity": "sha512-53/CwnXpOIJnWU3oVCNbhHB95FwciKSGbY+m/Hw4e2dBM2c4toiOHwf4pmk83Ne7guznmDgVr/5IUfbp+JTPCg==", "license": "MIT", "dependencies": { "@types/cls-hooked": "^4.3.3", @@ -17430,8 +21347,19 @@ "typeorm": ">= 0.2.8" } }, + "node_modules/typeorm/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/typeorm/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -17452,21 +21380,85 @@ "ieee754": "^1.2.1" } }, - "node_modules/typeorm/node_modules/mkdirp": { - "version": "2.1.6", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, + "node_modules/typeorm/node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/typeorm/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/typeorm/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/typeorm/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/typescript": { - "version": "5.6.3", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -17479,11 +21471,15 @@ }, "node_modules/uc.micro": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "license": "MIT", "optional": true }, "node_modules/uglify-js": { "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "license": "BSD-2-Clause", "optional": true, "bin": { @@ -17495,6 +21491,8 @@ }, "node_modules/uid": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", "license": "MIT", "dependencies": { "@lukeed/csprng": "^1.0.0" @@ -17503,12 +21501,28 @@ "node": ">=8" } }, + "node_modules/uint8array-extras": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.4.1.tgz", + "integrity": "sha512-+NWHrac9dvilNgme+gP4YrBSumsaMZP0fNBtXXFIf33RLLKEcBUKaQZ7ULUbS0sBfcjxIZ4V96OTRkCbM7hxpw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/undici-types": { - "version": "6.19.8", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -17517,13 +21531,17 @@ }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -17542,7 +21560,7 @@ "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -17553,11 +21571,15 @@ }, "node_modules/upper-case": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", "license": "MIT", "optional": true }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -17566,6 +21588,8 @@ }, "node_modules/url-parse": { "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "license": "MIT", "dependencies": { "querystringify": "^2.1.1", @@ -17574,33 +21598,43 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { - "version": "9.0.1", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "devOptional": true, "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "license": "ISC", "dependencies": { @@ -17614,6 +21648,8 @@ }, "node_modules/valid-data-url": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", + "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==", "license": "MIT", "optional": true, "engines": { @@ -17621,7 +21657,9 @@ } }, "node_modules/validator": { - "version": "13.12.0", + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -17629,6 +21667,8 @@ }, "node_modules/vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -17636,6 +21676,8 @@ }, "node_modules/verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "engines": [ "node >=0.6.0" ], @@ -17648,10 +21690,14 @@ }, "node_modules/verror/node_modules/core-util-is": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "license": "MIT" }, "node_modules/void-elements": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", "license": "MIT", "optional": true, "engines": { @@ -17660,6 +21706,8 @@ }, "node_modules/walker": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -17667,7 +21715,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.2", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "dev": true, "license": "MIT", "dependencies": { @@ -17680,6 +21730,8 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -17688,6 +21740,8 @@ }, "node_modules/web-resource-inliner": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", + "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", "license": "MIT", "optional": true, "dependencies": { @@ -17704,6 +21758,8 @@ }, "node_modules/web-resource-inliner/node_modules/dom-serializer": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "license": "MIT", "optional": true, "dependencies": { @@ -17717,6 +21773,8 @@ }, "node_modules/web-resource-inliner/node_modules/dom-serializer/node_modules/domhandler": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -17731,6 +21789,8 @@ }, "node_modules/web-resource-inliner/node_modules/domhandler": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -17745,6 +21805,8 @@ }, "node_modules/web-resource-inliner/node_modules/domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -17758,6 +21820,8 @@ }, "node_modules/web-resource-inliner/node_modules/domutils/node_modules/domhandler": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "license": "BSD-2-Clause", "optional": true, "dependencies": { @@ -17772,6 +21836,8 @@ }, "node_modules/web-resource-inliner/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "license": "BSD-2-Clause", "optional": true, "funding": { @@ -17780,6 +21846,8 @@ }, "node_modules/web-resource-inliner/node_modules/htmlparser2": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", "license": "MIT", "optional": true, "dependencies": { @@ -17794,6 +21862,8 @@ }, "node_modules/web-resource-inliner/node_modules/mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "license": "MIT", "optional": true, "bin": { @@ -17805,22 +21875,29 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.96.1", + "version": "5.101.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.3.tgz", + "integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.14.0", + "@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", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -17830,11 +21907,11 @@ "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", + "schema-utils": "^4.3.2", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", + "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -17854,6 +21931,8 @@ }, "node_modules/webpack-node-externals": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", "dev": true, "license": "MIT", "engines": { @@ -17861,31 +21940,34 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", + "node_modules/webpack/node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "peer": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/websocket-driver": { @@ -17913,10 +21995,14 @@ }, "node_modules/whatwg-fetch": { "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", "license": "MIT" }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -17925,6 +22011,8 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -17942,8 +22030,31 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -17951,6 +22062,8 @@ }, "node_modules/widest-line": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "license": "MIT", "dependencies": { "string-width": "^4.0.0" @@ -17961,6 +22074,8 @@ }, "node_modules/with": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", + "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", "license": "MIT", "optional": true, "dependencies": { @@ -17975,6 +22090,8 @@ }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -17983,10 +22100,14 @@ }, "node_modules/wordwrap": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "license": "MIT" }, "node_modules/wrap-ansi": { - "version": "6.2.0", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -17994,12 +22115,17 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -18015,10 +22141,14 @@ }, "node_modules/wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, "license": "ISC", "dependencies": { @@ -18031,6 +22161,8 @@ }, "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, @@ -18045,6 +22177,8 @@ }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "license": "MIT", "engines": { "node": ">=0.4" @@ -18052,18 +22186,23 @@ }, "node_modules/y18n": { "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { - "version": "3.1.1", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/yaml": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", + "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", "dev": true, "license": "ISC", "engines": { @@ -18072,6 +22211,8 @@ }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -18088,6 +22229,8 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" @@ -18095,6 +22238,8 @@ }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "devOptional": true, "license": "MIT", "engines": { @@ -18103,6 +22248,8 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "devOptional": true, "license": "MIT", "engines": { diff --git a/src/common/modules/neoleap/services/neoleap.service.ts b/src/common/modules/neoleap/services/neoleap.service.ts index 2d2eee7..95256ad 100644 --- a/src/common/modules/neoleap/services/neoleap.service.ts +++ b/src/common/modules/neoleap/services/neoleap.service.ts @@ -29,6 +29,7 @@ export class NeoLeapService { private readonly zodApiUrl: string; private readonly apiKey: string; private readonly useGateway: boolean; + private readonly useKycMock: boolean; private readonly institutionCode = '1100'; useLocalCert: boolean; constructor(private readonly httpService: HttpService, private readonly configService: ConfigService) { @@ -37,12 +38,13 @@ export class NeoLeapService { this.useGateway = [true, 'true'].includes(this.configService.get('USE_GATEWAY', false)); this.useLocalCert = this.configService.get('USE_LOCAL_CERT', false); this.zodApiUrl = this.configService.getOrThrow('ZOD_API_URL'); + this.useKycMock = [true, 'true'].includes(this.configService.get('USE_KYC_MOCK', true)); } async initiateKyc(customerId: string, body: InitiateKycRequestDto) { const responseKey = 'InitiateKycResponseDetails'; - if (!this.useGateway) { + if (this.useKycMock) { const responseDto = plainToInstance(InitiateKycResponseDto, INITIATE_KYC_MOCK[responseKey], { excludeExtraneousValues: true, }); From 6602414779036f003791dee804035a8388390a4e Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sat, 23 Aug 2025 21:52:59 +0300 Subject: [PATCH 03/45] feat: finialize creating juniors --- src/auth/controllers/auth.controller.ts | 20 ++++++++++++- src/auth/dtos/request/index.ts | 2 +- .../dtos/request/junior-login.request.dto.ts | 12 ++++++++ .../set-junior-password.request.dto.ts | 9 ++++-- .../dtos/request/set-passcode.request.dto.ts | 15 ---------- src/auth/services/auth.service.ts | 28 +++++++++++++++-- .../notification-created.listener.ts | 2 +- .../services/notifications.service.ts | 1 - .../modules/otp/services/otp.service.ts | 1 - .../repositories/customer.repository.ts | 4 +-- src/customer/services/customer.service.ts | 2 +- .../dtos/request/create-junior.request.dto.ts | 30 ++----------------- .../dtos/response/junior.response.dto.ts | 16 +++++++--- src/junior/repositories/junior.repository.ts | 2 +- src/junior/services/junior.service.ts | 21 ++++--------- src/junior/services/qrcode.service.ts | 1 - src/user/services/user.service.ts | 7 ++++- 17 files changed, 96 insertions(+), 77 deletions(-) create mode 100644 src/auth/dtos/request/junior-login.request.dto.ts delete mode 100644 src/auth/dtos/request/set-passcode.request.dto.ts diff --git a/src/auth/controllers/auth.controller.ts b/src/auth/controllers/auth.controller.ts index 3094142..8f9bf35 100644 --- a/src/auth/controllers/auth.controller.ts +++ b/src/auth/controllers/auth.controller.ts @@ -9,9 +9,11 @@ import { ChangePasswordRequestDto, CreateUnverifiedUserRequestDto, ForgetPasswordRequestDto, + JuniorLoginRequestDto, LoginRequestDto, RefreshTokenRequestDto, SendForgetPasswordOtpRequestDto, + setJuniorPasswordRequestDto, VerifyForgetPasswordOtpRequestDto, VerifyUserRequestDto, } from '../dtos/request'; @@ -69,10 +71,26 @@ export class AuthController { @Post('change-password') @HttpCode(HttpStatus.NO_CONTENT) @UseGuards(AccessTokenGuard) - async changePassword(@AuthenticatedUser() { sub }: IJwtPayload, @Body() forgetPasswordDto: ChangePasswordRequestDto) { + changePassword(@AuthenticatedUser() { sub }: IJwtPayload, @Body() forgetPasswordDto: ChangePasswordRequestDto) { return this.authService.changePassword(sub, forgetPasswordDto); } + @Post('junior/set-password') + @HttpCode(HttpStatus.NO_CONTENT) + @Public() + setJuniorPasscode(@Body() setPassworddto: setJuniorPasswordRequestDto) { + return this.authService.setJuniorPassword(setPassworddto); + } + + @Post('junior/login') + @HttpCode(HttpStatus.OK) + @ApiDataResponse(LoginResponseDto) + async juniorLogin(@Body() juniorLoginDto: JuniorLoginRequestDto) { + const [res, user] = await this.authService.juniorLogin(juniorLoginDto); + + return ResponseFactory.data(new LoginResponseDto(res, user)); + } + @Post('refresh-token') @Public() async refreshToken(@Body() { refreshToken }: RefreshTokenRequestDto) { diff --git a/src/auth/dtos/request/index.ts b/src/auth/dtos/request/index.ts index fac6c67..6659d12 100644 --- a/src/auth/dtos/request/index.ts +++ b/src/auth/dtos/request/index.ts @@ -1,11 +1,11 @@ export * from './change-password.request.dto'; export * from './create-unverified-user.request.dto'; export * from './forget-password.request.dto'; +export * from './junior-login.request.dto'; export * from './login.request.dto'; export * from './refresh-token.request.dto'; export * from './send-forget-password-otp.request.dto'; export * from './set-junior-password.request.dto'; -export * from './set-passcode.request.dto'; export * from './verify-forget-password-otp.request.dto'; export * from './verify-otp.request.dto'; export * from './verify-user.request.dto'; diff --git a/src/auth/dtos/request/junior-login.request.dto.ts b/src/auth/dtos/request/junior-login.request.dto.ts new file mode 100644 index 0000000..b53a842 --- /dev/null +++ b/src/auth/dtos/request/junior-login.request.dto.ts @@ -0,0 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsEmail, IsString } from 'class-validator'; +import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +export class JuniorLoginRequestDto { + @ApiProperty({ example: 'test@junior.com' }) + @IsEmail({}, { message: i18n('validation.IsEmail', { path: 'general', property: 'auth.email' }) }) + email!: string; + + @ApiProperty({ example: 'Abcd1234@' }) + @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'auth.password' }) }) + password!: string; +} diff --git a/src/auth/dtos/request/set-junior-password.request.dto.ts b/src/auth/dtos/request/set-junior-password.request.dto.ts index c78560e..966fb58 100644 --- a/src/auth/dtos/request/set-junior-password.request.dto.ts +++ b/src/auth/dtos/request/set-junior-password.request.dto.ts @@ -1,8 +1,11 @@ -import { ApiProperty } from '@nestjs/swagger'; +import { ApiProperty, PickType } from '@nestjs/swagger'; import { IsNotEmpty, IsString } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; -import { SetPasscodeRequestDto } from './set-passcode.request.dto'; -export class setJuniorPasswordRequestDto extends SetPasscodeRequestDto { +import { ChangePasswordRequestDto } from './change-password.request.dto'; +export class setJuniorPasswordRequestDto extends PickType(ChangePasswordRequestDto, [ + 'newPassword', + 'confirmNewPassword', +]) { @ApiProperty() @IsString({ message: i18n('validation.IsNumberString', { path: 'general', property: 'auth.qrToken' }) }) @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'auth.qrToken' }) }) diff --git a/src/auth/dtos/request/set-passcode.request.dto.ts b/src/auth/dtos/request/set-passcode.request.dto.ts deleted file mode 100644 index aca81d3..0000000 --- a/src/auth/dtos/request/set-passcode.request.dto.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsNumberString, MaxLength, MinLength } from 'class-validator'; -import { i18nValidationMessage as i18n } from 'nestjs-i18n'; -const PASSCODE_LENGTH = 6; - -export class SetPasscodeRequestDto { - @ApiProperty({ example: '123456' }) - @IsNumberString( - { no_symbols: true }, - { message: i18n('validation.IsNumberString', { path: 'general', property: 'auth.passcode' }) }, - ) - @MinLength(PASSCODE_LENGTH, { message: i18n('validation.MinLength', { path: 'general', property: 'auth.passcode' }) }) - @MaxLength(PASSCODE_LENGTH, { message: i18n('validation.MaxLength', { path: 'general', property: 'auth.passcode' }) }) - passcode!: string; -} diff --git a/src/auth/services/auth.service.ts b/src/auth/services/auth.service.ts index 3ce8b63..5330bed 100644 --- a/src/auth/services/auth.service.ts +++ b/src/auth/services/auth.service.ts @@ -14,6 +14,7 @@ import { ChangePasswordRequestDto, CreateUnverifiedUserRequestDto, ForgetPasswordRequestDto, + JuniorLoginRequestDto, LoginRequestDto, SendForgetPasswordOtpRequestDto, setJuniorPasswordRequestDto, @@ -196,11 +197,14 @@ export class AuthService { this.logger.log(`Password changed successfully for user with id ${userId}`); } - async setJuniorPasscode(body: setJuniorPasswordRequestDto) { + async setJuniorPassword(body: setJuniorPasswordRequestDto) { this.logger.log(`Setting passcode for junior with qrToken ${body.qrToken}`); + if (body.newPassword != body.confirmNewPassword) { + throw new BadRequestException('AUTH.PASSWORD_MISMATCH'); + } const juniorId = await this.userTokenService.validateToken(body.qrToken, UserType.JUNIOR); const salt = bcrypt.genSaltSync(SALT_ROUNDS); - const hashedPasscode = bcrypt.hashSync(body.passcode, salt); + const hashedPasscode = bcrypt.hashSync(body.newPassword, salt); await this.userService.setPassword(juniorId!, hashedPasscode, salt); await this.userTokenService.invalidateToken(body.qrToken); this.logger.log(`Passcode set successfully for junior with id ${juniorId}`); @@ -278,6 +282,26 @@ export class AuthService { return [tokens, user]; } + async juniorLogin(juniorLoginDto: JuniorLoginRequestDto): Promise<[ILoginResponse, User]> { + const user = await this.userService.findUser({ email: juniorLoginDto.email }); + + if (!user || !user.roles.includes(Roles.JUNIOR)) { + throw new UnauthorizedException('AUTH.INVALID_CREDENTIALS'); + } + + this.logger.log(`validating password for user with email ${juniorLoginDto.email}`); + const isPasswordValid = bcrypt.compareSync(juniorLoginDto.password, user.password); + + if (!isPasswordValid) { + this.logger.error(`Invalid password for user with email ${juniorLoginDto.email}`); + throw new UnauthorizedException('AUTH.INVALID_CREDENTIALS'); + } + + const tokens = await this.generateAuthToken(user); + this.logger.log(`Password validated successfully for user`); + return [tokens, user]; + } + private async generateAuthToken(user: User) { this.logger.log(`Generating auth token for user with id ${user.id}`); const [accessToken, refreshToken] = await Promise.all([ diff --git a/src/common/modules/notification/listeners/notification-created.listener.ts b/src/common/modules/notification/listeners/notification-created.listener.ts index 03d9a7c..a009389 100644 --- a/src/common/modules/notification/listeners/notification-created.listener.ts +++ b/src/common/modules/notification/listeners/notification-created.listener.ts @@ -21,7 +21,7 @@ export class NotificationCreatedListener { /** * Handles the NOTIFICATION_CREATED event by calling the appropriate channel logic. */ - async handle(event: IEventInterface) { + handle(event: IEventInterface) { this.logger.log( `Handling ${EventType.NOTIFICATION_CREATED} event for notification ${event.id} (channel: ${event.channel})`, ); diff --git a/src/common/modules/notification/services/notifications.service.ts b/src/common/modules/notification/services/notifications.service.ts index 1259be5..ba192bc 100644 --- a/src/common/modules/notification/services/notifications.service.ts +++ b/src/common/modules/notification/services/notifications.service.ts @@ -68,7 +68,6 @@ export class NotificationsService { }); this.logger.log(`emitting ${EventType.NOTIFICATION_CREATED} event`); - return this.redisPubSubService.publishEvent(EventType.NOTIFICATION_CREATED, { ...notification, data: { otp }, diff --git a/src/common/modules/otp/services/otp.service.ts b/src/common/modules/otp/services/otp.service.ts index 869cab3..5d194e4 100644 --- a/src/common/modules/otp/services/otp.service.ts +++ b/src/common/modules/otp/services/otp.service.ts @@ -19,7 +19,6 @@ export class OtpService { async generateAndSendOtp(sendOtpRequest: ISendOtp): Promise { this.logger.log(`invalidate OTP for ${sendOtpRequest.recipient} and ${sendOtpRequest.otpType}`); await this.otpRepository.invalidateOtp(sendOtpRequest); - this.logger.log(`Generating OTP for ${sendOtpRequest.recipient}`); const otp = this.useMock ? DEFAULT_OTP_DIGIT.repeat(DEFAULT_OTP_LENGTH) : generateRandomOtp(DEFAULT_OTP_LENGTH); diff --git a/src/customer/repositories/customer.repository.ts b/src/customer/repositories/customer.repository.ts index 0068996..e2cfc19 100644 --- a/src/customer/repositories/customer.repository.ts +++ b/src/customer/repositories/customer.repository.ts @@ -14,8 +14,7 @@ export class CustomerRepository { findOne(where: FindOptionsWhere) { return this.customerRepository.findOne({ where, - relations: ['user', 'cards'], - + relations: ['user', 'cards'], }); } @@ -30,6 +29,7 @@ export class CustomerRepository { lastName: body.lastName, dateOfBirth: body.dateOfBirth, countryOfResidence: body.countryOfResidence, + gender: body.gender, }), ); } diff --git a/src/customer/services/customer.service.ts b/src/customer/services/customer.service.ts index 6d77eda..6aa3e59 100644 --- a/src/customer/services/customer.service.ts +++ b/src/customer/services/customer.service.ts @@ -30,7 +30,7 @@ export class CustomerService { return this.findCustomerById(userId); } - async createJuniorCustomer(guardianId: string, juniorId: string, body: CreateJuniorRequestDto) { + createJuniorCustomer(guardianId: string, juniorId: string, body: CreateJuniorRequestDto) { this.logger.log(`Creating junior customer for user ${juniorId}`); return this.customerRepository.createCustomer(juniorId, body, false); diff --git a/src/junior/dtos/request/create-junior.request.dto.ts b/src/junior/dtos/request/create-junior.request.dto.ts index 3b502b3..408ccf2 100644 --- a/src/junior/dtos/request/create-junior.request.dto.ts +++ b/src/junior/dtos/request/create-junior.request.dto.ts @@ -1,25 +1,9 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsDateString, IsEmail, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID, Matches } from 'class-validator'; +import { IsDateString, IsEmail, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; -import { COUNTRY_CODE_REGEX } from '~/auth/constants'; -import { IsValidPhoneNumber } from '~/core/decorators/validations'; import { Gender } from '~/customer/enums'; import { Relationship } from '~/junior/enums'; export class CreateJuniorRequestDto { - @ApiProperty({ example: '+962' }) - @Matches(COUNTRY_CODE_REGEX, { - message: i18n('validation.Matches', { path: 'general', property: 'auth.countryCode' }), - }) - @IsOptional() - countryCode: string = '+966'; - - @ApiProperty({ example: '787259134' }) - @IsValidPhoneNumber({ - message: i18n('validation.IsValidPhoneNumber', { path: 'general', property: 'auth.phoneNumber' }), - }) - @IsOptional() - phoneNumber!: string; - @ApiProperty({ example: 'John' }) @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'customer.firstName' }) }) @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'customer.firstName' }) }) @@ -30,9 +14,9 @@ export class CreateJuniorRequestDto { @IsNotEmpty({ message: i18n('validation.IsNotEmpty', { path: 'general', property: 'customer.lastName' }) }) lastName!: string; - @ApiProperty({ example: 'MALE' }) + @ApiProperty({ enum: Gender }) @IsEnum(Gender, { message: i18n('validation.IsEnum', { path: 'general', property: 'customer.gender' }) }) - gender!: string; + gender!: Gender; @ApiProperty({ example: '2020-01-01' }) @IsDateString({}, { message: i18n('validation.IsDateString', { path: 'general', property: 'customer.dateOfBirth' }) }) @@ -46,14 +30,6 @@ export class CreateJuniorRequestDto { @IsEnum(Relationship, { message: i18n('validation.IsEnum', { path: 'general', property: 'junior.relationship' }) }) relationship!: Relationship; - @ApiProperty({ example: 'bf342-3f3f-3f3f-3f3f' }) - @IsUUID('4', { message: i18n('validation.IsUUID', { path: 'general', property: 'junior.civilIdFrontId' }) }) - civilIdFrontId!: string; - - @ApiProperty({ example: 'bf342-3f3f-3f3f-3f3f' }) - @IsUUID('4', { message: i18n('validation.IsUUID', { path: 'general', property: 'junior.civilIdBackId' }) }) - civilIdBackId!: string; - @ApiProperty({ example: '123e4567-e89b-12d3-a456-426614174000' }) @IsUUID('4', { message: i18n('validation.IsUUID', { path: 'general', property: 'customer.profilePictureId' }) }) @IsOptional() diff --git a/src/junior/dtos/response/junior.response.dto.ts b/src/junior/dtos/response/junior.response.dto.ts index b520190..52ea9a1 100644 --- a/src/junior/dtos/response/junior.response.dto.ts +++ b/src/junior/dtos/response/junior.response.dto.ts @@ -7,10 +7,16 @@ export class JuniorResponseDto { @ApiProperty({ example: 'id' }) id!: string; - @ApiProperty({ example: 'fullName' }) - fullName!: string; + @ApiProperty({ example: 'FirstName' }) + firstName!: string; - @ApiProperty({ example: 'relationship' }) + @ApiProperty({ example: 'LastName' }) + lastName!: string; + + @ApiProperty({ example: 'test@junior.com' }) + email!: string; + + @ApiProperty({ enum: Relationship }) relationship!: Relationship; @ApiProperty({ type: DocumentMetaResponseDto }) @@ -18,7 +24,9 @@ export class JuniorResponseDto { constructor(junior: Junior) { this.id = junior.id; - this.fullName = `${junior.customer.firstName} ${junior.customer.lastName}`; + this.firstName = junior.customer.firstName; + this.lastName = junior.customer.lastName; + this.email = junior.customer.user.email; this.relationship = junior.relationship; this.profilePicture = junior.customer.user.profilePicture ? new DocumentMetaResponseDto(junior.customer.user.profilePicture) diff --git a/src/junior/repositories/junior.repository.ts b/src/junior/repositories/junior.repository.ts index cd1e3df..63db76d 100644 --- a/src/junior/repositories/junior.repository.ts +++ b/src/junior/repositories/junior.repository.ts @@ -20,7 +20,7 @@ export class JuniorRepository { } findJuniorById(juniorId: string, withGuardianRelation = false, guardianId?: string) { - const relations = ['customer', 'customer.user', 'theme', 'theme.avatar']; + const relations = ['customer', 'customer.user', 'theme', 'theme.avatar', 'customer.user.profilePicture']; if (withGuardianRelation) { relations.push('guardian', 'guardian.customer', 'guardian.customer.user'); } diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 4c7a5c8..f236189 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -1,11 +1,9 @@ import { BadRequestException, Injectable, Logger } from '@nestjs/common'; -import { FindOptionsWhere } from 'typeorm'; import { Transactional } from 'typeorm-transactional'; import { Roles } from '~/auth/enums'; import { PageOptionsRequestDto } from '~/core/dtos'; import { CustomerService } from '~/customer/services'; import { DocumentService, OciService } from '~/document/services'; -import { User } from '~/user/entities'; import { UserType } from '~/user/enums'; import { UserService } from '~/user/services'; import { UserTokenService } from '~/user/services/user-token.service'; @@ -31,26 +29,18 @@ export class JuniorService { async createJuniors(body: CreateJuniorRequestDto, guardianId: string) { this.logger.log(`Creating junior for guardian ${guardianId}`); - const searchConditions: FindOptionsWhere[] = [{ email: body.email }]; - - if (body.phoneNumber && body.countryCode) { - searchConditions.push({ - phoneNumber: body.phoneNumber, - countryCode: body.countryCode, - }); - } - - const existingUser = await this.userService.findUser(searchConditions); + const existingUser = await this.userService.findUser({ email: body.email }); if (existingUser) { - this.logger.error(`User with email ${body.email} or phone number ${body.phoneNumber} already exists`); + this.logger.error(`User with email ${body.email} already exists`); throw new BadRequestException('USER.ALREADY_EXISTS'); } const user = await this.userService.createUser({ email: body.email, - countryCode: body.countryCode, - phoneNumber: body.phoneNumber, + firstName: body.firstName, + lastName: body.lastName, + profilePictureId: body.profilePictureId, roles: [Roles.JUNIOR], }); @@ -75,6 +65,7 @@ export class JuniorService { this.logger.error(`Junior ${juniorId} not found`); throw new BadRequestException('JUNIOR.NOT_FOUND'); } + await this.prepareJuniorImages([junior]); this.logger.log(`Junior ${juniorId} found successfully`); return junior; diff --git a/src/junior/services/qrcode.service.ts b/src/junior/services/qrcode.service.ts index 7001f61..f71e06a 100644 --- a/src/junior/services/qrcode.service.ts +++ b/src/junior/services/qrcode.service.ts @@ -10,7 +10,6 @@ export class QrcodeService { this.logger.log(`Generating QR code for token ${token}`); const link = await this.branchIoService.createBranchLink(token); - return qrcode.toDataURL(link); } } diff --git a/src/user/services/user.service.ts b/src/user/services/user.service.ts index 5f2f70a..46b4834 100644 --- a/src/user/services/user.service.ts +++ b/src/user/services/user.service.ts @@ -236,13 +236,18 @@ export class UserService { throw new BadRequestException('USER.EMAIL_ALREADY_VERIFIED'); } - await this.otpService.verifyOtp({ + const isOtpValid = await this.otpService.verifyOtp({ userId, value: otp, scope: OtpScope.VERIFY_EMAIL, otpType: OtpType.EMAIL, }); + if (!isOtpValid) { + this.logger.error(`Invalid OTP for user with email ${user.email}`); + throw new BadRequestException('OTP.INVALID_OTP'); + } + await this.userRepository.update(userId, { isEmailVerified: true }); this.logger.log(`Email for user ${userId} verified successfully`); } From 3222aa4a66efdc057b6bb3e50fcfcef2314fea0d Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 24 Aug 2025 18:40:49 +0300 Subject: [PATCH 04/45] fix: fix card embossing info endpoint --- src/common/modules/neoleap/services/neoleap.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/modules/neoleap/services/neoleap.service.ts b/src/common/modules/neoleap/services/neoleap.service.ts index 223c5b3..dc51b53 100644 --- a/src/common/modules/neoleap/services/neoleap.service.ts +++ b/src/common/modules/neoleap/services/neoleap.service.ts @@ -246,7 +246,7 @@ export class NeoLeapService { }; return this.sendRequestToNeoLeap( - 'cardembossing/CardEmbossingDetails', + 'issuance/GetEmbossingInformation', payload, responseKey, CardEmbossingDetailsResponseDto, From 740135051dd632efeca9b3523703a944efdf4e4e Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 24 Aug 2025 20:01:07 +0300 Subject: [PATCH 05/45] feat: create card for children --- src/card/entities/card.entity.ts | 2 +- src/card/enums/card-colors.enum.ts | 13 ++- src/card/repositories/card.repository.ts | 9 +- src/card/services/card.service.ts | 13 +++ .../__mocks__/create-application.mock.ts | 16 +++- .../neoleap/services/neoleap.service.ts | 85 +++++++++++++++++-- .../repositories/customer.repository.ts | 2 +- src/i18n/ar/app.json | 3 +- src/i18n/en/app.json | 3 +- .../dtos/request/create-junior.request.dto.ts | 20 ++++- src/junior/junior.module.ts | 11 ++- src/junior/services/junior.service.ts | 18 +++- 12 files changed, 174 insertions(+), 21 deletions(-) diff --git a/src/card/entities/card.entity.ts b/src/card/entities/card.entity.ts index 72ce7a0..97849a6 100644 --- a/src/card/entities/card.entity.ts +++ b/src/card/entities/card.entity.ts @@ -39,7 +39,7 @@ export class Card { @Column({ type: 'varchar', nullable: false, name: 'customer_type' }) customerType!: CustomerType; - @Column({ type: 'varchar', nullable: false, default: CardColors.BLUE }) + @Column({ type: 'varchar', nullable: false, default: CardColors.DEEP_MAGENTA }) color!: CardColors; @Column({ type: 'varchar', nullable: false, default: CardStatus.PENDING }) diff --git a/src/card/enums/card-colors.enum.ts b/src/card/enums/card-colors.enum.ts index 9fe8e47..f24873f 100644 --- a/src/card/enums/card-colors.enum.ts +++ b/src/card/enums/card-colors.enum.ts @@ -1,4 +1,13 @@ export enum CardColors { - RED = 'RED', - BLUE = 'BLUE', + RAINBOW_PASTEL = 'RAINBOW_PASTEL', + DEEP_MAGENTA = 'DEEP_MAGENTA', + GREEN_TEAL = 'GREEN_TEAL', + + BLUE_GREEN = 'BLUE_GREEN', + TEAL_NAVY = 'TEAL_NAVY', + PURPLE_PINK = 'PURPLE_PINK', + + GOLD_BLUE = 'GOLD_BLUE', + OCEAN_BLUE = 'OCEAN_BLUE', + BROWN_RUST = 'BROWN_RUST', } diff --git a/src/card/repositories/card.repository.ts b/src/card/repositories/card.repository.ts index 3ee34ce..0fa9bd7 100644 --- a/src/card/repositories/card.repository.ts +++ b/src/card/repositories/card.repository.ts @@ -9,7 +9,12 @@ import { CardColors, CardIssuers, CardScheme, CardStatus, CardStatusDescription, export class CardRepository { constructor(@InjectRepository(Card) private readonly cardRepository: Repository) {} - createCard(customerId: string, accountId: string, card: CreateApplicationResponse): Promise { + createCard( + customerId: string, + accountId: string, + card: CreateApplicationResponse, + cardColor?: CardColors, + ): Promise { return this.cardRepository.save( this.cardRepository.create({ customerId: customerId, @@ -18,7 +23,7 @@ export class CardRepository { customerType: CustomerType.PARENT, firstSixDigits: card.firstSixDigits, lastFourDigits: card.lastFourDigits, - color: CardColors.BLUE, + color: cardColor ? cardColor : CardColors.DEEP_MAGENTA, scheme: CardScheme.VISA, issuer: CardIssuers.NEOLEAP, accountId: accountId, diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 89a0c7a..2231fcb 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -2,9 +2,11 @@ import { BadRequestException, forwardRef, Inject, Injectable } from '@nestjs/com import { Transactional } from 'typeorm-transactional'; import { AccountCardStatusChangedWebhookRequest } from '~/common/modules/neoleap/dtos/requests'; import { NeoLeapService } from '~/common/modules/neoleap/services'; +import { Customer } from '~/customer/entities'; import { KycStatus } from '~/customer/enums'; import { CustomerService } from '~/customer/services'; import { Card } from '../entities'; +import { CardColors } from '../enums'; import { CardStatusMapper } from '../mappers/card-status.mapper'; import { CardRepository } from '../repositories'; import { AccountService } from './account.service'; @@ -37,6 +39,17 @@ export class CardService { return this.getCardById(createdCard.id); } + async createCardForChild(parentCustomer: Customer, childCustomer: Customer, cardColor: CardColors, cardPin: string) { + const data = await this.neoleapService.createChildCard(parentCustomer, childCustomer, cardPin); + const createdCard = await this.cardRepository.createCard( + childCustomer.id, + parentCustomer.cards[0].account.id, + data, + cardColor, + ); + + return this.getCardById(createdCard.id); + } async getCardById(id: string): Promise { const card = await this.cardRepository.getCardById(id); diff --git a/src/common/modules/neoleap/__mocks__/create-application.mock.ts b/src/common/modules/neoleap/__mocks__/create-application.mock.ts index 760d2c4..8a13120 100644 --- a/src/common/modules/neoleap/__mocks__/create-application.mock.ts +++ b/src/common/modules/neoleap/__mocks__/create-application.mock.ts @@ -1,3 +1,11 @@ +function getRandomWithDigits(digits: number): string { + const min = Math.pow(10, digits - 1); // e.g. 1000 for 4 digits + const max = Math.pow(10, digits) - 1; // e.g. 9999 for 4 digits + + const result = Math.floor(Math.random() * (max - min + 1)) + min; + return result.toString(); +} + export const CREATE_APPLICATION_MOCK = { ResponseHeader: { Version: '1.0.0', @@ -673,9 +681,9 @@ export const CREATE_APPLICATION_MOCK = { }, AccountDetailsList: [ { - Id: 21017, + Id: getRandomWithDigits(5), InstitutionCode: '1100', - AccountNumber: '6899999999999999', + AccountNumber: getRandomWithDigits(16), Currency: { CurrCode: '682', AlphaCode: 'SAR', @@ -704,10 +712,10 @@ export const CREATE_APPLICATION_MOCK = { { pvv: null, ResponseCardIdentifier: { - Id: 28595, + Id: getRandomWithDigits(5), Pan: 'DDDDDDDDDDDDDDDDDDD', MaskedPan: '999999_9999', - VPan: '1100000000000000', + VPan: getRandomWithDigits(16), Seqno: 0, }, ExpiryDate: '2031-09-30', diff --git a/src/common/modules/neoleap/services/neoleap.service.ts b/src/common/modules/neoleap/services/neoleap.service.ts index dc51b53..cb5860f 100644 --- a/src/common/modules/neoleap/services/neoleap.service.ts +++ b/src/common/modules/neoleap/services/neoleap.service.ts @@ -48,7 +48,7 @@ export class NeoLeapService { this.useKycMock = [true, 'true'].includes(this.configService.get('USE_KYC_MOCK', true)); } - async initiateKyc(customerId: string, body: InitiateKycRequestDto) { + initiateKyc(customerId: string, body: InitiateKycRequestDto) { const responseKey = 'InitiateKycResponseDetails'; if (this.useKycMock) { @@ -91,7 +91,7 @@ export class NeoLeapService { ); } - async createApplication(customer: Customer) { + createApplication(customer: Customer) { const responseKey = 'CreateNewApplicationResponseDetails'; if (!this.useGateway) { @@ -165,7 +165,82 @@ export class NeoLeapService { ); } - async inquireApplication(externalApplicationNumber: string) { + createChildCard(parent: Customer, child: Customer, cardPin: string) { + const responseKey = 'CreateNewApplicationResponseDetails'; + + if (!this.useGateway) { + return plainToInstance(CreateApplicationResponse, CREATE_APPLICATION_MOCK[responseKey], { + excludeExtraneousValues: true, + }); + } + + const payload: ICreateApplicationRequest = { + CreateNewApplicationRequestDetails: { + ApplicationRequestDetails: { + InstitutionCode: this.institutionCode, + ExternalApplicationNumber: child.applicationNumber.toString(), + ApplicationType: '01', + Product: '1101', + ApplicationDate: moment().format('YYYY-MM-DD'), + BranchCode: '000', + ApplicationSource: 'O', + DeliveryMethod: 'V', + }, + ApplicationProcessingDetails: { + SuggestedLimit: 0, + RequestedLimit: 0, + AssignedLimit: 0, + ProcessControl: 'STND', + }, + ApplicationFinancialInformation: { + Currency: { + AlphaCode: 'SAR', + }, + BillingCycle: 'C1', + }, + ApplicationOtherInfo: { + ParentAccountNumber: parent.cards[0].account.accountNumber, + }, + ApplicationCustomerDetails: { + FirstName: parent.firstName, + LastName: parent.lastName, + FullName: parent.fullName, + DateOfBirth: moment(parent.dateOfBirth).format('YYYY-MM-DD'), + EmbossName: child.fullName.toUpperCase(), // TODO Enter Emboss Name + IdType: '01', + IdNumber: parent.nationalId, + IdExpiryDate: moment(parent.nationalIdExpiry).format('YYYY-MM-DD'), + Title: parent.gender === Gender.MALE ? 'Mr' : 'Ms', + Gender: parent.gender === Gender.MALE ? 'M' : 'F', + LocalizedDateOfBirth: moment(parent.dateOfBirth).format('YYYY-MM-DD'), + Nationality: CountriesNumericISO[parent.countryOfResidence], + }, + ApplicationAddress: { + City: parent.city, + Country: CountriesNumericISO[parent.country], + Region: parent.region, + AddressLine1: `${parent.street} ${parent.building}`, + AddressLine2: parent.neighborhood, + AddressRole: 0, + Email: child.user.email, + Phone1: child.user.phoneNumber, + CountryDetails: { + DefaultCurrency: {}, + Description: [], + }, + }, + }, + RequestHeader: this.prepareHeaders('CreateNewApplication'), + }; + return this.sendRequestToNeoLeap( + 'application/CreateNewApplication', + payload, + responseKey, + CreateApplicationResponse, + ); + } + + inquireApplication(externalApplicationNumber: string) { const responseKey = 'InquireApplicationResponseDetails'; if (!this.useGateway) { return plainToInstance(InquireApplicationResponse, INQUIRE_APPLICATION_MOCK[responseKey], { @@ -197,7 +272,7 @@ export class NeoLeapService { ); } - async updateCardControl(cardId: string, amount: number, count?: number) { + updateCardControl(cardId: string, amount: number, count?: number) { const responseKey = 'UpdateCardControlResponseDetails'; if (!this.useGateway) { return; @@ -226,7 +301,7 @@ export class NeoLeapService { ); } - async getEmbossingInformation(card: Card) { + getEmbossingInformation(card: Card) { const responseKey = 'GetEmbossingInformationResponseDetails'; if (!this.useGateway) { return plainToInstance(CardEmbossingDetailsResponseDto, CARD_EMBOSSING_DETAILS_MOCK[responseKey], { diff --git a/src/customer/repositories/customer.repository.ts b/src/customer/repositories/customer.repository.ts index e2cfc19..276a6d4 100644 --- a/src/customer/repositories/customer.repository.ts +++ b/src/customer/repositories/customer.repository.ts @@ -14,7 +14,7 @@ export class CustomerRepository { findOne(where: FindOptionsWhere) { return this.customerRepository.findOne({ where, - relations: ['user', 'cards'], + relations: ['user', 'cards', 'cards.account'], }); } diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index 7f63e13..7c5bcb4 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -51,7 +51,8 @@ "NOT_FOUND": "لم يتم العثور على العميل.", "ALREADY_EXISTS": "العميل موجود بالفعل.", "KYC_NOT_APPROVED": "لم يتم الموافقة على هوية العميل بعد.", - "ALREADY_HAS_CARD": "العميل لديه بطاقة بالفعل." + "ALREADY_HAS_CARD": "العميل لديه بطاقة بالفعل.", + "DOES_NOT_HAVE_CARD": "العميل لا يملك بطاقة." }, "GIFT": { diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index c9d6a8d..f6e5278 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -50,7 +50,8 @@ "NOT_FOUND": "The customer was not found.", "ALREADY_EXISTS": "The customer already exists.", "KYC_NOT_APPROVED": "The customer's KYC has not been approved yet.", - "ALREADY_HAS_CARD": "The customer already has a card." + "ALREADY_HAS_CARD": "The customer already has a card.", + "DOES_NOT_HAVE_CARD": "The customer does not have a card." }, "GIFT": { diff --git a/src/junior/dtos/request/create-junior.request.dto.ts b/src/junior/dtos/request/create-junior.request.dto.ts index 408ccf2..ff25a7f 100644 --- a/src/junior/dtos/request/create-junior.request.dto.ts +++ b/src/junior/dtos/request/create-junior.request.dto.ts @@ -1,6 +1,16 @@ import { ApiProperty } from '@nestjs/swagger'; -import { IsDateString, IsEmail, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; +import { + IsDateString, + IsEmail, + IsEnum, + IsNotEmpty, + IsNumberString, + IsOptional, + IsString, + IsUUID, +} from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +import { CardColors } from '~/card/enums'; import { Gender } from '~/customer/enums'; import { Relationship } from '~/junior/enums'; export class CreateJuniorRequestDto { @@ -30,6 +40,14 @@ export class CreateJuniorRequestDto { @IsEnum(Relationship, { message: i18n('validation.IsEnum', { path: 'general', property: 'junior.relationship' }) }) relationship!: Relationship; + @ApiProperty({ enum: CardColors }) + @IsEnum(CardColors, { message: i18n('validation.IsEnum', { path: 'general', property: 'junior.cardColor' }) }) + cardColor!: CardColors; + + @ApiProperty({ example: '1234' }) + @IsNumberString({}, { message: i18n('validation.IsEnum', { path: 'general', property: 'junior.cardPin' }) }) + cardPin!: string; + @ApiProperty({ example: '123e4567-e89b-12d3-a456-426614174000' }) @IsUUID('4', { message: i18n('validation.IsUUID', { path: 'general', property: 'customer.profilePictureId' }) }) @IsOptional() diff --git a/src/junior/junior.module.ts b/src/junior/junior.module.ts index d133888..2d81313 100644 --- a/src/junior/junior.module.ts +++ b/src/junior/junior.module.ts @@ -1,6 +1,8 @@ import { HttpModule } from '@nestjs/axios'; import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { CardModule } from '~/card/card.module'; +import { NeoLeapModule } from '~/common/modules/neoleap/neoleap.module'; import { CustomerModule } from '~/customer/customer.module'; import { UserModule } from '~/user/user.module'; import { JuniorController } from './controllers'; @@ -11,7 +13,14 @@ import { BranchIoService, JuniorService, QrcodeService } from './services'; @Module({ controllers: [JuniorController], providers: [JuniorService, JuniorRepository, QrcodeService, BranchIoService], - imports: [TypeOrmModule.forFeature([Junior, Theme]), UserModule, CustomerModule, HttpModule], + imports: [ + TypeOrmModule.forFeature([Junior, Theme]), + UserModule, + CustomerModule, + HttpModule, + NeoLeapModule, + CardModule, + ], exports: [JuniorService], }) export class JuniorModule {} diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index f236189..8779101 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -1,6 +1,8 @@ import { BadRequestException, Injectable, Logger } from '@nestjs/common'; import { Transactional } from 'typeorm-transactional'; import { Roles } from '~/auth/enums'; +import { CardService } from '~/card/services'; +import { NeoLeapService } from '~/common/modules/neoleap/services'; import { PageOptionsRequestDto } from '~/core/dtos'; import { CustomerService } from '~/customer/services'; import { DocumentService, OciService } from '~/document/services'; @@ -23,12 +25,21 @@ export class JuniorService { private readonly documentService: DocumentService, private readonly ociService: OciService, private readonly qrCodeService: QrcodeService, + private readonly neoleapService: NeoLeapService, + private readonly cardService: CardService, ) {} @Transactional() async createJuniors(body: CreateJuniorRequestDto, guardianId: string) { this.logger.log(`Creating junior for guardian ${guardianId}`); + const parentCustomer = await this.customerService.findCustomerById(guardianId); + + if (!parentCustomer.cards || parentCustomer.cards.length === 0) { + this.logger.error(`Guardian ${guardianId} does not have a card`); + throw new BadRequestException('CUSTOMER.DOES_NOT_HAVE_CARD'); + } + const existingUser = await this.userService.findUser({ email: body.email }); if (existingUser) { @@ -44,14 +55,17 @@ export class JuniorService { roles: [Roles.JUNIOR], }); - const customer = await this.customerService.createJuniorCustomer(guardianId, user.id, body); + const childCustomer = await this.customerService.createJuniorCustomer(guardianId, user.id, body); await this.juniorRepository.createJunior(user.id, { guardianId, relationship: body.relationship, - customerId: customer.id, + customerId: childCustomer.id, }); + this.logger.debug('Creating card For Child'); + + await this.cardService.createCardForChild(parentCustomer, childCustomer, body.cardColor, body.cardColor); this.logger.log(`Junior ${user.id} created successfully`); return this.generateToken(user.id); From 4552a7fc9342376057b139110ba50cb367183a4e Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 24 Aug 2025 20:12:57 +0300 Subject: [PATCH 06/45] fix: fix issue with customer relationship in creating junior --- src/customer/services/customer.service.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/customer/services/customer.service.ts b/src/customer/services/customer.service.ts index 6aa3e59..0cfb6ca 100644 --- a/src/customer/services/customer.service.ts +++ b/src/customer/services/customer.service.ts @@ -30,10 +30,13 @@ export class CustomerService { return this.findCustomerById(userId); } - createJuniorCustomer(guardianId: string, juniorId: string, body: CreateJuniorRequestDto) { + async createJuniorCustomer(guardianId: string, juniorId: string, body: CreateJuniorRequestDto) { this.logger.log(`Creating junior customer for user ${juniorId}`); - return this.customerRepository.createCustomer(juniorId, body, false); + await this.customerRepository.createCustomer(juniorId, body, false); + + this.logger.log(`Junior customer created for user ${juniorId} successfully`); + return this.customerRepository.findOne({ id: juniorId }); } async findCustomerById(id: string) { From 7dd309e0e36eaa8effef7776f28a98ea1e65d99e Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 24 Aug 2025 20:14:59 +0300 Subject: [PATCH 07/45] fix: fix null assertion in creating junior --- src/junior/services/junior.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 8779101..50586c0 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -60,12 +60,12 @@ export class JuniorService { await this.juniorRepository.createJunior(user.id, { guardianId, relationship: body.relationship, - customerId: childCustomer.id, + customerId: childCustomer!.id, }); this.logger.debug('Creating card For Child'); - await this.cardService.createCardForChild(parentCustomer, childCustomer, body.cardColor, body.cardColor); + await this.cardService.createCardForChild(parentCustomer, childCustomer!, body.cardColor, body.cardColor); this.logger.log(`Junior ${user.id} created successfully`); return this.generateToken(user.id); From 3df34c00178991696d8766994d435a01a17cd332 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 26 Aug 2025 12:19:47 +0300 Subject: [PATCH 08/45] fix: fix duplicate iban --- src/common/modules/neoleap/__mocks__/create-application.mock.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/modules/neoleap/__mocks__/create-application.mock.ts b/src/common/modules/neoleap/__mocks__/create-application.mock.ts index 8a13120..3853390 100644 --- a/src/common/modules/neoleap/__mocks__/create-application.mock.ts +++ b/src/common/modules/neoleap/__mocks__/create-application.mock.ts @@ -705,7 +705,7 @@ export const CREATE_APPLICATION_MOCK = { UserData2: null, UserData3: 'D36407C9AE4C28D2185', UserData4: null, - UserData5: 'SA2380900000752991120011', + UserData5: `SA${getRandomWithDigits(22)}`, }, ], CardDetailsList: [ From 88730a2b2bb3e02a2b5ee3032d08e6b7c0d5be9e Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 26 Aug 2025 19:17:00 +0300 Subject: [PATCH 09/45] fix: fix create application mock --- .../__mocks__/create-application.mock.ts | 934 ++++-------------- .../neoleap/services/neoleap.service.ts | 6 +- 2 files changed, 190 insertions(+), 750 deletions(-) diff --git a/src/common/modules/neoleap/__mocks__/create-application.mock.ts b/src/common/modules/neoleap/__mocks__/create-application.mock.ts index 3853390..96465c0 100644 --- a/src/common/modules/neoleap/__mocks__/create-application.mock.ts +++ b/src/common/modules/neoleap/__mocks__/create-application.mock.ts @@ -1,758 +1,198 @@ -function getRandomWithDigits(digits: number): string { - const min = Math.pow(10, digits - 1); // e.g. 1000 for 4 digits - const max = Math.pow(10, digits) - 1; // e.g. 9999 for 4 digits +import { randomInt, randomUUID } from 'crypto'; - const result = Math.floor(Math.random() * (max - min + 1)) + min; - return result.toString(); +/** Generate a string of `n` random digits (first digit never 0). */ +function randomDigits(n: number): string { + if (n <= 0) return '0'; + let s = String(randomInt(1, 10)); // first digit 1–9 + for (let i = 1; i < n; i++) s += String(randomInt(0, 10)); + return s; } -export const CREATE_APPLICATION_MOCK = { - ResponseHeader: { - Version: '1.0.0', - MsgUid: 'adaa1893-9f95-48a8-b7a1-0422bcf629b5', - Source: 'ZOD', - ServiceId: 'CreateNewApplication', - ReqDateTime: '2025-06-03T07:32:16.304Z', - RspDateTime: '2025-06-03T08:21:15.662', - ResponseCode: '000', - ResponseType: 'Success', - ProcessingTime: 1665, - EncryptionKey: null, - ResponseDescription: 'Operation Successful', - LocalizedResponseDescription: null, - CustomerSpecificResponseDescriptionList: null, - HeaderUserDataList: null, - }, +/** Build a fresh mock object every time it's called */ +export function buildCreateApplicationMock() { + const now = new Date().toISOString(); - CreateNewApplicationResponseDetails: { - InstitutionCode: '1100', - ApplicationTypeDetails: { - TypeCode: '01', - Description: 'Normal Primary', - Additional: false, - Corporate: false, - UserData: null, + return { + ResponseHeader: { + Version: '1.0.0', + MsgUid: randomUUID(), + Source: 'ZOD', + ServiceId: 'CreateNewApplication', + ReqDateTime: now, + RspDateTime: now, + ResponseCode: '000', + ResponseType: 'Success', + ProcessingTime: 1665, + EncryptionKey: null, + ResponseDescription: 'Operation Successful', + LocalizedResponseDescription: null, + CustomerSpecificResponseDescriptionList: null, + HeaderUserDataList: null, }, - ApplicationDetails: { - cif: null, - ApplicationNumber: '3300000000073', - ExternalApplicationNumber: '3', - ApplicationStatus: '04', - Organization: 0, - Product: '1101', - ApplicatonDate: '2025-05-29', - ApplicationSource: 'O', - SalesSource: null, - DeliveryMethod: 'V', - ProgramCode: null, - Campaign: null, - Plastic: null, - Design: null, - ProcessStage: '99', - ProcessStageStatus: 'S', - Score: null, - ExternalScore: null, - RequestedLimit: 0, - SuggestedLimit: null, - AssignedLimit: 0, - AllowedLimitList: null, - EligibilityCheckResult: '00', - EligibilityCheckDescription: null, - Title: 'Mr.', - FirstName: 'Abdalhamid', - SecondName: null, - ThirdName: null, - LastName: ' Ahmad', - FullName: 'Abdalhamid Ahmad', - EmbossName: 'ABDALHAMID AHMAD', - PlaceOfBirth: null, - DateOfBirth: '1999-01-07', - LocalizedDateOfBirth: '1999-01-07', - Age: 26, - Gender: 'M', - Married: 'U', - Nationality: '682', - IdType: '01', - IdNumber: '1089055972', - IdExpiryDate: '2031-09-17', - EducationLevel: null, - ProfessionCode: 0, - NumberOfDependents: 0, - EmployerName: 'N/A', - EmploymentYears: 0, - EmploymentMonths: 0, - EmployerPhoneArea: null, - EmployerPhoneNumber: null, - EmployerPhoneExtension: null, - EmployerMobile: null, - EmployerFaxArea: null, - EmployerFax: null, - EmployerCity: null, - EmployerAddress: null, - EmploymentActivity: null, - EmploymentStatus: null, - CIF: null, - BankAccountNumber: ' ', - Currency: { - CurrCode: '682', - AlphaCode: 'SAR', + + CreateNewApplicationResponseDetails: { + InstitutionCode: '1100', + ApplicationTypeDetails: { + TypeCode: '01', + Description: 'Normal Primary', + Additional: false, + Corporate: false, + UserData: null, }, - RequestedCurrencyList: null, - CreditAccountNumber: '6000000000000000', - AccountType: '30', - OpenDate: null, - Income: 0, - AdditionalIncome: 0, - TotalIncome: 0, - CurrentBalance: 0, - AverageBalance: 0, - AssetsBalance: 0, - InsuranceBalance: 0, - DepositAmount: 0, - GuarenteeAccountNumber: null, - GuarenteeAmount: 0, - InstalmentAmount: 0, - AutoDebit: 'N', - PaymentMethod: '2', - BillingCycle: 'C1', - OldIssueDate: null, - OtherPaymentsDate: null, - MaximumDelinquency: null, - CreditBureauDecision: null, - CreditBureauUserData: null, - ECommerce: 'N', - NumberOfCards: 0, - OtherBank: null, - OtherBankDescription: null, - InsuranceProduct: null, - SocialCode: '000', - JobGrade: 0, - Flags: [ - { - Position: 1, - Value: '0', - }, - { - Position: 2, - Value: '0', - }, - { - Position: 3, - Value: '0', - }, - { - Position: 4, - Value: '0', - }, - { - Position: 5, - Value: '0', - }, - { - Position: 6, - Value: '0', - }, - { - Position: 7, - Value: '0', - }, - { - Position: 8, - Value: '0', - }, - { - Position: 9, - Value: '0', - }, - { - Position: 10, - Value: '0', - }, - { - Position: 11, - Value: '0', - }, - { - Position: 12, - Value: '0', - }, - { - Position: 13, - Value: '0', - }, - { - Position: 14, - Value: '0', - }, - { - Position: 15, - Value: '0', - }, - { - Position: 16, - Value: '0', - }, - { - Position: 17, - Value: '0', - }, - { - Position: 18, - Value: '0', - }, - { - Position: 19, - Value: '0', - }, - { - Position: 20, - Value: '0', - }, - { - Position: 21, - Value: '0', - }, - { - Position: 22, - Value: '0', - }, - { - Position: 23, - Value: '0', - }, - { - Position: 24, - Value: '0', - }, - { - Position: 25, - Value: '0', - }, - { - Position: 26, - Value: '0', - }, - { - Position: 27, - Value: '0', - }, - { - Position: 28, - Value: '0', - }, - { - Position: 29, - Value: '0', - }, - { - Position: 30, - Value: '0', - }, - { - Position: 31, - Value: '0', - }, - { - Position: 32, - Value: '0', - }, - { - Position: 33, - Value: '0', - }, - { - Position: 34, - Value: '0', - }, - { - Position: 35, - Value: '0', - }, - { - Position: 36, - Value: '0', - }, - { - Position: 37, - Value: '0', - }, - { - Position: 38, - Value: '0', - }, - { - Position: 39, - Value: '0', - }, - { - Position: 40, - Value: '0', - }, - { - Position: 41, - Value: '0', - }, - { - Position: 42, - Value: '0', - }, - { - Position: 43, - Value: '0', - }, - { - Position: 44, - Value: '0', - }, - { - Position: 45, - Value: '0', - }, - { - Position: 46, - Value: '0', - }, - { - Position: 47, - Value: '0', - }, - { - Position: 48, - Value: '0', - }, - { - Position: 49, - Value: '0', - }, - { - Position: 50, - Value: '0', - }, - { - Position: 51, - Value: '0', - }, - { - Position: 52, - Value: '0', - }, - { - Position: 53, - Value: '0', - }, - { - Position: 54, - Value: '0', - }, - { - Position: 55, - Value: '0', - }, - { - Position: 56, - Value: '0', - }, - { - Position: 57, - Value: '0', - }, - { - Position: 58, - Value: '0', - }, - { - Position: 59, - Value: '0', - }, - { - Position: 60, - Value: '0', - }, - { - Position: 61, - Value: '0', - }, - { - Position: 62, - Value: '0', - }, - { - Position: 63, - Value: '0', - }, - { - Position: 64, - Value: '0', - }, - ], - CheckFlags: [ - { - Position: 1, - Value: '0', - }, - { - Position: 2, - Value: '0', - }, - { - Position: 3, - Value: '0', - }, - { - Position: 4, - Value: '0', - }, - { - Position: 5, - Value: '0', - }, - { - Position: 6, - Value: '0', - }, - { - Position: 7, - Value: '0', - }, - { - Position: 8, - Value: '0', - }, - { - Position: 9, - Value: '0', - }, - { - Position: 10, - Value: '0', - }, - { - Position: 11, - Value: '0', - }, - { - Position: 12, - Value: '0', - }, - { - Position: 13, - Value: '0', - }, - { - Position: 14, - Value: '0', - }, - { - Position: 15, - Value: '0', - }, - { - Position: 16, - Value: '0', - }, - { - Position: 17, - Value: '0', - }, - { - Position: 18, - Value: '0', - }, - { - Position: 19, - Value: '0', - }, - { - Position: 20, - Value: '0', - }, - { - Position: 21, - Value: '0', - }, - { - Position: 22, - Value: '0', - }, - { - Position: 23, - Value: '0', - }, - { - Position: 24, - Value: '0', - }, - { - Position: 25, - Value: '0', - }, - { - Position: 26, - Value: '0', - }, - { - Position: 27, - Value: '0', - }, - { - Position: 28, - Value: '0', - }, - { - Position: 29, - Value: '0', - }, - { - Position: 30, - Value: '0', - }, - { - Position: 31, - Value: '0', - }, - { - Position: 32, - Value: '0', - }, - { - Position: 33, - Value: '0', - }, - { - Position: 34, - Value: '0', - }, - { - Position: 35, - Value: '0', - }, - { - Position: 36, - Value: '0', - }, - { - Position: 37, - Value: '0', - }, - { - Position: 38, - Value: '0', - }, - { - Position: 39, - Value: '0', - }, - { - Position: 40, - Value: '0', - }, - { - Position: 41, - Value: '0', - }, - { - Position: 42, - Value: '0', - }, - { - Position: 43, - Value: '0', - }, - { - Position: 44, - Value: '0', - }, - { - Position: 45, - Value: '0', - }, - { - Position: 46, - Value: '0', - }, - { - Position: 47, - Value: '0', - }, - { - Position: 48, - Value: '0', - }, - { - Position: 49, - Value: '0', - }, - { - Position: 50, - Value: '0', - }, - { - Position: 51, - Value: '0', - }, - { - Position: 52, - Value: '0', - }, - { - Position: 53, - Value: '0', - }, - { - Position: 54, - Value: '0', - }, - { - Position: 55, - Value: '0', - }, - { - Position: 56, - Value: '0', - }, - { - Position: 57, - Value: '0', - }, - { - Position: 58, - Value: '0', - }, - { - Position: 59, - Value: '0', - }, - { - Position: 60, - Value: '0', - }, - { - Position: 61, - Value: '0', - }, - { - Position: 62, - Value: '0', - }, - { - Position: 63, - Value: '0', - }, - { - Position: 64, - Value: '0', - }, - ], - Maker: null, - Checker: null, - ReferredTo: null, - ReferralReason: null, - UserData1: null, - UserData2: null, - UserData3: null, - UserData4: null, - UserData5: null, - AdditionalFields: [], - }, - ApplicationStatusDetails: { - StatusCode: '04', - Description: 'Approved', - Canceled: false, - }, - CorporateDetails: null, - CustomerDetails: { - Id: 115158, - CustomerCode: '100000024619', - IdNumber: ' ', - TypeId: 0, - PreferredLanguage: 'EN', - ExternalCustomerCode: null, - Title: ' ', - FirstName: ' ', - LastName: ' ', - DateOfBirth: null, - UserData1: '2031-09-17', - UserData2: '01', - UserData3: null, - UserData4: '682', - CustomerSegment: null, - Gender: 'U', - Married: 'U', - }, - AccountDetailsList: [ - { - Id: getRandomWithDigits(5), - InstitutionCode: '1100', - AccountNumber: getRandomWithDigits(16), - Currency: { - CurrCode: '682', - AlphaCode: 'SAR', - }, - AccountTypeCode: '30', - ClassId: '2', - AccountStatus: '00', - VipFlag: '0', - BlockedAmount: 0, - EquivalentBlockedAmount: null, - UnclearCredit: 0, - EquivalentUnclearCredit: null, - AvailableBalance: 0, - EquivalentAvailableBalance: null, - AvailableBalanceToSpend: 0, - CreditLimit: 0, - RemainingCashLimit: null, - UserData1: 'D36407C9AE4C28D2185', - UserData2: null, - UserData3: 'D36407C9AE4C28D2185', - UserData4: null, - UserData5: `SA${getRandomWithDigits(22)}`, - }, - ], - CardDetailsList: [ - { - pvv: null, - ResponseCardIdentifier: { - Id: getRandomWithDigits(5), - Pan: 'DDDDDDDDDDDDDDDDDDD', - MaskedPan: '999999_9999', - VPan: getRandomWithDigits(16), - Seqno: 0, - }, - ExpiryDate: '2031-09-30', - EffectiveDate: '2025-06-02', - CardStatus: '30', - OldPlasticExpiryDate: null, - OldPlasticCardStatus: null, - EmbossingName: 'ABDALHAMID AHMAD', + ApplicationDetails: { + cif: null, + ApplicationNumber: '3300000000073', + ExternalApplicationNumber: '3', + ApplicationStatus: '04', + Organization: 0, + Product: '1101', + ApplicatonDate: '2025-05-29', + ApplicationSource: 'O', + SalesSource: null, + DeliveryMethod: 'V', + ProgramCode: null, + Campaign: null, + Plastic: null, + Design: null, + ProcessStage: '99', + ProcessStageStatus: 'S', + Score: null, + ExternalScore: null, + RequestedLimit: 0, + SuggestedLimit: null, + AssignedLimit: 0, + AllowedLimitList: null, + EligibilityCheckResult: '00', + EligibilityCheckDescription: null, Title: 'Mr.', FirstName: 'Abdalhamid', + SecondName: null, + ThirdName: null, LastName: ' Ahmad', - Additional: false, - BatchNumber: 8849, - ServiceCode: '226', - Kinship: null, + FullName: 'Abdalhamid Ahmad', + EmbossName: 'ABDALHAMID AHMAD', + PlaceOfBirth: null, DateOfBirth: '1999-01-07', - LastActivity: null, - LastStatusChangeDate: '2025-06-03', - ActivationDate: null, - DateLastIssued: null, - PVV: null, - UserData: '4', - UserData1: '3', - UserData2: null, - UserData3: null, - UserData4: null, - UserData5: null, - Memo: null, - CardAuthorizationParameters: null, - L10NTitle: null, - L10NFirstName: null, - L10NLastName: null, - PinStatus: '40', - OldPinStatus: '0', - CustomerIdNumber: '1089055972', - Language: 0, + LocalizedDateOfBirth: '1999-01-07', + Age: 26, + Gender: 'M', + Married: 'U', + Nationality: '682', + IdType: '01', + IdNumber: '1089055972', + IdExpiryDate: '2031-09-17', + EducationLevel: null, + ProfessionCode: 0, + NumberOfDependents: 0, + EmployerName: 'N/A', + EmploymentYears: 0, + EmploymentMonths: 0, + CIF: null, + BankAccountNumber: ' ', + Currency: { CurrCode: '682', AlphaCode: 'SAR' }, + CreditAccountNumber: '6000000000000000', + AccountType: '30', + Income: 0, + AdditionalIncome: 0, + TotalIncome: 0, + CurrentBalance: 0, + AverageBalance: 0, + AssetsBalance: 0, + InsuranceBalance: 0, + DepositAmount: 0, + GuarenteeAccountNumber: null, + GuarenteeAmount: 0, + InstalmentAmount: 0, + AutoDebit: 'N', + PaymentMethod: '2', + BillingCycle: 'C1', + MaximumDelinquency: null, + CreditBureauDecision: null, + ECommerce: 'N', + NumberOfCards: 0, + SocialCode: '000', + JobGrade: 0, + Flags: Array.from({ length: 64 }, (_, i) => ({ + Position: i + 1, + Value: '0', + })), + CheckFlags: Array.from({ length: 64 }, (_, i) => ({ + Position: i + 1, + Value: '0', + })), }, - ], - }, -}; + + ApplicationStatusDetails: { + StatusCode: '04', + Description: 'Approved', + Canceled: false, + }, + + CustomerDetails: { + Id: 115158, + CustomerCode: '100000024619', + IdNumber: ' ', + TypeId: 0, + PreferredLanguage: 'EN', + ExternalCustomerCode: null, + Title: ' ', + FirstName: ' ', + LastName: ' ', + DateOfBirth: null, + UserData1: '2031-09-17', + UserData2: '01', + UserData3: null, + UserData4: '682', + CustomerSegment: null, + Gender: 'U', + Married: 'U', + }, + + AccountDetailsList: [ + { + Id: randomDigits(5), + InstitutionCode: '1100', + AccountNumber: randomDigits(16), + Currency: { CurrCode: '682', AlphaCode: 'SAR' }, + AccountTypeCode: '30', + ClassId: '2', + AccountStatus: '00', + VipFlag: '0', + BlockedAmount: 0, + AvailableBalance: 0, + UserData1: 'D36407C9AE4C28D2185', + UserData3: 'D36407C9AE4C28D2185', + UserData5: `SA${randomDigits(22)}`, + }, + ], + + CardDetailsList: [ + { + pvv: null, + ResponseCardIdentifier: { + Id: randomDigits(5), + Pan: 'DDDDDDDDDDDDDDDDDDD', + MaskedPan: '999999_9999', + VPan: randomDigits(16), + Seqno: 0, + }, + ExpiryDate: '2031-09-30', + EffectiveDate: '2025-06-02', + CardStatus: '30', + EmbossingName: 'ABDALHAMID AHMAD', + Title: 'Mr.', + FirstName: 'Abdalhamid', + LastName: ' Ahmad', + BatchNumber: 8849, + ServiceCode: '226', + DateOfBirth: '1999-01-07', + LastStatusChangeDate: '2025-06-03', + PinStatus: '40', + OldPinStatus: '0', + CustomerIdNumber: '1089055972', + Language: 0, + }, + ], + }, + }; +} diff --git a/src/common/modules/neoleap/services/neoleap.service.ts b/src/common/modules/neoleap/services/neoleap.service.ts index cb5860f..b6ce0eb 100644 --- a/src/common/modules/neoleap/services/neoleap.service.ts +++ b/src/common/modules/neoleap/services/neoleap.service.ts @@ -10,8 +10,8 @@ import { InitiateKycRequestDto } from '~/customer/dtos/request'; import { Customer } from '~/customer/entities'; import { Gender } from '~/customer/enums'; import { + buildCreateApplicationMock, CARD_EMBOSSING_DETAILS_MOCK, - CREATE_APPLICATION_MOCK, INITIATE_KYC_MOCK, INQUIRE_APPLICATION_MOCK, } from '../__mocks__/'; @@ -95,7 +95,7 @@ export class NeoLeapService { const responseKey = 'CreateNewApplicationResponseDetails'; if (!this.useGateway) { - return plainToInstance(CreateApplicationResponse, CREATE_APPLICATION_MOCK[responseKey], { + return plainToInstance(CreateApplicationResponse, buildCreateApplicationMock()[responseKey], { excludeExtraneousValues: true, }); } @@ -169,7 +169,7 @@ export class NeoLeapService { const responseKey = 'CreateNewApplicationResponseDetails'; if (!this.useGateway) { - return plainToInstance(CreateApplicationResponse, CREATE_APPLICATION_MOCK[responseKey], { + return plainToInstance(CreateApplicationResponse, buildCreateApplicationMock()[responseKey], { excludeExtraneousValues: true, }); } From edddc2f45772923ec043292dc46171b19270034d Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 7 Sep 2025 09:12:14 +0300 Subject: [PATCH 10/45] feat: update junior --- src/junior/controllers/junior.controller.ts | 18 ++++++++- src/junior/dtos/request/index.ts | 1 + .../dtos/request/update-junior.request.dto.ts | 6 +++ src/junior/services/junior.service.ts | 38 ++++++++++++++++++- 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/junior/dtos/request/update-junior.request.dto.ts diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index 07fb95b..ebd9ff0 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, Param, Post, Query, UseGuards } from '@nestjs/common'; +import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { Roles } from '~/auth/enums'; import { IJwtPayload } from '~/auth/interfaces'; @@ -8,7 +8,7 @@ import { ApiDataPageResponse, ApiDataResponse, ApiLangRequestHeader } from '~/co import { PageOptionsRequestDto } from '~/core/dtos'; import { CustomParseUUIDPipe } from '~/core/pipes'; import { ResponseFactory } from '~/core/utils'; -import { CreateJuniorRequestDto, SetThemeRequestDto } from '../dtos/request'; +import { CreateJuniorRequestDto, SetThemeRequestDto, UpdateJuniorRequestDto } from '../dtos/request'; import { JuniorResponseDto, QrCodeValidationResponseDto, ThemeResponseDto } from '../dtos/response'; import { JuniorService } from '../services'; @@ -59,6 +59,20 @@ export class JuniorController { return ResponseFactory.data(new JuniorResponseDto(junior)); } + @Patch(':juniorId') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(JuniorResponseDto) + async updateJunior( + @AuthenticatedUser() user: IJwtPayload, + @Param('juniorId', CustomParseUUIDPipe) juniorId: string, + @Body() body: UpdateJuniorRequestDto, + ) { + const junior = await this.juniorService.updateJunior(juniorId, body, user.sub); + + return ResponseFactory.data(new JuniorResponseDto(junior)); + } + @Post('set-theme') @UseGuards(RolesGuard) @AllowedRoles(Roles.JUNIOR) diff --git a/src/junior/dtos/request/index.ts b/src/junior/dtos/request/index.ts index da79731..08e7612 100644 --- a/src/junior/dtos/request/index.ts +++ b/src/junior/dtos/request/index.ts @@ -1,2 +1,3 @@ export * from './create-junior.request.dto'; export * from './set-theme.request.dto'; +export * from './update-junior.request.dto'; diff --git a/src/junior/dtos/request/update-junior.request.dto.ts b/src/junior/dtos/request/update-junior.request.dto.ts new file mode 100644 index 0000000..c9054b3 --- /dev/null +++ b/src/junior/dtos/request/update-junior.request.dto.ts @@ -0,0 +1,6 @@ +import { OmitType, PartialType } from '@nestjs/mapped-types'; +import { CreateJuniorRequestDto } from './create-junior.request.dto'; + +export class UpdateJuniorRequestDto extends PartialType( + OmitType(CreateJuniorRequestDto, ['cardColor', 'cardPin'] as const), +) {} diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 50586c0..24432fd 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -9,7 +9,7 @@ import { DocumentService, OciService } from '~/document/services'; import { UserType } from '~/user/enums'; import { UserService } from '~/user/services'; import { UserTokenService } from '~/user/services/user-token.service'; -import { CreateJuniorRequestDto, SetThemeRequestDto } from '../dtos/request'; +import { CreateJuniorRequestDto, SetThemeRequestDto, UpdateJuniorRequestDto } from '../dtos/request'; import { Junior } from '../entities'; import { JuniorRepository } from '../repositories'; import { QrcodeService } from './qrcode.service'; @@ -85,6 +85,42 @@ export class JuniorService { return junior; } + async updateJunior(juniorId: string, body: UpdateJuniorRequestDto, guardianId: string) { + this.logger.log(`Updating junior ${juniorId}`); + const junior = await this.findJuniorById(juniorId, false, guardianId); + if (body.profilePictureId) { + junior.customer.user.profilePictureId = body.profilePictureId; + } + if (body.firstName) { + junior.customer.user.firstName = body.firstName; + junior.customer.firstName = body.firstName; + } + if (body.lastName) { + junior.customer.user.lastName = body.lastName; + junior.customer.lastName = body.lastName; + } + if (body.email) { + const existingUser = await this.userService.findUser({ email: body.email }); + if (existingUser && existingUser.id !== junior.customer.user.id) { + this.logger.error(`User with email ${body.email} already exists`); + throw new BadRequestException('USER.ALREADY_EXISTS'); + } + junior.customer.user.email = body.email; + } + + if (body.dateOfBirth) { + junior.customer.dateOfBirth = body.dateOfBirth; + } + if (body.relationship) { + junior.relationship = body.relationship; + } + console.log('++++++'); + + await Promise.all([junior.save(), junior.customer.user.save(), junior.customer.save()]); + this.logger.log(`Junior ${juniorId} updated successfully`); + return junior; + } + @Transactional() async setTheme(body: SetThemeRequestDto, juniorId: string) { this.logger.log(`Setting theme for junior ${juniorId}`); From 44b5937f7a465e0411143ac2a97ea9e74cc62d38 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 7 Sep 2025 18:13:18 +0300 Subject: [PATCH 11/45] feat: finalize update junior --- src/core/utils/index.ts | 5 +-- src/core/utils/patch.util.ts | 3 ++ src/customer/entities/customer.entity.ts | 4 +-- src/i18n/ar/app.json | 3 +- src/i18n/en/app.json | 3 +- .../dtos/request/update-junior.request.dto.ts | 7 ++-- .../dtos/response/junior.response.dto.ts | 15 +++++++- src/junior/services/junior.service.ts | 34 +++++++++---------- 8 files changed, 45 insertions(+), 29 deletions(-) create mode 100644 src/core/utils/patch.util.ts diff --git a/src/core/utils/index.ts b/src/core/utils/index.ts index 6d80059..67d3af4 100644 --- a/src/core/utils/index.ts +++ b/src/core/utils/index.ts @@ -1,3 +1,4 @@ -export * from './response.factory.util'; -export * from './i18n-context-wrapper.util'; export * from './class-validator-formatter.util'; +export * from './i18n-context-wrapper.util'; +export * from './patch.util'; +export * from './response.factory.util'; diff --git a/src/core/utils/patch.util.ts b/src/core/utils/patch.util.ts new file mode 100644 index 0000000..2ba313f --- /dev/null +++ b/src/core/utils/patch.util.ts @@ -0,0 +1,3 @@ +export const setIf = (obj: T, key: K, val: T[K] | undefined) => { + if (typeof val !== 'undefined') obj[key] = val as T[K]; +}; diff --git a/src/customer/entities/customer.entity.ts b/src/customer/entities/customer.entity.ts index c1b2875..e675a4a 100644 --- a/src/customer/entities/customer.entity.ts +++ b/src/customer/entities/customer.entity.ts @@ -15,7 +15,7 @@ import { CountryIso } from '~/common/enums'; import { Guardian } from '~/guardian/entities/guradian.entity'; import { Junior } from '~/junior/entities'; import { User } from '~/user/entities'; -import { CustomerStatus, KycStatus } from '../enums'; +import { CustomerStatus, Gender, KycStatus } from '../enums'; @Entity('customers') export class Customer extends BaseEntity { @@ -62,7 +62,7 @@ export class Customer extends BaseEntity { isPep!: boolean; @Column('varchar', { length: 255, nullable: true, name: 'gender' }) - gender!: string; + gender!: Gender; @Column('boolean', { default: false, name: 'is_junior' }) isJunior!: boolean; diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index 7c5bcb4..411141d 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -67,7 +67,8 @@ "NOT_FOUND": "لم يتم العثور على الطفل.", "CIVIL_ID_REQUIRED": "مطلوب بطاقة الهوية المدنية.", "CIVIL_ID_NOT_CREATED_BY_GUARDIAN": "تم تحميل بطاقة الهوية المدنية من قبل شخص آخر غير ولي الأمر.", - "CIVIL_ID_ALREADY_EXISTS": "بطاقة الهوية المدنية مستخدمة بالفعل من قبل طفل آخر." + "CIVIL_ID_ALREADY_EXISTS": "بطاقة الهوية المدنية مستخدمة بالفعل من قبل طفل آخر.", + "CANNOT_UPDATE_REGISTERED_USER": "الطفل قد سجل بالفعل. لا يُسمح بتحديث البيانات." }, "MONEY_REQUEST": { diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index f6e5278..b6c4ccb 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -66,7 +66,8 @@ "NOT_FOUND": "The junior was not found.", "CIVIL_ID_REQUIRED": "Civil ID is required.", "CIVIL_ID_NOT_CREATED_BY_GUARDIAN": "The civil ID document was not uploaded by the guardian.", - "CIVIL_ID_ALREADY_EXISTS": "The civil ID is already used by another junior." + "CIVIL_ID_ALREADY_EXISTS": "The civil ID is already used by another junior.", + "CANNOT_UPDATE_REGISTERED_USER": "The junior has already registered. Updating details is not allowed." }, "MONEY_REQUEST": { diff --git a/src/junior/dtos/request/update-junior.request.dto.ts b/src/junior/dtos/request/update-junior.request.dto.ts index c9054b3..be9457b 100644 --- a/src/junior/dtos/request/update-junior.request.dto.ts +++ b/src/junior/dtos/request/update-junior.request.dto.ts @@ -1,6 +1,5 @@ -import { OmitType, PartialType } from '@nestjs/mapped-types'; +import { OmitType, PartialType } from '@nestjs/swagger'; import { CreateJuniorRequestDto } from './create-junior.request.dto'; -export class UpdateJuniorRequestDto extends PartialType( - OmitType(CreateJuniorRequestDto, ['cardColor', 'cardPin'] as const), -) {} +const omitted = OmitType(CreateJuniorRequestDto, ['cardColor', 'cardPin']); +export class UpdateJuniorRequestDto extends PartialType(omitted) {} diff --git a/src/junior/dtos/response/junior.response.dto.ts b/src/junior/dtos/response/junior.response.dto.ts index 52ea9a1..5a0436c 100644 --- a/src/junior/dtos/response/junior.response.dto.ts +++ b/src/junior/dtos/response/junior.response.dto.ts @@ -1,7 +1,8 @@ import { ApiProperty } from '@nestjs/swagger'; +import { Gender } from '~/customer/enums'; import { DocumentMetaResponseDto } from '~/document/dtos/response'; import { Junior } from '~/junior/entities'; -import { Relationship } from '~/junior/enums'; +import { GuardianRelationship, Relationship } from '~/junior/enums'; export class JuniorResponseDto { @ApiProperty({ example: 'id' }) @@ -16,9 +17,18 @@ export class JuniorResponseDto { @ApiProperty({ example: 'test@junior.com' }) email!: string; + @ApiProperty({ example: Gender.MALE }) + gender!: Gender; + + @ApiProperty({ example: '2000-01-01' }) + dateOfBirth!: Date; + @ApiProperty({ enum: Relationship }) relationship!: Relationship; + @ApiProperty({ enum: GuardianRelationship }) + guardianRelationship!: GuardianRelationship; + @ApiProperty({ type: DocumentMetaResponseDto }) profilePicture!: DocumentMetaResponseDto | null; @@ -27,7 +37,10 @@ export class JuniorResponseDto { this.firstName = junior.customer.firstName; this.lastName = junior.customer.lastName; this.email = junior.customer.user.email; + this.gender = junior.customer.gender; + this.dateOfBirth = junior.customer.dateOfBirth; this.relationship = junior.relationship; + this.guardianRelationship = GuardianRelationship[junior.relationship]; this.profilePicture = junior.customer.user.profilePicture ? new DocumentMetaResponseDto(junior.customer.user.profilePicture) : null; diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 24432fd..63f5593 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -4,6 +4,7 @@ import { Roles } from '~/auth/enums'; import { CardService } from '~/card/services'; import { NeoLeapService } from '~/common/modules/neoleap/services'; import { PageOptionsRequestDto } from '~/core/dtos'; +import { setIf } from '~/core/utils'; import { CustomerService } from '~/customer/services'; import { DocumentService, OciService } from '~/document/services'; import { UserType } from '~/user/enums'; @@ -88,17 +89,14 @@ export class JuniorService { async updateJunior(juniorId: string, body: UpdateJuniorRequestDto, guardianId: string) { this.logger.log(`Updating junior ${juniorId}`); const junior = await this.findJuniorById(juniorId, false, guardianId); - if (body.profilePictureId) { - junior.customer.user.profilePictureId = body.profilePictureId; - } - if (body.firstName) { - junior.customer.user.firstName = body.firstName; - junior.customer.firstName = body.firstName; - } - if (body.lastName) { - junior.customer.user.lastName = body.lastName; - junior.customer.lastName = body.lastName; + const customer = junior.customer; + const user = customer.user; + + if (user.password) { + this.logger.error(`Cannot update junior ${juniorId} with registered user`); + throw new BadRequestException('JUNIOR.CANNOT_UPDATE_REGISTERED_USER'); } + if (body.email) { const existingUser = await this.userService.findUser({ email: body.email }); if (existingUser && existingUser.id !== junior.customer.user.id) { @@ -107,16 +105,16 @@ export class JuniorService { } junior.customer.user.email = body.email; } + setIf(user, 'profilePictureId', body.profilePictureId); + setIf(user, 'firstName', body.firstName); + setIf(user, 'lastName', body.lastName); - if (body.dateOfBirth) { - junior.customer.dateOfBirth = body.dateOfBirth; - } - if (body.relationship) { - junior.relationship = body.relationship; - } - console.log('++++++'); + setIf(customer, 'firstName', body.firstName); + setIf(customer, 'lastName', body.lastName); + setIf(customer, 'dateOfBirth', body.dateOfBirth as unknown as Date); - await Promise.all([junior.save(), junior.customer.user.save(), junior.customer.save()]); + setIf(junior, 'relationship', body.relationship); + await Promise.all([junior.save(), customer.save(), user.save()]); this.logger.log(`Junior ${juniorId} updated successfully`); return junior; } From 9b0e1791da2bdfb62bcedffddcf27145dbf86123 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 7 Sep 2025 20:14:28 +0300 Subject: [PATCH 12/45] feat: transfer money to child --- src/card/repositories/card.repository.ts | 6 ++++ .../repositories/transaction.repository.ts | 22 +++++++++++++++ src/card/services/card.service.ts | 25 +++++++++++++++++ src/card/services/transaction.service.ts | 10 +++++-- src/junior/controllers/junior.controller.ts | 28 +++++++++++++++++-- src/junior/dtos/request/index.ts | 1 + .../request/transfer-to-junior.request.dto.ts | 12 ++++++++ src/junior/dtos/response/index.ts | 1 + .../transfer-to-junior.response.dto.ts | 10 +++++++ src/junior/services/junior.service.ts | 18 +++++++++++- 10 files changed, 128 insertions(+), 5 deletions(-) create mode 100644 src/junior/dtos/request/transfer-to-junior.request.dto.ts create mode 100644 src/junior/dtos/response/transfer-to-junior.response.dto.ts diff --git a/src/card/repositories/card.repository.ts b/src/card/repositories/card.repository.ts index 0fa9bd7..cecfdb0 100644 --- a/src/card/repositories/card.repository.ts +++ b/src/card/repositories/card.repository.ts @@ -60,4 +60,10 @@ export class CardRepository { statusDescription: statusDescription, }); } + + updateCardLimit(cardId: string, newLimit: number) { + return this.cardRepository.update(cardId, { + limit: newLimit, + }); + } } diff --git a/src/card/repositories/transaction.repository.ts b/src/card/repositories/transaction.repository.ts index 39d8665..b38a257 100644 --- a/src/card/repositories/transaction.repository.ts +++ b/src/card/repositories/transaction.repository.ts @@ -57,6 +57,28 @@ export class TransactionRepository { ); } + createInternalChildTransaction(card: Card, amount: number): Promise { + return this.transactionRepository.save( + this.transactionRepository.create({ + transactionId: `CHILD-${card.id}-${Date.now()}`, + transactionAmount: amount, + transactionCurrency: '682', + billingAmount: 0, + settlementAmount: 0, + transactionDate: new Date(), + fees: 0, + cardId: card.id, + cardReference: card.cardReference, + cardMaskedNumber: card.firstSixDigits + '******' + card.lastFourDigits, + accountId: card.account!.id, + transactionType: TransactionType.INTERNAL, + accountReference: card.account!.accountReference, + transactionScope: TransactionScope.CARD, + vatOnFees: 0, + }), + ); + } + findTransactionByReference(transactionId: string, accountReference: string): Promise { return this.transactionRepository.findOne({ where: { transactionId, accountReference }, diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 2231fcb..c251a5a 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -1,4 +1,5 @@ import { BadRequestException, forwardRef, Inject, Injectable } from '@nestjs/common'; +import Decimal from 'decimal.js'; import { Transactional } from 'typeorm-transactional'; import { AccountCardStatusChangedWebhookRequest } from '~/common/modules/neoleap/dtos/requests'; import { NeoLeapService } from '~/common/modules/neoleap/services'; @@ -10,12 +11,14 @@ import { CardColors } from '../enums'; import { CardStatusMapper } from '../mappers/card-status.mapper'; import { CardRepository } from '../repositories'; import { AccountService } from './account.service'; +import { TransactionService } from './transaction.service'; @Injectable() export class CardService { constructor( private readonly cardRepository: CardRepository, private readonly accountService: AccountService, + @Inject(forwardRef(() => TransactionService)) private readonly transactionService: TransactionService, @Inject(forwardRef(() => NeoLeapService)) private readonly neoleapService: NeoLeapService, @Inject(forwardRef(() => CustomerService)) private readonly customerService: CustomerService, ) {} @@ -99,4 +102,26 @@ export class CardService { return this.neoleapService.getEmbossingInformation(card); } + + async updateCardLimit(cardId: string, newLimit: number) { + const { affected } = await this.cardRepository.updateCardLimit(cardId, newLimit); + + if (affected === 0) { + throw new BadRequestException('CARD.NOT_FOUND'); + } + } + + @Transactional() + async transferToChild(juniorId: string, amount: number) { + const card = await this.getCardByCustomerId(juniorId); + + const finalAmount = Decimal(amount).plus(card.limit); + await Promise.all([ + this.neoleapService.updateCardControl(card.cardReference, finalAmount.toNumber()), + this.updateCardLimit(card.id, finalAmount.toNumber()), + this.transactionService.createInternalChildTransaction(card.id, amount), + ]); + + return finalAmount.toNumber(); + } } diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index d195368..b48759c 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -1,4 +1,4 @@ -import { Injectable, UnprocessableEntityException } from '@nestjs/common'; +import { forwardRef, Inject, Injectable, UnprocessableEntityException } from '@nestjs/common'; import Decimal from 'decimal.js'; import { Transactional } from 'typeorm-transactional'; import { @@ -15,7 +15,7 @@ export class TransactionService { constructor( private readonly transactionRepository: TransactionRepository, private readonly accountService: AccountService, - private readonly cardService: CardService, + @Inject(forwardRef(() => CardService)) private readonly cardService: CardService, ) {} @Transactional() @@ -51,6 +51,12 @@ export class TransactionService { return transaction; } + async createInternalChildTransaction(cardId: string, amount: number) { + const card = await this.cardService.getCardById(cardId); + const transaction = await this.transactionRepository.createInternalChildTransaction(card, amount); + return transaction; + } + private async findExistingTransaction(transactionId: string, accountReference: string): Promise { const existingTransaction = await this.transactionRepository.findTransactionByReference( transactionId, diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index ebd9ff0..35d9480 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -8,8 +8,18 @@ import { ApiDataPageResponse, ApiDataResponse, ApiLangRequestHeader } from '~/co import { PageOptionsRequestDto } from '~/core/dtos'; import { CustomParseUUIDPipe } from '~/core/pipes'; import { ResponseFactory } from '~/core/utils'; -import { CreateJuniorRequestDto, SetThemeRequestDto, UpdateJuniorRequestDto } from '../dtos/request'; -import { JuniorResponseDto, QrCodeValidationResponseDto, ThemeResponseDto } from '../dtos/response'; +import { + CreateJuniorRequestDto, + SetThemeRequestDto, + TransferToJuniorRequestDto, + UpdateJuniorRequestDto, +} from '../dtos/request'; +import { + JuniorResponseDto, + QrCodeValidationResponseDto, + ThemeResponseDto, + TransferToJuniorResponseDto, +} from '../dtos/response'; import { JuniorService } from '../services'; @Controller('juniors') @@ -100,4 +110,18 @@ export class JuniorController { return ResponseFactory.data(new QrCodeValidationResponseDto(junior)); } + + @Post(':juniorId/transfer') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(TransferToJuniorResponseDto) + async doesJuniorBelongToGuardian( + @AuthenticatedUser() user: IJwtPayload, + @Param('juniorId', CustomParseUUIDPipe) juniorId: string, + @Body() body: TransferToJuniorRequestDto, + ) { + const newAmount = await this.juniorService.transferToJunior(juniorId, body, user.sub); + + return ResponseFactory.data(new TransferToJuniorResponseDto(newAmount)); + } } diff --git a/src/junior/dtos/request/index.ts b/src/junior/dtos/request/index.ts index 08e7612..1f3590b 100644 --- a/src/junior/dtos/request/index.ts +++ b/src/junior/dtos/request/index.ts @@ -1,3 +1,4 @@ export * from './create-junior.request.dto'; export * from './set-theme.request.dto'; +export * from './transfer-to-junior.request.dto'; export * from './update-junior.request.dto'; diff --git a/src/junior/dtos/request/transfer-to-junior.request.dto.ts b/src/junior/dtos/request/transfer-to-junior.request.dto.ts new file mode 100644 index 0000000..a62ca44 --- /dev/null +++ b/src/junior/dtos/request/transfer-to-junior.request.dto.ts @@ -0,0 +1,12 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNumber } from 'class-validator'; +import { i18nValidationMessage as i18n } from 'nestjs-i18n'; + +export class TransferToJuniorRequestDto { + @ApiProperty({ example: 300.42 }) + @IsNumber( + { maxDecimalPlaces: 3 }, + { message: i18n('validation.IsNumber', { path: 'general', property: 'transferToJunior.amount' }) }, + ) + amount!: number; +} diff --git a/src/junior/dtos/response/index.ts b/src/junior/dtos/response/index.ts index 12ce574..2564df2 100644 --- a/src/junior/dtos/response/index.ts +++ b/src/junior/dtos/response/index.ts @@ -2,3 +2,4 @@ export * from './junior.response.dto'; export * from './qr-code-validation-details.response.dto'; export * from './qr-code-validation.response.dto'; export * from './theme.response.dto'; +export * from './transfer-to-junior.response.dto'; diff --git a/src/junior/dtos/response/transfer-to-junior.response.dto.ts b/src/junior/dtos/response/transfer-to-junior.response.dto.ts new file mode 100644 index 0000000..73f06bc --- /dev/null +++ b/src/junior/dtos/response/transfer-to-junior.response.dto.ts @@ -0,0 +1,10 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class TransferToJuniorResponseDto { + @ApiProperty({ example: 300.42 }) + newAmount!: number; + + constructor(newAmount: number) { + this.newAmount = newAmount; + } +} diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 63f5593..acb611e 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -10,7 +10,12 @@ import { DocumentService, OciService } from '~/document/services'; import { UserType } from '~/user/enums'; import { UserService } from '~/user/services'; import { UserTokenService } from '~/user/services/user-token.service'; -import { CreateJuniorRequestDto, SetThemeRequestDto, UpdateJuniorRequestDto } from '../dtos/request'; +import { + CreateJuniorRequestDto, + SetThemeRequestDto, + TransferToJuniorRequestDto, + UpdateJuniorRequestDto, +} from '../dtos/request'; import { Junior } from '../entities'; import { JuniorRepository } from '../repositories'; import { QrcodeService } from './qrcode.service'; @@ -167,6 +172,17 @@ export class JuniorService { return !!junior; } + async transferToJunior(juniorId: string, body: TransferToJuniorRequestDto, guardianId: string) { + const doesBelong = await this.doesJuniorBelongToGuardian(guardianId, juniorId); + + if (!doesBelong) { + this.logger.error(`Junior ${juniorId} does not belong to guardian ${guardianId}`); + throw new BadRequestException('JUNIOR.NOT_BELONG_TO_GUARDIAN'); + } + + return this.cardService.transferToChild(juniorId, body.amount); + } + private async prepareJuniorImages(juniors: Junior[]) { this.logger.log(`Preparing junior images`); await Promise.all( From d768da70f227dd0b55bd242c0e5a194c25729f16 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 7 Sep 2025 20:23:11 +0300 Subject: [PATCH 13/45] feat: transfer to parent --- src/card/controllers/cards.controller.ts | 16 +++++++++++++--- .../dtos/responses/account-iban.response.dto.ts | 10 ++++++++++ src/card/dtos/responses/index.ts | 1 + src/card/repositories/account.repository.ts | 7 +++++++ src/card/services/account.service.ts | 10 +++++++++- src/card/services/card.service.ts | 5 +++++ 6 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 src/card/dtos/responses/account-iban.response.dto.ts diff --git a/src/card/controllers/cards.controller.ts b/src/card/controllers/cards.controller.ts index 385958a..b81fb0e 100644 --- a/src/card/controllers/cards.controller.ts +++ b/src/card/controllers/cards.controller.ts @@ -1,12 +1,13 @@ import { Controller, Get, Post, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { Roles } from '~/auth/enums'; import { IJwtPayload } from '~/auth/interfaces'; -import { AuthenticatedUser } from '~/common/decorators'; -import { AccessTokenGuard } from '~/common/guards'; +import { AllowedRoles, AuthenticatedUser } from '~/common/decorators'; +import { AccessTokenGuard, RolesGuard } from '~/common/guards'; import { CardEmbossingDetailsResponseDto } from '~/common/modules/neoleap/dtos/response'; import { ApiDataResponse } from '~/core/decorators'; import { ResponseFactory } from '~/core/utils'; -import { CardResponseDto } from '../dtos/responses'; +import { AccountIbanResponseDto, CardResponseDto } from '../dtos/responses'; import { CardService } from '../services'; @Controller('cards') @@ -36,4 +37,13 @@ export class CardsController { const res = await this.cardService.getEmbossingInformation(sub); return ResponseFactory.data(res); } + + @Get('iban') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(AccountIbanResponseDto) + async getCardIban(@AuthenticatedUser() { sub }: IJwtPayload) { + const iban = await this.cardService.getIbanInformation(sub); + return ResponseFactory.data(new AccountIbanResponseDto(iban)); + } } diff --git a/src/card/dtos/responses/account-iban.response.dto.ts b/src/card/dtos/responses/account-iban.response.dto.ts new file mode 100644 index 0000000..a4e1537 --- /dev/null +++ b/src/card/dtos/responses/account-iban.response.dto.ts @@ -0,0 +1,10 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class AccountIbanResponseDto { + @ApiProperty({ example: 'DE89370400440532013000' }) + iban!: string; + + constructor(iban: string) { + this.iban = iban; + } +} diff --git a/src/card/dtos/responses/index.ts b/src/card/dtos/responses/index.ts index 5f2d4bb..e32607e 100644 --- a/src/card/dtos/responses/index.ts +++ b/src/card/dtos/responses/index.ts @@ -1 +1,2 @@ +export * from './account-iban.response.dto'; export * from './card.response.dto'; diff --git a/src/card/repositories/account.repository.ts b/src/card/repositories/account.repository.ts index 428b109..1e4af12 100644 --- a/src/card/repositories/account.repository.ts +++ b/src/card/repositories/account.repository.ts @@ -34,6 +34,13 @@ export class AccountRepository { }); } + getAccountByCustomerId(customerId: string): Promise { + return this.accountRepository.findOne({ + where: { cards: { customerId } }, + relations: ['cards'], + }); + } + topUpAccountBalance(accountReference: string, amount: number) { return this.accountRepository.increment({ accountReference }, 'balance', amount); } diff --git a/src/card/services/account.service.ts b/src/card/services/account.service.ts index ac9e0dd..fb6e2f3 100644 --- a/src/card/services/account.service.ts +++ b/src/card/services/account.service.ts @@ -27,10 +27,18 @@ export class AccountService { return account; } - async creditAccountBalance(accountReference: string, amount: number) { + creditAccountBalance(accountReference: string, amount: number) { return this.accountRepository.topUpAccountBalance(accountReference, amount); } + async getAccountByCustomerId(customerId: string): Promise { + const account = await this.accountRepository.getAccountByCustomerId(customerId); + if (!account) { + throw new UnprocessableEntityException('ACCOUNT.NOT_FOUND'); + } + return account; + } + async decreaseAccountBalance(accountReference: string, amount: number) { const account = await this.getAccountByReferenceNumber(accountReference); /** diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index c251a5a..854160e 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -111,6 +111,11 @@ export class CardService { } } + async getIbanInformation(customerId: string) { + const account = await this.accountService.getAccountByCustomerId(customerId); + return account.iban; + } + @Transactional() async transferToChild(juniorId: string, amount: number) { const card = await this.getCardByCustomerId(juniorId); From 15a48e48840e6b2339fb12c1fa1a90dc9d747bd6 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 7 Sep 2025 21:18:49 +0300 Subject: [PATCH 14/45] fix: validate card spending limit before transfering to child --- src/card/controllers/cards.controller.ts | 14 ++++++++++++-- src/card/dtos/requests/fund-iban.request.dto.ts | 7 +++++++ src/card/dtos/requests/index.ts | 1 + src/card/repositories/account.repository.ts | 7 +++++++ src/card/repositories/transaction.repository.ts | 13 +++++++++++++ src/card/services/account.service.ts | 14 ++++++++++++++ src/card/services/card.service.ts | 9 +++++++++ src/card/services/transaction.service.ts | 6 ++++++ src/i18n/ar/app.json | 3 +++ src/i18n/en/app.json | 3 +++ 10 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 src/card/dtos/requests/fund-iban.request.dto.ts create mode 100644 src/card/dtos/requests/index.ts diff --git a/src/card/controllers/cards.controller.ts b/src/card/controllers/cards.controller.ts index b81fb0e..4b1a12a 100644 --- a/src/card/controllers/cards.controller.ts +++ b/src/card/controllers/cards.controller.ts @@ -1,5 +1,5 @@ -import { Controller, Get, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { Body, Controller, Get, HttpCode, HttpStatus, Post, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Roles } from '~/auth/enums'; import { IJwtPayload } from '~/auth/interfaces'; import { AllowedRoles, AuthenticatedUser } from '~/common/decorators'; @@ -7,6 +7,7 @@ import { AccessTokenGuard, RolesGuard } from '~/common/guards'; import { CardEmbossingDetailsResponseDto } from '~/common/modules/neoleap/dtos/response'; import { ApiDataResponse } from '~/core/decorators'; import { ResponseFactory } from '~/core/utils'; +import { FundIbanRequestDto } from '../dtos/requests'; import { AccountIbanResponseDto, CardResponseDto } from '../dtos/responses'; import { CardService } from '../services'; @@ -46,4 +47,13 @@ export class CardsController { const iban = await this.cardService.getIbanInformation(sub); return ResponseFactory.data(new AccountIbanResponseDto(iban)); } + + @Post('mock/fund-iban') + @ApiOperation({ summary: 'Mock endpoint to fund the IBAN - For testing purposes only' }) + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @HttpCode(HttpStatus.NO_CONTENT) + fundIban(@Body() { amount, iban }: FundIbanRequestDto) { + return this.cardService.fundIban(iban, amount); + } } diff --git a/src/card/dtos/requests/fund-iban.request.dto.ts b/src/card/dtos/requests/fund-iban.request.dto.ts new file mode 100644 index 0000000..d22a544 --- /dev/null +++ b/src/card/dtos/requests/fund-iban.request.dto.ts @@ -0,0 +1,7 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { TransferToJuniorRequestDto } from '~/junior/dtos/request'; + +export class FundIbanRequestDto extends TransferToJuniorRequestDto { + @ApiProperty({ example: 'DE89370400440532013000' }) + iban!: string; +} diff --git a/src/card/dtos/requests/index.ts b/src/card/dtos/requests/index.ts new file mode 100644 index 0000000..36ead34 --- /dev/null +++ b/src/card/dtos/requests/index.ts @@ -0,0 +1 @@ +export * from './fund-iban.request.dto'; diff --git a/src/card/repositories/account.repository.ts b/src/card/repositories/account.repository.ts index 1e4af12..ae1349f 100644 --- a/src/card/repositories/account.repository.ts +++ b/src/card/repositories/account.repository.ts @@ -27,6 +27,13 @@ export class AccountRepository { }); } + getAccountByIban(iban: string): Promise { + return this.accountRepository.findOne({ + where: { iban }, + relations: ['cards'], + }); + } + getAccountByAccountNumber(accountNumber: string): Promise { return this.accountRepository.findOne({ where: { accountNumber }, diff --git a/src/card/repositories/transaction.repository.ts b/src/card/repositories/transaction.repository.ts index b38a257..a61f55d 100644 --- a/src/card/repositories/transaction.repository.ts +++ b/src/card/repositories/transaction.repository.ts @@ -1,5 +1,6 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; +import { Decimal } from 'decimal.js'; import moment from 'moment'; import { Repository } from 'typeorm'; import { @@ -84,4 +85,16 @@ export class TransactionRepository { where: { transactionId, accountReference }, }); } + + findInternalTransactionTotal(accountId: string): Promise { + return this.transactionRepository + .find({ + where: { accountId, transactionType: TransactionType.INTERNAL }, + }) + .then((transactions) => { + return transactions + .reduce((total, tx) => new Decimal(total).plus(tx.transactionAmount), new Decimal(0)) + .toNumber(); + }); + } } diff --git a/src/card/services/account.service.ts b/src/card/services/account.service.ts index fb6e2f3..4c6af29 100644 --- a/src/card/services/account.service.ts +++ b/src/card/services/account.service.ts @@ -27,6 +27,14 @@ export class AccountService { return account; } + async getAccountByIban(iban: string): Promise { + const account = await this.accountRepository.getAccountByIban(iban); + if (!account) { + throw new UnprocessableEntityException('ACCOUNT.NOT_FOUND'); + } + return account; + } + creditAccountBalance(accountReference: string, amount: number) { return this.accountRepository.topUpAccountBalance(accountReference, amount); } @@ -52,4 +60,10 @@ export class AccountService { return this.accountRepository.decreaseAccountBalance(accountReference, amount); } + + //THIS IS A MOCK FUNCTION FOR TESTING PURPOSES ONLY + async fundIban(iban: string, amount: number) { + const account = await this.getAccountByIban(iban); + return this.accountRepository.topUpAccountBalance(account.accountReference, amount); + } } diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 854160e..3aae9a2 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -119,6 +119,11 @@ export class CardService { @Transactional() async transferToChild(juniorId: string, amount: number) { const card = await this.getCardByCustomerId(juniorId); + const availableSpendingLimit = await this.transactionService.calculateAvailableSpendingLimitForParent(card.account); + + if (amount > availableSpendingLimit) { + throw new BadRequestException('CARD.INSUFFICIENT_BALANCE'); + } const finalAmount = Decimal(amount).plus(card.limit); await Promise.all([ @@ -129,4 +134,8 @@ export class CardService { return finalAmount.toNumber(); } + + fundIban(iban: string, amount: number) { + return this.accountService.fundIban(iban, amount); + } } diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index b48759c..839f370 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -5,6 +5,7 @@ import { AccountTransactionWebhookRequest, CardTransactionWebhookRequest, } from '~/common/modules/neoleap/dtos/requests'; +import { Account } from '../entities/account.entity'; import { Transaction } from '../entities/transaction.entity'; import { TransactionRepository } from '../repositories/transaction.repository'; import { AccountService } from './account.service'; @@ -57,6 +58,11 @@ export class TransactionService { return transaction; } + async calculateAvailableSpendingLimitForParent(account: Account): Promise { + const internalTransactionSum = await this.transactionRepository.findInternalTransactionTotal(account.id); + return new Decimal(account.balance).minus(internalTransactionSum).toNumber(); + } + private async findExistingTransaction(transactionId: string, accountReference: string): Promise { const existingTransaction = await this.transactionRepository.findTransactionByReference( transactionId, diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index 411141d..ea7f2f4 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -103,5 +103,8 @@ }, "OTP": { "INVALID_OTP": "رمز التحقق الذي أدخلته غير صالح. يرجى المحاولة مرة أخرى." + }, + "CARD": { + "INSUFFICIENT_BALANCE": "البطاقة لا تحتوي على رصيد كافٍ لإكمال هذا التحويل." } } diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index b6c4ccb..3373254 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -102,5 +102,8 @@ }, "OTP": { "INVALID_OTP": "The OTP you entered is invalid. Please try again." + }, + "CARD": { + "INSUFFICIENT_BALANCE": "The card does not have sufficient balance to complete this transfer." } } From 954aa422a2f99435508af2bdea162dd8b6353692 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 7 Sep 2025 21:40:55 +0300 Subject: [PATCH 15/45] fix: fix mock request for funding decorators --- src/card/dtos/requests/fund-iban.request.dto.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/card/dtos/requests/fund-iban.request.dto.ts b/src/card/dtos/requests/fund-iban.request.dto.ts index d22a544..66c2597 100644 --- a/src/card/dtos/requests/fund-iban.request.dto.ts +++ b/src/card/dtos/requests/fund-iban.request.dto.ts @@ -1,7 +1,9 @@ import { ApiProperty } from '@nestjs/swagger'; +import { IsString } from 'class-validator'; import { TransferToJuniorRequestDto } from '~/junior/dtos/request'; export class FundIbanRequestDto extends TransferToJuniorRequestDto { @ApiProperty({ example: 'DE89370400440532013000' }) + @IsString() iban!: string; } From e6642b5a154b640cd2a6fb6b6591a72f417bc187 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Sun, 7 Sep 2025 21:47:17 +0300 Subject: [PATCH 16/45] fix: fix controller name --- src/junior/controllers/junior.controller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index 35d9480..230c4e3 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -115,7 +115,7 @@ export class JuniorController { @UseGuards(RolesGuard) @AllowedRoles(Roles.GUARDIAN) @ApiDataResponse(TransferToJuniorResponseDto) - async doesJuniorBelongToGuardian( + async transferToJunior( @AuthenticatedUser() user: IJwtPayload, @Param('juniorId', CustomParseUUIDPipe) juniorId: string, @Body() body: TransferToJuniorRequestDto, From e1f50decfa0bd1b57d99849e5776a29b39fb99fd Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Mon, 8 Sep 2025 21:38:11 +0300 Subject: [PATCH 17/45] feat: money requests --- src/app.module.ts | 2 + ...57349525708-create-money-requests-table.ts | 25 +++++ src/db/migrations/index.ts | 1 + src/guardian/entities/guradian.entity.ts | 4 + src/i18n/ar/app.json | 7 +- src/i18n/en/app.json | 7 +- src/junior/entities/junior.entity.ts | 5 + src/money-request/controllers/index.ts | 1 + .../controllers/money-requests.controller.ts | 81 ++++++++++++++ .../create-money-request.request.dto.ts | 15 +++ src/money-request/dtos/request/index.ts | 3 + .../money-requests-filters.request.dto.ts | 13 +++ .../dtos/request/rejection.request.dto.ts | 9 ++ .../response/money-request.response.dto.ts | 41 +++++++ .../entities/money-request.entity.ts | 51 +++++++++ src/money-request/enums/index.ts | 1 + .../enums/money-request-status.enum.ts | 5 + src/money-request/money-request.module.ts | 14 +++ src/money-request/repositories/index.ts | 1 + .../repositories/money-requests.repository.ts | 70 ++++++++++++ src/money-request/services/index.ts | 1 + .../services/money-requests.service.ts | 102 ++++++++++++++++++ 22 files changed, 449 insertions(+), 10 deletions(-) create mode 100644 src/db/migrations/1757349525708-create-money-requests-table.ts create mode 100644 src/money-request/controllers/index.ts create mode 100644 src/money-request/controllers/money-requests.controller.ts create mode 100644 src/money-request/dtos/request/create-money-request.request.dto.ts create mode 100644 src/money-request/dtos/request/index.ts create mode 100644 src/money-request/dtos/request/money-requests-filters.request.dto.ts create mode 100644 src/money-request/dtos/request/rejection.request.dto.ts create mode 100644 src/money-request/dtos/response/money-request.response.dto.ts create mode 100644 src/money-request/entities/money-request.entity.ts create mode 100644 src/money-request/enums/index.ts create mode 100644 src/money-request/enums/money-request-status.enum.ts create mode 100644 src/money-request/money-request.module.ts create mode 100644 src/money-request/repositories/index.ts create mode 100644 src/money-request/repositories/money-requests.repository.ts create mode 100644 src/money-request/services/index.ts create mode 100644 src/money-request/services/money-requests.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index 2e3db91..3457f09 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -28,6 +28,7 @@ import { HealthModule } from './health/health.module'; import { JuniorModule } from './junior/junior.module'; import { UserModule } from './user/user.module'; import { WebhookModule } from './webhook/webhook.module'; +import { MoneyRequestModule } from './money-request/money-request.module'; @Module({ controllers: [], @@ -74,6 +75,7 @@ import { WebhookModule } from './webhook/webhook.module'; CronModule, NeoLeapModule, WebhookModule, + MoneyRequestModule, ], providers: [ // Global Pipes diff --git a/src/db/migrations/1757349525708-create-money-requests-table.ts b/src/db/migrations/1757349525708-create-money-requests-table.ts new file mode 100644 index 0000000..ebcfac9 --- /dev/null +++ b/src/db/migrations/1757349525708-create-money-requests-table.ts @@ -0,0 +1,25 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class CreateMoneyRequestsTable1757349525708 implements MigrationInterface { + name = 'CreateMoneyRequestsTable1757349525708'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE "money_requests" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "amount" numeric(10,2) NOT NULL, "reason" character varying NOT NULL, "status" character varying NOT NULL DEFAULT 'PENDING', "rejection_reason" text, "junior_id" uuid NOT NULL, "guardian_id" uuid NOT NULL, "created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), "updated_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), CONSTRAINT "PK_28cff23e9fb06cd5dbf73cd53e7" PRIMARY KEY ("id"))`, + ); + await queryRunner.query(`ALTER TABLE "cards" ALTER COLUMN "color" SET DEFAULT 'DEEP_MAGENTA'`); + await queryRunner.query( + `ALTER TABLE "money_requests" ADD CONSTRAINT "FK_f7084c83efe7efaca37297d57ae" FOREIGN KEY ("junior_id") REFERENCES "juniors"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + ); + await queryRunner.query( + `ALTER TABLE "money_requests" ADD CONSTRAINT "FK_09eadf4c4133b323f467ffc90f3" FOREIGN KEY ("guardian_id") REFERENCES "guardians"("id") ON DELETE CASCADE ON UPDATE NO ACTION`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "money_requests" DROP CONSTRAINT "FK_09eadf4c4133b323f467ffc90f3"`); + await queryRunner.query(`ALTER TABLE "money_requests" DROP CONSTRAINT "FK_f7084c83efe7efaca37297d57ae"`); + await queryRunner.query(`ALTER TABLE "cards" ALTER COLUMN "color" SET DEFAULT 'BLUE'`); + await queryRunner.query(`DROP TABLE "money_requests"`); + } +} diff --git a/src/db/migrations/index.ts b/src/db/migrations/index.ts index 2ed92f6..5f892a3 100644 --- a/src/db/migrations/index.ts +++ b/src/db/migrations/index.ts @@ -1,3 +1,4 @@ export * from './1754913378460-initial-migration'; export * from './1754915164809-create-neoleap-related-entities'; export * from './1754915164810-seed-default-avatar'; +export * from './1757349525708-create-money-requests-table'; diff --git a/src/guardian/entities/guradian.entity.ts b/src/guardian/entities/guradian.entity.ts index a578bdc..15f6271 100644 --- a/src/guardian/entities/guradian.entity.ts +++ b/src/guardian/entities/guradian.entity.ts @@ -11,6 +11,7 @@ import { } from 'typeorm'; import { Customer } from '~/customer/entities'; import { Junior } from '~/junior/entities'; +import { MoneyRequest } from '~/money-request/entities/money-request.entity'; @Entity('guardians') export class Guardian extends BaseEntity { @@ -27,6 +28,9 @@ export class Guardian extends BaseEntity { @OneToMany(() => Junior, (junior) => junior.guardian) juniors!: Junior[]; + @OneToMany(() => MoneyRequest, (moneyRequest) => moneyRequest.guardian) + moneyRequests!: MoneyRequest[]; + @CreateDateColumn({ name: 'created_at', type: 'timestamp with time zone', default: () => 'CURRENT_TIMESTAMP' }) createdAt!: Date; diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index ea7f2f4..ce28fcb 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -72,12 +72,9 @@ }, "MONEY_REQUEST": { - "START_DATE_IN_THE_PAST": "لا يمكن أن يكون تاريخ البدء في الماضي.", - "END_DATE_IN_THE_PAST": "لا يمكن أن يكون تاريخ النهاية في الماضي.", - "END_DATE_BEFORE_START_DATE": "لا يمكن أن يكون تاريخ النهاية قبل تاريخ البدء.", "NOT_FOUND": "لم يتم العثور على طلب المال.", - "ENDED": "تم انتهاء طلب المال.", - "ALREADY_REVIEWED": "تمت مراجعة طلب المال بالفعل." + "ALREADY_APPROVED": "تمت الموافقة على طلب المال بالفعل.", + "ALREADY_REJECTED": "تم رفض طلب المال بالفعل." }, "GOAL": { diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index 3373254..06654e5 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -71,12 +71,9 @@ }, "MONEY_REQUEST": { - "START_DATE_IN_THE_PAST": "The start date cannot be in the past.", - "END_DATE_IN_THE_PAST": "The end date cannot be in the past.", - "END_DATE_BEFORE_START_DATE": "The end date cannot be before the start date.", "NOT_FOUND": "The money request was not found.", - "ENDED": "The money request has ended.", - "ALREADY_REVIEWED": "The money request has already been reviewed." + "ALREADY_APPROVED": "The money request has already been approved.", + "ALREADY_REJECTED": "The money request has already been rejected." }, "GOAL": { diff --git a/src/junior/entities/junior.entity.ts b/src/junior/entities/junior.entity.ts index 87c6fab..47891a2 100644 --- a/src/junior/entities/junior.entity.ts +++ b/src/junior/entities/junior.entity.ts @@ -5,12 +5,14 @@ import { Entity, JoinColumn, ManyToOne, + OneToMany, OneToOne, PrimaryColumn, UpdateDateColumn, } from 'typeorm'; import { Customer } from '~/customer/entities'; import { Guardian } from '~/guardian/entities/guradian.entity'; +import { MoneyRequest } from '~/money-request/entities/money-request.entity'; import { Relationship } from '../enums'; import { Theme } from './theme.entity'; @@ -39,6 +41,9 @@ export class Junior extends BaseEntity { @JoinColumn({ name: 'guardian_id' }) guardian!: Guardian; + @OneToMany(() => MoneyRequest, (moneyRequest) => moneyRequest.junior) + moneyRequests!: MoneyRequest[]; + @CreateDateColumn({ name: 'created_at', type: 'timestamp with time zone', default: () => 'CURRENT_TIMESTAMP' }) createdAt!: Date; diff --git a/src/money-request/controllers/index.ts b/src/money-request/controllers/index.ts new file mode 100644 index 0000000..fba9009 --- /dev/null +++ b/src/money-request/controllers/index.ts @@ -0,0 +1 @@ +export * from './money-requests.controller'; diff --git a/src/money-request/controllers/money-requests.controller.ts b/src/money-request/controllers/money-requests.controller.ts new file mode 100644 index 0000000..edc525a --- /dev/null +++ b/src/money-request/controllers/money-requests.controller.ts @@ -0,0 +1,81 @@ +import { Body, Controller, Get, HttpCode, HttpStatus, Param, Patch, Post, Query, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { Roles } from '~/auth/enums'; +import { IJwtPayload } from '~/auth/interfaces'; +import { AllowedRoles, AuthenticatedUser } from '~/common/decorators'; +import { AccessTokenGuard, RolesGuard } from '~/common/guards'; +import { ApiDataResponse } from '~/core/decorators'; +import { ResponseFactory } from '~/core/utils'; +import { CreateMoneyRequestDto, MoneyRequestsFiltersRequestDto, RejectionMoneyRequestDto } from '../dtos/request'; +import { MoneyRequestResponseDto } from '../dtos/response/money-request.response.dto'; +import { MoneyRequestsService } from '../services/money-requests.service'; + +@Controller('money-requests') +@ApiTags('Money Requests') +@UseGuards(AccessTokenGuard, RolesGuard) +@ApiBearerAuth() +export class MoneyRequestsController { + constructor(private readonly moneyRequestsService: MoneyRequestsService) {} + @Post() + @AllowedRoles(Roles.JUNIOR) + @ApiDataResponse(MoneyRequestResponseDto) + async createMoneyRequest(@AuthenticatedUser() { sub }: IJwtPayload, @Body() body: CreateMoneyRequestDto) { + const moneyRequest = await this.moneyRequestsService.createMoneyRequest(sub, body); + + return ResponseFactory.data(new MoneyRequestResponseDto(moneyRequest)); + } + + @Get() + @AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN) + @ApiDataResponse(MoneyRequestResponseDto) + async getMoneyRequests( + @AuthenticatedUser() { sub, roles }: IJwtPayload, + @Query() filters: MoneyRequestsFiltersRequestDto, + ) { + const [moneyRequests, count] = await this.moneyRequestsService.findMoneyRequests( + sub, + roles.includes(Roles.GUARDIAN) ? Roles.GUARDIAN : Roles.JUNIOR, + filters, + ); + return ResponseFactory.dataPage( + moneyRequests.map((mr) => new MoneyRequestResponseDto(mr)), + { + page: filters.page, + size: filters.size, + itemCount: count, + }, + ); + } + + @Get(':id') + @AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN) + @ApiDataResponse(MoneyRequestResponseDto) + async getMoneyRequest(@Param('id') id: string, @AuthenticatedUser() { sub, roles }: IJwtPayload) { + const moneyRequest = await this.moneyRequestsService.findById( + id, + sub, + roles.includes(Roles.GUARDIAN) ? Roles.GUARDIAN : Roles.JUNIOR, + ); + return ResponseFactory.data(new MoneyRequestResponseDto(moneyRequest)); + } + + @Patch(':id/approve') + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(MoneyRequestResponseDto) + @HttpCode(HttpStatus.NO_CONTENT) + async approveMoneyRequest(@Param('id') id: string, @AuthenticatedUser() { sub }: IJwtPayload) { + await this.moneyRequestsService.approveMoneyRequest(id, sub); + } + + @Patch(':id/reject') + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(MoneyRequestResponseDto) + @HttpCode(HttpStatus.NO_CONTENT) + async rejectMoneyRequest( + @Param('id') id: string, + @AuthenticatedUser() { sub }: IJwtPayload, + @Body() rejectionReasondto: RejectionMoneyRequestDto, + ) { + await this.moneyRequestsService.rejectMoneyRequest(id, sub, rejectionReasondto); + } +} diff --git a/src/money-request/dtos/request/create-money-request.request.dto.ts b/src/money-request/dtos/request/create-money-request.request.dto.ts new file mode 100644 index 0000000..fa9a227 --- /dev/null +++ b/src/money-request/dtos/request/create-money-request.request.dto.ts @@ -0,0 +1,15 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsNumber, IsString } from 'class-validator'; +import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +export class CreateMoneyRequestDto { + @ApiProperty({ example: 300.42 }) + @IsNumber( + { maxDecimalPlaces: 3 }, + { message: i18n('validation.IsNumber', { path: 'general', property: 'moneyRequest.amount' }) }, + ) + amount!: number; + + @ApiProperty({ example: 'For school supplies' }) + @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'moneyRequest.reason' }) }) + reason!: string; +} diff --git a/src/money-request/dtos/request/index.ts b/src/money-request/dtos/request/index.ts new file mode 100644 index 0000000..252cf75 --- /dev/null +++ b/src/money-request/dtos/request/index.ts @@ -0,0 +1,3 @@ +export * from './create-money-request.request.dto'; +export * from './money-requests-filters.request.dto'; +export * from './rejection.request.dto'; diff --git a/src/money-request/dtos/request/money-requests-filters.request.dto.ts b/src/money-request/dtos/request/money-requests-filters.request.dto.ts new file mode 100644 index 0000000..3258fd9 --- /dev/null +++ b/src/money-request/dtos/request/money-requests-filters.request.dto.ts @@ -0,0 +1,13 @@ +import { ApiPropertyOptional } from '@nestjs/swagger'; +import { IsEnum, IsOptional } from 'class-validator'; +import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +import { PageOptionsRequestDto } from '~/core/dtos'; +import { MoneyRequestStatus } from '~/money-request/enums'; +export class MoneyRequestsFiltersRequestDto extends PageOptionsRequestDto { + @ApiPropertyOptional({ example: MoneyRequestStatus.APPROVED, enum: MoneyRequestStatus }) + @IsEnum(MoneyRequestStatus, { + message: i18n('validation.enum', { property: 'moneyRequest.status', enum: MoneyRequestStatus }), + }) + @IsOptional() + status?: MoneyRequestStatus; +} diff --git a/src/money-request/dtos/request/rejection.request.dto.ts b/src/money-request/dtos/request/rejection.request.dto.ts new file mode 100644 index 0000000..9692ff7 --- /dev/null +++ b/src/money-request/dtos/request/rejection.request.dto.ts @@ -0,0 +1,9 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { IsOptional, IsString } from 'class-validator'; +import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +export class RejectionMoneyRequestDto { + @ApiProperty({ example: 'You are spending too much' }) + @IsString({ message: i18n('validation.string', { property: 'rejectionReason' }) }) + @IsOptional() + rejectionReason!: string; +} diff --git a/src/money-request/dtos/response/money-request.response.dto.ts b/src/money-request/dtos/response/money-request.response.dto.ts new file mode 100644 index 0000000..95009d5 --- /dev/null +++ b/src/money-request/dtos/response/money-request.response.dto.ts @@ -0,0 +1,41 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { JuniorResponseDto } from '~/junior/dtos/response'; +import { MoneyRequest } from '~/money-request/entities/money-request.entity'; +import { MoneyRequestStatus } from '~/money-request/enums'; + +export class MoneyRequestResponseDto { + @ApiProperty({ example: '123e4567-e89b-12d3-a456-426614174000' }) + id!: string; + + @ApiProperty({ example: 300.42 }) + amount!: number; + + @ApiProperty({ example: 'For school supplies' }) + reason!: string; + + @ApiProperty({ enum: MoneyRequestStatus, example: MoneyRequestStatus.PENDING }) + status!: MoneyRequestStatus; + + @ApiProperty({ example: null }) + rejectionReason!: string | null; + + @ApiProperty({ type: JuniorResponseDto }) + junior!: JuniorResponseDto; + + @ApiProperty({ example: '2024-01-01T00:00:00.000Z' }) + createdAt!: Date; + + @ApiProperty({ example: '2024-01-02T00:00:00.000Z' }) + updatedAt!: Date; + + constructor(data: MoneyRequest) { + this.id = data.id; + this.amount = Number(data.amount); + this.reason = data.reason; + this.status = data.status; + this.rejectionReason = data.rejectionReason; + this.junior = new JuniorResponseDto(data.junior); + this.createdAt = data.createdAt; + this.updatedAt = data.updatedAt; + } +} diff --git a/src/money-request/entities/money-request.entity.ts b/src/money-request/entities/money-request.entity.ts new file mode 100644 index 0000000..b870241 --- /dev/null +++ b/src/money-request/entities/money-request.entity.ts @@ -0,0 +1,51 @@ +import { + BaseEntity, + Column, + CreateDateColumn, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, + UpdateDateColumn, +} from 'typeorm'; +import { Guardian } from '~/guardian/entities/guradian.entity'; +import { Junior } from '~/junior/entities'; +import { MoneyRequestStatus } from '../enums'; + +@Entity('money_requests') +export class MoneyRequest extends BaseEntity { + @PrimaryGeneratedColumn('uuid') + id!: string; + + @Column({ precision: 10, scale: 2, type: 'decimal', name: 'amount' }) + amount!: number; + + @Column({ type: 'varchar', name: 'reason' }) + reason!: string; + + @Column({ type: 'varchar', name: 'status', default: MoneyRequestStatus.PENDING }) + status!: MoneyRequestStatus; + + @Column({ type: 'text', name: 'rejection_reason', nullable: true }) + rejectionReason!: string | null; + + @Column({ type: 'uuid', name: 'junior_id' }) + juniorId!: string; + + @Column({ type: 'uuid', name: 'guardian_id' }) + guardianId!: string; + + @ManyToOne(() => Junior, (junior) => junior.moneyRequests, { onDelete: 'CASCADE' }) + @JoinColumn({ name: 'junior_id' }) + junior!: Junior; + + @ManyToOne(() => Guardian, (guardian) => guardian.moneyRequests, { onDelete: 'CASCADE' }) + @JoinColumn({ name: 'guardian_id' }) + guardian!: Guardian; + + @CreateDateColumn({ type: 'timestamp with time zone', default: () => 'CURRENT_TIMESTAMP', name: 'created_at' }) + createdAt!: Date; + + @UpdateDateColumn({ type: 'timestamp with time zone', default: () => 'CURRENT_TIMESTAMP', name: 'updated_at' }) + updatedAt!: Date; +} diff --git a/src/money-request/enums/index.ts b/src/money-request/enums/index.ts new file mode 100644 index 0000000..46a67f6 --- /dev/null +++ b/src/money-request/enums/index.ts @@ -0,0 +1 @@ +export * from './money-request-status.enum'; diff --git a/src/money-request/enums/money-request-status.enum.ts b/src/money-request/enums/money-request-status.enum.ts new file mode 100644 index 0000000..bf317f7 --- /dev/null +++ b/src/money-request/enums/money-request-status.enum.ts @@ -0,0 +1,5 @@ +export enum MoneyRequestStatus { + PENDING = 'PENDING', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED', +} diff --git a/src/money-request/money-request.module.ts b/src/money-request/money-request.module.ts new file mode 100644 index 0000000..2b3688b --- /dev/null +++ b/src/money-request/money-request.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { JuniorModule } from '~/junior/junior.module'; +import { MoneyRequestsController } from './controllers'; +import { MoneyRequest } from './entities/money-request.entity'; +import { MoneyRequestsRepository } from './repositories'; +import { MoneyRequestsService } from './services'; + +@Module({ + imports: [TypeOrmModule.forFeature([MoneyRequest]), JuniorModule], + controllers: [MoneyRequestsController], + providers: [MoneyRequestsService, MoneyRequestsRepository], +}) +export class MoneyRequestModule {} diff --git a/src/money-request/repositories/index.ts b/src/money-request/repositories/index.ts new file mode 100644 index 0000000..ff6ac5f --- /dev/null +++ b/src/money-request/repositories/index.ts @@ -0,0 +1 @@ +export * from './money-requests.repository'; diff --git a/src/money-request/repositories/money-requests.repository.ts b/src/money-request/repositories/money-requests.repository.ts new file mode 100644 index 0000000..af206c3 --- /dev/null +++ b/src/money-request/repositories/money-requests.repository.ts @@ -0,0 +1,70 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Roles } from '~/auth/enums/roles.enum'; +import { CreateMoneyRequestDto, MoneyRequestsFiltersRequestDto } from '../dtos/request'; +import { MoneyRequest } from '../entities/money-request.entity'; +import { MoneyRequestStatus } from '../enums'; +const FIRST_PAGE = 1; +@Injectable() +export class MoneyRequestsRepository { + constructor(@InjectRepository(MoneyRequest) private readonly moneyRequestRepository: Repository) {} + + findAll(userId: string, role: Roles, filters: MoneyRequestsFiltersRequestDto): Promise<[MoneyRequest[], number]> { + const queryBuilder = this.moneyRequestRepository.createQueryBuilder('moneyRequest'); + + if (role === Roles.JUNIOR) { + queryBuilder.where('moneyRequest.juniorId = :userId', { userId }); + } else if (role === Roles.GUARDIAN) { + queryBuilder.where('moneyRequest.guardianId = :userId', { userId }); + } + + queryBuilder.leftJoinAndSelect('moneyRequest.junior', 'junior'); + queryBuilder.leftJoinAndSelect('junior.customer', 'customer'); + queryBuilder.leftJoinAndSelect('customer.user', 'user'); + queryBuilder.leftJoinAndSelect('user.profilePicture', 'profilePicture'); + + if (filters.status) { + queryBuilder.andWhere('moneyRequest.status = :status', { status: filters.status }); + } + + queryBuilder.skip((filters.page - FIRST_PAGE) * filters.size); + queryBuilder.take(filters.size); + + queryBuilder.orderBy('moneyRequest.createdAt', 'DESC'); + return queryBuilder.getManyAndCount(); + } + + createMoneyRequest(juniorId: string, guardianId: string, body: CreateMoneyRequestDto): Promise { + return this.moneyRequestRepository.save( + this.moneyRequestRepository.create({ + amount: body.amount, + reason: body.reason, + status: MoneyRequestStatus.PENDING, + juniorId, + guardianId, + }), + ); + } + + findById(id: string, userId?: string, role?: Roles): Promise { + const whereCondition: any = { id }; + if (role === Roles.JUNIOR) { + whereCondition.juniorId = userId; + } else { + whereCondition.guardianId = userId; + } + return this.moneyRequestRepository.findOne({ + where: whereCondition, + relations: ['junior', 'junior.customer', 'junior.customer.user', 'junior.customer.user.profilePicture'], + }); + } + + approveMoneyRequest(id: string) { + return this.moneyRequestRepository.update({ id }, { status: MoneyRequestStatus.APPROVED }); + } + + rejectMoneyRequest(id: string, rejectionReason?: string) { + return this.moneyRequestRepository.update({ id }, { status: MoneyRequestStatus.REJECTED, rejectionReason }); + } +} diff --git a/src/money-request/services/index.ts b/src/money-request/services/index.ts new file mode 100644 index 0000000..5abf42b --- /dev/null +++ b/src/money-request/services/index.ts @@ -0,0 +1 @@ +export * from './money-requests.service'; diff --git a/src/money-request/services/money-requests.service.ts b/src/money-request/services/money-requests.service.ts new file mode 100644 index 0000000..6895206 --- /dev/null +++ b/src/money-request/services/money-requests.service.ts @@ -0,0 +1,102 @@ +import { BadRequestException, Injectable, Logger } from '@nestjs/common'; +import { Transactional } from 'typeorm-transactional'; +import { Roles } from '~/auth/enums'; +import { OciService } from '~/document/services'; +import { Junior } from '~/junior/entities/junior.entity'; +import { JuniorService } from '~/junior/services'; +import { CreateMoneyRequestDto, MoneyRequestsFiltersRequestDto, RejectionMoneyRequestDto } from '../dtos/request'; +import { MoneyRequest } from '../entities/money-request.entity'; +import { MoneyRequestStatus } from '../enums'; +import { MoneyRequestsRepository } from '../repositories'; + +@Injectable() +export class MoneyRequestsService { + private readonly logger = new Logger(MoneyRequestsService.name); + constructor( + private readonly moneyRequestsRepository: MoneyRequestsRepository, + private readonly juniorService: JuniorService, + private readonly ociService: OciService, + ) {} + async createMoneyRequest(juniorId: string, body: CreateMoneyRequestDto) { + const junior = await this.juniorService.findJuniorById(juniorId); + const moneyRequest = await this.moneyRequestsRepository.createMoneyRequest(junior.id, junior.guardianId, body); + return this.findById(moneyRequest.id); + } + + async findById(id: string, userId?: string, role?: Roles): Promise { + const moneyRequest = await this.moneyRequestsRepository.findById(id, userId, role); + if (!moneyRequest) { + throw new BadRequestException('MONEY_REQUEST.NOT_FOUND'); + } + await this.prepareJuniorImages([moneyRequest.junior]); + return moneyRequest; + } + + async findMoneyRequests( + userId: string, + role: Roles, + filters: MoneyRequestsFiltersRequestDto, + ): Promise<[MoneyRequest[], number]> { + const [moneyRequests, count] = await this.moneyRequestsRepository.findAll(userId, role, filters); + const juniors = moneyRequests.map((moneyRequest) => moneyRequest.junior); + await this.prepareJuniorImages(juniors); + return [moneyRequests, count]; + } + + @Transactional() + async approveMoneyRequest(id: string, guardianId: string): Promise { + const moneyRequest = await this.moneyRequestsRepository.findById(id, guardianId, Roles.GUARDIAN); + + if (!moneyRequest) { + throw new BadRequestException('MONEY_REQUEST.NOT_FOUND'); + } + + if (moneyRequest.status == MoneyRequestStatus.APPROVED) { + throw new BadRequestException('MONEY_REQUEST.ALREADY_APPROVED'); + } + + await Promise.all([ + this.moneyRequestsRepository.approveMoneyRequest(id), + this.juniorService.transferToJunior( + moneyRequest.juniorId, + { amount: moneyRequest.amount }, + moneyRequest.guardianId, + ), + ]); + } + + async rejectMoneyRequest( + id: string, + guardianId: string, + rejectionReasondto: RejectionMoneyRequestDto, + ): Promise { + const moneyRequest = await this.moneyRequestsRepository.findById(id, guardianId, Roles.GUARDIAN); + + if (!moneyRequest) { + throw new BadRequestException('MONEY_REQUEST.NOT_FOUND'); + } + + if (moneyRequest.status == MoneyRequestStatus.APPROVED) { + throw new BadRequestException('MONEY_REQUEST.ALREADY_APPROVED'); + } + + if (moneyRequest.status == MoneyRequestStatus.REJECTED) { + throw new BadRequestException('MONEY_REQUEST.ALREADY_REJECTED'); + } + + await this.moneyRequestsRepository.rejectMoneyRequest(id, rejectionReasondto?.rejectionReason); + } + + private async prepareJuniorImages(juniors: Junior[]) { + this.logger.log(`Preparing junior images`); + await Promise.all( + juniors.map(async (junior) => { + const profilePicture = junior.customer.user.profilePicture; + + if (profilePicture) { + profilePicture.url = await this.ociService.generatePreSignedUrl(profilePicture); + } + }), + ); + } +} From 039c95aa56ba305ec8d85567aa436c3b0b5cfc0a Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 9 Sep 2025 20:31:48 +0300 Subject: [PATCH 18/45] fix: calculating child and parent balance --- src/card/dtos/responses/card.response.dto.ts | 8 ++++++++ src/card/entities/account.entity.ts | 3 +++ src/card/repositories/account.repository.ts | 8 ++++++++ src/card/repositories/card.repository.ts | 3 ++- .../repositories/transaction.repository.ts | 13 ------------- src/card/services/account.service.ts | 15 ++++++++++++++- src/card/services/card.service.ts | 6 ++++-- src/card/services/transaction.service.ts | 16 +++++++++------- ...add-reservation-amount-to-account-entity.ts | 13 +++++++++++++ src/db/migrations/index.ts | 1 + .../dtos/response/junior.response.dto.ts | 5 +++++ src/junior/repositories/junior.repository.ts | 18 ++++++++++++++++-- 12 files changed, 83 insertions(+), 26 deletions(-) create mode 100644 src/db/migrations/1757433339849-add-reservation-amount-to-account-entity.ts diff --git a/src/card/dtos/responses/card.response.dto.ts b/src/card/dtos/responses/card.response.dto.ts index 53c13f1..26f93c3 100644 --- a/src/card/dtos/responses/card.response.dto.ts +++ b/src/card/dtos/responses/card.response.dto.ts @@ -43,6 +43,13 @@ export class CardResponseDto { }) balance!: number; + @ApiProperty({ + example: 100.0, + nullable: true, + description: 'The reserved balance of the card (applicable for child accounts).', + }) + reservedBalance!: number | null; + constructor(card: Card) { this.id = card.id; this.firstSixDigits = card.firstSixDigits; @@ -52,5 +59,6 @@ export class CardResponseDto { this.statusDescription = CardStatusDescriptionMapper[card.statusDescription][UserLocale.ENGLISH].description; this.balance = card.customerType === CustomerType.CHILD ? Math.min(card.limit, card.account.balance) : card.account.balance; + this.reservedBalance = card.customerType === CustomerType.PARENT ? card.account.reservedBalance : null; } } diff --git a/src/card/entities/account.entity.ts b/src/card/entities/account.entity.ts index 4a1ffcb..d57bec8 100644 --- a/src/card/entities/account.entity.ts +++ b/src/card/entities/account.entity.ts @@ -25,6 +25,9 @@ export class Account { @Column('decimal', { precision: 10, scale: 2, default: 0.0, name: 'balance' }) balance!: number; + @Column('decimal', { precision: 10, scale: 2, default: 0.0, name: 'reserved_balance' }) + reservedBalance!: number; + @OneToMany(() => Card, (card) => card.account, { cascade: true }) cards!: Card[]; diff --git a/src/card/repositories/account.repository.ts b/src/card/repositories/account.repository.ts index ae1349f..2a5edc9 100644 --- a/src/card/repositories/account.repository.ts +++ b/src/card/repositories/account.repository.ts @@ -55,4 +55,12 @@ export class AccountRepository { decreaseAccountBalance(accountReference: string, amount: number) { return this.accountRepository.decrement({ accountReference }, 'balance', amount); } + + increaseReservedBalance(accountId: string, amount: number) { + return this.accountRepository.increment({ id: accountId }, 'reservedBalance', amount); + } + + decreaseReservedBalance(accountId: string, amount: number) { + return this.accountRepository.decrement({ id: accountId }, 'reservedBalance', amount); + } } diff --git a/src/card/repositories/card.repository.ts b/src/card/repositories/card.repository.ts index cecfdb0..b8fc8be 100644 --- a/src/card/repositories/card.repository.ts +++ b/src/card/repositories/card.repository.ts @@ -14,13 +14,14 @@ export class CardRepository { accountId: string, card: CreateApplicationResponse, cardColor?: CardColors, + isChildCard = false, ): Promise { return this.cardRepository.save( this.cardRepository.create({ customerId: customerId, expiry: card.expiryDate, cardReference: card.cardId, - customerType: CustomerType.PARENT, + customerType: isChildCard ? CustomerType.CHILD : CustomerType.PARENT, firstSixDigits: card.firstSixDigits, lastFourDigits: card.lastFourDigits, color: cardColor ? cardColor : CardColors.DEEP_MAGENTA, diff --git a/src/card/repositories/transaction.repository.ts b/src/card/repositories/transaction.repository.ts index a61f55d..b38a257 100644 --- a/src/card/repositories/transaction.repository.ts +++ b/src/card/repositories/transaction.repository.ts @@ -1,6 +1,5 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import { Decimal } from 'decimal.js'; import moment from 'moment'; import { Repository } from 'typeorm'; import { @@ -85,16 +84,4 @@ export class TransactionRepository { where: { transactionId, accountReference }, }); } - - findInternalTransactionTotal(accountId: string): Promise { - return this.transactionRepository - .find({ - where: { accountId, transactionType: TransactionType.INTERNAL }, - }) - .then((transactions) => { - return transactions - .reduce((total, tx) => new Decimal(total).plus(tx.transactionAmount), new Decimal(0)) - .toNumber(); - }); - } } diff --git a/src/card/services/account.service.ts b/src/card/services/account.service.ts index 4c6af29..2ab2d6a 100644 --- a/src/card/services/account.service.ts +++ b/src/card/services/account.service.ts @@ -49,9 +49,11 @@ export class AccountService { async decreaseAccountBalance(accountReference: string, amount: number) { const account = await this.getAccountByReferenceNumber(accountReference); + /** + * * While there is no need to check for insufficient balance because this is a webhook handler, - * I just added this check to ensure we don't have corruption in our data especially if this service is used elsewhere. + * I just added this check to ensure we don't have corruption in our data. */ if (account.balance < amount) { @@ -61,6 +63,17 @@ export class AccountService { return this.accountRepository.decreaseAccountBalance(accountReference, amount); } + increaseReservedBalance(account: Account, amount: number) { + if (account.balance < account.reservedBalance + amount) { + throw new UnprocessableEntityException('ACCOUNT.INSUFFICIENT_BALANCE'); + } + return this.accountRepository.increaseReservedBalance(account.id, amount); + } + + decrementReservedBalance(account: Account, amount: number) { + return this.accountRepository.decreaseReservedBalance(account.id, amount); + } + //THIS IS A MOCK FUNCTION FOR TESTING PURPOSES ONLY async fundIban(iban: string, amount: number) { const account = await this.getAccountByIban(iban); diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 3aae9a2..fb8c8b7 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -49,6 +49,7 @@ export class CardService { parentCustomer.cards[0].account.id, data, cardColor, + true, ); return this.getCardById(createdCard.id); @@ -87,6 +88,7 @@ export class CardService { if (!card) { throw new BadRequestException('CARD.NOT_FOUND'); } + return card; } @@ -119,9 +121,8 @@ export class CardService { @Transactional() async transferToChild(juniorId: string, amount: number) { const card = await this.getCardByCustomerId(juniorId); - const availableSpendingLimit = await this.transactionService.calculateAvailableSpendingLimitForParent(card.account); - if (amount > availableSpendingLimit) { + if (amount > card.account.balance - card.account.reservedBalance) { throw new BadRequestException('CARD.INSUFFICIENT_BALANCE'); } @@ -129,6 +130,7 @@ export class CardService { await Promise.all([ this.neoleapService.updateCardControl(card.cardReference, finalAmount.toNumber()), this.updateCardLimit(card.id, finalAmount.toNumber()), + this.accountService.increaseReservedBalance(card.account, amount), this.transactionService.createInternalChildTransaction(card.id, amount), ]); diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index 839f370..f09d844 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -5,8 +5,8 @@ import { AccountTransactionWebhookRequest, CardTransactionWebhookRequest, } from '~/common/modules/neoleap/dtos/requests'; -import { Account } from '../entities/account.entity'; import { Transaction } from '../entities/transaction.entity'; +import { CustomerType } from '../enums'; import { TransactionRepository } from '../repositories/transaction.repository'; import { AccountService } from './account.service'; import { CardService } from './card.service'; @@ -31,7 +31,14 @@ export class TransactionService { const transaction = await this.transactionRepository.createCardTransaction(card, body); const total = new Decimal(body.transactionAmount).plus(body.billingAmount).plus(body.fees).plus(body.vatOnFees); - await this.accountService.decreaseAccountBalance(card.account.accountReference, total.toNumber()); + if (card.customerType === CustomerType.CHILD) { + await Promise.all([ + this.accountService.decreaseAccountBalance(card.account.accountReference, total.toNumber()), + this.accountService.decrementReservedBalance(card.account, total.toNumber()), + ]); + } else { + await this.accountService.decreaseAccountBalance(card.account.accountReference, total.toNumber()); + } return transaction; } @@ -58,11 +65,6 @@ export class TransactionService { return transaction; } - async calculateAvailableSpendingLimitForParent(account: Account): Promise { - const internalTransactionSum = await this.transactionRepository.findInternalTransactionTotal(account.id); - return new Decimal(account.balance).minus(internalTransactionSum).toNumber(); - } - private async findExistingTransaction(transactionId: string, accountReference: string): Promise { const existingTransaction = await this.transactionRepository.findTransactionByReference( transactionId, diff --git a/src/db/migrations/1757433339849-add-reservation-amount-to-account-entity.ts b/src/db/migrations/1757433339849-add-reservation-amount-to-account-entity.ts new file mode 100644 index 0000000..0a64e18 --- /dev/null +++ b/src/db/migrations/1757433339849-add-reservation-amount-to-account-entity.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddReservationAmountToAccountEntity1757433339849 implements MigrationInterface { + name = 'AddReservationAmountToAccountEntity1757433339849'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "accounts" ADD "reserved_balance" numeric(10,2) NOT NULL DEFAULT '0'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "accounts" DROP COLUMN "reserved_balance"`); + } +} diff --git a/src/db/migrations/index.ts b/src/db/migrations/index.ts index 5f892a3..dbdede5 100644 --- a/src/db/migrations/index.ts +++ b/src/db/migrations/index.ts @@ -2,3 +2,4 @@ export * from './1754913378460-initial-migration'; export * from './1754915164809-create-neoleap-related-entities'; export * from './1754915164810-seed-default-avatar'; export * from './1757349525708-create-money-requests-table'; +export * from './1757433339849-add-reservation-amount-to-account-entity'; diff --git a/src/junior/dtos/response/junior.response.dto.ts b/src/junior/dtos/response/junior.response.dto.ts index 5a0436c..6e21cd0 100644 --- a/src/junior/dtos/response/junior.response.dto.ts +++ b/src/junior/dtos/response/junior.response.dto.ts @@ -32,7 +32,11 @@ export class JuniorResponseDto { @ApiProperty({ type: DocumentMetaResponseDto }) profilePicture!: DocumentMetaResponseDto | null; + @ApiProperty({ example: 2000.0, description: 'The available balance' }) + availableBalance!: number; + constructor(junior: Junior) { + const card = junior.customer.cards?.[0]; this.id = junior.id; this.firstName = junior.customer.firstName; this.lastName = junior.customer.lastName; @@ -41,6 +45,7 @@ export class JuniorResponseDto { this.dateOfBirth = junior.customer.dateOfBirth; this.relationship = junior.relationship; this.guardianRelationship = GuardianRelationship[junior.relationship]; + this.availableBalance = card ? Math.min(card.limit, card.account.balance) : 0; this.profilePicture = junior.customer.user.profilePicture ? new DocumentMetaResponseDto(junior.customer.user.profilePicture) : null; diff --git a/src/junior/repositories/junior.repository.ts b/src/junior/repositories/junior.repository.ts index 63db76d..4fea55e 100644 --- a/src/junior/repositories/junior.repository.ts +++ b/src/junior/repositories/junior.repository.ts @@ -13,14 +13,28 @@ export class JuniorRepository { findJuniorsByGuardianId(guardianId: string, pageOptions: PageOptionsRequestDto) { return this.juniorRepository.findAndCount({ where: { guardianId }, - relations: ['customer', 'customer.user', 'customer.user.profilePicture'], + relations: [ + 'customer', + 'customer.user', + 'customer.user.profilePicture', + 'customer.cards', + 'customer.cards.account', + ], skip: (pageOptions.page - FIRST_PAGE) * pageOptions.size, take: pageOptions.size, }); } findJuniorById(juniorId: string, withGuardianRelation = false, guardianId?: string) { - const relations = ['customer', 'customer.user', 'theme', 'theme.avatar', 'customer.user.profilePicture']; + const relations = [ + 'customer', + 'customer.user', + 'theme', + 'theme.avatar', + 'customer.user.profilePicture', + 'customer.cards', + 'customer.cards.account', + ]; if (withGuardianRelation) { relations.push('guardian', 'guardian.customer', 'guardian.customer.user'); } From cc4c8254f61c293dd328f43883719339eeb2aa27 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 9 Sep 2025 21:37:55 +0300 Subject: [PATCH 19/45] feat: view child active cards --- src/card/controllers/cards.controller.ts | 11 ++++- .../dtos/responses/child-card.response.dto.ts | 48 +++++++++++++++++++ src/card/dtos/responses/index.ts | 1 + src/card/repositories/card.repository.ts | 12 ++++- src/card/services/card.service.ts | 26 +++++++++- .../dtos/response/junior.response.dto.ts | 6 +-- 6 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 src/card/dtos/responses/child-card.response.dto.ts diff --git a/src/card/controllers/cards.controller.ts b/src/card/controllers/cards.controller.ts index 4b1a12a..dd26753 100644 --- a/src/card/controllers/cards.controller.ts +++ b/src/card/controllers/cards.controller.ts @@ -8,7 +8,7 @@ import { CardEmbossingDetailsResponseDto } from '~/common/modules/neoleap/dtos/r import { ApiDataResponse } from '~/core/decorators'; import { ResponseFactory } from '~/core/utils'; import { FundIbanRequestDto } from '../dtos/requests'; -import { AccountIbanResponseDto, CardResponseDto } from '../dtos/responses'; +import { AccountIbanResponseDto, CardResponseDto, ChildCardResponseDto } from '../dtos/responses'; import { CardService } from '../services'; @Controller('cards') @@ -25,6 +25,15 @@ export class CardsController { return ResponseFactory.data(new CardResponseDto(card)); } + @Get('child-cards') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(ChildCardResponseDto) + async getChildCards(@AuthenticatedUser() { sub }: IJwtPayload) { + const cards = await this.cardService.getChildCards(sub); + return ResponseFactory.data(cards.map((card) => new ChildCardResponseDto(card))); + } + @Get('current') @ApiDataResponse(CardResponseDto) async getCurrentCard(@AuthenticatedUser() { sub }: IJwtPayload) { diff --git a/src/card/dtos/responses/child-card.response.dto.ts b/src/card/dtos/responses/child-card.response.dto.ts new file mode 100644 index 0000000..258ea8a --- /dev/null +++ b/src/card/dtos/responses/child-card.response.dto.ts @@ -0,0 +1,48 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { Card } from '~/card/entities'; +import { Gender } from '~/customer/enums'; +import { DocumentMetaResponseDto } from '~/document/dtos/response'; +import { CardResponseDto } from './card.response.dto'; + +class JuniorInfo { + @ApiProperty({ example: 'id' }) + id!: string; + + @ApiProperty({ example: 'FirstName' }) + firstName!: string; + + @ApiProperty({ example: 'LastName' }) + lastName!: string; + + @ApiProperty({ example: 'test@example.com' }) + email!: string; + + @ApiProperty({ enum: Gender, example: Gender.MALE }) + gender!: Gender; + + @ApiProperty({ example: '2000-01-01' }) + dateOfBirth!: Date; + + @ApiProperty({ example: DocumentMetaResponseDto, nullable: true }) + profilePicture!: DocumentMetaResponseDto | null; + + constructor(card: Card) { + this.id = card.customer?.junior?.id; + this.firstName = card.customer?.firstName; + this.lastName = card.customer?.lastName; + this.email = card.customer?.user?.email; + this.gender = card.customer.gender; + this.profilePicture = card.customer?.user?.profilePicture + ? new DocumentMetaResponseDto(card.customer.user.profilePicture) + : null; + } +} +export class ChildCardResponseDto extends CardResponseDto { + @ApiProperty({ type: JuniorInfo }) + junior!: JuniorInfo | null; + + constructor(card: Card) { + super(card); + this.junior = card.customer?.junior ? new JuniorInfo(card) : null; + } +} diff --git a/src/card/dtos/responses/index.ts b/src/card/dtos/responses/index.ts index e32607e..ae3310e 100644 --- a/src/card/dtos/responses/index.ts +++ b/src/card/dtos/responses/index.ts @@ -1,2 +1,3 @@ export * from './account-iban.response.dto'; export * from './card.response.dto'; +export * from './child-card.response.dto'; diff --git a/src/card/repositories/card.repository.ts b/src/card/repositories/card.repository.ts index b8fc8be..ee121a5 100644 --- a/src/card/repositories/card.repository.ts +++ b/src/card/repositories/card.repository.ts @@ -14,14 +14,14 @@ export class CardRepository { accountId: string, card: CreateApplicationResponse, cardColor?: CardColors, - isChildCard = false, + parentId?: string, ): Promise { return this.cardRepository.save( this.cardRepository.create({ customerId: customerId, expiry: card.expiryDate, cardReference: card.cardId, - customerType: isChildCard ? CustomerType.CHILD : CustomerType.PARENT, + customerType: parentId ? CustomerType.CHILD : CustomerType.PARENT, firstSixDigits: card.firstSixDigits, lastFourDigits: card.lastFourDigits, color: cardColor ? cardColor : CardColors.DEEP_MAGENTA, @@ -29,10 +29,18 @@ export class CardRepository { issuer: CardIssuers.NEOLEAP, accountId: accountId, vpan: card.vpan, + parentId, }), ); } + findChildCardsForGuardian(guardianId: string): Promise { + return this.cardRepository.find({ + where: { parentId: guardianId, customerType: CustomerType.CHILD }, + relations: ['account', 'customer', 'customer.user', 'customer.user.profilePicture', 'customer.junior'], + }); + } + getCardById(id: string): Promise { return this.cardRepository.findOne({ where: { id }, relations: ['account'] }); } diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index fb8c8b7..bd5e8ed 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -1,4 +1,4 @@ -import { BadRequestException, forwardRef, Inject, Injectable } from '@nestjs/common'; +import { BadRequestException, forwardRef, Inject, Injectable, Logger } from '@nestjs/common'; import Decimal from 'decimal.js'; import { Transactional } from 'typeorm-transactional'; import { AccountCardStatusChangedWebhookRequest } from '~/common/modules/neoleap/dtos/requests'; @@ -6,6 +6,7 @@ import { NeoLeapService } from '~/common/modules/neoleap/services'; import { Customer } from '~/customer/entities'; import { KycStatus } from '~/customer/enums'; import { CustomerService } from '~/customer/services'; +import { OciService } from '~/document/services'; import { Card } from '../entities'; import { CardColors } from '../enums'; import { CardStatusMapper } from '../mappers/card-status.mapper'; @@ -15,9 +16,11 @@ import { TransactionService } from './transaction.service'; @Injectable() export class CardService { + private readonly logger = new Logger(CardService.name); constructor( private readonly cardRepository: CardRepository, private readonly accountService: AccountService, + private readonly ociService: OciService, @Inject(forwardRef(() => TransactionService)) private readonly transactionService: TransactionService, @Inject(forwardRef(() => NeoLeapService)) private readonly neoleapService: NeoLeapService, @Inject(forwardRef(() => CustomerService)) private readonly customerService: CustomerService, @@ -42,6 +45,12 @@ export class CardService { return this.getCardById(createdCard.id); } + async getChildCards(guardianId: string): Promise { + const cards = await this.cardRepository.findChildCardsForGuardian(guardianId); + await this.prepareJuniorImages(cards); + return cards; + } + async createCardForChild(parentCustomer: Customer, childCustomer: Customer, cardColor: CardColors, cardPin: string) { const data = await this.neoleapService.createChildCard(parentCustomer, childCustomer, cardPin); const createdCard = await this.cardRepository.createCard( @@ -49,7 +58,7 @@ export class CardService { parentCustomer.cards[0].account.id, data, cardColor, - true, + parentCustomer.id, ); return this.getCardById(createdCard.id); @@ -140,4 +149,17 @@ export class CardService { fundIban(iban: string, amount: number) { return this.accountService.fundIban(iban, amount); } + + private async prepareJuniorImages(cards: Card[]) { + this.logger.log(`Preparing junior images`); + await Promise.all( + cards.map(async (card) => { + const profilePicture = card.customer?.user?.profilePicture; + + if (profilePicture) { + profilePicture.url = await this.ociService.generatePreSignedUrl(profilePicture); + } + }), + ); + } } diff --git a/src/junior/dtos/response/junior.response.dto.ts b/src/junior/dtos/response/junior.response.dto.ts index 6e21cd0..5c3a0f5 100644 --- a/src/junior/dtos/response/junior.response.dto.ts +++ b/src/junior/dtos/response/junior.response.dto.ts @@ -33,10 +33,10 @@ export class JuniorResponseDto { profilePicture!: DocumentMetaResponseDto | null; @ApiProperty({ example: 2000.0, description: 'The available balance' }) - availableBalance!: number; + availableBalance!: number | null; constructor(junior: Junior) { - const card = junior.customer.cards?.[0]; + const card = junior.customer?.cards?.[0]; this.id = junior.id; this.firstName = junior.customer.firstName; this.lastName = junior.customer.lastName; @@ -45,7 +45,7 @@ export class JuniorResponseDto { this.dateOfBirth = junior.customer.dateOfBirth; this.relationship = junior.relationship; this.guardianRelationship = GuardianRelationship[junior.relationship]; - this.availableBalance = card ? Math.min(card.limit, card.account.balance) : 0; + this.availableBalance = card ? Math.min(card.limit, card.account.balance) : null; this.profilePicture = junior.customer.user.profilePicture ? new DocumentMetaResponseDto(junior.customer.user.profilePicture) : null; From 872d231f72df1633bade047382e1d25f721a67bb Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 9 Sep 2025 21:45:37 +0300 Subject: [PATCH 20/45] feat: show embossing information for child cards --- src/card/controllers/cards.controller.ts | 11 ++++++++++- src/card/services/card.service.ts | 8 ++++++++ src/i18n/ar/app.json | 7 ++++--- src/i18n/en/app.json | 3 ++- 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/card/controllers/cards.controller.ts b/src/card/controllers/cards.controller.ts index dd26753..e61167d 100644 --- a/src/card/controllers/cards.controller.ts +++ b/src/card/controllers/cards.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, HttpCode, HttpStatus, Post, UseGuards } from '@nestjs/common'; +import { Body, Controller, Get, HttpCode, HttpStatus, Param, Post, UseGuards } from '@nestjs/common'; import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { Roles } from '~/auth/enums'; import { IJwtPayload } from '~/auth/interfaces'; @@ -34,6 +34,15 @@ export class CardsController { return ResponseFactory.data(cards.map((card) => new ChildCardResponseDto(card))); } + @Get('child-cards/:cardid/embossing-details') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(CardEmbossingDetailsResponseDto) + async getChildCardEmbossingDetails(@Param('cardid') cardId: string, @AuthenticatedUser() { sub }: IJwtPayload) { + const res = await this.cardService.getChildCardEmbossingInformation(cardId, sub); + return ResponseFactory.data(res); + } + @Get('current') @ApiDataResponse(CardResponseDto) async getCurrentCard(@AuthenticatedUser() { sub }: IJwtPayload) { diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index bd5e8ed..edc9288 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -114,6 +114,14 @@ export class CardService { return this.neoleapService.getEmbossingInformation(card); } + async getChildCardEmbossingInformation(cardId: string, guardianId: string) { + const card = await this.getCardById(cardId); + if (card.parentId !== guardianId) { + throw new BadRequestException('CARD.DOES_NOT_BELONG_TO_GUARDIAN'); + } + return this.neoleapService.getEmbossingInformation(card); + } + async updateCardLimit(cardId: string, newLimit: number) { const { affected } = await this.cardRepository.updateCardLimit(cardId, newLimit); diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index ce28fcb..5030ff1 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -100,8 +100,9 @@ }, "OTP": { "INVALID_OTP": "رمز التحقق الذي أدخلته غير صالح. يرجى المحاولة مرة أخرى." - }, - "CARD": { - "INSUFFICIENT_BALANCE": "البطاقة لا تحتوي على رصيد كافٍ لإكمال هذا التحويل." + }, + "CARD": { + "INSUFFICIENT_BALANCE": "البطاقة لا تحتوي على رصيد كافٍ لإكمال هذا التحويل.", + "DOES_NOT_BELONG_TO_GUARDIAN": "البطاقة لا تنتمي إلى ولي الأمر." } } diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index 06654e5..a04edd2 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -101,6 +101,7 @@ "INVALID_OTP": "The OTP you entered is invalid. Please try again." }, "CARD": { - "INSUFFICIENT_BALANCE": "The card does not have sufficient balance to complete this transfer." + "INSUFFICIENT_BALANCE": "The card does not have sufficient balance to complete this transfer.", + "DOES_NOT_BELONG_TO_GUARDIAN": "The card does not belong to the guardian." } } From df4d2e3c1f97d953b2e08603fd74e708ea3f87b7 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Mon, 15 Sep 2025 08:47:56 +0300 Subject: [PATCH 21/45] feat: get card by child id --- src/card/controllers/cards.controller.ts | 9 +++++++++ src/card/repositories/card.repository.ts | 7 +++++++ src/card/services/card.service.ts | 9 +++++++++ src/i18n/ar/app.json | 3 ++- src/i18n/en/app.json | 3 ++- 5 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/card/controllers/cards.controller.ts b/src/card/controllers/cards.controller.ts index e61167d..4b129fc 100644 --- a/src/card/controllers/cards.controller.ts +++ b/src/card/controllers/cards.controller.ts @@ -34,6 +34,15 @@ export class CardsController { return ResponseFactory.data(cards.map((card) => new ChildCardResponseDto(card))); } + @Get('child-cards/:childid') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse(ChildCardResponseDto) + async getChildCardById(@Param('childid') childId: string, @AuthenticatedUser() { sub }: IJwtPayload) { + const card = await this.cardService.getCardByChildId(sub, childId); + return ResponseFactory.data(new ChildCardResponseDto(card)); + } + @Get('child-cards/:cardid/embossing-details') @UseGuards(RolesGuard) @AllowedRoles(Roles.GUARDIAN) diff --git a/src/card/repositories/card.repository.ts b/src/card/repositories/card.repository.ts index ee121a5..18a161f 100644 --- a/src/card/repositories/card.repository.ts +++ b/src/card/repositories/card.repository.ts @@ -45,6 +45,13 @@ export class CardRepository { return this.cardRepository.findOne({ where: { id }, relations: ['account'] }); } + findCardByChildId(guardianId: string, childId: string): Promise { + return this.cardRepository.findOne({ + where: { parentId: guardianId, customerId: childId, customerType: CustomerType.CHILD }, + relations: ['account', 'customer', 'customer.user', 'customer.user.profilePicture', 'customer.junior'], + }); + } + getCardByReferenceNumber(referenceNumber: string): Promise { return this.cardRepository.findOne({ where: { cardReference: referenceNumber }, relations: ['account'] }); } diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index edc9288..9235aab 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -63,6 +63,15 @@ export class CardService { return this.getCardById(createdCard.id); } + + async getCardByChildId(guardianId: string, childId: string): Promise { + const card = await this.cardRepository.findCardByChildId(guardianId, childId); + if (!card) { + throw new BadRequestException('CARD.NOT_FOUND'); + } + await this.prepareJuniorImages([card]); + return card; + } async getCardById(id: string): Promise { const card = await this.cardRepository.getCardById(id); diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index 5030ff1..24735cb 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -103,6 +103,7 @@ }, "CARD": { "INSUFFICIENT_BALANCE": "البطاقة لا تحتوي على رصيد كافٍ لإكمال هذا التحويل.", - "DOES_NOT_BELONG_TO_GUARDIAN": "البطاقة لا تنتمي إلى ولي الأمر." + "DOES_NOT_BELONG_TO_GUARDIAN": "البطاقة لا تنتمي إلى ولي الأمر.", + "NOT_FOUND": "لم يتم العثور على البطاقة." } } diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index a04edd2..48f2bd7 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -102,6 +102,7 @@ }, "CARD": { "INSUFFICIENT_BALANCE": "The card does not have sufficient balance to complete this transfer.", - "DOES_NOT_BELONG_TO_GUARDIAN": "The card does not belong to the guardian." + "DOES_NOT_BELONG_TO_GUARDIAN": "The card does not belong to the guardian.", + "NOT_FOUND": "The card was not found." } } From f1484e125bd800db723e0ceec1434f191fdcb886 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Mon, 15 Sep 2025 09:02:56 +0300 Subject: [PATCH 22/45] feat: soft delete junior --- ...5357218-add-deleted-at-column-to-junior.ts | 13 ++++++++++ src/db/migrations/index.ts | 1 + src/i18n/ar/app.json | 3 ++- src/i18n/en/app.json | 3 ++- src/junior/controllers/junior.controller.ts | 22 +++++++++++++++- src/junior/entities/junior.entity.ts | 4 +++ src/junior/repositories/junior.repository.ts | 4 +++ src/junior/services/junior.service.ts | 26 +++++++++++++++++++ 8 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 src/db/migrations/1757915357218-add-deleted-at-column-to-junior.ts diff --git a/src/db/migrations/1757915357218-add-deleted-at-column-to-junior.ts b/src/db/migrations/1757915357218-add-deleted-at-column-to-junior.ts new file mode 100644 index 0000000..452d466 --- /dev/null +++ b/src/db/migrations/1757915357218-add-deleted-at-column-to-junior.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddDeletedAtColumnToJunior1757915357218 implements MigrationInterface { + name = 'AddDeletedAtColumnToJunior1757915357218'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "juniors" ADD "deleted_at" TIMESTAMP WITH TIME ZONE`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "juniors" DROP COLUMN "deleted_at"`); + } +} diff --git a/src/db/migrations/index.ts b/src/db/migrations/index.ts index dbdede5..ca2c3b5 100644 --- a/src/db/migrations/index.ts +++ b/src/db/migrations/index.ts @@ -3,3 +3,4 @@ export * from './1754915164809-create-neoleap-related-entities'; export * from './1754915164810-seed-default-avatar'; export * from './1757349525708-create-money-requests-table'; export * from './1757433339849-add-reservation-amount-to-account-entity'; +export * from './1757915357218-add-deleted-at-column-to-junior'; diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index 24735cb..4b63817 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -68,7 +68,8 @@ "CIVIL_ID_REQUIRED": "مطلوب بطاقة الهوية المدنية.", "CIVIL_ID_NOT_CREATED_BY_GUARDIAN": "تم تحميل بطاقة الهوية المدنية من قبل شخص آخر غير ولي الأمر.", "CIVIL_ID_ALREADY_EXISTS": "بطاقة الهوية المدنية مستخدمة بالفعل من قبل طفل آخر.", - "CANNOT_UPDATE_REGISTERED_USER": "الطفل قد سجل بالفعل. لا يُسمح بتحديث البيانات." + "CANNOT_UPDATE_REGISTERED_USER": "الطفل قد سجل بالفعل. لا يُسمح بتحديث البيانات.", + "CANNOT_DELETE_REGISTERED_USER": "الطفل قد سجل بالفعل. لا يُسمح بحذف الطفل." }, "MONEY_REQUEST": { diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index 48f2bd7..f661688 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -67,7 +67,8 @@ "CIVIL_ID_REQUIRED": "Civil ID is required.", "CIVIL_ID_NOT_CREATED_BY_GUARDIAN": "The civil ID document was not uploaded by the guardian.", "CIVIL_ID_ALREADY_EXISTS": "The civil ID is already used by another junior.", - "CANNOT_UPDATE_REGISTERED_USER": "The junior has already registered. Updating details is not allowed." + "CANNOT_UPDATE_REGISTERED_USER": "The junior has already registered. Updating details is not allowed.", + "CANNOT_DELETE_REGISTERED_USER": "The junior has already registered. Deleting the junior is not allowed." }, "MONEY_REQUEST": { diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index 230c4e3..81f2118 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -1,4 +1,16 @@ -import { Body, Controller, Get, Param, Patch, Post, Query, UseGuards } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + HttpCode, + HttpStatus, + Param, + Patch, + Post, + Query, + UseGuards, +} from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { Roles } from '~/auth/enums'; import { IJwtPayload } from '~/auth/interfaces'; @@ -83,6 +95,14 @@ export class JuniorController { return ResponseFactory.data(new JuniorResponseDto(junior)); } + @Delete(':juniorId') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @HttpCode(HttpStatus.NO_CONTENT) + async deleteJunior(@AuthenticatedUser() user: IJwtPayload, @Param('juniorId', CustomParseUUIDPipe) juniorId: string) { + await this.juniorService.deleteJunior(juniorId, user.sub); + } + @Post('set-theme') @UseGuards(RolesGuard) @AllowedRoles(Roles.JUNIOR) diff --git a/src/junior/entities/junior.entity.ts b/src/junior/entities/junior.entity.ts index 47891a2..2349f56 100644 --- a/src/junior/entities/junior.entity.ts +++ b/src/junior/entities/junior.entity.ts @@ -2,6 +2,7 @@ import { BaseEntity, Column, CreateDateColumn, + DeleteDateColumn, Entity, JoinColumn, ManyToOne, @@ -49,4 +50,7 @@ export class Junior extends BaseEntity { @UpdateDateColumn({ name: 'updated_at', type: 'timestamp with time zone', default: () => 'CURRENT_TIMESTAMP' }) updatedAt!: Date; + + @DeleteDateColumn({ name: 'deleted_at', type: 'timestamp with time zone', nullable: true }) + deletedAt!: Date | null; } diff --git a/src/junior/repositories/junior.repository.ts b/src/junior/repositories/junior.repository.ts index 4fea55e..22cd1e0 100644 --- a/src/junior/repositories/junior.repository.ts +++ b/src/junior/repositories/junior.repository.ts @@ -65,4 +65,8 @@ export class JuniorRepository { }), ); } + + softDelete(juniorId: string) { + return this.juniorRepository.softDelete({ id: juniorId }); + } } diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index acb611e..b864746 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -1,4 +1,5 @@ import { BadRequestException, Injectable, Logger } from '@nestjs/common'; +import { IsNull, Not } from 'typeorm'; import { Transactional } from 'typeorm-transactional'; import { Roles } from '~/auth/enums'; import { CardService } from '~/card/services'; @@ -183,6 +184,31 @@ export class JuniorService { return this.cardService.transferToChild(juniorId, body.amount); } + async deleteJunior(juniorId: string, guardianId: string) { + const doesBelong = await this.doesJuniorBelongToGuardian(guardianId, juniorId); + + if (!doesBelong) { + this.logger.error(`Junior ${juniorId} does not belong to guardian ${guardianId}`); + throw new BadRequestException('JUNIOR.NOT_BELONG_TO_GUARDIAN'); + } + + const hasPassword = await this.userService.findUser({ id: juniorId, password: Not(IsNull()) }); + + if (hasPassword) { + this.logger.error(`Cannot delete junior ${juniorId} with registered user`); + throw new BadRequestException('JUNIOR.CANNOT_DELETE_REGISTERED_USER'); + } + + const { affected } = await this.juniorRepository.softDelete(juniorId); + + if (affected === 0) { + this.logger.error(`Junior ${juniorId} not found`); + throw new BadRequestException('JUNIOR.NOT_FOUND'); + } + + this.logger.log(`Junior ${juniorId} deleted successfully`); + } + private async prepareJuniorImages(juniors: Junior[]) { this.logger.log(`Preparing junior images`); await Promise.all( From 454ded627fbeaf13dee0d21ba726a331715a236c Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 16 Sep 2025 21:01:32 +0300 Subject: [PATCH 23/45] fix: fix transfer to child bug --- src/card/entities/account.entity.ts | 22 ++++++++++++++++++++-- src/card/services/account.service.ts | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/card/entities/account.entity.ts b/src/card/entities/account.entity.ts index d57bec8..9973d50 100644 --- a/src/card/entities/account.entity.ts +++ b/src/card/entities/account.entity.ts @@ -22,10 +22,28 @@ export class Account { @Column('varchar', { length: 255, nullable: false, name: 'currency' }) currency!: string; - @Column('decimal', { precision: 10, scale: 2, default: 0.0, name: 'balance' }) + @Column('decimal', { + precision: 10, + scale: 2, + default: 0.0, + name: 'balance', + transformer: { + to: (value: number) => value, + from: (value: string) => parseFloat(value), + }, + }) balance!: number; - @Column('decimal', { precision: 10, scale: 2, default: 0.0, name: 'reserved_balance' }) + @Column('decimal', { + precision: 10, + scale: 2, + default: 0.0, + name: 'reserved_balance', + transformer: { + to: (value: number) => value, + from: (value: string) => parseFloat(value), + }, + }) reservedBalance!: number; @OneToMany(() => Card, (card) => card.account, { cascade: true }) diff --git a/src/card/services/account.service.ts b/src/card/services/account.service.ts index 2ab2d6a..e6ac155 100644 --- a/src/card/services/account.service.ts +++ b/src/card/services/account.service.ts @@ -65,7 +65,7 @@ export class AccountService { increaseReservedBalance(account: Account, amount: number) { if (account.balance < account.reservedBalance + amount) { - throw new UnprocessableEntityException('ACCOUNT.INSUFFICIENT_BALANCE'); + throw new UnprocessableEntityException('CARD.INSUFFICIENT_BALANCE'); } return this.accountRepository.increaseReservedBalance(account.id, amount); } From 1830d92cbdc6c032fc9c067ef841676afe8662a0 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 23 Sep 2025 08:56:57 +0300 Subject: [PATCH 24/45] feat: weekly stats for junior --- src/card/dtos/responses/card.response.dto.ts | 4 +- src/card/entities/transaction.entity.ts | 11 ++++- .../repositories/transaction.repository.ts | 12 ++++++ src/card/services/card.service.ts | 4 ++ src/card/services/transaction.service.ts | 40 +++++++++++++++++++ src/junior/controllers/junior.controller.ts | 12 ++++++ .../response/weekly-summary.response.dto.ts | 30 ++++++++++++++ src/junior/services/junior.service.ts | 12 ++++++ 8 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 src/junior/dtos/response/weekly-summary.response.dto.ts diff --git a/src/card/dtos/responses/card.response.dto.ts b/src/card/dtos/responses/card.response.dto.ts index 26f93c3..d69a478 100644 --- a/src/card/dtos/responses/card.response.dto.ts +++ b/src/card/dtos/responses/card.response.dto.ts @@ -58,7 +58,9 @@ export class CardResponseDto { this.status = card.status; this.statusDescription = CardStatusDescriptionMapper[card.statusDescription][UserLocale.ENGLISH].description; this.balance = - card.customerType === CustomerType.CHILD ? Math.min(card.limit, card.account.balance) : card.account.balance; + card.customerType === CustomerType.CHILD + ? Math.min(card.limit, card.account.balance) + : card.account.balance - card.account.reservedBalance; this.reservedBalance = card.customerType === CustomerType.PARENT ? card.account.reservedBalance : null; } } diff --git a/src/card/entities/transaction.entity.ts b/src/card/entities/transaction.entity.ts index 029ef29..9db3c0d 100644 --- a/src/card/entities/transaction.entity.ts +++ b/src/card/entities/transaction.entity.ts @@ -32,7 +32,16 @@ export class Transaction { @Column({ name: 'rrn', nullable: true, type: 'varchar' }) rrn!: string; - @Column({ type: 'decimal', precision: 12, scale: 2, name: 'transaction_amount' }) + @Column({ + type: 'decimal', + precision: 12, + scale: 2, + name: 'transaction_amount', + transformer: { + to: (value: number) => value, + from: (value: string) => parseFloat(value), + }, + }) transactionAmount!: number; @Column({ type: 'varchar', name: 'transaction_currency' }) diff --git a/src/card/repositories/transaction.repository.ts b/src/card/repositories/transaction.repository.ts index b38a257..b8e84b8 100644 --- a/src/card/repositories/transaction.repository.ts +++ b/src/card/repositories/transaction.repository.ts @@ -84,4 +84,16 @@ export class TransactionRepository { where: { transactionId, accountReference }, }); } + + getTransactionsForCardWithinDateRange(juniorId: string, startDate: Date, endDate: Date): Promise { + return this.transactionRepository + .createQueryBuilder('transaction') + .innerJoinAndSelect('transaction.card', 'card') + .where('card.customerId = :juniorId', { juniorId }) + .andWhere('transaction.transactionScope = :scope', { scope: TransactionScope.CARD }) + .andWhere('transaction.transactionType = :type', { type: TransactionType.EXTERNAL }) + .andWhere('transaction.transactionDate BETWEEN :startDate AND :endDate', { startDate, endDate }) + .orderBy('transaction.transactionDate', 'DESC') + .getMany(); + } } diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 9235aab..b9df3fd 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -163,6 +163,10 @@ export class CardService { return finalAmount.toNumber(); } + getWeeklySummary(juniorId: string) { + return this.transactionService.getWeeklySummary(juniorId); + } + fundIban(iban: string, amount: number) { return this.accountService.fundIban(iban, amount); } diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index f09d844..96237dd 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -1,5 +1,6 @@ import { forwardRef, Inject, Injectable, UnprocessableEntityException } from '@nestjs/common'; import Decimal from 'decimal.js'; +import moment from 'moment'; import { Transactional } from 'typeorm-transactional'; import { AccountTransactionWebhookRequest, @@ -73,4 +74,43 @@ export class TransactionService { return existingTransaction; } + + async getWeeklySummary(juniorId: string) { + const startOfWeek = moment().startOf('week').toDate(); + const endOfWeek = moment().endOf('week').toDate(); + + const transactions = await this.transactionRepository.getTransactionsForCardWithinDateRange( + juniorId, + startOfWeek, + endOfWeek, + ); + const summary = { + startOfWeek: startOfWeek, + endOfWeek: endOfWeek, + total: 0, + monday: 0, + tuesday: 0, + wednesday: 0, + thursday: 0, + friday: 0, + saturday: 0, + sunday: 0, + }; + + transactions.forEach((transaction) => { + const day = moment(transaction.transactionDate).format('dddd').toLowerCase() as + | 'monday' + | 'tuesday' + | 'wednesday' + | 'thursday' + | 'friday' + | 'saturday' + | 'sunday'; + summary[day] += transaction.transactionAmount; + }); + + summary.total = transactions.reduce((acc, curr) => acc + curr.transactionAmount, 0); + + return summary; + } } diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index 81f2118..b54d397 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -144,4 +144,16 @@ export class JuniorController { return ResponseFactory.data(new TransferToJuniorResponseDto(newAmount)); } + + @Get(':juniorId/weekly-summary') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.GUARDIAN) + @ApiDataResponse('string') + async getWeeklySummary( + @Param('juniorId', CustomParseUUIDPipe) juniorId: string, + @AuthenticatedUser() user: IJwtPayload, + ) { + const summary = await this.juniorService.getWeeklySummary(juniorId, user.sub); + return ResponseFactory.data(summary); + } } diff --git a/src/junior/dtos/response/weekly-summary.response.dto.ts b/src/junior/dtos/response/weekly-summary.response.dto.ts new file mode 100644 index 0000000..310e0f6 --- /dev/null +++ b/src/junior/dtos/response/weekly-summary.response.dto.ts @@ -0,0 +1,30 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class WeeklySummaryResponseDto { + @ApiProperty({ description: 'Total amount spent in the week', example: 350 }) + total!: number; + + @ApiProperty({ description: 'range', example: '2023-10-01 - 2023-10-07' }) + range!: string; + + @ApiProperty({ description: 'Amount spent on Sunday', example: 50 }) + sunday!: number; + + @ApiProperty({ description: 'Amount spent on Monday', example: 30 }) + monday!: number; + + @ApiProperty({ description: 'Amount spent on Tuesday', example: 20 }) + tuesday!: number; + + @ApiProperty({ description: 'Amount spent on Wednesday', example: 40 }) + wednesday!: number; + + @ApiProperty({ description: 'Amount spent on Thursday', example: 60 }) + thursday!: number; + + @ApiProperty({ description: 'Amount spent on Friday', example: 70 }) + friday!: number; + + @ApiProperty({ description: 'Amount spent on Saturday', example: 80 }) + saturday!: number; +} diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index b864746..d2e9961 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -209,6 +209,18 @@ export class JuniorService { this.logger.log(`Junior ${juniorId} deleted successfully`); } + getWeeklySummary(juniorId: string, guardianId: string) { + const doesBelong = this.doesJuniorBelongToGuardian(guardianId, juniorId); + + if (!doesBelong) { + this.logger.error(`Junior ${juniorId} does not belong to guardian ${guardianId}`); + throw new BadRequestException('JUNIOR.NOT_BELONG_TO_GUARDIAN'); + } + + this.logger.log(`Getting weekly summary for junior ${juniorId}`); + return this.cardService.getWeeklySummary(juniorId); + } + private async prepareJuniorImages(juniors: Junior[]) { this.logger.log(`Preparing junior images`); await Promise.all( From 918b15c3153454623e43ae3900c4e8ec60c67cc4 Mon Sep 17 00:00:00 2001 From: Abdalhameed Ahmad Date: Tue, 23 Sep 2025 09:00:41 +0300 Subject: [PATCH 25/45] fix: add swagger --- src/junior/controllers/junior.controller.ts | 3 ++- src/junior/dtos/response/weekly-summary.response.dto.ts | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index b54d397..d3a472a 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -32,6 +32,7 @@ import { ThemeResponseDto, TransferToJuniorResponseDto, } from '../dtos/response'; +import { WeeklySummaryResponseDto } from '../dtos/response/weekly-summary.response.dto'; import { JuniorService } from '../services'; @Controller('juniors') @@ -148,7 +149,7 @@ export class JuniorController { @Get(':juniorId/weekly-summary') @UseGuards(RolesGuard) @AllowedRoles(Roles.GUARDIAN) - @ApiDataResponse('string') + @ApiDataResponse(WeeklySummaryResponseDto) async getWeeklySummary( @Param('juniorId', CustomParseUUIDPipe) juniorId: string, @AuthenticatedUser() user: IJwtPayload, diff --git a/src/junior/dtos/response/weekly-summary.response.dto.ts b/src/junior/dtos/response/weekly-summary.response.dto.ts index 310e0f6..5c1e7e5 100644 --- a/src/junior/dtos/response/weekly-summary.response.dto.ts +++ b/src/junior/dtos/response/weekly-summary.response.dto.ts @@ -1,12 +1,13 @@ import { ApiProperty } from '@nestjs/swagger'; export class WeeklySummaryResponseDto { + @ApiProperty({ description: 'Start date of the week', example: '2023-10-01' }) + startOfWeek!: Date; + @ApiProperty({ description: 'End date of the week', example: '2023-10-07' }) + endOfWeek!: Date; @ApiProperty({ description: 'Total amount spent in the week', example: 350 }) total!: number; - @ApiProperty({ description: 'range', example: '2023-10-01 - 2023-10-07' }) - range!: string; - @ApiProperty({ description: 'Amount spent on Sunday', example: 50 }) sunday!: number; From 8f601b26aeb8ff2d2ade199d8f2c614a9abc6e78 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 12 Oct 2025 16:03:25 +0300 Subject: [PATCH 26/45] fix: add gender property to UserResponseDto --- src/auth/dtos/response/user.response.dto.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/auth/dtos/response/user.response.dto.ts b/src/auth/dtos/response/user.response.dto.ts index 1c2c50f..82fbeab 100644 --- a/src/auth/dtos/response/user.response.dto.ts +++ b/src/auth/dtos/response/user.response.dto.ts @@ -1,4 +1,5 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Gender } from '~/customer/enums'; import { DocumentMetaResponseDto } from '~/document/dtos/response'; import { User } from '~/user/entities'; @@ -33,6 +34,10 @@ export class UserResponseDto { @ApiProperty() isEmailVerified!: boolean; + @ApiPropertyOptional({ enum: Gender, nullable: true }) + gender!: Gender | null; + + constructor(user: User) { this.id = user.id; this.countryCode = user.countryCode; @@ -44,5 +49,6 @@ export class UserResponseDto { this.profilePicture = user.profilePicture ? new DocumentMetaResponseDto(user.profilePicture) : null; this.isEmailVerified = user.isEmailVerified; this.isPhoneVerified = user.isPhoneVerified; + this.gender = (user.customer?.gender as Gender) || null; } } From f6fa74897aec01532fe7d37bbf1dff9f5412975f Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Wed, 15 Oct 2025 14:14:59 +0300 Subject: [PATCH 27/45] feat: add guardian transactions feature with response DTOs and service integration --- .../responses/guardian-home.response.dto.ts | 17 ++++ src/card/dtos/responses/index.ts | 3 + .../paged-transactions.response.dto.ts | 33 +++++++ .../transaction-item.response.dto.ts | 24 +++++ src/card/enums/index.ts | 1 + .../enums/parent-transaction-type.enum.ts | 6 ++ src/card/repositories/index.ts | 2 + .../repositories/transaction.repository.ts | 48 ++++++++++ src/card/services/index.ts | 2 + src/card/services/transaction.service.ts | 96 ++++++++++++++++++- ...account-transaction-webhook.request.dto.ts | 4 +- .../guardian-transactions.controller.ts | 53 ++++++++++ src/guardian/controllers/index.ts | 3 + src/guardian/guardian.module.ts | 10 +- .../services/guardian-transactions.service.ts | 45 +++++++++ src/guardian/services/index.ts | 3 +- 16 files changed, 344 insertions(+), 6 deletions(-) create mode 100644 src/card/dtos/responses/guardian-home.response.dto.ts create mode 100644 src/card/dtos/responses/paged-transactions.response.dto.ts create mode 100644 src/card/dtos/responses/transaction-item.response.dto.ts create mode 100644 src/card/enums/parent-transaction-type.enum.ts create mode 100644 src/guardian/controllers/guardian-transactions.controller.ts create mode 100644 src/guardian/controllers/index.ts create mode 100644 src/guardian/services/guardian-transactions.service.ts diff --git a/src/card/dtos/responses/guardian-home.response.dto.ts b/src/card/dtos/responses/guardian-home.response.dto.ts new file mode 100644 index 0000000..bdf555d --- /dev/null +++ b/src/card/dtos/responses/guardian-home.response.dto.ts @@ -0,0 +1,17 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { TransactionItemResponseDto } from './transaction-item.response.dto'; + +export class GuardianHomeResponseDto { + @ApiProperty({ example: 2000.0 }) + availableBalance!: number; + + @ApiProperty({ type: [TransactionItemResponseDto] }) + recentTransactions!: TransactionItemResponseDto[]; + + constructor(availableBalance: number, recentTransactions: TransactionItemResponseDto[]) { + this.availableBalance = availableBalance; + this.recentTransactions = recentTransactions; + } +} + + diff --git a/src/card/dtos/responses/index.ts b/src/card/dtos/responses/index.ts index ae3310e..fcea24f 100644 --- a/src/card/dtos/responses/index.ts +++ b/src/card/dtos/responses/index.ts @@ -1,3 +1,6 @@ export * from './account-iban.response.dto'; export * from './card.response.dto'; export * from './child-card.response.dto'; +export * from './transaction-item.response.dto'; +export * from './guardian-home.response.dto'; +export * from './paged-transactions.response.dto'; diff --git a/src/card/dtos/responses/paged-transactions.response.dto.ts b/src/card/dtos/responses/paged-transactions.response.dto.ts new file mode 100644 index 0000000..cc38341 --- /dev/null +++ b/src/card/dtos/responses/paged-transactions.response.dto.ts @@ -0,0 +1,33 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { TransactionItemResponseDto } from './transaction-item.response.dto'; + +export class PagedTransactionsResponseDto { + @ApiProperty({ type: [TransactionItemResponseDto] }) + items!: TransactionItemResponseDto[]; + + @ApiProperty({ example: 1 }) + page!: number; + + @ApiProperty({ example: 10 }) + size!: number; + + @ApiProperty({ example: 45 }) + total!: number; + + @ApiProperty({ example: true }) + hasMore!: boolean; + + constructor( + items: TransactionItemResponseDto[], + page: number, + size: number, + total: number, + ) { + this.items = items; + this.page = page; + this.size = size; + this.total = total; + this.hasMore = page * size < total; + } +} + diff --git a/src/card/dtos/responses/transaction-item.response.dto.ts b/src/card/dtos/responses/transaction-item.response.dto.ts new file mode 100644 index 0000000..647da36 --- /dev/null +++ b/src/card/dtos/responses/transaction-item.response.dto.ts @@ -0,0 +1,24 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { ParentTransactionType } from '~/card/enums'; + +export class TransactionItemResponseDto { + @ApiProperty() + date!: Date; + + @ApiProperty({ example: -50.0 }) + amountSigned!: number; + + @ApiProperty({ enum: ParentTransactionType }) + type!: ParentTransactionType; + + @ApiProperty({ description: 'Counterparty display name (child for transfer, source label for top-up)' }) + counterpartyName!: string; + + @ApiProperty({ nullable: true }) + counterpartyAccountMasked!: string | null; + + @ApiProperty({ required: false }) + childName?: string; +} + + diff --git a/src/card/enums/index.ts b/src/card/enums/index.ts index 16b52c2..9b25ef5 100644 --- a/src/card/enums/index.ts +++ b/src/card/enums/index.ts @@ -6,3 +6,4 @@ export * from './card-status.enum'; export * from './customer-type.enum'; export * from './transaction-scope.enum'; export * from './transaction-type.enum'; +export * from './parent-transaction-type.enum'; diff --git a/src/card/enums/parent-transaction-type.enum.ts b/src/card/enums/parent-transaction-type.enum.ts new file mode 100644 index 0000000..bed0941 --- /dev/null +++ b/src/card/enums/parent-transaction-type.enum.ts @@ -0,0 +1,6 @@ +export enum ParentTransactionType { + PARENT_TRANSFER = 'PARENT_TRANSFER', + PARENT_TOPUP = 'PARENT_TOPUP', +} + + diff --git a/src/card/repositories/index.ts b/src/card/repositories/index.ts index 8458740..a005850 100644 --- a/src/card/repositories/index.ts +++ b/src/card/repositories/index.ts @@ -1 +1,3 @@ export * from './card.repository'; +export * from './transaction.repository'; +export * from './account.repository'; diff --git a/src/card/repositories/transaction.repository.ts b/src/card/repositories/transaction.repository.ts index b8e84b8..58ad8c5 100644 --- a/src/card/repositories/transaction.repository.ts +++ b/src/card/repositories/transaction.repository.ts @@ -96,4 +96,52 @@ export class TransactionRepository { .orderBy('transaction.transactionDate', 'DESC') .getMany(); } + + findParentTransfers(guardianCustomerId: string, skip: number, take: number): Promise { + return this.transactionRepository + .createQueryBuilder('tx') + .innerJoinAndSelect('tx.card', 'card') + .innerJoinAndSelect('card.customer', 'childCustomer') + .innerJoinAndSelect('card.account', 'account') + .where('card.parentId = :guardianCustomerId', { guardianCustomerId }) + .andWhere('tx.transactionScope = :scope', { scope: TransactionScope.CARD }) + .andWhere('tx.transactionType = :type', { type: TransactionType.INTERNAL }) + .orderBy('tx.transactionDate', 'DESC') + .skip(skip) + .take(take) + .getMany(); + } + + findParentTopups(guardianCustomerId: string, skip: number, take: number): Promise { + return this.transactionRepository + .createQueryBuilder('tx') + .innerJoinAndSelect('tx.account', 'account') + .leftJoinAndSelect('account.cards', 'parentCards') + .where('tx.transactionScope = :scope', { scope: TransactionScope.ACCOUNT }) + .andWhere('parentCards.customerId = :guardianCustomerId', { guardianCustomerId }) + .orderBy('tx.transactionDate', 'DESC') + .skip(skip) + .take(take) + .getMany(); + } + + countParentTransfers(guardianCustomerId: string): Promise { + return this.transactionRepository + .createQueryBuilder('tx') + .innerJoin('tx.card', 'card') + .where('card.parentId = :guardianCustomerId', { guardianCustomerId }) + .andWhere('tx.transactionScope = :scope', { scope: TransactionScope.CARD }) + .andWhere('tx.transactionType = :type', { type: TransactionType.INTERNAL }) + .getCount(); + } + + countParentTopups(guardianCustomerId: string): Promise { + return this.transactionRepository + .createQueryBuilder('tx') + .innerJoin('tx.account', 'account') + .leftJoin('account.cards', 'parentCards') + .where('tx.transactionScope = :scope', { scope: TransactionScope.ACCOUNT }) + .andWhere('parentCards.customerId = :guardianCustomerId', { guardianCustomerId }) + .getCount(); + } } diff --git a/src/card/services/index.ts b/src/card/services/index.ts index ea35f0f..c03697d 100644 --- a/src/card/services/index.ts +++ b/src/card/services/index.ts @@ -1 +1,3 @@ export * from './card.service'; +export * from './transaction.service'; +export * from './account.service'; diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index 96237dd..50faf9b 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -7,10 +7,12 @@ import { CardTransactionWebhookRequest, } from '~/common/modules/neoleap/dtos/requests'; import { Transaction } from '../entities/transaction.entity'; -import { CustomerType } from '../enums'; +import { CustomerType, TransactionType } from '../enums'; import { TransactionRepository } from '../repositories/transaction.repository'; import { AccountService } from './account.service'; import { CardService } from './card.service'; +import { TransactionItemResponseDto, PagedTransactionsResponseDto } from '../dtos/responses'; +import { ParentTransactionType } from '../enums'; @Injectable() export class TransactionService { @@ -113,4 +115,96 @@ export class TransactionService { return summary; } + + async getParentConsolidated( + guardianCustomerId: string, + page: number, + size: number, + ): Promise { + const skip = (page - 1) * size; + + const [transfers, topups] = await Promise.all([ + this.transactionRepository.findParentTransfers(guardianCustomerId, skip, size), + this.transactionRepository.findParentTopups(guardianCustomerId, skip, size), + ]); + + const merged = [...transfers, ...topups].sort( + (a, b) => new Date(b.transactionDate).getTime() - new Date(a.transactionDate).getTime(), + ); + + const trimmed = merged.slice(0, size); + + return trimmed.map((t) => this.mapParentItem(t)); + } + + async getParentTransactionsPaginated( + guardianCustomerId: string, + page: number, + size: number, + type?: ParentTransactionType, + ): Promise { + const skip = (page - 1) * size; + + let transfers: Transaction[] = []; + let topups: Transaction[] = []; + let transferCount = 0; + let topupCount = 0; + + if (!type || type === ParentTransactionType.PARENT_TRANSFER) { + [transfers, transferCount] = await Promise.all([ + this.transactionRepository.findParentTransfers(guardianCustomerId, skip, size), + this.transactionRepository.countParentTransfers(guardianCustomerId), + ]); + } + + if (!type || type === ParentTransactionType.PARENT_TOPUP) { + [topups, topupCount] = await Promise.all([ + this.transactionRepository.findParentTopups(guardianCustomerId, skip, size), + this.transactionRepository.countParentTopups(guardianCustomerId), + ]); + } + + const total = transferCount + topupCount; + + if (type) { + const items = type === ParentTransactionType.PARENT_TRANSFER ? transfers : topups; + const mapped = items.map((t) => this.mapParentItem(t)); + return new PagedTransactionsResponseDto(mapped, page, size, total); + } + + const merged = [...transfers, ...topups].sort( + (a, b) => new Date(b.transactionDate).getTime() - new Date(a.transactionDate).getTime(), + ); + + const paginated = merged.slice(0, size); + const mapped = paginated.map((t) => this.mapParentItem(t)); + + return new PagedTransactionsResponseDto(mapped, page, size, total); + } + + private mapParentItem(t: Transaction): TransactionItemResponseDto { + const dto = new TransactionItemResponseDto(); + dto.date = t.transactionDate; + + if (t.transactionType === TransactionType.INTERNAL) { + dto.type = ParentTransactionType.PARENT_TRANSFER; + dto.amountSigned = -Math.abs(t.transactionAmount); + const child = t.card?.customer; + dto.counterpartyName = child ? `${child.firstName} ${child.lastName}` : 'Child'; + dto.childName = dto.counterpartyName; + dto.counterpartyAccountMasked = t.card?.account?.accountReference + ? `****${t.card.account.accountReference.slice(-4)}` + : null; + return dto; + } + + dto.type = ParentTransactionType.PARENT_TOPUP; + const settlement = Number(t.settlementAmount ?? 0); + const txn = Number(t.transactionAmount ?? 0); + const creditAmount = settlement > 0 ? settlement : txn; + dto.amountSigned = Math.abs(Number.isFinite(creditAmount) ? creditAmount : 0); + dto.counterpartyName = 'Top-up'; + dto.counterpartyAccountMasked = t.accountReference ? `****${t.accountReference.slice(-4)}` : null; + return dto; + } } diff --git a/src/common/modules/neoleap/dtos/requests/account-transaction-webhook.request.dto.ts b/src/common/modules/neoleap/dtos/requests/account-transaction-webhook.request.dto.ts index 06e1437..275a53a 100644 --- a/src/common/modules/neoleap/dtos/requests/account-transaction-webhook.request.dto.ts +++ b/src/common/modules/neoleap/dtos/requests/account-transaction-webhook.request.dto.ts @@ -56,12 +56,12 @@ export class AccountTransactionWebhookRequest { @ApiProperty({ example: '682' }) currency!: string; - @Expose() + @Expose({ name: 'Date' }) @IsString() @ApiProperty({ name: 'Date', example: '20241112' }) date!: string; - @Expose() + @Expose({ name: 'Time' }) @IsString() @ApiProperty({ name: 'Time', example: '125340' }) time!: string; diff --git a/src/guardian/controllers/guardian-transactions.controller.ts b/src/guardian/controllers/guardian-transactions.controller.ts new file mode 100644 index 0000000..0e76290 --- /dev/null +++ b/src/guardian/controllers/guardian-transactions.controller.ts @@ -0,0 +1,53 @@ +import { Controller, Get, Query, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth, ApiTags, ApiQuery } from '@nestjs/swagger'; +import { Roles } from '~/auth/enums'; +import { IJwtPayload } from '~/auth/interfaces'; +import { AllowedRoles, AuthenticatedUser } from '~/common/decorators'; +import { AccessTokenGuard, RolesGuard } from '~/common/guards'; +import { ApiDataResponse, ApiLangRequestHeader } from '~/core/decorators'; +import { ResponseFactory } from '~/core/utils'; +import { GuardianHomeResponseDto, PagedTransactionsResponseDto } from '~/card/dtos/responses'; +import { ParentTransactionType } from '~/card/enums'; +import { GuardianTransactionsService } from '../services'; + + +@Controller('guardians/me') +@ApiTags('Guardians') +@ApiBearerAuth() +@ApiLangRequestHeader() +@UseGuards(AccessTokenGuard, RolesGuard) +@AllowedRoles(Roles.GUARDIAN) +export class GuardianTransactionsController { + constructor(private readonly guardianTxService: GuardianTransactionsService) {} + + @Get('home') + @ApiQuery({ name: 'size', required: false, type: Number, example: 5 }) + @ApiDataResponse(GuardianHomeResponseDto) + async getHome( + @AuthenticatedUser() user: IJwtPayload, + @Query('size') size?: number, + ) { + const limit = Math.max(1, Math.min(Number(size) || 5, 20)); + const res = await this.guardianTxService.getHome(user.sub, limit); + return ResponseFactory.data(res); + } + + @Get('transactions') + @ApiQuery({ name: 'page', required: false, type: Number, example: 1 }) + @ApiQuery({ name: 'size', required: false, type: Number, example: 10 }) + @ApiQuery({ name: 'type', required: false, enum: ParentTransactionType }) + @ApiDataResponse(PagedTransactionsResponseDto) + async getTransactions( + @AuthenticatedUser() user: IJwtPayload, + @Query('page') page?: number, + @Query('size') size?: number, + @Query('type') type?: ParentTransactionType, + ) { + const pageNum = Math.max(1, Number(page) || 1); + const pageSize = Math.max(1, Math.min(Number(size) || 10, 50)); + const res = await this.guardianTxService.getTransactions(user.sub, pageNum, pageSize, type); + return ResponseFactory.data(res); + } +} + + diff --git a/src/guardian/controllers/index.ts b/src/guardian/controllers/index.ts new file mode 100644 index 0000000..7f4401b --- /dev/null +++ b/src/guardian/controllers/index.ts @@ -0,0 +1,3 @@ +export * from './guardian-transactions.controller'; + + diff --git a/src/guardian/guardian.module.ts b/src/guardian/guardian.module.ts index c80c5c1..671de6d 100644 --- a/src/guardian/guardian.module.ts +++ b/src/guardian/guardian.module.ts @@ -1,12 +1,18 @@ import { Module } from '@nestjs/common'; +import { forwardRef } from '@nestjs/common'; +import { CustomerModule } from '~/customer/customer.module'; +import { CardModule } from '~/card/card.module'; +import { GuardianTransactionsController } from './controllers/guardian-transactions.controller'; +import { GuardianTransactionsService } from './services/guardian-transactions.service'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Guardian } from './entities/guradian.entity'; import { GuardianRepository } from './repositories'; import { GuardianService } from './services'; @Module({ - providers: [GuardianService, GuardianRepository], - imports: [TypeOrmModule.forFeature([Guardian])], + providers: [GuardianService, GuardianRepository, GuardianTransactionsService], + controllers: [GuardianTransactionsController], + imports: [TypeOrmModule.forFeature([Guardian]), forwardRef(() => CustomerModule), forwardRef(() => CardModule)], exports: [GuardianService], }) export class GuardianModule {} diff --git a/src/guardian/services/guardian-transactions.service.ts b/src/guardian/services/guardian-transactions.service.ts new file mode 100644 index 0000000..a31b7c2 --- /dev/null +++ b/src/guardian/services/guardian-transactions.service.ts @@ -0,0 +1,45 @@ +import { Injectable } from '@nestjs/common'; +import { CustomerService } from '~/customer/services'; +import { GuardianHomeResponseDto, PagedTransactionsResponseDto } from '~/card/dtos/responses'; +import { TransactionItemResponseDto } from '~/card/dtos/responses'; +import { ParentTransactionType } from '~/card/enums'; +import { TransactionService } from '~/card/services/transaction.service'; + +@Injectable() +export class GuardianTransactionsService { + constructor( + private readonly customerService: CustomerService, + private readonly transactionService: TransactionService, + ) {} + + async getHome(guardianId: string, size: number): Promise { + const parent = await this.customerService.findCustomerById(guardianId); + const primaryCard = parent.cards?.[0]; + + let availableBalance = 0; + if (primaryCard) { + const hasLimit = typeof primaryCard.limit === 'number' && !Number.isNaN(primaryCard.limit); + const hasBalance = primaryCard.account && typeof primaryCard.account.balance === 'number'; + if (hasLimit && hasBalance && primaryCard.limit > 0) { + availableBalance = Math.min(primaryCard.limit, primaryCard.account.balance); + } else if (hasBalance) { + availableBalance = primaryCard.account.balance; + } + } + + const items: TransactionItemResponseDto[] = await this.transactionService.getParentConsolidated(guardianId, 1, size); + + return new GuardianHomeResponseDto(availableBalance, items); + } + + async getTransactions( + guardianId: string, + page: number, + size: number, + type?: ParentTransactionType, + ): Promise { + return this.transactionService.getParentTransactionsPaginated(guardianId, page, size, type); + } +} + + diff --git a/src/guardian/services/index.ts b/src/guardian/services/index.ts index 5cdfe9f..69996e8 100644 --- a/src/guardian/services/index.ts +++ b/src/guardian/services/index.ts @@ -1 +1,2 @@ -export * from './guardian.service'; +export * from './guardian.service' +export * from './guardian-transactions.service' From 15621124ad739b3b2938653d184721033f4f4dd7 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Thu, 16 Oct 2025 12:25:16 +0300 Subject: [PATCH 28/45] =?UTF-8?q?ZOD-309-child-transaction-history-parent-?= =?UTF-8?q?=E2=86=92-child-transfers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../child-transfer-item.response.dto.ts | 16 +++++ src/card/dtos/responses/index.ts | 6 ++ .../responses/junior-home.response.dto.ts | 16 +++++ .../paged-child-transfers.response.dto.ts | 33 +++++++++ .../paged-parent-transfers.response.dto.ts | 33 +++++++++ .../responses/parent-home.response.dto.ts | 16 +++++ .../parent-transfer-item.response.dto.ts | 16 +++++ .../repositories/transaction.repository.ts | 24 +++++++ src/card/services/transaction.service.ts | 71 ++++++++++++++++++- .../guardian-transactions.controller.ts | 15 ++-- .../services/guardian-transactions.service.ts | 17 ++--- src/junior/controllers/junior.controller.ts | 36 +++++++++- src/junior/services/junior.service.ts | 54 +++++++++++++- 13 files changed, 331 insertions(+), 22 deletions(-) create mode 100644 src/card/dtos/responses/child-transfer-item.response.dto.ts create mode 100644 src/card/dtos/responses/junior-home.response.dto.ts create mode 100644 src/card/dtos/responses/paged-child-transfers.response.dto.ts create mode 100644 src/card/dtos/responses/paged-parent-transfers.response.dto.ts create mode 100644 src/card/dtos/responses/parent-home.response.dto.ts create mode 100644 src/card/dtos/responses/parent-transfer-item.response.dto.ts diff --git a/src/card/dtos/responses/child-transfer-item.response.dto.ts b/src/card/dtos/responses/child-transfer-item.response.dto.ts new file mode 100644 index 0000000..f0889d0 --- /dev/null +++ b/src/card/dtos/responses/child-transfer-item.response.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class ChildTransferItemDto { + @ApiProperty({ example: '2025-10-14T09:53:40.000Z' }) + date!: Date; + + @ApiProperty({ example: 50.0 }) + amount!: number; + + @ApiProperty({ example: 'SAR' }) + currency!: string; + + @ApiProperty({ example: 'You received {{amount}} {{currency}} from your parent.' }) + message!: string; +} + diff --git a/src/card/dtos/responses/index.ts b/src/card/dtos/responses/index.ts index fcea24f..cbbb700 100644 --- a/src/card/dtos/responses/index.ts +++ b/src/card/dtos/responses/index.ts @@ -4,3 +4,9 @@ export * from './child-card.response.dto'; export * from './transaction-item.response.dto'; export * from './guardian-home.response.dto'; export * from './paged-transactions.response.dto'; +export * from './parent-transfer-item.response.dto'; +export * from './parent-home.response.dto'; +export * from './paged-parent-transfers.response.dto'; +export * from './child-transfer-item.response.dto'; +export * from './junior-home.response.dto'; +export * from './paged-child-transfers.response.dto'; diff --git a/src/card/dtos/responses/junior-home.response.dto.ts b/src/card/dtos/responses/junior-home.response.dto.ts new file mode 100644 index 0000000..feaf195 --- /dev/null +++ b/src/card/dtos/responses/junior-home.response.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { ChildTransferItemDto } from './child-transfer-item.response.dto'; + +export class JuniorHomeResponseDto { + @ApiProperty({ example: 500.0 }) + availableBalance!: number; + + @ApiProperty({ type: [ChildTransferItemDto] }) + recentTransfers!: ChildTransferItemDto[]; + + constructor(availableBalance: number, recentTransfers: ChildTransferItemDto[]) { + this.availableBalance = availableBalance; + this.recentTransfers = recentTransfers; + } +} + diff --git a/src/card/dtos/responses/paged-child-transfers.response.dto.ts b/src/card/dtos/responses/paged-child-transfers.response.dto.ts new file mode 100644 index 0000000..6a25f86 --- /dev/null +++ b/src/card/dtos/responses/paged-child-transfers.response.dto.ts @@ -0,0 +1,33 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { ChildTransferItemDto } from './child-transfer-item.response.dto'; + +export class PagedChildTransfersResponseDto { + @ApiProperty({ type: [ChildTransferItemDto] }) + items!: ChildTransferItemDto[]; + + @ApiProperty({ example: 1 }) + page!: number; + + @ApiProperty({ example: 10 }) + size!: number; + + @ApiProperty({ example: 20 }) + total!: number; + + @ApiProperty({ example: true }) + hasMore!: boolean; + + constructor( + items: ChildTransferItemDto[], + page: number, + size: number, + total: number, + ) { + this.items = items; + this.page = page; + this.size = size; + this.total = total; + this.hasMore = page * size < total; + } +} + diff --git a/src/card/dtos/responses/paged-parent-transfers.response.dto.ts b/src/card/dtos/responses/paged-parent-transfers.response.dto.ts new file mode 100644 index 0000000..bd1ec6f --- /dev/null +++ b/src/card/dtos/responses/paged-parent-transfers.response.dto.ts @@ -0,0 +1,33 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { ParentTransferItemDto } from './parent-transfer-item.response.dto'; + +export class PagedParentTransfersResponseDto { + @ApiProperty({ type: [ParentTransferItemDto] }) + items!: ParentTransferItemDto[]; + + @ApiProperty({ example: 1 }) + page!: number; + + @ApiProperty({ example: 10 }) + size!: number; + + @ApiProperty({ example: 45 }) + total!: number; + + @ApiProperty({ example: true }) + hasMore!: boolean; + + constructor( + items: ParentTransferItemDto[], + page: number, + size: number, + total: number, + ) { + this.items = items; + this.page = page; + this.size = size; + this.total = total; + this.hasMore = page * size < total; + } +} + diff --git a/src/card/dtos/responses/parent-home.response.dto.ts b/src/card/dtos/responses/parent-home.response.dto.ts new file mode 100644 index 0000000..682b53d --- /dev/null +++ b/src/card/dtos/responses/parent-home.response.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { ParentTransferItemDto } from './parent-transfer-item.response.dto'; + +export class ParentHomeResponseDto { + @ApiProperty({ example: 2000.0 }) + availableBalance!: number; + + @ApiProperty({ type: [ParentTransferItemDto] }) + recentTransfers!: ParentTransferItemDto[]; + + constructor(availableBalance: number, recentTransfers: ParentTransferItemDto[]) { + this.availableBalance = availableBalance; + this.recentTransfers = recentTransfers; + } +} + diff --git a/src/card/dtos/responses/parent-transfer-item.response.dto.ts b/src/card/dtos/responses/parent-transfer-item.response.dto.ts new file mode 100644 index 0000000..e39c455 --- /dev/null +++ b/src/card/dtos/responses/parent-transfer-item.response.dto.ts @@ -0,0 +1,16 @@ +import { ApiProperty } from '@nestjs/swagger'; + +export class ParentTransferItemDto { + @ApiProperty({ example: '2025-10-14T09:53:40.000Z' }) + date!: Date; + + @ApiProperty({ example: 50.0 }) + amount!: number; + + @ApiProperty({ example: 'SAR' }) + currency!: string; + + @ApiProperty({ example: 'Ahmed Ali' }) + childName!: string; +} + diff --git a/src/card/repositories/transaction.repository.ts b/src/card/repositories/transaction.repository.ts index 58ad8c5..118598d 100644 --- a/src/card/repositories/transaction.repository.ts +++ b/src/card/repositories/transaction.repository.ts @@ -144,4 +144,28 @@ export class TransactionRepository { .andWhere('parentCards.customerId = :guardianCustomerId', { guardianCustomerId }) .getCount(); } + + findTransfersToJunior(juniorId: string, skip: number, take: number): Promise { + return this.transactionRepository + .createQueryBuilder('tx') + .innerJoinAndSelect('tx.card', 'card') + .innerJoinAndSelect('card.account', 'account') + .where('card.customerId = :juniorId', { juniorId }) + .andWhere('tx.transactionScope = :scope', { scope: TransactionScope.CARD }) + .andWhere('tx.transactionType = :type', { type: TransactionType.INTERNAL }) + .orderBy('tx.transactionDate', 'DESC') + .skip(skip) + .take(take) + .getMany(); + } + + countTransfersToJunior(juniorId: string): Promise { + return this.transactionRepository + .createQueryBuilder('tx') + .innerJoin('tx.card', 'card') + .where('card.customerId = :juniorId', { juniorId }) + .andWhere('tx.transactionScope = :scope', { scope: TransactionScope.CARD }) + .andWhere('tx.transactionType = :type', { type: TransactionType.INTERNAL }) + .getCount(); + } } diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index 50faf9b..a215c09 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -11,7 +11,14 @@ import { CustomerType, TransactionType } from '../enums'; import { TransactionRepository } from '../repositories/transaction.repository'; import { AccountService } from './account.service'; import { CardService } from './card.service'; -import { TransactionItemResponseDto, PagedTransactionsResponseDto } from '../dtos/responses'; +import { + TransactionItemResponseDto, + PagedTransactionsResponseDto, + ParentTransferItemDto, + PagedParentTransfersResponseDto, + ChildTransferItemDto, + PagedChildTransfersResponseDto, +} from '../dtos/responses'; import { ParentTransactionType } from '../enums'; @Injectable() @@ -182,6 +189,68 @@ export class TransactionService { return new PagedTransactionsResponseDto(mapped, page, size, total); } + async getParentTransfersOnly(guardianCustomerId: string, page: number, size: number): Promise { + const skip = (page - 1) * size; + const transfers = await this.transactionRepository.findParentTransfers(guardianCustomerId, skip, size); + return transfers.map((t) => this.mapToParentTransferItem(t)); + } + + async getParentTransfersPaginated( + guardianCustomerId: string, + page: number, + size: number, + ): Promise { + const skip = (page - 1) * size; + const [transfers, total] = await Promise.all([ + this.transactionRepository.findParentTransfers(guardianCustomerId, skip, size), + this.transactionRepository.countParentTransfers(guardianCustomerId), + ]); + const items = transfers.map((t) => this.mapToParentTransferItem(t)); + return new PagedParentTransfersResponseDto(items, page, size, total); + } + + async getChildTransfers(juniorId: string, page: number, size: number): Promise { + const skip = (page - 1) * size; + const transfers = await this.transactionRepository.findTransfersToJunior(juniorId, skip, size); + return transfers.map((t) => this.mapToChildTransferItem(t)); + } + + async getChildTransfersPaginated( + juniorId: string, + page: number, + size: number, + ): Promise { + const skip = (page - 1) * size; + const [transfers, total] = await Promise.all([ + this.transactionRepository.findTransfersToJunior(juniorId, skip, size), + this.transactionRepository.countTransfersToJunior(juniorId), + ]); + const items = transfers.map((t) => this.mapToChildTransferItem(t)); + return new PagedChildTransfersResponseDto(items, page, size, total); + } + + private mapToParentTransferItem(t: Transaction): ParentTransferItemDto { + const child = t.card?.customer; + const currency = t.transactionCurrency === '682' ? 'SAR' : t.transactionCurrency; + return { + date: t.transactionDate, + amount: Math.abs(t.transactionAmount), + currency, + childName: child ? `${child.firstName} ${child.lastName}` : 'Child', + }; + } + + private mapToChildTransferItem(t: Transaction): ChildTransferItemDto { + const amount = Math.abs(t.transactionAmount); + const currency = t.transactionCurrency === '682' ? 'SAR' : t.transactionCurrency; + return { + date: t.transactionDate, + amount, + currency, + message: `You received {{amount}} {{currency}} from your parent.`, + }; + } + private mapParentItem(t: Transaction): TransactionItemResponseDto { const dto = new TransactionItemResponseDto(); dto.date = t.transactionDate; diff --git a/src/guardian/controllers/guardian-transactions.controller.ts b/src/guardian/controllers/guardian-transactions.controller.ts index 0e76290..d0d5dfb 100644 --- a/src/guardian/controllers/guardian-transactions.controller.ts +++ b/src/guardian/controllers/guardian-transactions.controller.ts @@ -6,8 +6,7 @@ import { AllowedRoles, AuthenticatedUser } from '~/common/decorators'; import { AccessTokenGuard, RolesGuard } from '~/common/guards'; import { ApiDataResponse, ApiLangRequestHeader } from '~/core/decorators'; import { ResponseFactory } from '~/core/utils'; -import { GuardianHomeResponseDto, PagedTransactionsResponseDto } from '~/card/dtos/responses'; -import { ParentTransactionType } from '~/card/enums'; +import { ParentHomeResponseDto, PagedParentTransfersResponseDto } from '~/card/dtos/responses'; import { GuardianTransactionsService } from '../services'; @@ -22,7 +21,7 @@ export class GuardianTransactionsController { @Get('home') @ApiQuery({ name: 'size', required: false, type: Number, example: 5 }) - @ApiDataResponse(GuardianHomeResponseDto) + @ApiDataResponse(ParentHomeResponseDto) async getHome( @AuthenticatedUser() user: IJwtPayload, @Query('size') size?: number, @@ -32,20 +31,18 @@ export class GuardianTransactionsController { return ResponseFactory.data(res); } - @Get('transactions') + @Get('transfers') @ApiQuery({ name: 'page', required: false, type: Number, example: 1 }) @ApiQuery({ name: 'size', required: false, type: Number, example: 10 }) - @ApiQuery({ name: 'type', required: false, enum: ParentTransactionType }) - @ApiDataResponse(PagedTransactionsResponseDto) - async getTransactions( + @ApiDataResponse(PagedParentTransfersResponseDto) + async getTransfers( @AuthenticatedUser() user: IJwtPayload, @Query('page') page?: number, @Query('size') size?: number, - @Query('type') type?: ParentTransactionType, ) { const pageNum = Math.max(1, Number(page) || 1); const pageSize = Math.max(1, Math.min(Number(size) || 10, 50)); - const res = await this.guardianTxService.getTransactions(user.sub, pageNum, pageSize, type); + const res = await this.guardianTxService.getTransfers(user.sub, pageNum, pageSize); return ResponseFactory.data(res); } } diff --git a/src/guardian/services/guardian-transactions.service.ts b/src/guardian/services/guardian-transactions.service.ts index a31b7c2..1a5dea5 100644 --- a/src/guardian/services/guardian-transactions.service.ts +++ b/src/guardian/services/guardian-transactions.service.ts @@ -1,8 +1,6 @@ import { Injectable } from '@nestjs/common'; import { CustomerService } from '~/customer/services'; -import { GuardianHomeResponseDto, PagedTransactionsResponseDto } from '~/card/dtos/responses'; -import { TransactionItemResponseDto } from '~/card/dtos/responses'; -import { ParentTransactionType } from '~/card/enums'; +import { ParentHomeResponseDto, PagedParentTransfersResponseDto } from '~/card/dtos/responses'; import { TransactionService } from '~/card/services/transaction.service'; @Injectable() @@ -12,7 +10,7 @@ export class GuardianTransactionsService { private readonly transactionService: TransactionService, ) {} - async getHome(guardianId: string, size: number): Promise { + async getHome(guardianId: string, size: number): Promise { const parent = await this.customerService.findCustomerById(guardianId); const primaryCard = parent.cards?.[0]; @@ -27,18 +25,17 @@ export class GuardianTransactionsService { } } - const items: TransactionItemResponseDto[] = await this.transactionService.getParentConsolidated(guardianId, 1, size); + const recentTransfers = await this.transactionService.getParentTransfersOnly(guardianId, 1, size); - return new GuardianHomeResponseDto(availableBalance, items); + return new ParentHomeResponseDto(availableBalance, recentTransfers); } - async getTransactions( + async getTransfers( guardianId: string, page: number, size: number, - type?: ParentTransactionType, - ): Promise { - return this.transactionService.getParentTransactionsPaginated(guardianId, page, size, type); + ): Promise { + return this.transactionService.getParentTransfersPaginated(guardianId, page, size); } } diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index d3a472a..f02c769 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -11,7 +11,7 @@ import { Query, UseGuards, } from '@nestjs/common'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiTags, ApiQuery } from '@nestjs/swagger'; import { Roles } from '~/auth/enums'; import { IJwtPayload } from '~/auth/interfaces'; import { AllowedRoles, AuthenticatedUser, Public } from '~/common/decorators'; @@ -33,6 +33,7 @@ import { TransferToJuniorResponseDto, } from '../dtos/response'; import { WeeklySummaryResponseDto } from '../dtos/response/weekly-summary.response.dto'; +import { JuniorHomeResponseDto, PagedChildTransfersResponseDto } from '~/card/dtos/responses'; import { JuniorService } from '../services'; @Controller('juniors') @@ -157,4 +158,37 @@ export class JuniorController { const summary = await this.juniorService.getWeeklySummary(juniorId, user.sub); return ResponseFactory.data(summary); } + + @Get(':juniorId/home') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN) + @ApiQuery({ name: 'size', required: false, type: Number, example: 5 }) + @ApiDataResponse(JuniorHomeResponseDto) + async getJuniorHome( + @Param('juniorId', CustomParseUUIDPipe) juniorId: string, + @AuthenticatedUser() user: IJwtPayload, + @Query('size') size?: number, + ) { + const limit = Math.max(1, Math.min(Number(size) || 5, 20)); + const res = await this.juniorService.getJuniorHome(juniorId, user.sub, limit); + return ResponseFactory.data(res); + } + + @Get(':juniorId/transfers') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN) + @ApiQuery({ name: 'page', required: false, type: Number, example: 1 }) + @ApiQuery({ name: 'size', required: false, type: Number, example: 10 }) + @ApiDataResponse(PagedChildTransfersResponseDto) + async getJuniorTransfers( + @Param('juniorId', CustomParseUUIDPipe) juniorId: string, + @AuthenticatedUser() user: IJwtPayload, + @Query('page') page?: number, + @Query('size') size?: number, + ) { + const pageNum = Math.max(1, Number(page) || 1); + const pageSize = Math.max(1, Math.min(Number(size) || 10, 50)); + const res = await this.juniorService.getJuniorTransfers(juniorId, user.sub, pageNum, pageSize); + return ResponseFactory.data(res); + } } diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index d2e9961..203ce1f 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -2,7 +2,7 @@ import { BadRequestException, Injectable, Logger } from '@nestjs/common'; import { IsNull, Not } from 'typeorm'; import { Transactional } from 'typeorm-transactional'; import { Roles } from '~/auth/enums'; -import { CardService } from '~/card/services'; +import { CardService, TransactionService } from '~/card/services'; import { NeoLeapService } from '~/common/modules/neoleap/services'; import { PageOptionsRequestDto } from '~/core/dtos'; import { setIf } from '~/core/utils'; @@ -20,6 +20,7 @@ import { import { Junior } from '../entities'; import { JuniorRepository } from '../repositories'; import { QrcodeService } from './qrcode.service'; +import { JuniorHomeResponseDto, PagedChildTransfersResponseDto } from '~/card/dtos/responses'; @Injectable() export class JuniorService { @@ -34,6 +35,7 @@ export class JuniorService { private readonly qrCodeService: QrcodeService, private readonly neoleapService: NeoLeapService, private readonly cardService: CardService, + private readonly transactionService: TransactionService, ) {} @Transactional() @@ -221,6 +223,56 @@ export class JuniorService { return this.cardService.getWeeklySummary(juniorId); } + async getJuniorHome(juniorId: string, userId: string, size: number): Promise { + this.logger.log(`Getting home for junior ${juniorId}`); + + // Check if user is the junior themselves or their guardian + let junior: Junior | null; + if (juniorId === userId) { + // User is the junior accessing their own home + junior = await this.findJuniorById(juniorId, false); + } else { + // User might be the guardian accessing junior's home + junior = await this.findJuniorById(juniorId, false, userId); + } + + if (!junior) { + throw new BadRequestException('JUNIOR.NOT_FOUND'); + } + + const card = junior.customer?.cards?.[0]; + const availableBalance = card ? Math.min(card.limit, card.account.balance) : 0; + + const recentTransfers = await this.transactionService.getChildTransfers(juniorId, 1, size); + + return new JuniorHomeResponseDto(availableBalance, recentTransfers); + } + + async getJuniorTransfers( + juniorId: string, + userId: string, + page: number, + size: number, + ): Promise { + this.logger.log(`Getting transfers for junior ${juniorId}`); + + // Check if user is the junior themselves or their guardian + let junior: Junior | null; + if (juniorId === userId) { + // User is the junior accessing their own transfers + junior = await this.findJuniorById(juniorId, false); + } else { + // User might be the guardian accessing junior's transfers + junior = await this.findJuniorById(juniorId, false, userId); + } + + if (!junior) { + throw new BadRequestException('JUNIOR.NOT_FOUND'); + } + + return this.transactionService.getChildTransfersPaginated(juniorId, page, size); + } + private async prepareJuniorImages(juniors: Junior[]) { this.logger.log(`Preparing junior images`); await Promise.all( From 297a2fe5ad2df052583a42cb3bcd4c5151e092ca Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 19 Oct 2025 09:57:35 +0300 Subject: [PATCH 29/45] ZOD-333-junior-incorrect-relationship-label-displayed-as-child-instead-of-daughter-or-son-in-child-confirmation-details-after-the-scan-the-qr-code --- .../qr-code-validation-details.response.dto.ts | 16 ++++++++++++++-- .../enums/child-relationship-label.enum.ts | 5 +++++ src/junior/enums/index.ts | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/junior/enums/child-relationship-label.enum.ts diff --git a/src/junior/dtos/response/qr-code-validation-details.response.dto.ts b/src/junior/dtos/response/qr-code-validation-details.response.dto.ts index a3d0f3b..d1b093c 100644 --- a/src/junior/dtos/response/qr-code-validation-details.response.dto.ts +++ b/src/junior/dtos/response/qr-code-validation-details.response.dto.ts @@ -1,7 +1,8 @@ import { ApiProperty } from '@nestjs/swagger'; +import { Gender } from '~/customer/enums'; import { Guardian } from '~/guardian/entities/guradian.entity'; import { Junior } from '~/junior/entities'; -import { GuardianRelationship } from '~/junior/enums'; +import { ChildRelationshipLabel, GuardianRelationship, Relationship } from '~/junior/enums'; export class QrCodeValidationDetailsResponse { @ApiProperty() @@ -26,6 +27,17 @@ export class QrCodeValidationDetailsResponse { this.phoneNumber = person.customer.user.phoneNumber; this.email = person.customer.user.email; this.dateOfBirth = person.customer.dateOfBirth; - this.relationship = guardian ? junior.relationship : GuardianRelationship[junior.relationship]; + + if (guardian) { + this.relationship = junior.relationship; + } else { + if (junior.relationship === Relationship.PARENT) { + this.relationship = junior.customer.gender === Gender.MALE + ? ChildRelationshipLabel.SON + : ChildRelationshipLabel.DAUGHTER; + } else { + this.relationship = GuardianRelationship[junior.relationship]; + } + } } } diff --git a/src/junior/enums/child-relationship-label.enum.ts b/src/junior/enums/child-relationship-label.enum.ts new file mode 100644 index 0000000..61352ee --- /dev/null +++ b/src/junior/enums/child-relationship-label.enum.ts @@ -0,0 +1,5 @@ +export enum ChildRelationshipLabel { + SON = 'SON', + DAUGHTER = 'DAUGHTER', +} + diff --git a/src/junior/enums/index.ts b/src/junior/enums/index.ts index a729152..b7e1495 100644 --- a/src/junior/enums/index.ts +++ b/src/junior/enums/index.ts @@ -1,3 +1,4 @@ +export * from './child-relationship-label.enum'; export * from './guardian-relationship.enum'; export * from './relationship.enum'; export * from './theme-color.enum'; From 7b57277a7fd8433ecac7cce6bc476e0e17eb12e9 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 19 Oct 2025 11:01:52 +0300 Subject: [PATCH 30/45] ZOD-339-child-profile-gender-update-is-not-reflected-after-editing --- src/junior/services/junior.service.ts | 1 + src/user/dtos/request/update-user.request.dto.ts | 15 +++++++++++++-- src/user/services/user.service.ts | 16 +++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 203ce1f..c783e2a 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -120,6 +120,7 @@ export class JuniorService { setIf(customer, 'firstName', body.firstName); setIf(customer, 'lastName', body.lastName); setIf(customer, 'dateOfBirth', body.dateOfBirth as unknown as Date); + setIf(customer, 'gender', body.gender); setIf(junior, 'relationship', body.relationship); await Promise.all([junior.save(), customer.save(), user.save()]); diff --git a/src/user/dtos/request/update-user.request.dto.ts b/src/user/dtos/request/update-user.request.dto.ts index 5024952..a52800a 100644 --- a/src/user/dtos/request/update-user.request.dto.ts +++ b/src/user/dtos/request/update-user.request.dto.ts @@ -1,6 +1,7 @@ -import { ApiProperty } from '@nestjs/swagger'; -import { IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { IsDateString, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; +import { Gender } from '~/customer/enums'; export class UpdateUserRequestDto { @ApiProperty({ example: 'John' }) @IsString({ message: i18n('validation.IsString', { path: 'general', property: 'user.firstName' }) }) @@ -18,4 +19,14 @@ export class UpdateUserRequestDto { @IsUUID('4', { message: i18n('validation.IsUUID', { path: 'general', property: 'user.profilePictureId' }) }) @IsOptional() profilePictureId!: string; + + @ApiPropertyOptional({ enum: Gender }) + @IsEnum(Gender, { message: i18n('validation.IsEnum', { path: 'general', property: 'customer.gender' }) }) + @IsOptional() + gender!: Gender; + + @ApiPropertyOptional({ example: '2020-01-01' }) + @IsDateString({}, { message: i18n('validation.IsDateString', { path: 'general', property: 'customer.dateOfBirth' }) }) + @IsOptional() + dateOfBirth!: Date; } diff --git a/src/user/services/user.service.ts b/src/user/services/user.service.ts index 46b4834..4d1bbc4 100644 --- a/src/user/services/user.service.ts +++ b/src/user/services/user.service.ts @@ -192,11 +192,25 @@ export class UserService { await this.validateProfilePictureId(data.profilePictureId, userId); this.logger.log(`Updating user ${userId} with data ${JSON.stringify(data)}`); - const { affected } = await this.userRepository.update(userId, data); + + const { gender, dateOfBirth, ...userData } = data; + + const { affected } = await this.userRepository.update(userId, userData); if (affected === 0) { this.logger.error(`User with id ${userId} not found`); throw new BadRequestException('USER.NOT_FOUND'); } + + if (gender !== undefined || dateOfBirth !== undefined) { + const customerData: Partial<{ gender: typeof gender; dateOfBirth: Date }> = {}; + if (gender !== undefined) { + customerData.gender = gender; + } + if (dateOfBirth !== undefined) { + customerData.dateOfBirth = dateOfBirth; + } + await this.customerService.updateCustomer(userId, customerData); + } } async updateUserEmail(userId: string, email: string) { From d2e084d3e43780edfd312cd3d130cdd0592b29f0 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 19 Oct 2025 15:26:47 +0300 Subject: [PATCH 31/45] git checkout -b ZOD-204-view-spending-from-child-login --- src/card/dtos/responses/index.ts | 3 + .../spending-history-item.response.dto.ts | 58 +++++++++++++++ .../spending-history.response.dto.ts | 24 ++++++ .../transaction-detail.response.dto.ts | 74 +++++++++++++++++++ src/card/entities/transaction.entity.ts | 9 +++ .../repositories/transaction.repository.ts | 12 +++ src/card/services/transaction.service.ts | 23 ++++++ ...869651296-AddMerchantInfoToTransactions.ts | 18 +++++ src/db/migrations/index.ts | 1 + src/junior/controllers/junior.controller.ts | 27 +++++++ src/junior/services/junior.service.ts | 36 +++++++++ 11 files changed, 285 insertions(+) create mode 100644 src/card/dtos/responses/spending-history-item.response.dto.ts create mode 100644 src/card/dtos/responses/spending-history.response.dto.ts create mode 100644 src/card/dtos/responses/transaction-detail.response.dto.ts create mode 100644 src/db/migrations/1760869651296-AddMerchantInfoToTransactions.ts diff --git a/src/card/dtos/responses/index.ts b/src/card/dtos/responses/index.ts index cbbb700..5aded1d 100644 --- a/src/card/dtos/responses/index.ts +++ b/src/card/dtos/responses/index.ts @@ -10,3 +10,6 @@ export * from './paged-parent-transfers.response.dto'; export * from './child-transfer-item.response.dto'; export * from './junior-home.response.dto'; export * from './paged-child-transfers.response.dto'; +export * from './spending-history-item.response.dto'; +export * from './spending-history.response.dto'; +export * from './transaction-detail.response.dto'; diff --git a/src/card/dtos/responses/spending-history-item.response.dto.ts b/src/card/dtos/responses/spending-history-item.response.dto.ts new file mode 100644 index 0000000..b9312ba --- /dev/null +++ b/src/card/dtos/responses/spending-history-item.response.dto.ts @@ -0,0 +1,58 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Transaction } from '~/card/entities/transaction.entity'; + +export class SpendingHistoryItemDto { + @ApiProperty({ example: '2025-10-14T09:53:40.000Z' }) + date!: Date; + + @ApiProperty({ example: 50.5 }) + amount!: number; + + @ApiProperty({ example: 'SAR' }) + currency!: string; + + @ApiPropertyOptional({ example: 'Shopping' }) + category!: string | null; + + @ApiPropertyOptional({ example: 'Target Store' }) + merchantName!: string | null; + + @ApiPropertyOptional({ example: 'Riyadh' }) + merchantCity!: string | null; + + @ApiProperty({ example: '277012*****3456' }) + cardMasked!: string; + + @ApiProperty() + transactionId!: string; + + constructor(transaction: Transaction) { + this.date = transaction.transactionDate; + this.amount = transaction.transactionAmount; + this.currency = transaction.transactionCurrency === '682' ? 'SAR' : transaction.transactionCurrency; + this.category = this.mapMccToCategory(transaction.merchantCategoryCode); + this.merchantName = transaction.merchantName; + this.merchantCity = transaction.merchantCity; + this.cardMasked = transaction.cardMaskedNumber; + this.transactionId = transaction.id; + } + + private mapMccToCategory(mcc: string | null): string { + if (!mcc) return 'Other'; + + const mccCode = mcc; + + // Map MCC codes to categories + if (mccCode >= '5200' && mccCode <= '5599') return 'Shopping'; + if (mccCode >= '5800' && mccCode <= '5899') return 'Food & Dining'; + if (mccCode >= '3000' && mccCode <= '3999') return 'Travel'; + if (mccCode >= '4000' && mccCode <= '4799') return 'Transportation'; + if (mccCode >= '7200' && mccCode <= '7999') return 'Entertainment'; + if (mccCode >= '5900' && mccCode <= '5999') return 'Services'; + if (mccCode >= '4800' && mccCode <= '4899') return 'Utilities'; + if (mccCode >= '8000' && mccCode <= '8999') return 'Health & Wellness'; + + return 'Other'; + } +} + diff --git a/src/card/dtos/responses/spending-history.response.dto.ts b/src/card/dtos/responses/spending-history.response.dto.ts new file mode 100644 index 0000000..16e6460 --- /dev/null +++ b/src/card/dtos/responses/spending-history.response.dto.ts @@ -0,0 +1,24 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { SpendingHistoryItemDto } from './spending-history-item.response.dto'; + +export class SpendingHistoryResponseDto { + @ApiProperty({ type: [SpendingHistoryItemDto] }) + transactions!: SpendingHistoryItemDto[]; + + @ApiProperty({ example: 150.75 }) + totalSpent!: number; + + @ApiProperty({ example: 'SAR' }) + currency!: string; + + @ApiProperty({ example: 10 }) + count!: number; + + constructor(transactions: SpendingHistoryItemDto[], currency: string = 'SAR') { + this.transactions = transactions; + this.totalSpent = transactions.reduce((sum, tx) => sum + tx.amount, 0); + this.currency = currency; + this.count = transactions.length; + } +} + diff --git a/src/card/dtos/responses/transaction-detail.response.dto.ts b/src/card/dtos/responses/transaction-detail.response.dto.ts new file mode 100644 index 0000000..5ad671e --- /dev/null +++ b/src/card/dtos/responses/transaction-detail.response.dto.ts @@ -0,0 +1,74 @@ +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Transaction } from '~/card/entities/transaction.entity'; + +export class TransactionDetailResponseDto { + @ApiProperty() + id!: string; + + @ApiProperty({ example: '2025-10-14T09:53:40.000Z' }) + date!: Date; + + @ApiProperty({ example: 50.5 }) + amount!: number; + + @ApiProperty({ example: 'SAR' }) + currency!: string; + + @ApiProperty({ example: 2.5 }) + fees!: number; + + @ApiProperty({ example: 0.5 }) + vatOnFees!: number; + + @ApiPropertyOptional({ example: 'Target Store' }) + merchantName!: string | null; + + @ApiPropertyOptional({ example: 'Shopping' }) + category!: string | null; + + @ApiPropertyOptional({ example: 'Riyadh' }) + merchantCity!: string | null; + + @ApiProperty({ example: '277012*****3456' }) + cardMasked!: string; + + @ApiProperty() + rrn!: string; + + @ApiProperty() + transactionId!: string; + + constructor(transaction: Transaction) { + this.id = transaction.id; + this.date = transaction.transactionDate; + this.amount = transaction.transactionAmount; + this.currency = transaction.transactionCurrency === '682' ? 'SAR' : transaction.transactionCurrency; + this.fees = transaction.fees; + this.vatOnFees = transaction.vatOnFees; + this.merchantName = transaction.merchantName; + this.category = this.mapMccToCategory(transaction.merchantCategoryCode); + this.merchantCity = transaction.merchantCity; + this.cardMasked = transaction.cardMaskedNumber; + this.rrn = transaction.rrn; + this.transactionId = transaction.transactionId; + } + + private mapMccToCategory(mcc: string | null): string { + if (!mcc) return 'Other'; + + const mccCode = mcc; + + // Map MCC codes to categories + if (mccCode >= '5200' && mccCode <= '5599') return 'Shopping'; + if (mccCode >= '5800' && mccCode <= '5899') return 'Food & Dining'; + if (mccCode >= '3000' && mccCode <= '3999') return 'Travel'; + if (mccCode >= '4000' && mccCode <= '4799') return 'Transportation'; + if (mccCode >= '7200' && mccCode <= '7999') return 'Entertainment'; + if (mccCode >= '5900' && mccCode <= '5999') return 'Services'; + if (mccCode >= '4800' && mccCode <= '4899') return 'Utilities'; + if (mccCode >= '8000' && mccCode <= '8999') return 'Health & Wellness'; + + return 'Other'; + } +} + diff --git a/src/card/entities/transaction.entity.ts b/src/card/entities/transaction.entity.ts index 9db3c0d..85de477 100644 --- a/src/card/entities/transaction.entity.ts +++ b/src/card/entities/transaction.entity.ts @@ -59,6 +59,15 @@ export class Transaction { @Column({ type: 'decimal', name: 'vat_on_fees', precision: 12, scale: 2, default: 0.0 }) vatOnFees!: number; + @Column({ name: 'merchant_name', type: 'varchar', nullable: true }) + merchantName!: string | null; + + @Column({ name: 'merchant_category_code', type: 'varchar', nullable: true }) + merchantCategoryCode!: string | null; + + @Column({ name: 'merchant_city', type: 'varchar', nullable: true }) + merchantCity!: string | null; + @Column({ name: 'card_id', type: 'uuid', nullable: true }) cardId!: string; diff --git a/src/card/repositories/transaction.repository.ts b/src/card/repositories/transaction.repository.ts index 118598d..13ccee1 100644 --- a/src/card/repositories/transaction.repository.ts +++ b/src/card/repositories/transaction.repository.ts @@ -34,6 +34,9 @@ export class TransactionRepository { accountReference: card.account!.accountReference, transactionScope: TransactionScope.CARD, vatOnFees: transactionData.vatOnFees, + merchantName: transactionData.cardAcceptorLocation?.merchantName || null, + merchantCategoryCode: transactionData.cardAcceptorLocation?.mcc || null, + merchantCity: transactionData.cardAcceptorLocation?.merchantCity || null, }), ); } @@ -168,4 +171,13 @@ export class TransactionRepository { .andWhere('tx.transactionType = :type', { type: TransactionType.INTERNAL }) .getCount(); } + + findTransactionById(transactionId: string, juniorId: string): Promise { + return this.transactionRepository + .createQueryBuilder('tx') + .innerJoinAndSelect('tx.card', 'card') + .where('tx.id = :transactionId', { transactionId }) + .andWhere('card.customerId = :juniorId', { juniorId }) + .getOne(); + } } diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index a215c09..c45501a 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -251,6 +251,29 @@ export class TransactionService { }; } + async getChildSpendingHistory(juniorId: string, startUtc: Date, endUtc: Date) { + const transactions = await this.transactionRepository.getTransactionsForCardWithinDateRange( + juniorId, + startUtc, + endUtc, + ); + + const { SpendingHistoryItemDto, SpendingHistoryResponseDto } = await import('../dtos/responses'); + const items = transactions.map((t) => new SpendingHistoryItemDto(t)); + return new SpendingHistoryResponseDto(items); + } + + async getTransactionDetail(transactionId: string, juniorId: string) { + const transaction = await this.transactionRepository.findTransactionById(transactionId, juniorId); + + if (!transaction) { + throw new UnprocessableEntityException('TRANSACTION.NOT_FOUND'); + } + + const { TransactionDetailResponseDto } = await import('../dtos/responses'); + return new TransactionDetailResponseDto(transaction); + } + private mapParentItem(t: Transaction): TransactionItemResponseDto { const dto = new TransactionItemResponseDto(); dto.date = t.transactionDate; diff --git a/src/db/migrations/1760869651296-AddMerchantInfoToTransactions.ts b/src/db/migrations/1760869651296-AddMerchantInfoToTransactions.ts new file mode 100644 index 0000000..686e11a --- /dev/null +++ b/src/db/migrations/1760869651296-AddMerchantInfoToTransactions.ts @@ -0,0 +1,18 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddMerchantInfoToTransactions1760869651296 implements MigrationInterface { + name = 'AddMerchantInfoToTransactions1760869651296' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "transactions" ADD COLUMN IF NOT EXISTS "merchant_name" character varying`); + await queryRunner.query(`ALTER TABLE "transactions" ADD COLUMN IF NOT EXISTS "merchant_category_code" character varying`); + await queryRunner.query(`ALTER TABLE "transactions" ADD COLUMN IF NOT EXISTS "merchant_city" character varying`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "transactions" DROP COLUMN "merchant_city"`); + await queryRunner.query(`ALTER TABLE "transactions" DROP COLUMN "merchant_category_code"`); + await queryRunner.query(`ALTER TABLE "transactions" DROP COLUMN "merchant_name"`); + } + +} diff --git a/src/db/migrations/index.ts b/src/db/migrations/index.ts index ca2c3b5..d5bdf52 100644 --- a/src/db/migrations/index.ts +++ b/src/db/migrations/index.ts @@ -4,3 +4,4 @@ export * from './1754915164810-seed-default-avatar'; export * from './1757349525708-create-money-requests-table'; export * from './1757433339849-add-reservation-amount-to-account-entity'; export * from './1757915357218-add-deleted-at-column-to-junior'; +export * from './1760869651296-AddMerchantInfoToTransactions'; \ No newline at end of file diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index f02c769..0ffd532 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -191,4 +191,31 @@ export class JuniorController { const res = await this.juniorService.getJuniorTransfers(juniorId, user.sub, pageNum, pageSize); return ResponseFactory.data(res); } + + @Get(':juniorId/spending-history') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN) + @ApiQuery({ name: 'startUtc', required: true, type: String, example: '2025-01-01T00:00:00.000Z' }) + @ApiQuery({ name: 'endUtc', required: true, type: String, example: '2025-01-31T23:59:59.999Z' }) + async getSpendingHistory( + @Param('juniorId', CustomParseUUIDPipe) juniorId: string, + @AuthenticatedUser() user: IJwtPayload, + @Query('startUtc') startUtc: string, + @Query('endUtc') endUtc: string, + ) { + const res = await this.juniorService.getSpendingHistory(juniorId, user.sub, new Date(startUtc), new Date(endUtc)); + return ResponseFactory.data(res); + } + + @Get(':juniorId/transactions/:transactionId') + @UseGuards(RolesGuard) + @AllowedRoles(Roles.JUNIOR, Roles.GUARDIAN) + async getTransactionDetail( + @Param('juniorId', CustomParseUUIDPipe) juniorId: string, + @Param('transactionId', CustomParseUUIDPipe) transactionId: string, + @AuthenticatedUser() user: IJwtPayload, + ) { + const res = await this.juniorService.getTransactionDetail(juniorId, user.sub, transactionId); + return ResponseFactory.data(res); + } } diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 203ce1f..21c4ab9 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -273,6 +273,42 @@ export class JuniorService { return this.transactionService.getChildTransfersPaginated(juniorId, page, size); } + async getSpendingHistory(juniorId: string, userId: string, startUtc: Date, endUtc: Date) { + this.logger.log(`Getting spending history for junior ${juniorId}`); + + // Check if user is the junior themselves or their guardian + let junior: Junior | null; + if (juniorId === userId) { + junior = await this.findJuniorById(juniorId, false); + } else { + junior = await this.findJuniorById(juniorId, false, userId); + } + + if (!junior) { + throw new BadRequestException('JUNIOR.NOT_FOUND'); + } + + return this.transactionService.getChildSpendingHistory(juniorId, startUtc, endUtc); + } + + async getTransactionDetail(juniorId: string, userId: string, transactionId: string) { + this.logger.log(`Getting transaction detail ${transactionId} for junior ${juniorId}`); + + // Check if user is the junior themselves or their guardian + let junior: Junior | null; + if (juniorId === userId) { + junior = await this.findJuniorById(juniorId, false); + } else { + junior = await this.findJuniorById(juniorId, false, userId); + } + + if (!junior) { + throw new BadRequestException('JUNIOR.NOT_FOUND'); + } + + return this.transactionService.getTransactionDetail(transactionId, juniorId); + } + private async prepareJuniorImages(juniors: Junior[]) { this.logger.log(`Preparing junior images`); await Promise.all( From 4f778f7904f9fa6f3672fd8c766de5921e6da8f4 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Mon, 20 Oct 2025 14:25:53 +0300 Subject: [PATCH 32/45] * ZOD-341-junior-a-child-can-edit-their-email-to-an-existing-email-causing-multiple-child-accounts-to-share-the-same-login --- src/user/dtos/request/update-user.request.dto.ts | 7 ++++++- src/user/services/user.service.ts | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/user/dtos/request/update-user.request.dto.ts b/src/user/dtos/request/update-user.request.dto.ts index a52800a..dc04295 100644 --- a/src/user/dtos/request/update-user.request.dto.ts +++ b/src/user/dtos/request/update-user.request.dto.ts @@ -1,5 +1,5 @@ import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; -import { IsDateString, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; +import { IsDateString, IsEmail, IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID } from 'class-validator'; import { i18nValidationMessage as i18n } from 'nestjs-i18n'; import { Gender } from '~/customer/enums'; export class UpdateUserRequestDto { @@ -15,6 +15,11 @@ export class UpdateUserRequestDto { @IsOptional() lastName!: string; + @ApiPropertyOptional({ example: 'child@example.com' }) + @IsEmail({}, { message: i18n('validation.IsEmail', { path: 'general', property: 'user.email' }) }) + @IsOptional() + email!: string; + @ApiProperty({ example: '123e4567-e89b-12d3-a456-426614174000' }) @IsUUID('4', { message: i18n('validation.IsUUID', { path: 'general', property: 'user.profilePictureId' }) }) @IsOptional() diff --git a/src/user/services/user.service.ts b/src/user/services/user.service.ts index 4d1bbc4..41f25eb 100644 --- a/src/user/services/user.service.ts +++ b/src/user/services/user.service.ts @@ -191,6 +191,14 @@ export class UserService { async updateUser(userId: string, data: UpdateUserRequestDto) { await this.validateProfilePictureId(data.profilePictureId, userId); + if (data.email) { + const userWithEmail = await this.findUser({ email: data.email }); + if (userWithEmail && userWithEmail.id !== userId) { + this.logger.error(`Email ${data.email} is already taken by another user`); + throw new BadRequestException('USER.EMAIL_ALREADY_TAKEN'); + } + } + this.logger.log(`Updating user ${userId} with data ${JSON.stringify(data)}`); const { gender, dateOfBirth, ...userData } = data; From e966f95463cf502e30817430fecb0a250411a17b Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Tue, 21 Oct 2025 10:49:43 +0300 Subject: [PATCH 33/45] ZOD-341-Add unique constraint to user email and clean up duplicates --- ...32305682-AddUniqueConstraintToUserEmail.ts | 26 +++++++++++++++++++ src/db/migrations/index.ts | 3 ++- src/user/entities/user.entity.ts | 2 +- src/user/services/user.service.ts | 2 +- 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts diff --git a/src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts b/src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts new file mode 100644 index 0000000..34a6c07 --- /dev/null +++ b/src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts @@ -0,0 +1,26 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class AddUniqueConstraintToUserEmail1761032305682 implements MigrationInterface { + name = 'AddUniqueConstraintToUserEmail1761032305682' + + public async up(queryRunner: QueryRunner): Promise { + // Clean up duplicate emails - keep the oldest record (MIN id) + await queryRunner.query(` + DELETE FROM users + WHERE id IN ( + SELECT u1.id + FROM users u1 + INNER JOIN users u2 ON u1.email = u2.email AND u1.id > u2.id + WHERE u1.email IS NOT NULL + ) + `); + + // Add unique constraint + await queryRunner.query(`ALTER TABLE "users" ADD CONSTRAINT "UQ_97672ac88f789774dd47f7c8be3" UNIQUE ("email")`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "users" DROP CONSTRAINT "UQ_97672ac88f789774dd47f7c8be3"`); + } + +} diff --git a/src/db/migrations/index.ts b/src/db/migrations/index.ts index d5bdf52..1d5acc9 100644 --- a/src/db/migrations/index.ts +++ b/src/db/migrations/index.ts @@ -4,4 +4,5 @@ export * from './1754915164810-seed-default-avatar'; export * from './1757349525708-create-money-requests-table'; export * from './1757433339849-add-reservation-amount-to-account-entity'; export * from './1757915357218-add-deleted-at-column-to-junior'; -export * from './1760869651296-AddMerchantInfoToTransactions'; \ No newline at end of file +export * from './1760869651296-AddMerchantInfoToTransactions'; +export * from './1761032305682-AddUniqueConstraintToUserEmail'; \ No newline at end of file diff --git a/src/user/entities/user.entity.ts b/src/user/entities/user.entity.ts index 93a356c..97ef32b 100644 --- a/src/user/entities/user.entity.ts +++ b/src/user/entities/user.entity.ts @@ -28,7 +28,7 @@ export class User extends BaseEntity { @Column('varchar', { length: 255, name: 'last_name', nullable: false }) lastName!: string; - @Column('varchar', { length: 255, name: 'email', nullable: true }) + @Column('varchar', { length: 255, name: 'email', nullable: true, unique: true }) email!: string; @Column('varchar', { length: 255, name: 'phone_number', nullable: true }) diff --git a/src/user/services/user.service.ts b/src/user/services/user.service.ts index 41f25eb..188accb 100644 --- a/src/user/services/user.service.ts +++ b/src/user/services/user.service.ts @@ -222,7 +222,7 @@ export class UserService { } async updateUserEmail(userId: string, email: string) { - const userWithEmail = await this.findUser({ email, isEmailVerified: true }); + const userWithEmail = await this.findUser({ email }); if (userWithEmail) { if (userWithEmail.id === userId) { From 8a6b1cc9002333db1354695b35f05ec4e7ddb0c9 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Tue, 21 Oct 2025 14:10:14 +0300 Subject: [PATCH 34/45] Remove duplicate email cleanup logic and add unique constraint to user email --- .../1761032305682-AddUniqueConstraintToUserEmail.ts | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts b/src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts index 34a6c07..09a2ee5 100644 --- a/src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts +++ b/src/db/migrations/1761032305682-AddUniqueConstraintToUserEmail.ts @@ -4,18 +4,7 @@ export class AddUniqueConstraintToUserEmail1761032305682 implements MigrationInt name = 'AddUniqueConstraintToUserEmail1761032305682' public async up(queryRunner: QueryRunner): Promise { - // Clean up duplicate emails - keep the oldest record (MIN id) - await queryRunner.query(` - DELETE FROM users - WHERE id IN ( - SELECT u1.id - FROM users u1 - INNER JOIN users u2 ON u1.email = u2.email AND u1.id > u2.id - WHERE u1.email IS NOT NULL - ) - `); - - // Add unique constraint + await queryRunner.query(`ALTER TABLE "users" ADD CONSTRAINT "UQ_97672ac88f789774dd47f7c8be3" UNIQUE ("email")`); } From bbeece9e031f54198927db58cfcce2673fed317b Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 26 Oct 2025 13:14:35 +0300 Subject: [PATCH 35/45] git checkout -b ZOD-349-weekly-spending-data-not-displaying-in-the-child-profile-parent-view --- src/card/services/transaction.service.ts | 4 ++-- src/junior/services/junior.service.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index c45501a..1ac0134 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -85,8 +85,8 @@ export class TransactionService { } async getWeeklySummary(juniorId: string) { - const startOfWeek = moment().startOf('week').toDate(); - const endOfWeek = moment().endOf('week').toDate(); + const endOfWeek = moment().toDate(); + const startOfWeek = moment().subtract(1, 'week').toDate(); const transactions = await this.transactionRepository.getTransactionsForCardWithinDateRange( juniorId, diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 1d266ec..9f3647c 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -212,8 +212,8 @@ export class JuniorService { this.logger.log(`Junior ${juniorId} deleted successfully`); } - getWeeklySummary(juniorId: string, guardianId: string) { - const doesBelong = this.doesJuniorBelongToGuardian(guardianId, juniorId); + async getWeeklySummary(juniorId: string, guardianId: string) { + const doesBelong = await this.doesJuniorBelongToGuardian(guardianId, juniorId); if (!doesBelong) { this.logger.error(`Junior ${juniorId} does not belong to guardian ${guardianId}`); From 05a6ad2d8478abc74657a6bfc28ed09eb08e29b1 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Tue, 28 Oct 2025 11:20:49 +0300 Subject: [PATCH 36/45] Enhance weekly summary functionality to accept optional date range parameters in CardService, TransactionService, JuniorService, and JuniorController. Update API documentation to reflect new query parameters for start and end dates. --- src/card/services/card.service.ts | 4 ++-- src/card/services/transaction.service.ts | 19 ++++++++++++++++--- src/junior/controllers/junior.controller.ts | 8 +++++++- src/junior/services/junior.service.ts | 4 ++-- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index b9df3fd..23c6f6f 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -163,8 +163,8 @@ export class CardService { return finalAmount.toNumber(); } - getWeeklySummary(juniorId: string) { - return this.transactionService.getWeeklySummary(juniorId); + getWeeklySummary(juniorId: string, startDate?: Date, endDate?: Date) { + return this.transactionService.getWeeklySummary(juniorId, startDate, endDate); } fundIban(iban: string, amount: number) { diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index 1ac0134..39ca853 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -84,15 +84,28 @@ export class TransactionService { return existingTransaction; } - async getWeeklySummary(juniorId: string) { - const endOfWeek = moment().toDate(); - const startOfWeek = moment().subtract(1, 'week').toDate(); + async getWeeklySummary(juniorId: string, startDate?: Date, endDate?: Date) { + let startOfWeek: Date; + let endOfWeek: Date; + + if (startDate && endDate) { + startOfWeek = startDate; + endOfWeek = endDate; + } else { + const now = moment(); + const dayOfWeek = now.day(); + + startOfWeek = moment().subtract(dayOfWeek, 'days').startOf('day').toDate(); + + endOfWeek = moment().add(6 - dayOfWeek, 'days').endOf('day').toDate(); + } const transactions = await this.transactionRepository.getTransactionsForCardWithinDateRange( juniorId, startOfWeek, endOfWeek, ); + const summary = { startOfWeek: startOfWeek, endOfWeek: endOfWeek, diff --git a/src/junior/controllers/junior.controller.ts b/src/junior/controllers/junior.controller.ts index 0ffd532..d04eded 100644 --- a/src/junior/controllers/junior.controller.ts +++ b/src/junior/controllers/junior.controller.ts @@ -151,11 +151,17 @@ export class JuniorController { @UseGuards(RolesGuard) @AllowedRoles(Roles.GUARDIAN) @ApiDataResponse(WeeklySummaryResponseDto) + @ApiQuery({ name: 'startUtc', required: false, type: String, example: '2025-10-20T00:00:00.000Z', description: 'Start date (defaults to start of current week)' }) + @ApiQuery({ name: 'endUtc', required: false, type: String, example: '2025-10-26T23:59:59.999Z', description: 'End date (defaults to end of current week)' }) async getWeeklySummary( @Param('juniorId', CustomParseUUIDPipe) juniorId: string, @AuthenticatedUser() user: IJwtPayload, + @Query('startUtc') startUtc?: string, + @Query('endUtc') endUtc?: string, ) { - const summary = await this.juniorService.getWeeklySummary(juniorId, user.sub); + const startDate = startUtc ? new Date(startUtc) : undefined; + const endDate = endUtc ? new Date(endUtc) : undefined; + const summary = await this.juniorService.getWeeklySummary(juniorId, user.sub, startDate, endDate); return ResponseFactory.data(summary); } diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 9f3647c..2a799c4 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -212,7 +212,7 @@ export class JuniorService { this.logger.log(`Junior ${juniorId} deleted successfully`); } - async getWeeklySummary(juniorId: string, guardianId: string) { + async getWeeklySummary(juniorId: string, guardianId: string, startDate?: Date, endDate?: Date) { const doesBelong = await this.doesJuniorBelongToGuardian(guardianId, juniorId); if (!doesBelong) { @@ -221,7 +221,7 @@ export class JuniorService { } this.logger.log(`Getting weekly summary for junior ${juniorId}`); - return this.cardService.getWeeklySummary(juniorId); + return this.cardService.getWeeklySummary(juniorId, startDate, endDate); } async getJuniorHome(juniorId: string, userId: string, size: number): Promise { From a3a61b49231c60f35099d5fb2093f215f5c41a49 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Tue, 28 Oct 2025 15:52:24 +0300 Subject: [PATCH 37/45] Implement OTP generation and email verification logic in UserService --- src/user/services/user.service.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/user/services/user.service.ts b/src/user/services/user.service.ts index 188accb..73e2e58 100644 --- a/src/user/services/user.service.ts +++ b/src/user/services/user.service.ts @@ -226,7 +226,15 @@ export class UserService { if (userWithEmail) { if (userWithEmail.id === userId) { - return; + this.logger.log(`Generating OTP for current email ${email} for user ${userId}`); + await this.userRepository.update(userId, { isEmailVerified: false }); + + return this.otpService.generateAndSendOtp({ + userId, + recipient: email, + otpType: OtpType.EMAIL, + scope: OtpScope.VERIFY_EMAIL, + }); } this.logger.error(`Email ${email} is already taken by another user`); From 3b295ea79fefce813d86df555a0f4e5401229d22 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 2 Nov 2025 10:52:43 +0300 Subject: [PATCH 38/45] ZOD-344-Add QR code validation error handling and localization support - Introduced new error handling for already used or expired QR codes in JuniorService. - Added corresponding localization entries in Arabic and English app.json files for QR code validation messages. --- src/i18n/ar/app.json | 4 ++++ src/i18n/en/app.json | 4 ++++ src/junior/services/junior.service.ts | 10 +++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/i18n/ar/app.json b/src/i18n/ar/app.json index 4b63817..d5e29b9 100644 --- a/src/i18n/ar/app.json +++ b/src/i18n/ar/app.json @@ -19,6 +19,10 @@ "TOKEN_EXPIRED": "رمز المستخدم منتهي الصلاحية." }, + "QR": { + "CODE_USED_OR_EXPIRED": "تم استخدام رمز QR مسبقًا أو انتهت صلاحيته." + }, + "USER": { "PHONE_ALREADY_VERIFIED": "تم التحقق من رقم الهاتف بالفعل.", "EMAIL_ALREADY_VERIFIED": "تم التحقق من عنوان البريد الإلكتروني بالفعل.", diff --git a/src/i18n/en/app.json b/src/i18n/en/app.json index f661688..593d637 100644 --- a/src/i18n/en/app.json +++ b/src/i18n/en/app.json @@ -19,6 +19,10 @@ "TOKEN_EXPIRED": "The user token has expired." }, + "QR": { + "CODE_USED_OR_EXPIRED": "The QR code has already been used or expired." + }, + "USER": { "PHONE_ALREADY_VERIFIED": "The phone number has already been verified.", "EMAIL_ALREADY_VERIFIED": "The email address has already been verified.", diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index 2a799c4..bfdafec 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -5,6 +5,7 @@ import { Roles } from '~/auth/enums'; import { CardService, TransactionService } from '~/card/services'; import { NeoLeapService } from '~/common/modules/neoleap/services'; import { PageOptionsRequestDto } from '~/core/dtos'; +import { ErrorCategory } from '~/core/enums'; import { setIf } from '~/core/utils'; import { CustomerService } from '~/customer/services'; import { DocumentService, OciService } from '~/document/services'; @@ -158,7 +159,14 @@ export class JuniorService { async validateToken(token: string) { this.logger.log(`Validating token ${token}`); const juniorId = await this.userTokenService.validateToken(token, UserType.JUNIOR); - return this.findJuniorById(juniorId!, true); + const junior = await this.findJuniorById(juniorId!, true); + + if (junior.customer?.user?.password) { + this.logger.error(`Token ${token} already used for junior ${juniorId}`); + throw new BadRequestException({ message: 'QR.CODE_USED_OR_EXPIRED', category: ErrorCategory.BUSINESS_ERROR }); + } + + return junior; } async generateToken(juniorId: string) { From 99af65a3009f0fe3d455cbaa1feb30f9a25fbec0 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 2 Nov 2025 11:57:41 +0300 Subject: [PATCH 39/45] money-request to use the parent card --- src/card/services/card.service.ts | 8 ++++++-- src/card/services/transaction.service.ts | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 23c6f6f..5c2dc4e 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -148,7 +148,11 @@ export class CardService { async transferToChild(juniorId: string, amount: number) { const card = await this.getCardByCustomerId(juniorId); - if (amount > card.account.balance - card.account.reservedBalance) { + const fundingAccount = card.parentId + ? await this.accountService.getAccountByCustomerId(card.parentId) + : card.account; + + if (amount > fundingAccount.balance - fundingAccount.reservedBalance) { throw new BadRequestException('CARD.INSUFFICIENT_BALANCE'); } @@ -156,7 +160,7 @@ export class CardService { await Promise.all([ this.neoleapService.updateCardControl(card.cardReference, finalAmount.toNumber()), this.updateCardLimit(card.id, finalAmount.toNumber()), - this.accountService.increaseReservedBalance(card.account, amount), + this.accountService.increaseReservedBalance(fundingAccount, amount), this.transactionService.createInternalChildTransaction(card.id, amount), ]); diff --git a/src/card/services/transaction.service.ts b/src/card/services/transaction.service.ts index 39ca853..613d10c 100644 --- a/src/card/services/transaction.service.ts +++ b/src/card/services/transaction.service.ts @@ -42,10 +42,18 @@ export class TransactionService { const total = new Decimal(body.transactionAmount).plus(body.billingAmount).plus(body.fees).plus(body.vatOnFees); if (card.customerType === CustomerType.CHILD) { - await Promise.all([ - this.accountService.decreaseAccountBalance(card.account.accountReference, total.toNumber()), - this.accountService.decrementReservedBalance(card.account, total.toNumber()), - ]); + if (card.parentId) { + const parentAccount = await this.accountService.getAccountByCustomerId(card.parentId); + await Promise.all([ + this.accountService.decreaseAccountBalance(parentAccount.accountReference, total.toNumber()), + this.accountService.decrementReservedBalance(parentAccount, total.toNumber()), + ]); + } else { + await Promise.all([ + this.accountService.decreaseAccountBalance(card.account.accountReference, total.toNumber()), + this.accountService.decrementReservedBalance(card.account, total.toNumber()), + ]); + } } else { await this.accountService.decreaseAccountBalance(card.account.accountReference, total.toNumber()); } From d6fb5f48d9ebe1806aab76c07629306bc7463a89 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 2 Nov 2025 12:34:41 +0300 Subject: [PATCH 40/45] add more loggs --- src/card/services/card.service.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/card/services/card.service.ts b/src/card/services/card.service.ts index 5c2dc4e..4cb0a51 100644 --- a/src/card/services/card.service.ts +++ b/src/card/services/card.service.ts @@ -148,11 +148,18 @@ export class CardService { async transferToChild(juniorId: string, amount: number) { const card = await this.getCardByCustomerId(juniorId); + this.logger.debug(`Transfer to child - juniorId: ${juniorId}, parentId: ${card.parentId}, cardId: ${card.id}`); + this.logger.debug(`Card account - balance: ${card.account.balance}, reserved: ${card.account.reservedBalance}`); + const fundingAccount = card.parentId ? await this.accountService.getAccountByCustomerId(card.parentId) : card.account; + this.logger.debug(`Funding account - balance: ${fundingAccount.balance}, reserved: ${fundingAccount.reservedBalance}, available: ${fundingAccount.balance - fundingAccount.reservedBalance}`); + this.logger.debug(`Amount requested: ${amount}`); + if (amount > fundingAccount.balance - fundingAccount.reservedBalance) { + this.logger.error(`Insufficient balance - requested: ${amount}, available: ${fundingAccount.balance - fundingAccount.reservedBalance}`); throw new BadRequestException('CARD.INSUFFICIENT_BALANCE'); } From 21720510932fcaaab3b5895e4082af275ab64626 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 2 Nov 2025 12:41:16 +0300 Subject: [PATCH 41/45] Refactor balance check in increaseReservedBalance method to delegate validation to the caller, improving clarity and responsibility separation. --- src/card/services/account.service.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/card/services/account.service.ts b/src/card/services/account.service.ts index e6ac155..aefff7a 100644 --- a/src/card/services/account.service.ts +++ b/src/card/services/account.service.ts @@ -64,9 +64,8 @@ export class AccountService { } increaseReservedBalance(account: Account, amount: number) { - if (account.balance < account.reservedBalance + amount) { - throw new UnprocessableEntityException('CARD.INSUFFICIENT_BALANCE'); - } + // Balance check is performed by the caller (e.g., transferToChild) + // to ensure correct account (guardian vs child) is validated return this.accountRepository.increaseReservedBalance(account.id, amount); } From 8b00cda23d4e8abf4f57448cc4851d7626cc98bc Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 9 Nov 2025 12:25:37 +0300 Subject: [PATCH 42/45] Update return value in updateJunior method to fetch updated junior details by ID instead of returning the junior object directly. --- src/junior/services/junior.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index bfdafec..b85e716 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -126,7 +126,7 @@ export class JuniorService { setIf(junior, 'relationship', body.relationship); await Promise.all([junior.save(), customer.save(), user.save()]); this.logger.log(`Junior ${juniorId} updated successfully`); - return junior; + return this.findJuniorById(juniorId, false, guardianId); } @Transactional() From 506974afc8483eb9f0d3660334dbdc0063a79941 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Sun, 9 Nov 2025 12:42:48 +0300 Subject: [PATCH 43/45] Enhance profile picture handling in JuniorService to ensure foreign key consistency and validate document ownership before assignment. --- src/junior/services/junior.service.ts | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/junior/services/junior.service.ts b/src/junior/services/junior.service.ts index b85e716..fdc7e58 100644 --- a/src/junior/services/junior.service.ts +++ b/src/junior/services/junior.service.ts @@ -114,7 +114,28 @@ export class JuniorService { } junior.customer.user.email = body.email; } - setIf(user, 'profilePictureId', body.profilePictureId); + // Update profile picture: ensure FK and relation are consistent to avoid TypeORM overriding the FK + if (typeof body.profilePictureId !== 'undefined') { + if (body.profilePictureId) { + const document = await this.documentService.findDocumentById(body.profilePictureId); + if (!document) { + this.logger.error(`Document with id ${body.profilePictureId} not found`); + throw new BadRequestException('DOCUMENT.NOT_FOUND'); + } + if (document.createdById !== juniorId) { + this.logger.error( + `Document with id ${body.profilePictureId} does not belong to user ${juniorId}`, + ); + } + user.profilePictureId = body.profilePictureId; + // assign relation to keep it consistent with FK during save + user.profilePicture = document as any; + } else { + // if empty string provided (unlikely), clear relation and FK + user.profilePicture = null as any; + user.profilePictureId = null as any; + } + } setIf(user, 'firstName', body.firstName); setIf(user, 'lastName', body.lastName); From c007ac584f0a380b59f7192fb33389c39e481c6b Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Tue, 18 Nov 2025 15:03:42 +0300 Subject: [PATCH 44/45] feat: add KYC onboarding metadata endpoint with POI validation --- .../controllers/customer.controller.ts | 14 ++- src/customer/customer.module.ts | 4 +- src/customer/dtos/response/index.ts | 1 + .../response/kyc-metadata.response.dto.ts | 20 ++++ src/customer/enums/income-range.enum.ts | 8 ++ src/customer/enums/income-source.enum.ts | 9 ++ src/customer/enums/index.ts | 5 + src/customer/enums/job-category.enum.ts | 57 ++++++++++ src/customer/enums/job-sector.enum.ts | 12 ++ src/customer/enums/poi-type.enum.ts | 5 + src/customer/services/customer.service.ts | 7 ++ src/customer/services/index.ts | 1 + src/customer/services/metadata.service.ts | 105 ++++++++++++++++++ .../validators/poi-number.validator.ts | 64 +++++++++++ 14 files changed, 308 insertions(+), 4 deletions(-) create mode 100644 src/customer/dtos/response/kyc-metadata.response.dto.ts create mode 100644 src/customer/enums/income-range.enum.ts create mode 100644 src/customer/enums/income-source.enum.ts create mode 100644 src/customer/enums/job-category.enum.ts create mode 100644 src/customer/enums/job-sector.enum.ts create mode 100644 src/customer/enums/poi-type.enum.ts create mode 100644 src/customer/services/metadata.service.ts create mode 100644 src/customer/validators/poi-number.validator.ts diff --git a/src/customer/controllers/customer.controller.ts b/src/customer/controllers/customer.controller.ts index 66aba7e..55d4126 100644 --- a/src/customer/controllers/customer.controller.ts +++ b/src/customer/controllers/customer.controller.ts @@ -1,12 +1,12 @@ import { Body, Controller, Get, Post, UseGuards } from '@nestjs/common'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; +import { ApiBearerAuth, ApiOperation, ApiTags } from '@nestjs/swagger'; import { IJwtPayload } from '~/auth/interfaces'; import { AuthenticatedUser } from '~/common/decorators'; import { AccessTokenGuard } from '~/common/guards'; import { ApiDataResponse, ApiLangRequestHeader } from '~/core/decorators'; import { ResponseFactory } from '~/core/utils'; import { InitiateKycRequestDto } from '../dtos/request'; -import { CustomerResponseDto, InitiateKycResponseDto } from '../dtos/response'; +import { CustomerResponseDto, InitiateKycResponseDto, KycMetadataResponseDto } from '../dtos/response'; import { CustomerService } from '../services'; @Controller('customers') @@ -32,4 +32,14 @@ export class CustomerController { return ResponseFactory.data(new InitiateKycResponseDto(res.randomNumber)); } + + @Get('/kyc/onboard-metadata') + @UseGuards(AccessTokenGuard) + @ApiOperation({ summary: 'Get KYC onboarding form metadata' }) + @ApiDataResponse(KycMetadataResponseDto) + async getKycMetadata() { + const metadata = await this.customerService.getKycOnboardMetadata(); + + return ResponseFactory.data(metadata); + } } diff --git a/src/customer/customer.module.ts b/src/customer/customer.module.ts index e2b6b88..a966521 100644 --- a/src/customer/customer.module.ts +++ b/src/customer/customer.module.ts @@ -6,12 +6,12 @@ import { UserModule } from '~/user/user.module'; import { CustomerController } from './controllers'; import { Customer } from './entities'; import { CustomerRepository } from './repositories/customer.repository'; -import { CustomerService } from './services'; +import { CustomerService, MetadataService } from './services'; @Module({ imports: [TypeOrmModule.forFeature([Customer]), GuardianModule, forwardRef(() => UserModule), NeoLeapModule], controllers: [CustomerController], - providers: [CustomerService, CustomerRepository], + providers: [CustomerService, CustomerRepository, MetadataService], exports: [CustomerService], }) export class CustomerModule {} diff --git a/src/customer/dtos/response/index.ts b/src/customer/dtos/response/index.ts index 9d2a535..6984250 100644 --- a/src/customer/dtos/response/index.ts +++ b/src/customer/dtos/response/index.ts @@ -1,2 +1,3 @@ export * from './customer.response.dto'; export * from './initiate-kyc.response.dto'; +export * from './kyc-metadata.response.dto'; diff --git a/src/customer/dtos/response/kyc-metadata.response.dto.ts b/src/customer/dtos/response/kyc-metadata.response.dto.ts new file mode 100644 index 0000000..9c56a2b --- /dev/null +++ b/src/customer/dtos/response/kyc-metadata.response.dto.ts @@ -0,0 +1,20 @@ +export class MetadataOptionDto { + value!: string; + label!: string; +} + +export class PoiValidationRule { + poiType!: string; + pattern!: string; + description!: string; + example!: string; +} + +export class KycMetadataResponseDto { + poiTypes!: MetadataOptionDto[]; + jobSectors!: MetadataOptionDto[]; + incomeSources!: MetadataOptionDto[]; + jobCategories!: MetadataOptionDto[]; + incomeRanges!: MetadataOptionDto[]; + poiValidation!: PoiValidationRule[]; +} \ No newline at end of file diff --git a/src/customer/enums/income-range.enum.ts b/src/customer/enums/income-range.enum.ts new file mode 100644 index 0000000..6a4dd2d --- /dev/null +++ b/src/customer/enums/income-range.enum.ts @@ -0,0 +1,8 @@ +export enum IncomeRange { + BELOW_2000 = 'SAR 2,000 and below', + RANGE_2000_5000 = 'SAR 2,000 to 5,000', + RANGE_5000_10000 = 'SAR 5,000 to 10,000', + RANGE_10000_20000 = 'SAR 10,000 to 20,000', + ABOVE_20000 = 'SAR 20,000 and above', +} + diff --git a/src/customer/enums/income-source.enum.ts b/src/customer/enums/income-source.enum.ts new file mode 100644 index 0000000..12ae331 --- /dev/null +++ b/src/customer/enums/income-source.enum.ts @@ -0,0 +1,9 @@ +export enum IncomeSource { + SALARY = 'SALARY', + ANCESTRAL = 'ANCESTRAL', + REAL_ESTATE = 'REAL_ESTATE', + INVESTMENT_RETURNS = 'INVESTMENT_RETURNS', + RENTAL_INCOME = 'RENTAL_INCOME', + OTHER = 'OTHER', +} + diff --git a/src/customer/enums/index.ts b/src/customer/enums/index.ts index ea026d8..3bf8810 100644 --- a/src/customer/enums/index.ts +++ b/src/customer/enums/index.ts @@ -1,3 +1,8 @@ export * from './customer-status.enum'; export * from './gender.enum'; export * from './kyc-status.enum'; +export * from './poi-type.enum'; +export * from './job-sector.enum'; +export * from './income-source.enum'; +export * from './job-category.enum'; +export * from './income-range.enum'; diff --git a/src/customer/enums/job-category.enum.ts b/src/customer/enums/job-category.enum.ts new file mode 100644 index 0000000..66e867d --- /dev/null +++ b/src/customer/enums/job-category.enum.ts @@ -0,0 +1,57 @@ +export enum JobCategory { + ASSISTANT_MINISTER = 'ASSISTANT_MINISTER', + DEPUTY_MINISTER = 'DEPUTY_MINISTER', + UNDER_SECRETARY = 'UNDER_SECRETARY', + GENERAL_MANAGER = 'GENERAL_MANAGER', + CHAIRMAN = 'CHAIRMAN', + MANAGER = 'MANAGER', + PROFESSOR = 'PROFESSOR', + HEAD_OF_COURT = 'HEAD_OF_COURT', + JUDGE = 'JUDGE', + LAWYER = 'LAWYER', + SCIENTIST = 'SCIENTIST', + NOTARY = 'NOTARY', + BUSINESSMAN = 'BUSINESSMAN', + MERCHANT = 'MERCHANT', + PHARMACIST = 'PHARMACIST', + DOCTOR = 'DOCTOR', + MEDICAL_TECHNICIAN = 'MEDICAL_TECHNICIAN', + NURSE = 'NURSE', + ENGINEER = 'ENGINEER', + CHEMIST = 'CHEMIST', + CONTRACTOR = 'CONTRACTOR', + AUDITOR_ACCOUNTANT = 'AUDITOR_ACCOUNTANT', + RESEARCHER = 'RESEARCHER', + ACCOUNTANT = 'ACCOUNTANT', + JOURNALIST = 'JOURNALIST', + DESIGNER = 'DESIGNER', + COMPUTER_SPECIALIST = 'COMPUTER_SPECIALIST', + TRANSLATOR = 'TRANSLATOR', + TEACHER = 'TEACHER', + PILOT = 'PILOT', + HOST = 'HOST', + OFFICER = 'OFFICER', + SOLDIER = 'SOLDIER', + RETIRED = 'RETIRED', + SALESMAN = 'SALESMAN', + AUTHOR = 'AUTHOR', + CRAFTSMAN = 'CRAFTSMAN', + SECURITY = 'SECURITY', + LABORER = 'LABORER', + DRIVER = 'DRIVER', + FARMER = 'FARMER', + HOUSEWIFE = 'HOUSEWIFE', + DIPLOMAT = 'DIPLOMAT', + STUDENT = 'STUDENT', + FREELANCER = 'FREELANCER', + SHEPHERD = 'SHEPHERD', + HOUSEMAID_OR_BABYSITTER = 'HOUSEMAID_OR_BABYSITTER', + CAPTAIN = 'CAPTAIN', + AMBASSADOR = 'AMBASSADOR', + MARKETING = 'MARKETING', + CONSULTING = 'CONSULTING', + SUPERVISOR = 'SUPERVISOR', + BANKER = 'BANKER', + BODYGUARD_OR_PERSONAL_ASSISTANT = 'BODYGUARD_OR_PERSONAL_ASSISTANT', +} + diff --git a/src/customer/enums/job-sector.enum.ts b/src/customer/enums/job-sector.enum.ts new file mode 100644 index 0000000..8db90ad --- /dev/null +++ b/src/customer/enums/job-sector.enum.ts @@ -0,0 +1,12 @@ +export enum JobSector { + GOVERNMENT_SECTOR = 'GOVERNMENT_SECTOR', + HOME_MAKER = 'HOME_MAKER', + MILITARY = 'MILITARY', + PRIVATE_SECTOR = 'PRIVATE_SECTOR', + RETIRED = 'RETIRED', + SELF_EMPLOYED = 'SELF_EMPLOYED', + STUDENT = 'STUDENT', + HOUSEHOLD_LABOR = 'HOUSEHOLD_LABOR', + UNEMPLOYED = 'UNEMPLOYED', +} + diff --git a/src/customer/enums/poi-type.enum.ts b/src/customer/enums/poi-type.enum.ts new file mode 100644 index 0000000..07eb522 --- /dev/null +++ b/src/customer/enums/poi-type.enum.ts @@ -0,0 +1,5 @@ +export enum PoiType { + IQA = 'IQA', // Iqama (Resident ID) + NAT = 'NAT', // National ID +} + diff --git a/src/customer/services/customer.service.ts b/src/customer/services/customer.service.ts index 0cfb6ca..783e221 100644 --- a/src/customer/services/customer.service.ts +++ b/src/customer/services/customer.service.ts @@ -12,6 +12,7 @@ import { InitiateKycRequestDto } from '../dtos/request'; import { Customer } from '../entities'; import { Gender, KycStatus } from '../enums'; import { CustomerRepository } from '../repositories/customer.repository'; +import { MetadataService } from './metadata.service'; @Injectable() export class CustomerService { @@ -20,6 +21,7 @@ export class CustomerService { private readonly customerRepository: CustomerRepository, private readonly guardianService: GuardianService, @Inject(forwardRef(() => NeoLeapService)) private readonly neoleapService: NeoLeapService, + private readonly metadataService: MetadataService, ) {} async updateCustomer(userId: string, data: Partial): Promise { @@ -149,6 +151,11 @@ export class CustomerService { return this.findCustomerById(userId); } + getKycOnboardMetadata() { + this.logger.log('Getting KYC onboard metadata'); + return this.metadataService.getKycOnboardMetadata(); + } + // TO BE REMOVED: This function is for testing only and will be removed private generateSaudiPhoneNumber(): string { // Saudi mobile numbers are 9 digits, always starting with '5' diff --git a/src/customer/services/index.ts b/src/customer/services/index.ts index 0c04669..172237e 100644 --- a/src/customer/services/index.ts +++ b/src/customer/services/index.ts @@ -1 +1,2 @@ export * from './customer.service'; +export * from './metadata.service'; diff --git a/src/customer/services/metadata.service.ts b/src/customer/services/metadata.service.ts new file mode 100644 index 0000000..e4cc985 --- /dev/null +++ b/src/customer/services/metadata.service.ts @@ -0,0 +1,105 @@ +import { Injectable } from '@nestjs/common'; +import { IncomeRange, IncomeSource, JobCategory, JobSector, PoiType } from '../enums'; +import { KycMetadataResponseDto, MetadataOptionDto } from '../dtos/response'; + +@Injectable() +export class MetadataService { + getKycOnboardMetadata(): KycMetadataResponseDto { + return { + poiTypes: this.enumToOptions(PoiType, { + [PoiType.IQA]: 'Iqama (Resident ID)', + [PoiType.NAT]: 'National ID', + }), + jobSectors: this.enumToOptions(JobSector, { + [JobSector.GOVERNMENT_SECTOR]: 'Government Sector', + [JobSector.HOME_MAKER]: 'Home Maker', + [JobSector.MILITARY]: 'Military', + [JobSector.PRIVATE_SECTOR]: 'Private Sector', + [JobSector.RETIRED]: 'Retired', + [JobSector.SELF_EMPLOYED]: 'Self Employed', + [JobSector.STUDENT]: 'Student', + [JobSector.HOUSEHOLD_LABOR]: 'Household Labor', + [JobSector.UNEMPLOYED]: 'Unemployed', + }), + incomeSources: this.enumToOptions(IncomeSource, { + [IncomeSource.SALARY]: 'Salary', + [IncomeSource.ANCESTRAL]: 'Ancestral/Inheritance', + [IncomeSource.REAL_ESTATE]: 'Real Estate', + [IncomeSource.INVESTMENT_RETURNS]: 'Investment Returns', + [IncomeSource.RENTAL_INCOME]: 'Rental Income', + [IncomeSource.OTHER]: 'Other', + }), + jobCategories: this.enumToOptions(JobCategory, { + [JobCategory.ASSISTANT_MINISTER]: 'Assistant Minister', + [JobCategory.DEPUTY_MINISTER]: 'Deputy Minister', + [JobCategory.UNDER_SECRETARY]: 'Under Secretary', + [JobCategory.GENERAL_MANAGER]: 'General Manager', + [JobCategory.CHAIRMAN]: 'Chairman', + [JobCategory.MANAGER]: 'Manager', + [JobCategory.PROFESSOR]: 'Professor', + [JobCategory.HEAD_OF_COURT]: 'Head of Court', + [JobCategory.JUDGE]: 'Judge', + [JobCategory.LAWYER]: 'Lawyer', + [JobCategory.SCIENTIST]: 'Scientist', + [JobCategory.NOTARY]: 'Notary', + [JobCategory.BUSINESSMAN]: 'Businessman', + [JobCategory.MERCHANT]: 'Merchant', + [JobCategory.PHARMACIST]: 'Pharmacist', + [JobCategory.DOCTOR]: 'Doctor', + [JobCategory.MEDICAL_TECHNICIAN]: 'Medical Technician', + [JobCategory.NURSE]: 'Nurse', + [JobCategory.ENGINEER]: 'Engineer', + [JobCategory.CHEMIST]: 'Chemist', + [JobCategory.CONTRACTOR]: 'Contractor', + [JobCategory.AUDITOR_ACCOUNTANT]: 'Auditor/Accountant', + [JobCategory.RESEARCHER]: 'Researcher', + [JobCategory.ACCOUNTANT]: 'Accountant', + [JobCategory.JOURNALIST]: 'Journalist', + [JobCategory.DESIGNER]: 'Designer', + [JobCategory.COMPUTER_SPECIALIST]: 'Computer Specialist', + [JobCategory.TRANSLATOR]: 'Translator', + [JobCategory.TEACHER]: 'Teacher', + [JobCategory.PILOT]: 'Pilot', + [JobCategory.HOST]: 'Host', + [JobCategory.OFFICER]: 'Officer', + [JobCategory.SOLDIER]: 'Soldier', + [JobCategory.RETIRED]: 'Retired', + [JobCategory.SALESMAN]: 'Salesman', + [JobCategory.AUTHOR]: 'Author', + [JobCategory.CRAFTSMAN]: 'Craftsman', + [JobCategory.SECURITY]: 'Security', + [JobCategory.LABORER]: 'Laborer', + [JobCategory.DRIVER]: 'Driver', + [JobCategory.FARMER]: 'Farmer', + [JobCategory.HOUSEWIFE]: 'Housewife', + [JobCategory.DIPLOMAT]: 'Diplomat', + [JobCategory.STUDENT]: 'Student', + [JobCategory.FREELANCER]: 'Freelancer', + [JobCategory.SHEPHERD]: 'Shepherd', + [JobCategory.HOUSEMAID_OR_BABYSITTER]: 'Housemaid/Babysitter', + [JobCategory.CAPTAIN]: 'Captain', + [JobCategory.AMBASSADOR]: 'Ambassador', + [JobCategory.MARKETING]: 'Marketing', + [JobCategory.CONSULTING]: 'Consulting', + [JobCategory.SUPERVISOR]: 'Supervisor', + [JobCategory.BANKER]: 'Banker', + [JobCategory.BODYGUARD_OR_PERSONAL_ASSISTANT]: 'Bodyguard/Personal Assistant', + }), + incomeRanges: this.enumToOptions(IncomeRange, { + [IncomeRange.BELOW_2000]: 'SAR 2,000 and below', + [IncomeRange.RANGE_2000_5000]: 'SAR 2,000 to 5,000', + [IncomeRange.RANGE_5000_10000]: 'SAR 5,000 to 10,000', + [IncomeRange.RANGE_10000_20000]: 'SAR 10,000 to 20,000', + [IncomeRange.ABOVE_20000]: 'SAR 20,000 and above', + }), + }; + } + + private enumToOptions(enumObj: any, labels: Record): MetadataOptionDto[] { + return Object.keys(enumObj).map((key) => ({ + value: enumObj[key], + label: labels[enumObj[key]] || enumObj[key], + })); + } +} + diff --git a/src/customer/validators/poi-number.validator.ts b/src/customer/validators/poi-number.validator.ts new file mode 100644 index 0000000..3bd76d4 --- /dev/null +++ b/src/customer/validators/poi-number.validator.ts @@ -0,0 +1,64 @@ +import { + registerDecorator, + ValidationOptions, + ValidatorConstraint, + ValidatorConstraintInterface, + ValidationArguments, +} from 'class-validator'; +import { PoiType } from '../enums'; + +@ValidatorConstraint({ name: 'IsValidPoiNumber', async: false }) +export class IsValidPoiNumberConstraint implements ValidatorConstraintInterface { + validate(poiNumber: string, args: ValidationArguments) { + const object = args.object as any; + const poiType = object.poiType; + + if (!poiNumber || !poiType) { + return false; + } + + // Saudi National ID: 10 digits, typically starts with 1 or 2 + const nationalIdPattern = /^[12]\d{9}$/; + + // Iqama (Resident ID): 10 digits, typically starts with other numbers (not 1 or 2) + const iqamaPattern = /^[3-9]\d{9}$/; + + if (poiType === PoiType.NAT) { + return nationalIdPattern.test(poiNumber); + } + + if (poiType === PoiType.IQA) { + return iqamaPattern.test(poiNumber); + } + + return false; + } + + defaultMessage(args: ValidationArguments) { + const object = args.object as any; + const poiType = object.poiType; + + if (poiType === PoiType.NAT) { + return 'National ID must be 10 digits and start with 1 or 2'; + } + + if (poiType === PoiType.IQA) { + return 'Iqama number must be 10 digits and start with 3-9'; + } + + return 'Invalid POI number format'; + } +} + +export function IsValidPoiNumber(validationOptions?: ValidationOptions) { + return function (object: Object, propertyName: string) { + registerDecorator({ + target: object.constructor, + propertyName: propertyName, + options: validationOptions, + constraints: [], + validator: IsValidPoiNumberConstraint, + }); + }; +} + From 91dea22f45735612239813d86b848bf489ab4915 Mon Sep 17 00:00:00 2001 From: Abdalhamid Alhamad Date: Tue, 18 Nov 2025 15:14:47 +0300 Subject: [PATCH 45/45] refactor: remove unused PoiValidationRule class from KycMetadataResponseDto --- .../dtos/response/kyc-metadata.response.dto.ts | 10 +--------- src/customer/validators/poi-number.validator.ts | 1 + 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/src/customer/dtos/response/kyc-metadata.response.dto.ts b/src/customer/dtos/response/kyc-metadata.response.dto.ts index 9c56a2b..79502cf 100644 --- a/src/customer/dtos/response/kyc-metadata.response.dto.ts +++ b/src/customer/dtos/response/kyc-metadata.response.dto.ts @@ -3,18 +3,10 @@ export class MetadataOptionDto { label!: string; } -export class PoiValidationRule { - poiType!: string; - pattern!: string; - description!: string; - example!: string; -} - export class KycMetadataResponseDto { poiTypes!: MetadataOptionDto[]; jobSectors!: MetadataOptionDto[]; incomeSources!: MetadataOptionDto[]; jobCategories!: MetadataOptionDto[]; incomeRanges!: MetadataOptionDto[]; - poiValidation!: PoiValidationRule[]; -} \ No newline at end of file +} diff --git a/src/customer/validators/poi-number.validator.ts b/src/customer/validators/poi-number.validator.ts index 3bd76d4..360267e 100644 --- a/src/customer/validators/poi-number.validator.ts +++ b/src/customer/validators/poi-number.validator.ts @@ -62,3 +62,4 @@ export function IsValidPoiNumber(validationOptions?: ValidationOptions) { }; } +