diff --git a/.env.example b/.env.example index 04aaf0a..83ae20a 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,4 @@ database_url="mongodb+srv://..." -port=8002 \ No newline at end of file +port=8002 +sentry_auth_token="..." +sentry_dsn="..." \ No newline at end of file diff --git a/.gitignore b/.gitignore index f3a9cdd..2be411c 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ lerna-debug.log* # dotenv environment variable files .env +.env.development .env.development.local .env.test.local .env.production.local @@ -57,3 +58,6 @@ pids # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Sentry Config File +.env.sentry-build-plugin diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e2154d7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +ARG IMAGE=node:20.16-alpine + +#COMMON +FROM $IMAGE AS builder +WORKDIR /app +COPY . . +RUN npm i + +#DEV +FROM builder AS dev +CMD [""] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ee6d8ed --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +services: + api-dev: + build: + context: . + dockerfile: Dockerfile + target: dev + working_dir: /app + ports: + - 8802:8802 + command: [sh, -c, "npm run prime && npm run build && npm start"] + env_file: + - .env.development + volumes: + - .:/app:delegated + - /app/node_modules + + api-prod: + build: + context: . + dockerfile: Dockerfile + target: builder + working_dir: /app + ports: + - 8002:8002 + command: [sh, -c, "npm run prime && npm run build && npm start"] + env_file: + - .env + volumes: + - .:/app:delegated + - /app/node_modules \ No newline at end of file diff --git a/package.json b/package.json index 4b02118..44de823 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vatacars-server", - "version": "0.0.2", + "version": "0.1.0", "description": "The backend server for vatACARS.", "author": "vatACARS Team", "private": true, @@ -25,12 +25,20 @@ "@nestjs/common": "^10.0.0", "@nestjs/config": "^3.2.3", "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.3.10", "@nestjs/mongoose": "^10.0.5", "@nestjs/platform-express": "^10.0.0", + "@nestjs/schedule": "^4.1.0", "@nestjs/throttler": "^6.0.0", "@prisma/client": "^5.15.0", + "@sentry/cli": "^2.33.1", + "@sentry/nestjs": "^8.25.0", + "@sentry/profiling-node": "^8.25.0", + "@sentry/webpack-plugin": "^2.22.0", "agenda": "^5.0.0", + "axios": "^1.7.2", "mongoose": "^8.3.0", + "node-fetch": "2.6.7", "prisma": "^5.15.0", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.1" diff --git a/src/ATSU/atsu.controller.ts b/src/ATSU/atsu.controller.ts index 2cfd412..d881a84 100644 --- a/src/ATSU/atsu.controller.ts +++ b/src/ATSU/atsu.controller.ts @@ -1,85 +1,162 @@ import { Response } from 'express'; -import { Controller, Get, Post, Patch, Delete, Body, Param, HttpStatus, Res } from '@nestjs/common'; - import { - ApiOperation, - ApiResponse, - ApiTags -} from '@nestjs/swagger'; + Controller, + Get, + Post, + Patch, + Delete, + Body, + HttpStatus, + Res, +} from '@nestjs/common'; + +import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { AgendaService } from 'src/lib/agenda/agenda.service'; import { ATSUService } from '../lib/prisma/atsu.service'; -import { ATSUInformation as ATSUInformationModel } from "@prisma/client"; +import { ATSUInformation as ATSUInformationModel } from '@prisma/client'; @Controller() -@ApiTags("ATSU API") +@ApiTags('ATSU API') export class ATSUController { constructor( private readonly atsuService: ATSUService, - private readonly agendaService: AgendaService + private readonly agendaService: AgendaService, ) {} @Post('/atsu/logon') @ApiOperation({ - summary: "Initiate a connection to vatACARS as a controller.", + summary: 'Initiate a connection to vatACARS as a controller.', requestBody: { content: { - "application/json": { + 'application/json': { schema: { - type: "object", + type: 'object', properties: { - token: { type: "string", example: "vAcV1-xxxxx", minLength: 32, maxLength: 32}, - station: { type: "string", example: "YISA", pattern: "^[A-Z]{4}$" }, - sectors: { type: "Sector[]", example: [{"name":"ISA","callsign":"BN-ISA_CTR","frequency":125200000}] }, - approxLoc: { type: "LocationCoordinates", example: {"latitude":-19.823415798611112,"longitude":140.916931138883} } + token: { + type: 'string', + example: 'vAcV1-xxxxx', + minLength: 32, + maxLength: 32, + }, + station: { + type: 'string', + example: 'YISA', + pattern: '^[A-Z]{4}$', + }, + sectors: { + type: 'Sector[]', + example: [ + { name: 'ISA', callsign: 'BN-ISA_CTR', frequency: 125200000 }, + ], + }, + approxLoc: { + type: 'LocationCoordinates', + example: { + latitude: -19.823415798611112, + longitude: 140.916931138883, + }, + }, }, - required: ["token", "station", "sectors", "approxLoc"] - } - } - } + required: ['token', 'station', 'sectors', 'approxLoc'], + }, + }, + }, }, - description: "This endpoint is used to logon as an ATSU controller. It will check if the station is already opened by another controller and if not, it will create a new ATSU controller in the database and reserve the position for 2 minutes." + description: + 'This endpoint is used to logon as an ATSU controller. It will check if the station is already opened by another controller and if not, it will create a new ATSU controller in the database and reserve the position for 2 minutes.', }) @ApiResponse({ - status: 200, description: "Successfully logged in as ATSU.", example: { + status: 200, + description: 'Successfully logged in as ATSU.', + example: { success: true, - message: "Logged in as YISA", + message: 'Logged in as YISA', ATSU: { - station_code: "YISA", - opened: "2024-01-01T00:00:00.000Z", - sectors: [{"name":"ISA","callsign":"BN-ISA_CTR","frequency":125200000}], - approxLoc: {"latitude":-19.823415798611112,"longitude":140.916931138883}, - cid: 123456 - }} + station_code: 'YISA', + opened: '2024-01-01T00:00:00.000Z', + sectors: [ + { name: 'ISA', callsign: 'BN-ISA_CTR', frequency: 125200000 }, + ], + approxLoc: { + latitude: -19.823415798611112, + longitude: 140.916931138883, + }, + cid: 123456, + }, + }, + }) + @ApiResponse({ status: 400, description: 'Invalid station code.' }) + @ApiResponse({ status: 401, description: 'Not authorised.' }) + @ApiResponse({ + status: 403, + description: 'Station already opened by another controller.', }) - @ApiResponse({ status: 400, description: "Invalid station code." }) - @ApiResponse({ status: 401, description: "Not authorised." }) - @ApiResponse({ status: 403, description: "Station already opened by another controller." }) - async postLogon(@Body() body: any, @Res() response: Response): Promise { + async postLogon( + @Body() body: any, + @Res() response: Response, + ): Promise { const { token, station, sectors, approxLoc } = body; - if (station.length != 4 || !station) return response.status(HttpStatus.BAD_REQUEST).json({ success: false, message: "Invalid station code" }); - const ACARSUserData = await fetch(`https://vatacars.com/api/client/me?token=${token}`).then(resp => resp.json()); - if (!ACARSUserData.success) return response.status(HttpStatus.UNAUTHORIZED).json({ success: false, message: "Not authorised" }); + if (station.length != 4 || !station) + return response + .status(HttpStatus.BAD_REQUEST) + .json({ success: false, message: 'Invalid station code' }); + const ACARSUserData = await fetch( + `https://vatacars.com/api/client/me?token=${token}`, + ).then((resp) => resp.json()); + if (!ACARSUserData.success) + return response + .status(HttpStatus.UNAUTHORIZED) + .json({ success: false, message: 'Not authorised' }); - const CurATSUStation = await this.atsuService.ATSUInformation({ station_code: station.toUpperCase() }); + const CurATSUStation = await this.atsuService.ATSUInformation({ + station_code: station.toUpperCase(), + }); if (CurATSUStation) { - if (CurATSUStation.cid != ACARSUserData.vatACARSUserData.data.cid) return response.status(HttpStatus.FORBIDDEN).json({ success: false, message: `${station.toUpperCase()} is already opened by CID ${CurATSUStation.cid}` }); + if (CurATSUStation.cid != ACARSUserData.vatACARSUserData.data.cid) + return response.status(HttpStatus.FORBIDDEN).json({ + success: false, + message: `${station.toUpperCase()} is already opened by CID ${CurATSUStation.cid}`, + }); - if (CurATSUStation.sectors != sectors) await this.atsuService.updateATSUInformation({ where: { station_code: station.toUpperCase() }, data: { sectors } }); - if (CurATSUStation.approxLoc != approxLoc) await this.atsuService.updateATSUInformation({ where: { station_code: station.toUpperCase() }, data: { approxLoc } }); - await this.agendaService.agenda.cancel({ data: { station_code: station } }); - await this.agendaService.agenda.schedule("in 2 minutes", "logout inactive ATSU", { station_code: station.toUpperCase() }); + if (CurATSUStation.sectors != sectors) + await this.atsuService.updateATSUInformation({ + where: { station_code: station.toUpperCase() }, + data: { sectors }, + }); + if (CurATSUStation.approxLoc != approxLoc) + await this.atsuService.updateATSUInformation({ + where: { station_code: station.toUpperCase() }, + data: { approxLoc }, + }); + await this.agendaService.agenda.cancel({ + data: { station_code: station }, + }); + await this.agendaService.agenda.schedule( + 'in 3 minutes', + 'logout inactive ATSU', + { station_code: station.toUpperCase() }, + ); return response.status(HttpStatus.OK).json({ success: true, message: `Logged in as ${station.toUpperCase()}`, - ATSU: CurATSUStation + ATSU: CurATSUStation, }); } - const UserATSUStation = await this.atsuService.ATSUInformation({ cid: ACARSUserData.vatACARSUserData.data.cid }); - if (UserATSUStation) await this.atsuService.deleteATSUInformation({ cid: UserATSUStation.cid }); + const UserATSUStation = await this.atsuService.ATSUInformation({ + cid: ACARSUserData.vatACARSUserData.data.cid, + }); + if (UserATSUStation) + await this.atsuService.deleteATSUInformation({ + cid: UserATSUStation.cid, + }); - await this.agendaService.agenda.schedule("in 2 minutes", "logout inactive ATSU", { station_code: station.toUpperCase() }); + await this.agendaService.agenda.schedule( + 'in 3 minutes', + 'logout inactive ATSU', + { station_code: station.toUpperCase() }, + ); return response.status(HttpStatus.OK).json({ success: true, message: `Logged in as ${station.toUpperCase()}`, @@ -88,116 +165,190 @@ export class ATSUController { opened: new Date(), sectors, approxLoc, - cid: ACARSUserData.vatACARSUserData.data.cid - }) + cid: ACARSUserData.vatACARSUserData.data.cid, + }), }); } @Patch('/atsu/logon') @ApiOperation({ - summary: "Extend a current ATSU session.", + summary: 'Extend a current ATSU session.', requestBody: { content: { - "application/json": { + 'application/json': { schema: { - type: "object", + type: 'object', properties: { - token: { type: "string", example: "vAcV1-xxxxx", minLength: 32, maxLength: 32}, - station: { type: "string", example: "YISA", pattern: "^[A-Z]{4}$" } + token: { + type: 'string', + example: 'vAcV1-xxxxx', + minLength: 32, + maxLength: 32, + }, + station: { + type: 'string', + example: 'YISA', + pattern: '^[A-Z]{4}$', + }, }, - required: ["token", "station"] - } - } - } + required: ['token', 'station'], + }, + }, + }, }, deprecated: true, - description: "[COMING SOON] This endpoint is used to extend the session of an ATSU controller. It will check if the station is already opened by the same controller and if so, it will extend the session for another 3 minutes." + description: + '[COMING SOON] This endpoint is used to extend the session of an ATSU controller. It will check if the station is already opened by the same controller and if so, it will extend the session for another 3 minutes.', }) @ApiResponse({ - status: 200, description: "Successfully extended the session.", example: { + status: 200, + description: 'Successfully extended the session.', + example: { success: true, - message: "Logged in as YISA", + message: 'Logged in as YISA', ATSU: { - station_code: "YISA", - opened: "2024-01-01T00:00:00.000Z", - sectors: [{"name":"ISA","callsign":"BN-ISA_CTR","frequency":125200000}], - approxLoc: {"latitude":-19.823415798611112,"longitude":140.916931138883}, - cid: 123456 - } - } + station_code: 'YISA', + opened: '2024-01-01T00:00:00.000Z', + sectors: [ + { name: 'ISA', callsign: 'BN-ISA_CTR', frequency: 125200000 }, + ], + approxLoc: { + latitude: -19.823415798611112, + longitude: 140.916931138883, + }, + cid: 123456, + }, + }, + }) + @ApiResponse({ status: 400, description: 'Invalid station code.' }) + @ApiResponse({ status: 401, description: 'Not authorised.' }) + @ApiResponse({ + status: 403, + description: 'Station already opened by another controller.', }) - @ApiResponse({ status: 400, description: "Invalid station code." }) - @ApiResponse({ status: 401, description: "Not authorised." }) - @ApiResponse({ status: 403, description: "Station already opened by another controller." }) - @ApiResponse({ status: 404, description: "Station not found." }) - async PatchLogon(@Body() body: any, @Res() response: Response): Promise { - return response.status(HttpStatus.NOT_IMPLEMENTED).json({ success: false, message: "Not implemented" }); + @ApiResponse({ status: 404, description: 'Station not found.' }) + async PatchLogon( + @Body() body: any, + @Res() response: Response, + ): Promise { + return response + .status(HttpStatus.NOT_IMPLEMENTED) + .json({ success: false, message: 'Not implemented' }); } @Delete('/atsu/logon') @ApiOperation({ - summary: "Logout as an ATSU controller.", + summary: 'Logout as an ATSU controller.', requestBody: { content: { - "application/json": { + 'application/json': { schema: { - type: "object", + type: 'object', properties: { - token: { type: "string", example: "vAcV1-xxxxx", minLength: 32, maxLength: 32}, - station: { type: "string", example: "YISA", pattern: "^[A-Z]{4}$" } + token: { + type: 'string', + example: 'vAcV1-xxxxx', + minLength: 32, + maxLength: 32, + }, + station: { + type: 'string', + example: 'YISA', + pattern: '^[A-Z]{4}$', + }, }, - required: ["token", "station"] - } - } - } + required: ['token', 'station'], + }, + }, + }, }, deprecated: true, - description: "[COMING SOON] This endpoint is used to logout as an ATSU controller. It will check if the station is opened by the same controller and if so, it will delete the ATSU controller from the database." + description: + '[COMING SOON] This endpoint is used to logout as an ATSU controller. It will check if the station is opened by the same controller and if so, it will delete the ATSU controller from the database.', }) @ApiResponse({ - status: 200, description: "Successfully logged out.", example: { + status: 200, + description: 'Successfully logged out.', + example: { success: true, - message: "Logged out from YISA" - } + message: 'Logged out from YISA', + }, }) - @ApiResponse({ status: 400, description: "Invalid station code." }) - @ApiResponse({ status: 401, description: "Not authorised." }) - @ApiResponse({ status: 403, description: "Station opened by another controller." }) - @ApiResponse({ status: 404, description: "Station not found." }) - async deleteLogon(@Body() body: any, @Res() response: Response): Promise { - return response.status(HttpStatus.NOT_IMPLEMENTED).json({ success: false, message: "Not implemented" }); + @ApiResponse({ status: 400, description: 'Invalid station code.' }) + @ApiResponse({ status: 401, description: 'Not authorised.' }) + @ApiResponse({ + status: 403, + description: 'Station opened by another controller.', + }) + @ApiResponse({ status: 404, description: 'Station not found.' }) + async deleteLogon( + @Body() body: any, + @Res() response: Response, + ): Promise { + return response + .status(HttpStatus.NOT_IMPLEMENTED) + .json({ success: false, message: 'Not implemented' }); } @Post('/atsu/heartbeat') - async postHeartbeat(@Body() body: any): Promise<{ success: boolean, message: string, ATSU: ATSUInformationModel } | { success: false, message: string }> { + async postHeartbeat( + @Body() body: any, + ): Promise< + | { success: boolean; message: string; ATSU: ATSUInformationModel } + | { success: false; message: string } + > { const { token, station, sectors, approxLoc } = body; - if (station.length != 4) return { success: false, message: "Invalid station code" }; - const ACARSUserData = await fetch(`https://vatacars.com/api/client/me?token=${token}`).then(resp => resp.json()); - if (!ACARSUserData.success) return { success: false, message: "Not authorised" }; + if (station.length != 4) + return { success: false, message: 'Invalid station code' }; + const ACARSUserData = await fetch( + `https://vatacars.com/api/client/me?token=${token}`, + ).then((resp) => resp.json()); + if (!ACARSUserData.success) + return { success: false, message: 'Not authorised' }; - const CurATSUStation = await this.atsuService.ATSUInformation({ station_code: station.toUpperCase() }); + const CurATSUStation = await this.atsuService.ATSUInformation({ + station_code: station.toUpperCase(), + }); if (CurATSUStation) { - if (CurATSUStation.cid != ACARSUserData.vatACARSUserData.data.cid) return { success: false, message: `${station.toUpperCase()} is already opened by CID ${CurATSUStation.cid}` }; - if (CurATSUStation.sectors != sectors) await this.atsuService.updateATSUInformation({ where: { station_code: station.toUpperCase() }, data: { sectors } }); - if (CurATSUStation.approxLoc != approxLoc) await this.atsuService.updateATSUInformation({ where: { station_code: station.toUpperCase() }, data: { approxLoc } }); + if (CurATSUStation.cid != ACARSUserData.vatACARSUserData.data.cid) + return { + success: false, + message: `${station.toUpperCase()} is already opened by CID ${CurATSUStation.cid}`, + }; + if (CurATSUStation.sectors != sectors) + await this.atsuService.updateATSUInformation({ + where: { station_code: station.toUpperCase() }, + data: { sectors }, + }); + if (CurATSUStation.approxLoc != approxLoc) + await this.atsuService.updateATSUInformation({ + where: { station_code: station.toUpperCase() }, + data: { approxLoc }, + }); - await this.agendaService.agenda.cancel({ data: { station_code: station } }); - await this.agendaService.agenda.schedule("in 2 minutes", "logout inactive ATSU", { station_code: station.toUpperCase() }); + await this.agendaService.agenda.cancel({ + data: { station_code: station }, + }); + await this.agendaService.agenda.schedule( + 'in 3 minutes', + 'logout inactive ATSU', + { station_code: station.toUpperCase() }, + ); return { success: true, message: `Logged in as ${station.toUpperCase()}`, - ATSU: CurATSUStation - } + ATSU: CurATSUStation, + }; } return { success: false, - message: `Can't find active station: ${station}` - } + message: `Can't find active station: ${station}`, + }; } @Get('/atsu/online') async getATSUOnline(): Promise { return this.atsuService.ATSUInformationCollection({}); } -} \ No newline at end of file +} diff --git a/src/ATSU/atsu.module.ts b/src/ATSU/atsu.module.ts index 6b03270..54f82ce 100644 --- a/src/ATSU/atsu.module.ts +++ b/src/ATSU/atsu.module.ts @@ -7,13 +7,8 @@ import { AgendaService } from 'src/lib/agenda/agenda.service'; import { PrismaService } from 'src/lib/prisma/prisma.service'; @Module({ - imports: [], - controllers: [ATSUController], - providers: [ - AgendaService, - PrismaService, - ATSUService, - ATSUMessageService - ], + imports: [], + controllers: [ATSUController], + providers: [AgendaService, PrismaService, ATSUService, ATSUMessageService], }) -export class ATSUModule {} \ No newline at end of file +export class ATSUModule {} diff --git a/src/Data/data.controller.ts b/src/Data/data.controller.ts new file mode 100644 index 0000000..0758e54 --- /dev/null +++ b/src/Data/data.controller.ts @@ -0,0 +1,15 @@ +import { Controller, Get } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; + +import { DataService } from './data.service'; + +@Controller() +@ApiTags('Data API') +export class DataController { + constructor(private readonly dataService: DataService) {} + + @Get('/data/network') + getNetworkData(): object { + return this.dataService.getNetworkData(); + } +} diff --git a/src/Data/data.module.ts b/src/Data/data.module.ts new file mode 100644 index 0000000..24f722a --- /dev/null +++ b/src/Data/data.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; + +import { DataController } from './data.controller'; +import { DataService } from './data.service'; + +@Module({ + imports: [], + controllers: [DataController], + providers: [DataService], +}) +export class DataModule {} diff --git a/src/Data/data.service.ts b/src/Data/data.service.ts new file mode 100644 index 0000000..c664ad1 --- /dev/null +++ b/src/Data/data.service.ts @@ -0,0 +1,34 @@ +import { Injectable } from '@nestjs/common'; +import { Cron } from '@nestjs/schedule'; + +import fetch from 'node-fetch'; + +@Injectable() +export class DataService { + private networkData: any = {}; + + constructor() { + this.fetchNetworkData(); + } + + @Cron('0 * * * * *') // Runs every minute + async fetchNetworkData() { + const response = await fetch( + 'https://vatsim-radar.com/api/data/vatsim/data', + { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }, + ) + .then((resp) => resp.json()) + .catch((err) => new Error(err)); + + this.networkData = response; + } + + getNetworkData() { + return this.networkData; + } +} diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts index 060e6f9..44e3fca 100644 --- a/src/app.controller.spec.ts +++ b/src/app.controller.spec.ts @@ -1,20 +1,3 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; - describe('AppController', () => { - let appController: AppController; - - beforeEach(async () => { - const app: TestingModule = await Test.createTestingModule({ - controllers: [AppController], - providers: [AppService], - }).compile(); - - appController = app.get(AppController); - }); - - describe('root', () => { - // TODO: Write some tests - }); + it('to be done', () => expect(true).toBe(true)); }); diff --git a/src/app.controller.ts b/src/app.controller.ts index 3c40133..38f2647 100644 --- a/src/app.controller.ts +++ b/src/app.controller.ts @@ -1,29 +1,36 @@ import { Response } from 'express'; -import { Controller, Get, Post, Body, Param, Res, HttpStatus } from '@nestjs/common'; - import { - ApiTags, - ApiHideProperty, -} from '@nestjs/swagger'; + Controller, + Get, + Post, + Body, + Param, + Res, + HttpStatus, +} from '@nestjs/common'; + +import { ApiTags, ApiHideProperty } from '@nestjs/swagger'; import { AppService } from './app.service'; -import { ATSUMessageService } from "./lib/prisma/atsuMessage.service"; -import { ATSUMessage as ATSUMessageModel } from "@prisma/client"; +import { ATSUMessageService } from './lib/prisma/atsuMessage.service'; +import { ATSUMessage as ATSUMessageModel } from '@prisma/client'; import { SkipThrottle, Throttle } from '@nestjs/throttler'; @SkipThrottle() @Controller() -@ApiTags("vatACARS") +@ApiTags('vatACARS') export class AppController { constructor( private readonly appService: AppService, - private readonly atsuMessageService: ATSUMessageService - ) { } + private readonly atsuMessageService: ATSUMessageService, + ) {} @Get('/hub/dist/:file') @ApiHideProperty() getUpdateChannel(@Param() params: { file: string }, @Res() res: Response) { - res.redirect(`https://dist.vatacars.com/releases/${this.appService.getLatestHubVersion()}/${params.file}`) + res.redirect( + `https://dist.vatacars.com/releases/${this.appService.getLatestHubVersion()}/${params.file}`, + ); } @Get('/versions/latest') @@ -44,23 +51,48 @@ export class AppController { } @Get('/atsu/poll/:station') - async getMessages(@Param("station") station: string): Promise { - return this.atsuMessageService.ATSUMessageCollection({ where: { station } }); + async getMessages( + @Param('station') station: string, + ): Promise { + return this.atsuMessageService.ATSUMessageCollection({ + where: { station }, + }); } @Throttle({ default: { limit: 3, ttl: 60000 } }) @Post('/reporting') - async postReport(@Body() body: any, @Res() response: Response): Promise { + async postReport( + @Body() body: any, + @Res() response: Response, + ): Promise { const { token, source, data } = body; - if (!token || !source || !data) return response.status(400).json({ success: false, message: "Missing data" }); - const ACARSUserData = await fetch(`https://vatacars.com/api/client/me?token=${token}`).then(resp => resp.json()); - if (!ACARSUserData.success) return response.status(HttpStatus.UNAUTHORIZED).json({ success: false, message: "Not authorised" }); - if(!["plugin"].includes(source)) return response.status(400).json({ success: false, message: "Invalid source" }); + if (!token || !source || !data) + return response + .status(400) + .json({ success: false, message: 'Missing data' }); + const ACARSUserData = await fetch( + `https://vatacars.com/api/client/me?token=${token}`, + ).then((resp) => resp.json()); + if (!ACARSUserData.success) + return response + .status(HttpStatus.UNAUTHORIZED) + .json({ success: false, message: 'Not authorised' }); + if (!['plugin'].includes(source)) + return response + .status(400) + .json({ success: false, message: 'Invalid source' }); const { ident, raw } = JSON.parse(data); - if(!ident || !raw) return response.status(400).json({ success: false, message: "Missing data" }); + if (!ident || !raw) + return response + .status(400) + .json({ success: false, message: 'Missing data' }); - this.appService.reportIssue(ACARSUserData.vatACARSUserData.data.cid, source, JSON.parse(data)); + this.appService.reportIssue( + ACARSUserData.vatACARSUserData.data.cid, + source, + JSON.parse(data), + ); return response.status(200).json({ success: true }); } } diff --git a/src/app.module.ts b/src/app.module.ts index dcdc838..fd0f250 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,8 +1,11 @@ import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { ThrottlerModule } from '@nestjs/throttler'; +import { ScheduleModule } from '@nestjs/schedule'; +import { SentryModule } from '@sentry/nestjs/setup'; import { ATSUModule } from './ATSU/atsu.module'; +import { DataModule } from './Data/data.module'; import { AppController } from './app.controller'; @@ -11,17 +14,24 @@ import { AgendaService } from './lib/agenda/agenda.service'; import { PrismaService } from './lib/prisma/prisma.service'; import { ATSUService } from './lib/prisma/atsu.service'; import { ATSUMessageService } from './lib/prisma/atsuMessage.service'; +import { DataService } from './Data/data.service'; import { DB_URL } from './config'; @Module({ imports: [ - ThrottlerModule.forRoot([{ - ttl: 60000, - limit: 10, - }]), + SentryModule.forRoot(), + ThrottlerModule.forRoot([ + { + ttl: 60000, + limit: 10, + }, + ]), MongooseModule.forRoot(DB_URL), - ATSUModule + ScheduleModule.forRoot(), + + ATSUModule, + DataModule ], controllers: [AppController], providers: [ @@ -29,7 +39,8 @@ import { DB_URL } from './config'; AgendaService, PrismaService, ATSUService, - ATSUMessageService + ATSUMessageService, + DataService, ], }) export class AppModule {} diff --git a/src/app.service.ts b/src/app.service.ts index 16f5be9..78b8c9f 100644 --- a/src/app.service.ts +++ b/src/app.service.ts @@ -8,57 +8,83 @@ prisma.$connect(); export class AppService { getLatestHubVersion(): string { // TDB: Dynamically grab this from CDN - return "1.0.2"; + return '1.0.2'; } getLatestVersion(): object { return { - version: '1.0.3', - changes: ["Added basic ADS-C support", "Several crashes fixed", "Added auto crash reporting", "And much more..."], - releaseDateTime: '2024-07-18T01:20:25.723Z', + version: '1.0.6', + changes: [ + 'Fixed visual issues in dispatch window', + 'Added escape, restore, suspend functionality to editor window', + 'Fixed networking code for interactions with vatACARS server', + 'Improved PDC logic', + 'Added several QOL improvements', + 'Improved stability and performance', + ], + releaseDateTime: '2024-07-31T09:38:28.792Z', }; } getAvailableClients(): object { - return [{ - name: "Controller Plugin", - bgImageUrl: "https://images.unsplash.com/photo-1646768843273-4dbb7a174a4d?q=80&w=1964&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", - latestVersion: "1.0.3", - description: "The vatACARS plugin for vatSys is a purpose-built CPDLC interface that helps streamline a controller's workflow. It connects directly with Hoppies ACARS, allowing controllers to easily link up with pilots using our pilot client or various other available options.", - latestChangelog: [{ - logType: 1, - label: "Added ADS-C support" - }, { - logType: 1, - label: "Fixed several causes for crashes" - }, { - logType: 1, - label: "Added automatic crash reporting" - }, { - logType: 1, - label: "Improved PDC construction functionality" - }, { - logType: 1, - label: "Improved quickfill placeholder logic" - }, { - logType: 3, - label: "And much more..." - }], - availableDownloads: [{ - version: "1.0.3", - label: "Early Access" - }], - selectedDownload: 0, - downloadUrl: "https://dist.vatacars.com/plugin/vatACARS.dll" - }, { - name: "Pilot Client", - bgImageUrl: "https://plus.unsplash.com/premium_photo-1661963446458-274e8810cf59?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", - latestVersion: "" - }, { - name: "Dispatcher Center", - bgImageUrl: "https://images.unsplash.com/photo-1580795479225-c50ab8c3348d?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", - latestVersion: "" - }] + return [ + { + name: 'Controller Plugin', + bgImageUrl: + 'https://images.unsplash.com/photo-1646768843273-4dbb7a174a4d?q=80&w=1964&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D', + latestVersion: '1.0.6', + description: + "The vatACARS plugin for vatSys is a purpose-built CPDLC interface that helps streamline a controller's workflow. It connects directly with Hoppies ACARS, allowing controllers to easily link up with pilots using our pilot client or various other available options.", + latestChangelog: [ + { + logType: 1, + label: 'Fixed visual issues in dispatch window', + }, + { + logType: 1, + label: + 'Added escape, restore, suspend functionality to editor window', + }, + { + logType: 1, + label: + 'Fixed networking code for interactions with vatACARS server', + }, + { + logType: 3, + label: 'Improved PDC logic', + }, + { + logType: 3, + label: 'Added several QOL improvements', + }, + { + logType: 3, + label: 'Improved stability and performance', + }, + ], + availableDownloads: [ + { + version: '1.0.6', + label: 'Early Access', + }, + ], + selectedDownload: 0, + downloadUrl: 'https://dist.vatacars.com/plugin/vatACARS.dll', + }, + { + name: 'Pilot Client', + bgImageUrl: + 'https://plus.unsplash.com/premium_photo-1661963446458-274e8810cf59?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D', + latestVersion: '', + }, + { + name: 'Dispatcher Center', + bgImageUrl: + 'https://images.unsplash.com/photo-1580795479225-c50ab8c3348d?q=80&w=2070&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D', + latestVersion: '', + }, + ]; } getRepository(): object { @@ -74,32 +100,40 @@ export class AppService { fileName: 'error.wav', location: 'hub/audio', subFolder: 'audio', - hash: 'becb19f88e88ddef057908cbca90f63b' + hash: 'becb19f88e88ddef057908cbca90f63b', }, { fileName: 'uplinks.xml', location: 'hub/data', subFolder: 'data', - hash: '37faeaa9a09fb28d3d677a99b72addd6', + hash: 'b5924ec8c997ebb9abe4d5b5f1f80a52', }, { fileName: 'quickfill.json', location: 'hub/data', subFolder: 'data', - hash: 'daa7b13bb2bcc6af187ddd74a63ceeaf' - } + hash: 'daa7b13bb2bcc6af187ddd74a63ceeaf', + }, ]; } - reportIssue(cid: string, source: string, data: { ident: string, raw: string }): void { - console.log(`Reporting issue for CID ${cid} from ${source}: ${data.ident}\n${data.raw}`); - prisma.errorReport.create({ - data: { - cid, - source, - ident: data.ident, - raw: data.raw - } - }).catch(err => console.error(err)); + reportIssue( + cid: string, + source: string, + data: { ident: string; raw: string }, + ): void { + console.log( + `Reporting issue for CID ${cid} from ${source}: ${data.ident}\n${data.raw}`, + ); + prisma.errorReport + .create({ + data: { + cid, + source, + ident: data.ident, + raw: data.raw, + }, + }) + .catch((err) => console.error(err)); } } diff --git a/src/lib/agenda/agenda.service.ts b/src/lib/agenda/agenda.service.ts index 18c2d6d..db8c145 100644 --- a/src/lib/agenda/agenda.service.ts +++ b/src/lib/agenda/agenda.service.ts @@ -1,34 +1,32 @@ import { Injectable, OnModuleInit } from '@nestjs/common'; -const Agenda = require("agenda"); +import Agenda = require('agenda'); import { ATSUService } from 'src/lib/prisma/atsu.service'; import { ATSUMessageService } from 'src/lib/prisma/atsuMessage.service'; -import { - defineLogoutInactiveATSU -} from './definitions'; +import { defineLogoutInactiveATSU } from './definitions'; -import { - defineExpireATSUMessage -} from './definitions'; +import { defineExpireATSUMessage } from './definitions'; @Injectable() export class AgendaService implements OnModuleInit { - agenda: any; - - constructor( - private readonly atsuService: ATSUService, - private readonly atsuMessageService: ATSUMessageService - ) { - this.agenda = new Agenda({ db: { address: process.env.database_url, collection: "tasks" } }); - this.agenda.start(); - } + agenda: any; - async onModuleInit() { - // ATSUService - defineLogoutInactiveATSU(this.agenda, this.atsuService); + constructor( + private readonly atsuService: ATSUService, + private readonly atsuMessageService: ATSUMessageService, + ) { + this.agenda = new Agenda.Agenda({ + db: { address: process.env.database_url, collection: 'tasks' }, + }); + this.agenda.start(); + } - // ATSUMessageService - defineExpireATSUMessage(this.agenda, this.atsuMessageService); - } -} \ No newline at end of file + async onModuleInit() { + // ATSUService + defineLogoutInactiveATSU(this.agenda, this.atsuService); + + // ATSUMessageService + defineExpireATSUMessage(this.agenda, this.atsuMessageService); + } +} diff --git a/src/lib/agenda/definitions/atsu.definitions.ts b/src/lib/agenda/definitions/atsu.definitions.ts index 33c0705..a7802db 100644 --- a/src/lib/agenda/definitions/atsu.definitions.ts +++ b/src/lib/agenda/definitions/atsu.definitions.ts @@ -1,12 +1,12 @@ import { ATSUService } from 'src/lib/prisma/atsu.service'; export const defineLogoutInactiveATSU = (agenda, atsuService: ATSUService) => { - agenda.define("logout inactive ATSU", async job => { - const { station_code } = job.attrs.data; + agenda.define('logout inactive ATSU', async (job) => { + const { station_code } = job.attrs.data; - const ATSUStation = await atsuService.ATSUInformation({ station_code }); - if (ATSUStation) await atsuService.deleteATSUInformation({ station_code }); + const ATSUStation = await atsuService.ATSUInformation({ station_code }); + if (ATSUStation) await atsuService.deleteATSUInformation({ station_code }); - job.remove(); - }); -}; \ No newline at end of file + job.remove(); + }); +}; diff --git a/src/lib/agenda/definitions/atsuMessage.definitions.ts b/src/lib/agenda/definitions/atsuMessage.definitions.ts index cd83e19..16ef360 100644 --- a/src/lib/agenda/definitions/atsuMessage.definitions.ts +++ b/src/lib/agenda/definitions/atsuMessage.definitions.ts @@ -1,7 +1,11 @@ import { ATSUMessageService } from 'src/lib/prisma/atsuMessage.service'; -export const defineExpireATSUMessage = (agenda, atsuMessageService: ATSUMessageService) => { - agenda.define("expire ATSUMessage", async job => { - job.remove(); - }); -}; \ No newline at end of file +export const defineExpireATSUMessage = ( + agenda, + atsuMessageService: ATSUMessageService, +) => { + atsuMessageService; + agenda.define('expire ATSUMessage', async (job) => { + job.remove(); + }); +}; diff --git a/src/lib/agenda/definitions/index.ts b/src/lib/agenda/definitions/index.ts index 99987af..a91a8e3 100644 --- a/src/lib/agenda/definitions/index.ts +++ b/src/lib/agenda/definitions/index.ts @@ -1,2 +1,2 @@ export * from './atsu.definitions'; -export * from './atsuMessage.definitions'; \ No newline at end of file +export * from './atsuMessage.definitions'; diff --git a/src/lib/prisma/atsu.service.ts b/src/lib/prisma/atsu.service.ts index 3a33584..9673882 100644 --- a/src/lib/prisma/atsu.service.ts +++ b/src/lib/prisma/atsu.service.ts @@ -1,45 +1,56 @@ -import { Injectable } from "@nestjs/common"; -import { PrismaService } from "./prisma.service"; -import { ATSUInformation, Prisma } from "@prisma/client"; +import { Injectable } from '@nestjs/common'; +import { PrismaService } from './prisma.service'; +import { ATSUInformation, Prisma } from '@prisma/client'; @Injectable() export class ATSUService { - constructor(private prisma: PrismaService) {} + constructor(private prisma: PrismaService) {} - async ATSUInformation(ATSUInformationWhereUniqueInput: Prisma.ATSUInformationWhereUniqueInput): Promise { - return this.prisma.aTSUInformation.findUnique({ - where: ATSUInformationWhereUniqueInput - }); - } + async ATSUInformation( + ATSUInformationWhereUniqueInput: Prisma.ATSUInformationWhereUniqueInput, + ): Promise { + return this.prisma.aTSUInformation.findUnique({ + where: ATSUInformationWhereUniqueInput, + }); + } - async ATSUInformationCollection(params: { - skip?: number; - take?: number; - cursor?: Prisma.ATSUInformationWhereUniqueInput; - where?: Prisma.ATSUInformationWhereInput; - orderBy?: Prisma.ATSUInformationOrderByWithRelationInput; - }): Promise { - const { skip, take, cursor, where, orderBy } = params; - return this.prisma.aTSUInformation.findMany({ - skip, take, cursor, where, orderBy - }); - } + async ATSUInformationCollection(params: { + skip?: number; + take?: number; + cursor?: Prisma.ATSUInformationWhereUniqueInput; + where?: Prisma.ATSUInformationWhereInput; + orderBy?: Prisma.ATSUInformationOrderByWithRelationInput; + }): Promise { + const { skip, take, cursor, where, orderBy } = params; + return this.prisma.aTSUInformation.findMany({ + skip, + take, + cursor, + where, + orderBy, + }); + } - async createATSUInformation(data: Prisma.ATSUInformationCreateInput): Promise { - return this.prisma.aTSUInformation.create({ data }); - } + async createATSUInformation( + data: Prisma.ATSUInformationCreateInput, + ): Promise { + return this.prisma.aTSUInformation.create({ data }); + } - async updateATSUInformation(params: { - where: Prisma.ATSUInformationWhereUniqueInput; - data: Prisma.ATSUInformationUpdateInput; - }): Promise { - const { where, data } = params; - return this.prisma.aTSUInformation.update({ - data, where - }); - } + async updateATSUInformation(params: { + where: Prisma.ATSUInformationWhereUniqueInput; + data: Prisma.ATSUInformationUpdateInput; + }): Promise { + const { where, data } = params; + return this.prisma.aTSUInformation.update({ + data, + where, + }); + } - async deleteATSUInformation(where: Prisma.ATSUInformationWhereUniqueInput): Promise { - return this.prisma.aTSUInformation.delete({ where }); - } -} \ No newline at end of file + async deleteATSUInformation( + where: Prisma.ATSUInformationWhereUniqueInput, + ): Promise { + return this.prisma.aTSUInformation.delete({ where }); + } +} diff --git a/src/lib/prisma/atsuMessage.service.ts b/src/lib/prisma/atsuMessage.service.ts index 37a4fc1..d17a1d6 100644 --- a/src/lib/prisma/atsuMessage.service.ts +++ b/src/lib/prisma/atsuMessage.service.ts @@ -1,43 +1,56 @@ -import { Injectable } from "@nestjs/common"; -import { PrismaService } from "./prisma.service"; -import { ATSUMessage, Prisma } from "@prisma/client"; +import { Injectable } from '@nestjs/common'; +import { PrismaService } from './prisma.service'; +import { ATSUMessage, Prisma } from '@prisma/client'; @Injectable() export class ATSUMessageService { - constructor(private prisma: PrismaService) {} + constructor(private prisma: PrismaService) {} - async ATSUMessage(ATSUMessageWhereUniqueInput: Prisma.ATSUMessageWhereUniqueInput): Promise { - return this.prisma.aTSUMessage.findUnique({ where: ATSUMessageWhereUniqueInput }); - } + async ATSUMessage( + ATSUMessageWhereUniqueInput: Prisma.ATSUMessageWhereUniqueInput, + ): Promise { + return this.prisma.aTSUMessage.findUnique({ + where: ATSUMessageWhereUniqueInput, + }); + } - async ATSUMessageCollection(params: { - skip?: number; - take?: number; - cursor?: Prisma.ATSUMessageWhereUniqueInput; - where?: Prisma.ATSUMessageWhereInput; - orderBy?: Prisma.ATSUMessageOrderByWithRelationInput; - }): Promise { - const { skip, take, cursor, where, orderBy } = params; - return this.prisma.aTSUMessage.findMany({ - skip, take, cursor, where, orderBy - }); - } + async ATSUMessageCollection(params: { + skip?: number; + take?: number; + cursor?: Prisma.ATSUMessageWhereUniqueInput; + where?: Prisma.ATSUMessageWhereInput; + orderBy?: Prisma.ATSUMessageOrderByWithRelationInput; + }): Promise { + const { skip, take, cursor, where, orderBy } = params; + return this.prisma.aTSUMessage.findMany({ + skip, + take, + cursor, + where, + orderBy, + }); + } - async createATSUMessage(data: Prisma.ATSUMessageCreateInput): Promise { - return this.prisma.aTSUMessage.create({ data }); - } + async createATSUMessage( + data: Prisma.ATSUMessageCreateInput, + ): Promise { + return this.prisma.aTSUMessage.create({ data }); + } - async updateATSUMessage(params: { - where: Prisma.ATSUMessageWhereUniqueInput; - data: Prisma.ATSUMessageUpdateInput; - }): Promise { - const { where, data } = params; - return this.prisma.aTSUMessage.update({ - data, where - }); - } + async updateATSUMessage(params: { + where: Prisma.ATSUMessageWhereUniqueInput; + data: Prisma.ATSUMessageUpdateInput; + }): Promise { + const { where, data } = params; + return this.prisma.aTSUMessage.update({ + data, + where, + }); + } - async deleteATSUMessage(where: Prisma.ATSUMessageWhereUniqueInput): Promise { - return this.prisma.aTSUMessage.delete({ where }); - } -} \ No newline at end of file + async deleteATSUMessage( + where: Prisma.ATSUMessageWhereUniqueInput, + ): Promise { + return this.prisma.aTSUMessage.delete({ where }); + } +} diff --git a/src/lib/prisma/prisma.service.ts b/src/lib/prisma/prisma.service.ts index a53ce76..359f950 100644 --- a/src/lib/prisma/prisma.service.ts +++ b/src/lib/prisma/prisma.service.ts @@ -6,4 +6,4 @@ export class PrismaService extends PrismaClient implements OnModuleInit { async onModuleInit() { await this.$connect(); } -} \ No newline at end of file +} diff --git a/src/lib/types/sector.type.ts b/src/lib/types/sector.type.ts index 123d9fb..7d4a4c7 100644 --- a/src/lib/types/sector.type.ts +++ b/src/lib/types/sector.type.ts @@ -1,6 +1,6 @@ // Example Sector: {"name":"ISA","callsign":"BN-ISA_CTR","frequency":125200000} export default class Sector { - name: string; - callsign: string; - frequency: number; -} \ No newline at end of file + name: string; + callsign: string; + frequency: number; +} diff --git a/src/main.ts b/src/main.ts index e3dccd9..f5c142c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,16 +1,22 @@ import 'dotenv/config'; +import * as Sentry from '@sentry/nestjs'; +import { nodeProfilingIntegration } from '@sentry/profiling-node'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; -import { - DocumentBuilder, - SwaggerModule, -} from '@nestjs/swagger'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { SwaggerTheme, SwaggerThemeNameEnum } from 'swagger-themes'; async function bootstrap() { + Sentry.init({ + dsn: process.env.sentry_dsn, + integrations: [nodeProfilingIntegration()], + tracesSampleRate: 1.0, + profilesSampleRate: 1.0, + }); + const app = await NestFactory.create(AppModule); const config = new DocumentBuilder() @@ -22,14 +28,16 @@ async function bootstrap() { .addTag('vatACARS') .build(); - const document = SwaggerModule.createDocument(app, config, { operationIdFactory: (controllerKey: string, methodKey: string) => methodKey }); + const document = SwaggerModule.createDocument(app, config, { + operationIdFactory: (controllerKey: string, methodKey: string) => methodKey, + }); const theme = new SwaggerTheme(); const darkStyle = theme.getBuffer(SwaggerThemeNameEnum.DARK_MONOKAI); SwaggerModule.setup('docs', app, document, { explorer: true, - customCss: darkStyle + customCss: darkStyle, }); await app.listen(process.env.port || 3000); diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000..299fe15 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,16 @@ +const { sentryWebpackPlugin } = require('@sentry/webpack-plugin'); + +module.exports = function (options) { + return { + ...options, + devtool: 'source-map', + plugins: [ + ...options.plugins, + new sentryWebpackPlugin({ + authToken: process.env.sentry_auth_token, + org: 'vatacars', + project: 'vatacars-server', + }) + ] + }; +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 94a3bd7..84fda0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -588,6 +588,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a" integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ== +"@babel/compat-data@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.2.tgz#e41928bd33475305c586f6acbbb7e3ade7a6f7f5" + integrity sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ== + "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": version "7.24.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717" @@ -609,6 +614,27 @@ json5 "^2.2.3" semver "^6.3.1" +"@babel/core@^7.18.5": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" + integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/helper-compilation-targets" "^7.25.2" + "@babel/helper-module-transforms" "^7.25.2" + "@babel/helpers" "^7.25.0" + "@babel/parser" "^7.25.0" + "@babel/template" "^7.25.0" + "@babel/traverse" "^7.25.2" + "@babel/types" "^7.25.2" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/core@^7.24.6": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" @@ -650,6 +676,16 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" +"@babel/generator@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.0.tgz#f858ddfa984350bc3d3b7f125073c9af6988f18e" + integrity sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw== + dependencies: + "@babel/types" "^7.25.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" @@ -687,6 +723,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" + integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== + dependencies: + "@babel/compat-data" "^7.25.2" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b" @@ -809,6 +856,16 @@ "@babel/helper-split-export-declaration" "^7.24.7" "@babel/helper-validator-identifier" "^7.24.7" +"@babel/helper-module-transforms@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" + integrity sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ== + dependencies: + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/traverse" "^7.25.2" + "@babel/helper-optimise-call-expression@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" @@ -891,6 +948,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + "@babel/helper-validator-identifier@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" @@ -911,6 +973,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== +"@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== + "@babel/helper-wrap-function@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" @@ -938,6 +1005,14 @@ "@babel/template" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/helpers@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.0.tgz#e69beb7841cb93a6505531ede34f34e6a073650a" + integrity sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw== + dependencies: + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.0" + "@babel/highlight@^7.24.2": version "7.24.2" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" @@ -968,6 +1043,13 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== +"@babel/parser@^7.25.0", "@babel/parser@^7.25.3": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" + integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== + dependencies: + "@babel/types" "^7.25.2" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" @@ -1666,6 +1748,15 @@ "@babel/parser" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/template@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" + integrity sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.25.0" + "@babel/types" "^7.25.0" + "@babel/traverse@^7.24.1": version "7.24.1" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c" @@ -1698,6 +1789,19 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.25.2": + version "7.25.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.3.tgz#f1b901951c83eda2f3e29450ce92743783373490" + integrity sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.25.0" + "@babel/parser" "^7.25.3" + "@babel/template" "^7.25.0" + "@babel/types" "^7.25.2" + debug "^4.3.1" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3": version "7.24.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf" @@ -1716,6 +1820,15 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" +"@babel/types@^7.25.0", "@babel/types@^7.25.2": + version "7.25.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.2.tgz#55fb231f7dc958cd69ea141a4c2997e819646125" + integrity sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2269,6 +2382,14 @@ resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz#485d6b44e19779c98d04e52bd1d2bcc7001df0ea" integrity sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg== +"@nestjs/microservices@^10.3.10": + version "10.3.10" + resolved "https://registry.yarnpkg.com/@nestjs/microservices/-/microservices-10.3.10.tgz#e00957e0c22b0cc8b041242a40538e2d862255fb" + integrity sha512-zZrilhZmXU2Ik5Usrcy4qEX262Uhvz0/9XlIdX6SRn8I39ns1EE9tAhEBmmkMwh7lsEikRFa4aaa05loi8Gsow== + dependencies: + iterare "1.2.1" + tslib "2.6.3" + "@nestjs/mongoose@^10.0.5": version "10.0.5" resolved "https://registry.yarnpkg.com/@nestjs/mongoose/-/mongoose-10.0.5.tgz#1acbd2eba6bd04749c536fae424f7970aab60184" @@ -2285,6 +2406,14 @@ multer "1.4.4-lts.1" tslib "2.6.2" +"@nestjs/schedule@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@nestjs/schedule/-/schedule-4.1.0.tgz#b0ae64519365821f4186416915e502d225836048" + integrity sha512-WEc96WTXZW+VI/Ng+uBpiBUwm6TWtAbQ4RKWkfbmzKvmbRGzA/9k/UyAWDS9k0pp+ZcbC+MaZQtt7TjQHrwX6g== + dependencies: + cron "3.1.7" + uuid "10.0.0" + "@nestjs/schematics@^10.0.0", "@nestjs/schematics@^10.0.1": version "10.1.1" resolved "https://registry.yarnpkg.com/@nestjs/schematics/-/schematics-10.1.1.tgz#a67fb178a7ad6025ccc3314910b077ac454fcdf3" @@ -2350,6 +2479,232 @@ consola "^2.15.0" node-fetch "^2.6.1" +"@opentelemetry/api-logs@0.52.1": + version "0.52.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz#52906375da4d64c206b0c4cb8ffa209214654ecc" + integrity sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A== + dependencies: + "@opentelemetry/api" "^1.0.0" + +"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.8", "@opentelemetry/api@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" + integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== + +"@opentelemetry/context-async-hooks@^1.25.1": + version "1.25.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz#810bff2fcab84ec51f4684aff2d21f6c057d9e73" + integrity sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ== + +"@opentelemetry/core@1.25.1", "@opentelemetry/core@^1.1.0", "@opentelemetry/core@^1.25.1", "@opentelemetry/core@^1.8.0": + version "1.25.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.25.1.tgz#ff667d939d128adfc7c793edae2f6bca177f829d" + integrity sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ== + dependencies: + "@opentelemetry/semantic-conventions" "1.25.1" + +"@opentelemetry/instrumentation-connect@0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz#1f4aa27894eac2538fb3c8fce7b1be92cae0217e" + integrity sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg== + dependencies: + "@opentelemetry/core" "^1.8.0" + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + "@types/connect" "3.4.36" + +"@opentelemetry/instrumentation-express@0.41.1": + version "0.41.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz#658561df6ffbae86f5ad33e8d7ef2abb7b4967fc" + integrity sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww== + dependencies: + "@opentelemetry/core" "^1.8.0" + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + +"@opentelemetry/instrumentation-fastify@0.38.0": + version "0.38.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz#0cb02ee1156197075e8a90e4fd18a6b6c94221ba" + integrity sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw== + dependencies: + "@opentelemetry/core" "^1.8.0" + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + +"@opentelemetry/instrumentation-graphql@0.42.0": + version "0.42.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz#588a18c39e3b3f655bc09243566172ab0b638d35" + integrity sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + +"@opentelemetry/instrumentation-hapi@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz#ae11190f0f57cdb4dc8d792cb8bca61e5343684c" + integrity sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw== + dependencies: + "@opentelemetry/core" "^1.8.0" + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + +"@opentelemetry/instrumentation-http@0.52.1": + version "0.52.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz#12061501601838d1c912f9c29bdd40a13a7e44cf" + integrity sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q== + dependencies: + "@opentelemetry/core" "1.25.1" + "@opentelemetry/instrumentation" "0.52.1" + "@opentelemetry/semantic-conventions" "1.25.1" + semver "^7.5.2" + +"@opentelemetry/instrumentation-ioredis@0.42.0": + version "0.42.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz#0f488ffc68af3caa474e2f67861759075170729c" + integrity sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/redis-common" "^0.36.2" + "@opentelemetry/semantic-conventions" "^1.23.0" + +"@opentelemetry/instrumentation-koa@0.42.0": + version "0.42.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz#1c180f3605448c2e57a4ba073b69ffba7b2970b3" + integrity sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw== + dependencies: + "@opentelemetry/core" "^1.8.0" + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + +"@opentelemetry/instrumentation-mongodb@0.46.0": + version "0.46.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz#e3720e8ca3ca9f228fbf02f0812f7518c030b05e" + integrity sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/sdk-metrics" "^1.9.1" + "@opentelemetry/semantic-conventions" "^1.22.0" + +"@opentelemetry/instrumentation-mongoose@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.40.0.tgz#9c888312e524c381bfdf56a094c799150332dd51" + integrity sha512-niRi5ZUnkgzRhIGMOozTyoZIvJKNJyhijQI4nF4iFSb+FUx2v5fngfR+8XLmdQAO7xmsD8E5vEGdDVYVtKbZew== + dependencies: + "@opentelemetry/core" "^1.8.0" + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + +"@opentelemetry/instrumentation-mysql2@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz#fa2992c36d54427dccea68e5c69fff01103dabe6" + integrity sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + "@opentelemetry/sql-common" "^0.40.1" + +"@opentelemetry/instrumentation-mysql@0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz#bde5894c8eb447a4b8e940b030b2b73898da03fa" + integrity sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + "@types/mysql" "2.15.22" + +"@opentelemetry/instrumentation-nestjs-core@0.39.0": + version "0.39.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz#733fef4306c796951d7ea1951b45f9df0aed234d" + integrity sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.23.0" + +"@opentelemetry/instrumentation-pg@0.43.0": + version "0.43.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz#3cd94ad5144e1fd326a921280fa8bb7b49005eb5" + integrity sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/semantic-conventions" "^1.22.0" + "@opentelemetry/sql-common" "^0.40.1" + "@types/pg" "8.6.1" + "@types/pg-pool" "2.0.4" + +"@opentelemetry/instrumentation-redis-4@0.41.0": + version "0.41.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.0.tgz#6c1b1a37c18478887f346a3bc7ef309ee9f726c0" + integrity sha512-H7IfGTqW2reLXqput4yzAe8YpDC0fmVNal95GHMLOrS89W+qWUKIqxolSh63hJyfmwPSFwXASzj7wpSk8Az+Dg== + dependencies: + "@opentelemetry/instrumentation" "^0.52.0" + "@opentelemetry/redis-common" "^0.36.2" + "@opentelemetry/semantic-conventions" "^1.22.0" + +"@opentelemetry/instrumentation@0.52.1", "@opentelemetry/instrumentation@^0.49 || ^0.50 || ^0.51 || ^0.52.0", "@opentelemetry/instrumentation@^0.52.0", "@opentelemetry/instrumentation@^0.52.1": + version "0.52.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz#2e7e46a38bd7afbf03cf688c862b0b43418b7f48" + integrity sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw== + dependencies: + "@opentelemetry/api-logs" "0.52.1" + "@types/shimmer" "^1.0.2" + import-in-the-middle "^1.8.1" + require-in-the-middle "^7.1.1" + semver "^7.5.2" + shimmer "^1.2.1" + +"@opentelemetry/instrumentation@^0.46.0": + version "0.46.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.46.0.tgz#a8a252306f82e2eace489312798592a14eb9830e" + integrity sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw== + dependencies: + "@types/shimmer" "^1.0.2" + import-in-the-middle "1.7.1" + require-in-the-middle "^7.1.1" + semver "^7.5.2" + shimmer "^1.2.1" + +"@opentelemetry/redis-common@^0.36.2": + version "0.36.2" + resolved "https://registry.yarnpkg.com/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz#906ac8e4d804d4109f3ebd5c224ac988276fdc47" + integrity sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g== + +"@opentelemetry/resources@1.25.1", "@opentelemetry/resources@^1.25.1": + version "1.25.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.25.1.tgz#bb9a674af25a1a6c30840b755bc69da2796fefbb" + integrity sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ== + dependencies: + "@opentelemetry/core" "1.25.1" + "@opentelemetry/semantic-conventions" "1.25.1" + +"@opentelemetry/sdk-metrics@^1.9.1": + version "1.25.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz#50c985ec15557a9654334e7fa1018dc47a8a56b7" + integrity sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q== + dependencies: + "@opentelemetry/core" "1.25.1" + "@opentelemetry/resources" "1.25.1" + lodash.merge "^4.6.2" + +"@opentelemetry/sdk-trace-base@^1.22", "@opentelemetry/sdk-trace-base@^1.25.1": + version "1.25.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz#cbc1e60af255655d2020aa14cde17b37bd13df37" + integrity sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw== + dependencies: + "@opentelemetry/core" "1.25.1" + "@opentelemetry/resources" "1.25.1" + "@opentelemetry/semantic-conventions" "1.25.1" + +"@opentelemetry/semantic-conventions@1.25.1", "@opentelemetry/semantic-conventions@^1.17.0", "@opentelemetry/semantic-conventions@^1.22.0", "@opentelemetry/semantic-conventions@^1.23.0", "@opentelemetry/semantic-conventions@^1.25.1": + version "1.25.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz#0deecb386197c5e9c2c28f2f89f51fb8ae9f145e" + integrity sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ== + +"@opentelemetry/sql-common@^0.40.1": + version "0.40.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz#93fbc48d8017449f5b3c3274f2268a08af2b83b6" + integrity sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg== + dependencies: + "@opentelemetry/core" "^1.1.0" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -2401,6 +2756,184 @@ dependencies: "@prisma/debug" "5.15.0" +"@prisma/instrumentation@5.17.0": + version "5.17.0" + resolved "https://registry.yarnpkg.com/@prisma/instrumentation/-/instrumentation-5.17.0.tgz#f741ff517f54b1a896fb8605e0d702f29855c6cb" + integrity sha512-c1Sle4ji8aasMcYfBBHFM56We4ljfenVtRmS8aY06BllS7SoU6SmJBwG7vil+GHiR0Yrh+t9iBwt4AY0Jr4KNQ== + dependencies: + "@opentelemetry/api" "^1.8" + "@opentelemetry/instrumentation" "^0.49 || ^0.50 || ^0.51 || ^0.52.0" + "@opentelemetry/sdk-trace-base" "^1.22" + +"@sentry/babel-plugin-component-annotate@2.22.0": + version "2.22.0" + resolved "https://registry.yarnpkg.com/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.0.tgz#a7e1cc99d1a738d1eb17757341dff4db3a93c2dc" + integrity sha512-UzH+NNhgnOo6UFku3C4TEz+pO/yDcIA5FKTJvLbJ7lQwAjsqLs3DZWm4cCA08skICb8mULArF6S/dn5/butVCA== + +"@sentry/bundler-plugin-core@2.22.0": + version "2.22.0" + resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.0.tgz#6a67761ff5bc0dc897e56acba0b12547bc623e14" + integrity sha512-/xXN8o7565WMsewBnQFfjm0E5wqhYsegg++HJ5RjrY/cTM4qcd/ven44GEMxqGFJitZizvkk3NHszaHylzcRUw== + dependencies: + "@babel/core" "^7.18.5" + "@sentry/babel-plugin-component-annotate" "2.22.0" + "@sentry/cli" "^2.33.1" + dotenv "^16.3.1" + find-up "^5.0.0" + glob "^9.3.2" + magic-string "0.30.8" + unplugin "1.0.1" + +"@sentry/cli-darwin@2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-darwin/-/cli-darwin-2.33.1.tgz#e4eb1dd01ee3ce2788025426b860ccc63759589c" + integrity sha512-+4/VIx/E1L2hChj5nGf5MHyEPHUNHJ/HoG5RY+B+vyEutGily1c1+DM2bum7RbD0xs6wKLIyup5F02guzSzG8A== + +"@sentry/cli-linux-arm64@2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.33.1.tgz#9ea1718c21ef32ca83b0852ca29fb461fd26d25a" + integrity sha512-DbGV56PRKOLsAZJX27Jt2uZ11QfQEMmWB4cIvxkKcFVE+LJP4MVA+MGGRUL6p+Bs1R9ZUuGbpKGtj0JiG6CoXw== + +"@sentry/cli-linux-arm@2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-arm/-/cli-linux-arm-2.33.1.tgz#e8a1dca4d008dd6a72ab5935304c104e98e2901c" + integrity sha512-zbxEvQju+tgNvzTOt635le4kS/Fbm2XC2RtYbCTs034Vb8xjrAxLnK0z1bQnStUV8BkeBHtsNVrG+NSQDym2wg== + +"@sentry/cli-linux-i686@2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-i686/-/cli-linux-i686-2.33.1.tgz#f1fe8dd4d6dde0812a94fba31de8054ddfb7284a" + integrity sha512-g2LS4oPXkPWOfKWukKzYp4FnXVRRSwBxhuQ9eSw2peeb58ZIObr4YKGOA/8HJRGkooBJIKGaAR2mH2Pk1TKaiA== + +"@sentry/cli-linux-x64@2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-linux-x64/-/cli-linux-x64-2.33.1.tgz#6e086675356a9eb79731bf9e447d078bae1b5adf" + integrity sha512-IV3dcYV/ZcvO+VGu9U6kuxSdbsV2kzxaBwWUQxtzxJ+cOa7J8Hn1t0koKGtU53JVZNBa06qJWIcqgl4/pCuKIg== + +"@sentry/cli-win32-i686@2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-win32-i686/-/cli-win32-i686-2.33.1.tgz#0e6b36c4a2f5f6e85a59247a123d276b3ef10f1a" + integrity sha512-F7cJySvkpzIu7fnLKNHYwBzZYYwlhoDbAUnaFX0UZCN+5DNp/5LwTp37a5TWOsmCaHMZT4i9IO4SIsnNw16/zQ== + +"@sentry/cli-win32-x64@2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli-win32-x64/-/cli-win32-x64-2.33.1.tgz#2d00b38a2dd9f3355df91825582ada3ea0034e86" + integrity sha512-8VyRoJqtb2uQ8/bFRKNuACYZt7r+Xx0k2wXRGTyH05lCjAiVIXn7DiS2BxHFty7M1QEWUCMNsb/UC/x/Cu2wuA== + +"@sentry/cli@^2.33.1": + version "2.33.1" + resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-2.33.1.tgz#cfbdffdd896b05b92a659baf435b5607037af928" + integrity sha512-dUlZ4EFh98VFRPJ+f6OW3JEYQ7VvqGNMa0AMcmvk07ePNeK/GicAWmSQE4ZfJTTl80ul6HZw1kY01fGQOQlVRA== + dependencies: + https-proxy-agent "^5.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + proxy-from-env "^1.1.0" + which "^2.0.2" + optionalDependencies: + "@sentry/cli-darwin" "2.33.1" + "@sentry/cli-linux-arm" "2.33.1" + "@sentry/cli-linux-arm64" "2.33.1" + "@sentry/cli-linux-i686" "2.33.1" + "@sentry/cli-linux-x64" "2.33.1" + "@sentry/cli-win32-i686" "2.33.1" + "@sentry/cli-win32-x64" "2.33.1" + +"@sentry/core@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-8.25.0.tgz#f64e50b88ee5b13f1d52b543638b2eb5c8e326d8" + integrity sha512-7KtglbrW1eX4DOHkf6i4rRIExEf2CgtQ99qZ8gn5FUaAmNMg0rK7bb1yZMx0RZtp5G1TSz/S0jQQgxHWebaEig== + dependencies: + "@sentry/types" "8.25.0" + "@sentry/utils" "8.25.0" + +"@sentry/nestjs@^8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@sentry/nestjs/-/nestjs-8.25.0.tgz#5bd7b190624154637546fb60f7cc98fc75fc8a95" + integrity sha512-nq4HlnE6uza3hsNGi/eaWlTI5w12CumOaSgVkTZeJMB5D45IOjxmyhgsnMDR79O1iuf1Q6lJ82RWj87EaHxH6A== + dependencies: + "@sentry/core" "8.25.0" + "@sentry/node" "8.25.0" + "@sentry/types" "8.25.0" + "@sentry/utils" "8.25.0" + +"@sentry/node@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-8.25.0.tgz#1642e065082aba7e9dca5506a18366b2dbb4ce58" + integrity sha512-KFeJpYU/7CKi/v8D72ztniA+QqH0yBv2wzEP0PUe3DWZ/Fwl0OQSVWNNuDfJBQUvk3NrytCH5A6klZjU0/rwlw== + dependencies: + "@opentelemetry/api" "^1.9.0" + "@opentelemetry/context-async-hooks" "^1.25.1" + "@opentelemetry/core" "^1.25.1" + "@opentelemetry/instrumentation" "^0.52.1" + "@opentelemetry/instrumentation-connect" "0.38.0" + "@opentelemetry/instrumentation-express" "0.41.1" + "@opentelemetry/instrumentation-fastify" "0.38.0" + "@opentelemetry/instrumentation-graphql" "0.42.0" + "@opentelemetry/instrumentation-hapi" "0.40.0" + "@opentelemetry/instrumentation-http" "0.52.1" + "@opentelemetry/instrumentation-ioredis" "0.42.0" + "@opentelemetry/instrumentation-koa" "0.42.0" + "@opentelemetry/instrumentation-mongodb" "0.46.0" + "@opentelemetry/instrumentation-mongoose" "0.40.0" + "@opentelemetry/instrumentation-mysql" "0.40.0" + "@opentelemetry/instrumentation-mysql2" "0.40.0" + "@opentelemetry/instrumentation-nestjs-core" "0.39.0" + "@opentelemetry/instrumentation-pg" "0.43.0" + "@opentelemetry/instrumentation-redis-4" "0.41.0" + "@opentelemetry/resources" "^1.25.1" + "@opentelemetry/sdk-trace-base" "^1.25.1" + "@opentelemetry/semantic-conventions" "^1.25.1" + "@prisma/instrumentation" "5.17.0" + "@sentry/core" "8.25.0" + "@sentry/opentelemetry" "8.25.0" + "@sentry/types" "8.25.0" + "@sentry/utils" "8.25.0" + import-in-the-middle "^1.11.0" + optionalDependencies: + opentelemetry-instrumentation-fetch-node "1.2.3" + +"@sentry/opentelemetry@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@sentry/opentelemetry/-/opentelemetry-8.25.0.tgz#888425f08668c288611d4783346d16e364d964d2" + integrity sha512-6g4TXwQMHtvmlu2i1OKqvFD2W2RTrGBxDtJ1tBQmqCfHKyiqQ37gy6AozuwrQ3po1KKbawaQGIFNEzb4wnSrfA== + dependencies: + "@sentry/core" "8.25.0" + "@sentry/types" "8.25.0" + "@sentry/utils" "8.25.0" + +"@sentry/profiling-node@^8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@sentry/profiling-node/-/profiling-node-8.25.0.tgz#696501eaf848b032f297bda7eb78e1eae5b90027" + integrity sha512-bFe5FYjk0ShxIp1ZVSSdBpDKWR17vTuDL06Fh9QbIy7Ni6Wudipxu3a5RlLrgQ1mf3w+tIZf1m8cNuplnXNC4g== + dependencies: + "@sentry/core" "8.25.0" + "@sentry/node" "8.25.0" + "@sentry/types" "8.25.0" + "@sentry/utils" "8.25.0" + detect-libc "^2.0.2" + node-abi "^3.61.0" + +"@sentry/types@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-8.25.0.tgz#cde3d900efe7fb7614a670f0af2634a2cbd92693" + integrity sha512-ojim0gDcRhGJPguYrtms4FsprX4xZz3LGNk9Z0hwTbSVEdlhQIInsQ7CYcdM3sjUs+qT7kfpxTRZGUeZNRRJcA== + +"@sentry/utils@8.25.0": + version "8.25.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-8.25.0.tgz#708ccf8b953f64e1a5915e09d4cb33105b29e436" + integrity sha512-mVlkV7S62ZZ2jM38/kOwWx2xoW8fUv2cjw2IwFKoAIPyLBh3mo1WJtvfdtN/rXGjQWZJBKW53EWaWnD00rkjyA== + dependencies: + "@sentry/types" "8.25.0" + +"@sentry/webpack-plugin@^2.22.0": + version "2.22.0" + resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-2.22.0.tgz#f02e087fe9b318fefdb5441149ceadfc60407ae3" + integrity sha512-u2brctki0AMCoZksdAConQSYE6PokRVeZ4YYsbnJYkAi0KuaQnczsRwS9e2L0bK2CmZ7QdyYcrjaXHNlXaFDbQ== + dependencies: + "@sentry/bundler-plugin-core" "2.22.0" + unplugin "1.0.1" + uuid "^9.0.0" + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -2875,6 +3408,13 @@ dependencies: "@types/node" "*" +"@types/connect@3.4.36": + version "3.4.36" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" + integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== + dependencies: + "@types/node" "*" + "@types/cookiejar@^2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.5.tgz#14a3e83fa641beb169a2dd8422d91c3c345a9a78" @@ -2965,6 +3505,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/luxon@~3.4.0": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.4.2.tgz#e4fc7214a420173cea47739c33cdf10874694db7" + integrity sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA== + "@types/methods@^1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@types/methods/-/methods-1.1.4.tgz#d3b7ac30ac47c91054ea951ce9eed07b1051e547" @@ -2975,6 +3520,13 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== +"@types/mysql@2.15.22": + version "2.15.22" + resolved "https://registry.yarnpkg.com/@types/mysql/-/mysql-2.15.22.tgz#8705edb9872bf4aa9dbc004cd494e00334e5cdb4" + integrity sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ== + dependencies: + "@types/node" "*" + "@types/node@*", "@types/node@^20.3.1": version "20.12.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.5.tgz#74c4f31ab17955d0b5808cdc8fd2839526ad00b3" @@ -2982,6 +3534,31 @@ dependencies: undici-types "~5.26.4" +"@types/pg-pool@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/pg-pool/-/pg-pool-2.0.4.tgz#b5c60f678094ff3acf3442628a7f708928fcf263" + integrity sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ== + dependencies: + "@types/pg" "*" + +"@types/pg@*": + version "8.11.6" + resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.11.6.tgz#a2d0fb0a14b53951a17df5197401569fb9c0c54b" + integrity sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ== + dependencies: + "@types/node" "*" + pg-protocol "*" + pg-types "^4.0.1" + +"@types/pg@8.6.1": + version "8.6.1" + resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.6.1.tgz#099450b8dc977e8197a44f5229cedef95c8747f9" + integrity sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w== + dependencies: + "@types/node" "*" + pg-protocol "*" + pg-types "^2.2.0" + "@types/qs@*": version "6.9.14" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" @@ -3014,6 +3591,11 @@ "@types/node" "*" "@types/send" "*" +"@types/shimmer@^1.0.2": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded" + integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg== + "@types/stack-utils@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" @@ -3303,6 +3885,11 @@ acorn-import-assertions@^1.9.0: resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -3318,6 +3905,11 @@ acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.8.1: + version "8.12.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" + integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + agenda@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/agenda/-/agenda-5.0.0.tgz#1b22b8c7710e5d973498f354713665bfd5e51c33" @@ -3330,6 +3922,13 @@ agenda@^5.0.0: moment-timezone "~0.5.37" mongodb "^4.11.0" +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + ajv-formats@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -3521,6 +4120,15 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" +axios@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" + integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" @@ -3736,6 +4344,16 @@ browserslist@^4.23.0: node-releases "^2.0.14" update-browserslist-db "^1.1.0" +browserslist@^4.23.1: + version "4.23.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" + integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== + dependencies: + caniuse-lite "^1.0.30001646" + electron-to-chromium "^1.5.4" + node-releases "^2.0.18" + update-browserslist-db "^1.1.0" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -3828,6 +4446,11 @@ caniuse-lite@^1.0.30001640: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001641.tgz#3572862cd18befae3f637f2a1101cc033c6782ac" integrity sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA== +caniuse-lite@^1.0.30001646: + version "1.0.30001651" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz#52de59529e8b02b1aedcaaf5c05d9e23c0c28138" + integrity sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg== + chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -3915,6 +4538,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== +cjs-module-lexer@^1.2.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" + integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -4175,6 +4803,14 @@ cron-parser@^3.5.0: is-nan "^1.3.2" luxon "^1.26.0" +cron@3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/cron/-/cron-3.1.7.tgz#3423d618ba625e78458fff8cb67001672d49ba0d" + integrity sha512-tlBg7ARsAMQLzgwqVxy8AZl/qlTc5nibqYwtNGoCrd+cV+ugI+tvZC1oT/8dFH8W455YrywGykx/KMmAqOr7Jw== + dependencies: + "@types/luxon" "~3.4.0" + luxon "~3.4.0" + cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -4246,6 +4882,13 @@ debug@2.6.9: dependencies: ms "2.0.0" +debug@4, debug@^4.3.5: + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== + dependencies: + ms "2.1.2" + debug@4.x, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" @@ -4351,6 +4994,11 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +detect-libc@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -4433,7 +5081,7 @@ dotenv-expand@10.0.0: resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-10.0.0.tgz#12605d00fb0af6d0a592e6558585784032e4ef37" integrity sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A== -dotenv@16.4.5: +dotenv@16.4.5, dotenv@^16.3.1: version "16.4.5" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== @@ -4463,6 +5111,11 @@ electron-to-chromium@^1.4.820: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.825.tgz#2d9c3d1eb81a67ecea0c06bcf70740b00ba52718" integrity sha512-OCcF+LwdgFGcsYPYC5keEEFC2XT0gBhrYbeGzHCx7i9qRFbzO/AqTmc/C/1xNhJj+JA7rzlN7mpBuStshh96Cg== +electron-to-chromium@^1.5.4: + version "1.5.6" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz#c81d9938b5a877314ad370feb73b4e5409b36abd" + integrity sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw== + emitter-component@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.2.tgz#d65af5833dc7c682fd0ade35f902d16bc4bad772" @@ -5041,6 +5694,11 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== +follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -5262,7 +5920,7 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^9.2.0: +glob@^9.2.0, glob@^9.3.2: version "9.3.5" resolved "https://registry.yarnpkg.com/glob/-/glob-9.3.5.tgz#ca2ed8ca452781a3009685607fdf025a899dfe21" integrity sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q== @@ -5455,6 +6113,14 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + human-interval@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/human-interval/-/human-interval-2.0.1.tgz#655baf606c7067bb26042dcae14ec777b099af15" @@ -5511,6 +6177,26 @@ import-fresh@^3.2.1, import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-in-the-middle@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz#3e111ff79c639d0bde459bd7ba29dd9fdf357364" + integrity sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg== + dependencies: + acorn "^8.8.2" + acorn-import-assertions "^1.9.0" + cjs-module-lexer "^1.2.2" + module-details-from-path "^1.0.3" + +import-in-the-middle@^1.11.0, import-in-the-middle@^1.8.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz#a94c4925b8da18256cde3b3b7b38253e6ca5e708" + integrity sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q== + dependencies: + acorn "^8.8.2" + acorn-import-attributes "^1.9.5" + cjs-module-lexer "^1.2.2" + module-details-from-path "^1.0.3" + import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" @@ -6475,6 +7161,11 @@ luxon@^1.26.0: resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.1.tgz#528cdf3624a54506d710290a2341aa8e6e6c61b0" integrity sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw== +luxon@~3.4.0: + version "3.4.4" + resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af" + integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA== + macos-release@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.1.tgz#bccac4a8f7b93163a8d163b8ebf385b3c5f55bf9" @@ -6494,6 +7185,13 @@ magic-string@0.30.5: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +magic-string@0.30.8: + version "0.30.8" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" + integrity sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.15" + make-dir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" @@ -6662,6 +7360,11 @@ mkdirp@^3.0.1: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== + moment-timezone@~0.5.37: version "0.5.45" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.45.tgz#cb685acd56bac10e69d93c536366eb65aa6bcf5c" @@ -6800,6 +7503,13 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +node-abi@^3.61.0: + version "3.65.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" + integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== + dependencies: + semver "^7.3.5" + node-abort-controller@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" @@ -6812,7 +7522,14 @@ node-emoji@1.11.0: dependencies: lodash "^4.17.21" -node-fetch@^2.6.1: +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -6829,6 +7546,11 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -6886,6 +7608,11 @@ object.assign@^4.1.5: has-symbols "^1.0.3" object-keys "^1.1.1" +obuf@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -6933,6 +7660,14 @@ opencollective-postinstall@^2.0.3: resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz#7a0fff978f6dbfa4d006238fbac98ed4198c3259" integrity sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q== +opentelemetry-instrumentation-fetch-node@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/opentelemetry-instrumentation-fetch-node/-/opentelemetry-instrumentation-fetch-node-1.2.3.tgz#beb24048bdccb1943ba2a5bbadca68020e448ea7" + integrity sha512-Qb11T7KvoCevMaSeuamcLsAD+pZnavkhDnlVL0kRozfhl42dKG5Q3anUklAFKJZjY3twLR+BnRa6DlwwkIE/+A== + dependencies: + "@opentelemetry/instrumentation" "^0.46.0" + "@opentelemetry/semantic-conventions" "^1.17.0" + optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -7126,6 +7861,45 @@ pdfmake@^0.2.10: iconv-lite "^0.6.3" xmldoc "^1.1.2" +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-numeric@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a" + integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw== + +pg-protocol@*: + version "1.6.1" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.1.tgz#21333e6d83b01faaebfe7a33a7ad6bfd9ed38cb3" + integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg== + +pg-types@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg-types@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.2.tgz#399209a57c326f162461faa870145bb0f918b76d" + integrity sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng== + dependencies: + pg-int8 "1.0.1" + pg-numeric "1.0.2" + postgres-array "~3.0.1" + postgres-bytea "~3.0.0" + postgres-date "~2.1.0" + postgres-interval "^3.0.0" + postgres-range "^1.1.1" + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -7178,6 +7952,55 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-array@~3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-3.0.2.tgz#68d6182cb0f7f152a7e60dc6a6889ed74b0a5f98" + integrity sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-bytea@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089" + integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw== + dependencies: + obuf "~1.1.2" + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-date@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.1.0.tgz#b85d3c1fb6fb3c6c8db1e9942a13a3bf625189d0" + integrity sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +postgres-interval@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a" + integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw== + +postgres-range@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.4.tgz#a59c5f9520909bcec5e63e8cf913a92e4c952863" + integrity sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -7221,6 +8044,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -7244,6 +8072,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + proxy-middleware@latest: version "0.15.0" resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56" @@ -7422,6 +8255,15 @@ require-from-string@^2.0.2: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-in-the-middle@^7.1.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz#606977820d4b5f9be75e5a108ce34cfed25b3bb4" + integrity sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ== + dependencies: + debug "^4.3.5" + module-details-from-path "^1.0.3" + resolve "^1.22.8" + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -7444,7 +8286,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.6, resolve@^1.14.2, resolve@^1.20.0: +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.8: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -7564,6 +8406,11 @@ semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" +semver@^7.5.2: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@^7.6.2: version "7.6.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" @@ -7671,6 +8518,11 @@ shelljs@0.8.5: interpret "^1.0.0" rechoir "^0.6.2" +shimmer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + side-channel@^1.0.4, side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" @@ -8197,16 +9049,16 @@ tslib@2.6.2, tslib@^2.1.0, tslib@^2.6.2: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tslib@2.6.3, tslib@^2.3.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + tslib@^1.11.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -8394,6 +9246,16 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +unplugin@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.0.1.tgz#83b528b981cdcea1cad422a12cd02e695195ef3f" + integrity sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA== + dependencies: + acorn "^8.8.1" + chokidar "^3.5.3" + webpack-sources "^3.2.3" + webpack-virtual-modules "^0.5.0" + update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -8427,12 +9289,17 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +uuid@10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.1: +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -8509,6 +9376,11 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== +webpack-virtual-modules@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" + integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== + webpack@5.90.1: version "5.90.1" resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.90.1.tgz#62ab0c097d7cbe83d32523dbfbb645cdb7c3c01c" @@ -8599,7 +9471,7 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15: gopd "^1.0.1" has-tostringtag "^1.0.2" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==