From 12e2e443f9fc77a2d64ef784f964b6eb64ed80d3 Mon Sep 17 00:00:00 2001 From: Eric Cabrel TIOGO Date: Thu, 23 May 2024 22:56:10 +0200 Subject: [PATCH] chore(backend): configure sentry for observability --- apps/backend/.env.example | 2 +- apps/backend/README.md | 46 +- apps/backend/env.d.ts | 2 + apps/backend/package.json | 1 + apps/backend/src/app.module.ts | 2 +- apps/backend/src/app.service.ts | 4 + apps/backend/src/configs/environment.ts | 8 + apps/backend/src/configs/instrument.ts | 22 + apps/backend/src/main.ts | 9 +- apps/backend/tsconfig.json | 3 +- packages/domain/index.ts | 2 +- packages/domain/src/domain.module.ts | 2 +- .../services/folders/folder.service.test.ts | 2 +- .../src/services/folders/folder.service.ts | 2 +- .../src/{ => services}/prisma.service.ts | 0 .../domain/src/services/roles/role.service.ts | 2 +- .../services/sessions/session.service.test.ts | 2 +- .../src/services/sessions/session.service.ts | 2 +- .../services/snippets/snippet.service.test.ts | 2 +- .../src/services/snippets/snippet.service.ts | 2 +- .../src/services/users/user.service.test.ts | 2 +- .../domain/src/services/users/user.service.ts | 2 +- packages/domain/tests/helpers.ts | 2 +- yarn.lock | 782 +++++++++++++++++- 24 files changed, 854 insertions(+), 51 deletions(-) create mode 100644 apps/backend/src/configs/instrument.ts rename packages/domain/src/{ => services}/prisma.service.ts (100%) diff --git a/apps/backend/.env.example b/apps/backend/.env.example index 203f6ddb..4c54fcea 100644 --- a/apps/backend/.env.example +++ b/apps/backend/.env.example @@ -17,4 +17,4 @@ WEB_AUTH_ERROR_URL=http://localhost:7500/auth/error SESSION_LIFETIME=90# 90 days SENTRY_DSN= SENTRY_ENABLED=false -SNIPPET_RENDERER_URL=http://localhost:3000/dev +SNIPPET_RENDERER_API_URL=http://localhost:3000/dev diff --git a/apps/backend/README.md b/apps/backend/README.md index 7708f3a2..10a04a1a 100644 --- a/apps/backend/README.md +++ b/apps/backend/README.md @@ -37,34 +37,36 @@ yarn install ```` Create configuration file from the template ```shell -cp .env.template .env +cp .env.template .env.local # Edit configuration to match your local environment and save -nano .env +nano .env.local ``` **Environment variables list** -| Variable | Description | -|----------------------|--------------------------------------------------------------------------| -| NODE_ENV | Node.js environment (default: development) | -| HOST | Host name where the application is running (default: http://localhost) | -| PORT | Port number of the application (default: 7501) | -| ENABLE_INTROSPECTION | Enable/Disable GraphQL introspection (must `false` in production) | -| DATABASE_URL | URL of the database | -| ADMIN_PASSWORD | Password of the default admin user. | -| CONVERTKIT_API_KEY | ConvertKit API key | -| CONVERTKIT_FORM_ID | ConvertKit Form ID | -| CONVERTKIT_TAG_ID | ConvertKit Tag ID | -| REQUEST_TIMEOUT | Max duration of a request (default: 30 seconds) | -| GITHUB_CLIENT_ID | GitHub application client ID for authentication with GitHub | -| GITHUB_CLIENT_SECRET | GitHub application client secret for authentication with GitHub | -| WEB_APP_URL | URL of the frontend the application that communicates with this app | -| WEB_AUTH_SUCCESS_URL | Callback URL of the frontend application when the authentication succeed | -| WEB_AUTH_ERROR_URL | Callback URL of the frontend application when the authentication failed | -| SESSION_LIFETIME | The session's lifetime when a user authenticate (default: 90 days) | -| SENTRY_DSN | Sentry DSN | -| SENTRY_ENABLED | Enable/Disable Sentry | +| Variable | Description | +|--------------------------|--------------------------------------------------------------------------------------| +| NODE_ENV | Node.js environment (default: development) | +| APP_VERSION | The current version of the application | +| HOST | Host name where the application is running (default: http://localhost) | +| PORT | Port number of the application (default: 7501) | +| ENABLE_INTROSPECTION | Enable/Disable GraphQL introspection (must `false` in production) | +| DATABASE_URL | URL of the database | +| ADMIN_PASSWORD | Password of the default admin user. | +| CONVERTKIT_API_KEY | ConvertKit API key | +| CONVERTKIT_FORM_ID | ConvertKit Form ID | +| CONVERTKIT_TAG_ID | ConvertKit Tag ID | +| REQUEST_TIMEOUT | Max duration of a request (default: 30 seconds) | +| GITHUB_CLIENT_ID | GitHub application client ID for authentication with GitHub | +| GITHUB_CLIENT_SECRET | GitHub application client secret for authentication with GitHub | +| WEB_APP_URL | URL of the frontend the application that communicates with this app | +| WEB_AUTH_SUCCESS_URL | Callback URL of the frontend application when the authentication succeed | +| WEB_AUTH_ERROR_URL | Callback URL of the frontend application when the authentication failed | +| SESSION_LIFETIME | The session's lifetime when a user authenticate (default: 90 days) | +| SENTRY_DSN | Sentry DSN | +| SENTRY_ENABLED | Enable/Disable Sentry | +| SNIPPET_RENDERER_API_URL | Base URL of the API (the current one) for generating the html content from a snippet | Start the application ```bash diff --git a/apps/backend/env.d.ts b/apps/backend/env.d.ts index b694eb34..32bc29a8 100644 --- a/apps/backend/env.d.ts +++ b/apps/backend/env.d.ts @@ -9,9 +9,11 @@ export type EnvironmentVariables = { GITHUB_CLIENT_ID: string; GITHUB_CLIENT_SECRET: string; HOST: string; + NODE_ENV: string; PORT: string; REQUEST_TIMEOUT: string; SENTRY_DSN: string; + SENTRY_ENABLED: string; SESSION_LIFETIME: string; SNIPPET_RENDERER_URL: string; WEB_APP_URL: string; diff --git a/apps/backend/package.json b/apps/backend/package.json index 891fa5a9..67692620 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -23,6 +23,7 @@ "@nestjs/core": "10.3.8", "@nestjs/platform-express": "10.3.8", "@prisma/client": "5.14.0", + "@sentry/node": "8.3.0", "reflect-metadata": "0.2.2", "rxjs": "7.8.1", "zod": "3.23.8" diff --git a/apps/backend/src/app.module.ts b/apps/backend/src/app.module.ts index 3ee5c126..f48c2fdc 100644 --- a/apps/backend/src/app.module.ts +++ b/apps/backend/src/app.module.ts @@ -10,7 +10,7 @@ import appConfig, { EnvironmentVariables, validate } from './configs/environment controllers: [AppController], imports: [ ConfigModule.forRoot({ - envFilePath: ['.env', '.env.test'], + envFilePath: ['.env.local', '.env.test'], isGlobal: true, load: [appConfig], validate, diff --git a/apps/backend/src/app.service.ts b/apps/backend/src/app.service.ts index dab61631..c1d94239 100644 --- a/apps/backend/src/app.service.ts +++ b/apps/backend/src/app.service.ts @@ -16,6 +16,10 @@ export class AppService { const roles = await this.roleService.findAll(); + if (Math.random() > 0.5) { + throw new Error('[Data Loader]: Role administrator not found'); + } + this.logger.log(roles); return 'Hello World!'; diff --git a/apps/backend/src/configs/environment.ts b/apps/backend/src/configs/environment.ts index 17f4c9a1..0d779525 100644 --- a/apps/backend/src/configs/environment.ts +++ b/apps/backend/src/configs/environment.ts @@ -6,13 +6,21 @@ export default registerAs('app', () => ({ env: process.env.NODE_ENV, host: process.env.HOST, port: parseInt(process.env.PORT ?? '7501', 10), + sentry: { + dsn: process.env.SENTRY_DSN, + enabled: process.env.SENTRY_ENABLED, + }, + version: process.env.APP_VERSION, })); const EnvironmentVariablesSchema = z.object({ + APP_VERSION: z.string(), DATABASE_URL: z.string(), HOST: z.string(), NODE_ENV: z.union([z.literal('development'), z.literal('production'), z.literal('test')]), PORT: z.number({ coerce: true }).min(7000).max(8000), + SENTRY_DSN: z.string(), + SENTRY_ENABLED: z.boolean({ coerce: true }), }); export type EnvironmentVariables = z.infer; diff --git a/apps/backend/src/configs/instrument.ts b/apps/backend/src/configs/instrument.ts new file mode 100644 index 00000000..87375a12 --- /dev/null +++ b/apps/backend/src/configs/instrument.ts @@ -0,0 +1,22 @@ +import * as Sentry from '@sentry/node'; + +const isSentryEnabled = () => { + if (process.env.SENTRY_ENABLED !== 'true') { + return false; + } + + return process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'development'; +}; + +Sentry.init({ + dsn: process.env.SENTRY_DSN, + enabled: isSentryEnabled(), + environment: process.env.NODE_ENV, + integrations: [Sentry.prismaIntegration()], + // https://docs.sentry.io/platforms/javascript/guides/nestjs/configuration/sampling/#setting-a-uniform-sample-rate + tracesSampleRate: 0.6, +}); + +Sentry.setContext('app', { + version: process.env.APP_VERSION, +}); diff --git a/apps/backend/src/main.ts b/apps/backend/src/main.ts index d952ba8f..58ad5f53 100644 --- a/apps/backend/src/main.ts +++ b/apps/backend/src/main.ts @@ -1,6 +1,9 @@ +import './configs/instrument'; + import { Logger } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; -import { NestFactory } from '@nestjs/core'; +import { BaseExceptionFilter, HttpAdapterHost, NestFactory } from '@nestjs/core'; +import * as Sentry from '@sentry/node'; import { AppModule } from './app.module'; import { EnvironmentVariables } from './types/common'; @@ -8,6 +11,10 @@ import { EnvironmentVariables } from './types/common'; const bootstrap = async () => { const app = await NestFactory.create(AppModule); + const { httpAdapter } = app.get(HttpAdapterHost); + + Sentry.setupNestErrorHandler(app, new BaseExceptionFilter(httpAdapter)); + const configService = app.get(ConfigService); const logger = new Logger('NestApplication'); diff --git a/apps/backend/tsconfig.json b/apps/backend/tsconfig.json index f5d102b7..b2736ed4 100644 --- a/apps/backend/tsconfig.json +++ b/apps/backend/tsconfig.json @@ -8,6 +8,7 @@ "composite": true, "strictNullChecks": true }, + "files": ["env.d.ts"], "include": [ "./src/**/*" ], @@ -20,7 +21,7 @@ "path": "../../packages/utils" }, { - "path": "../../packages/logger-old" + "path": "../../packages/domain" } ] } diff --git a/packages/domain/index.ts b/packages/domain/index.ts index c95101a5..657b6ed6 100644 --- a/packages/domain/index.ts +++ b/packages/domain/index.ts @@ -1,5 +1,5 @@ export { DomainModule } from './src/domain.module'; -export { PrismaService } from './src/prisma.service'; +export { PrismaService } from './src/services/prisma.service'; export { UserService } from './src/services/users/user.service'; export { RoleService } from './src/services/roles/role.service'; export { FolderService } from './src/services/folders/folder.service'; diff --git a/packages/domain/src/domain.module.ts b/packages/domain/src/domain.module.ts index 72add662..2c41815c 100644 --- a/packages/domain/src/domain.module.ts +++ b/packages/domain/src/domain.module.ts @@ -1,9 +1,9 @@ import { DynamicModule, Module, Provider } from '@nestjs/common'; import { DOMAIN_SERVICES_OPTIONS } from './constants'; -import { PrismaService } from './prisma.service'; import { FolderService } from './services/folders/folder.service'; import { NewsletterService } from './services/newsletters/newsletter.service'; +import { PrismaService } from './services/prisma.service'; import { RoleService } from './services/roles/role.service'; import { SessionService } from './services/sessions/session.service'; import { SnippetService } from './services/snippets/snippet.service'; diff --git a/packages/domain/src/services/folders/folder.service.test.ts b/packages/domain/src/services/folders/folder.service.test.ts index 25276643..049eff89 100644 --- a/packages/domain/src/services/folders/folder.service.test.ts +++ b/packages/domain/src/services/folders/folder.service.test.ts @@ -7,7 +7,7 @@ import { CreateFolderInput } from './inputs/create-folder-input'; import { CreateUserRootFolderInput } from './inputs/create-user-root-folder-input'; import { TestHelper } from '../../../tests/helpers'; import { DomainModule } from '../../domain.module'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; import { RoleService } from '../roles/role.service'; describe('Test Folder service', () => { diff --git a/packages/domain/src/services/folders/folder.service.ts b/packages/domain/src/services/folders/folder.service.ts index ce7ccb72..52643be3 100644 --- a/packages/domain/src/services/folders/folder.service.ts +++ b/packages/domain/src/services/folders/folder.service.ts @@ -6,7 +6,7 @@ import { CreateFolderInput } from './inputs/create-folder-input'; import { CreateUserRootFolderInput } from './inputs/create-user-root-folder-input'; import { UpdateFolderInput } from './inputs/update-folder-input'; import { isFoldersContainRoot } from './utils/folders'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; @Injectable() export class FolderService { diff --git a/packages/domain/src/prisma.service.ts b/packages/domain/src/services/prisma.service.ts similarity index 100% rename from packages/domain/src/prisma.service.ts rename to packages/domain/src/services/prisma.service.ts diff --git a/packages/domain/src/services/roles/role.service.ts b/packages/domain/src/services/roles/role.service.ts index 0cab52a4..6c39a0da 100644 --- a/packages/domain/src/services/roles/role.service.ts +++ b/packages/domain/src/services/roles/role.service.ts @@ -3,7 +3,7 @@ import { SnipcodeError, errors } from '@snipcode/utils'; import { CreateRoleInput } from './inputs/create-role-input'; import { Role, RoleName } from './role.entity'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; @Injectable() export class RoleService { diff --git a/packages/domain/src/services/sessions/session.service.test.ts b/packages/domain/src/services/sessions/session.service.test.ts index c1dc8b71..5dcb1af1 100644 --- a/packages/domain/src/services/sessions/session.service.test.ts +++ b/packages/domain/src/services/sessions/session.service.test.ts @@ -4,7 +4,7 @@ import { Session } from './session.entity'; import { SessionService } from './session.service'; import { TestHelper } from '../../../tests/helpers'; import { DomainModule } from '../../domain.module'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; describe('Test Session Service', function () { let sessionService: SessionService; diff --git a/packages/domain/src/services/sessions/session.service.ts b/packages/domain/src/services/sessions/session.service.ts index c27821db..694d64d6 100644 --- a/packages/domain/src/services/sessions/session.service.ts +++ b/packages/domain/src/services/sessions/session.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { CreateSessionInput } from './inputs/create-session-input'; import { Session } from './session.entity'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; @Injectable() export class SessionService { diff --git a/packages/domain/src/services/snippets/snippet.service.test.ts b/packages/domain/src/services/snippets/snippet.service.test.ts index 7b795e63..02659be3 100644 --- a/packages/domain/src/services/snippets/snippet.service.test.ts +++ b/packages/domain/src/services/snippets/snippet.service.test.ts @@ -5,7 +5,7 @@ import { Snippet } from './snippet.entity'; import { SnippetService } from './snippet.service'; import { TestHelper } from '../../../tests/helpers'; import { DomainModule } from '../../domain.module'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; import { RoleService } from '../roles/role.service'; describe('Test Snippet service', () => { diff --git a/packages/domain/src/services/snippets/snippet.service.ts b/packages/domain/src/services/snippets/snippet.service.ts index b3d88566..4e6fc54a 100644 --- a/packages/domain/src/services/snippets/snippet.service.ts +++ b/packages/domain/src/services/snippets/snippet.service.ts @@ -5,7 +5,7 @@ import { CreateSnippetInput } from './inputs/create-snippet-input'; import { DeleteSnippetInput } from './inputs/delete-snippet-input'; import { UpdateSnippetInput } from './inputs/update-snippet-input'; import { Snippet, SnippetVisibility } from './snippet.entity'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; const MAX_ITEM_PER_PAGE = 50; diff --git a/packages/domain/src/services/users/user.service.test.ts b/packages/domain/src/services/users/user.service.test.ts index e863673a..0b2b4644 100644 --- a/packages/domain/src/services/users/user.service.test.ts +++ b/packages/domain/src/services/users/user.service.test.ts @@ -5,7 +5,7 @@ import { User } from './user.entity'; import { UserService } from './user.service'; import { TestHelper } from '../../../tests/helpers'; import { DomainModule } from '../../domain.module'; -import { PrismaService } from '../../prisma.service'; +import { PrismaService } from '../prisma.service'; import { RoleService } from '../roles/role.service'; describe('Test User service', () => { diff --git a/packages/domain/src/services/users/user.service.ts b/packages/domain/src/services/users/user.service.ts index db40ff3b..49f4bd5d 100644 --- a/packages/domain/src/services/users/user.service.ts +++ b/packages/domain/src/services/users/user.service.ts @@ -6,8 +6,8 @@ import { generateFromEmail } from 'unique-username-generator'; import { CreateUserInput } from './inputs/create-user-input'; import { UpdateUserInput } from './inputs/update-user-input'; import { User } from './user.entity'; -import { PrismaService } from '../../prisma.service'; import { CreateUserRootFolderInput } from '../folders/inputs/create-user-root-folder-input'; +import { PrismaService } from '../prisma.service'; import { Role } from '../roles/role.entity'; @Injectable() diff --git a/packages/domain/tests/helpers.ts b/packages/domain/tests/helpers.ts index 02d79408..f37db248 100644 --- a/packages/domain/tests/helpers.ts +++ b/packages/domain/tests/helpers.ts @@ -1,10 +1,10 @@ import { randEmail, randFullName, randImg, randNumber, randTimeZone, randUserName, randWord } from '@ngneat/falso'; -import { PrismaService } from '../src/prisma.service'; import { Folder } from '../src/services/folders/folder.entity'; import { CreateFolderInput } from '../src/services/folders/inputs/create-folder-input'; import { CreateUserRootFolderInput } from '../src/services/folders/inputs/create-user-root-folder-input'; import { UpdateFolderInput } from '../src/services/folders/inputs/update-folder-input'; +import { PrismaService } from '../src/services/prisma.service'; import { Role, RoleName } from '../src/services/roles/role.entity'; import { CreateSessionInput } from '../src/services/sessions/inputs/create-session-input'; import { Session } from '../src/services/sessions/session.entity'; diff --git a/yarn.lock b/yarn.lock index e93d69eb..14af61e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4471,6 +4471,321 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.51.1": + version: 0.51.1 + resolution: "@opentelemetry/api-logs@npm:0.51.1" + dependencies: + "@opentelemetry/api": "npm:^1.0.0" + checksum: 10/99638f09b79a306cb8fa586c1e5b15cb60ab51ba4921e0611e86b72fff5a30b928edbc01cc38c36cc968702d273025786982b54361a7b2195cc9d0e193db561d + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.6.0, @opentelemetry/api@npm:^1.8, @opentelemetry/api@npm:^1.8.0": + version: 1.8.0 + resolution: "@opentelemetry/api@npm:1.8.0" + checksum: 10/62f0c42711b9f0c56ea9527c2e6e609e371bfb47d0b78956c91fe27365b4744d7dcc407636ef5b19a24a1d5e2c3cfa79c1b715deca829074e24e3ffba1315ba2 + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:^1.23.0": + version: 1.24.1 + resolution: "@opentelemetry/context-async-hooks@npm:1.24.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.9.0" + checksum: 10/6b9faefce4f2563cc9bda70f234ddb24a56e7f9a355eb3e9e32f2d07e14df9abdd87bbf8bf5ad59db09e672c930bc9cf4c8a8a5950cc15c8e3afe608ae1f9fe0 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.24.1, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.24.1, @opentelemetry/core@npm:^1.8.0": + version: 1.24.1 + resolution: "@opentelemetry/core@npm:1.24.1" + dependencies: + "@opentelemetry/semantic-conventions": "npm:1.24.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.9.0" + checksum: 10/cdfb38acbee388605910514c66a6168216167d0a03cc11e8b18663852ffd200efd295a6becd888e31e247e87ce65c06df668eb95df92f19e32a6a1bb8f258976 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-connect@npm:0.36.0": + version: 0.36.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.36.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.0.0" + "@types/connect": "npm:3.4.36" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/403253a13240aa109ea1a7a9e09ec514313cce80840c75c84a918e55ca7a7dc56585d07b41a99e74fb3190bb556a76a5516e9b6f329278aaf6b9b56c34adc688 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-express@npm:0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-express@npm:0.39.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/0a7b73d762b5fbbe453604bfe78064cad5e8fe42129ee2790d66a0f281cafe5b4a43d82ba096addb5a3988a50b3745ebfa95f9b53dcd9ea8d818b45adc8a0028 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fastify@npm:0.36.1": + version: 0.36.1 + resolution: "@opentelemetry/instrumentation-fastify@npm:0.36.1" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/614daa9aebc45c7ddd56170869aba2b74879241ed3dba99bb09b7e1e6c6bea6475d6fc500b2e06f33f535325c45efd2b234d013b6be2b2190c145e1c052186ed + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-graphql@npm:0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.40.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.51.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/86e52d78a9b1091c10612f03bf03674a2ccfaf4112af81f4cd685ed73548c4a962e592a14286440f978aafbb6e9186bad53b7f98e8fe1e18dbb3e849578777c1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-hapi@npm:0.38.0": + version: 0.38.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.38.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/90f446300d9ab24a49035e71a50e30ecd9497408266e1591d22dfaa9288c3f6186de627bb775991b79ae85803ac12286dd52c0cb1ba86473baf1b9eebfc34629 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:0.51.1": + version: 0.51.1 + resolution: "@opentelemetry/instrumentation-http@npm:0.51.1" + dependencies: + "@opentelemetry/core": "npm:1.24.1" + "@opentelemetry/instrumentation": "npm:0.51.1" + "@opentelemetry/semantic-conventions": "npm:1.24.1" + semver: "npm:^7.5.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/2c7626e8bd57a6d5ace46cf08342aed326db069c36f94ae27bcdcc2e4e1c64f8308562c4e1c388d7b338157db333b9d4d8fc65cbea550cf01a4adf238ecd5614 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-ioredis@npm:0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-ioredis@npm:0.40.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/redis-common": "npm:^0.36.2" + "@opentelemetry/semantic-conventions": "npm:^1.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/3ba1f7dfd277ca4f5b94c3011052e8bd09c0749bf5387a69e7990b6414e2ffefebf68fdc0a670faf311782dae8198ff1b6571c07990366a8d5940429427849d2 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-koa@npm:0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-koa@npm:0.40.0" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + "@types/koa": "npm:2.14.0" + "@types/koa__router": "npm:12.0.3" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/541b26d93e5316173a0c6a7371bcf11845ded1a1ca7736b4092c9ac6aedcdb11549c3c0cb20a36567f533193408c87b4f1c7e3ed15e5f362ae94112b7b79a3f3 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongodb@npm:0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.43.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/sdk-metrics": "npm:^1.9.1" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/bd9eadf593819549c064d3caf03532efc0711af9e7ea598b1b72e38944644f33dbf2625d86737c38c3bec0a91079ab1b2a2ebfab200ef744f2f46d2d17cac9aa + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongoose@npm:0.38.1": + version: 0.38.1 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.38.1" + dependencies: + "@opentelemetry/core": "npm:^1.8.0" + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/c36c74093ae0b3cb0fc6313c5812cabce3377f56869a8aba129a18a2371c0ad516ff9bf787e7127156c1f0202687e48b6cf13c3c4842cbd141ff60e47af4cdbe + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql2@npm:0.38.1": + version: 0.38.1 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.38.1" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + "@opentelemetry/sql-common": "npm:^0.40.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/ad08a5bb231d2a70781430704a35e28095b6c28d1e8cde907f5940e3596dfff63b6e389f819fe4aebe81058a2edf2b0ed8d9c837125f5237efb11d250bcf67e8 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql@npm:0.38.1": + version: 0.38.1 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.38.1" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + "@types/mysql": "npm:2.15.22" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/8705932ede1888eaf86c4c05d9278cf8ce41c3b0440f2d768cc6f9b74f5f151b43e5d70d3e100a34bcad6e74079da3d7328d1608e44443dba95daa1f876a079e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-nestjs-core@npm:0.37.1": + version: 0.37.1 + resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.37.1" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.0.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/a5a938c189b0c3ea826b18267fc11549cbeb7e1664d0809ddf0ee131d3d9033830739b39145836cf768f75c69cdd7ebcebf330a5a926f5afe57ae745a845c0de + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.41.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.51.0" + "@opentelemetry/semantic-conventions": "npm:^1.22.0" + "@opentelemetry/sql-common": "npm:^0.40.1" + "@types/pg": "npm:8.6.1" + "@types/pg-pool": "npm:2.0.4" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/541147971e7e57c61551f5e75a014c7f78d99c6abdce787dec2b2b6af41a07c3cbd527b4114d2fd7931d6899bb908c0557631ff9ddc18d2d9a2798999794e3a4 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.51.1, @opentelemetry/instrumentation@npm:^0.49 || ^0.50 || ^0.51, @opentelemetry/instrumentation@npm:^0.51.0, @opentelemetry/instrumentation@npm:^0.51.1": + version: 0.51.1 + resolution: "@opentelemetry/instrumentation@npm:0.51.1" + dependencies: + "@opentelemetry/api-logs": "npm:0.51.1" + "@types/shimmer": "npm:^1.0.2" + import-in-the-middle: "npm:1.7.4" + require-in-the-middle: "npm:^7.1.1" + semver: "npm:^7.5.2" + shimmer: "npm:^1.2.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/54d670d5fffb404a1bde62d5232f9275f0387a929f49bebcea610818b684b68dfc19dd2025e6460269ca0a35ea0ba42fa2b4b977d9ac18d6624d59bce2c6b54e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:^0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/instrumentation@npm:0.43.0" + dependencies: + "@types/shimmer": "npm:^1.0.2" + import-in-the-middle: "npm:1.4.2" + require-in-the-middle: "npm:^7.1.1" + semver: "npm:^7.5.2" + shimmer: "npm:^1.2.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/776d566dc42154b9161797d7489c5e3697abe761537a103fd19d9e2221931076fbbe9c6ddd16696fa39c16feae2e75deedc2d3ed75d82abc0506ef1299557992 + languageName: node + linkType: hard + +"@opentelemetry/redis-common@npm:^0.36.2": + version: 0.36.2 + resolution: "@opentelemetry/redis-common@npm:0.36.2" + checksum: 10/e7f610f79c95bab9156a9831162c7b55b94ab43c5e47ecb9efcc10c08a236395fdd54b6bb018da981e6641bac9da6fda1b50636fb49db584e87d988750d255e1 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.24.1, @opentelemetry/resources@npm:^1.23.0": + version: 1.24.1 + resolution: "@opentelemetry/resources@npm:1.24.1" + dependencies: + "@opentelemetry/core": "npm:1.24.1" + "@opentelemetry/semantic-conventions": "npm:1.24.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.9.0" + checksum: 10/f46c6556326ff61b652bafb05a89f4cb1728b08e5a6aa675c60a533f5bd558a19c4bcd58d3994b49cba6ebc327755f933aaf29b2088a2d783e752a06b26a2532 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:^1.9.1": + version: 1.24.1 + resolution: "@opentelemetry/sdk-metrics@npm:1.24.1" + dependencies: + "@opentelemetry/core": "npm:1.24.1" + "@opentelemetry/resources": "npm:1.24.1" + lodash.merge: "npm:^4.6.2" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.9.0" + checksum: 10/261e026fd28d1d26d7fae231b52f6f0f7c1bb523b084b32b5983e4550a511202023bb41ecb062b2993251ad3eef02167bcb33a119a0b913874e975308f972cb7 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:^1.22, @opentelemetry/sdk-trace-base@npm:^1.23.0": + version: 1.24.1 + resolution: "@opentelemetry/sdk-trace-base@npm:1.24.1" + dependencies: + "@opentelemetry/core": "npm:1.24.1" + "@opentelemetry/resources": "npm:1.24.1" + "@opentelemetry/semantic-conventions": "npm:1.24.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.9.0" + checksum: 10/8366bab0df75b76f7ef5b8cb026982f45ae25472a429d95e07fe9311a6aba4dbc28d9549b00c672a1d40f384f1e03e1f3e686f0df20c52cc57e4bd7821c32456 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.24.1, @opentelemetry/semantic-conventions@npm:^1.0.0, @opentelemetry/semantic-conventions@npm:^1.17.0, @opentelemetry/semantic-conventions@npm:^1.22.0, @opentelemetry/semantic-conventions@npm:^1.23.0": + version: 1.24.1 + resolution: "@opentelemetry/semantic-conventions@npm:1.24.1" + checksum: 10/f09fa2ecd1994c3601c108922fb1c175618b14acc0f2a2436ca1506f6c48f2e51c505c6490fc5aeac9b94fbd372dd2081a8b7c0e83d96c57fedd360af13d68a5 + languageName: node + linkType: hard + +"@opentelemetry/sql-common@npm:^0.40.1": + version: 0.40.1 + resolution: "@opentelemetry/sql-common@npm:0.40.1" + dependencies: + "@opentelemetry/core": "npm:^1.1.0" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 10/f887b4135be56c9ef6e29f040c9f75f34709e38c11897d59d284d7e73175a2dd2c6267c18061144e81a0045fc461b7813769db2e49c42a8d6becc58b1456d55c + languageName: node + linkType: hard + "@peculiar/asn1-schema@npm:^2.3.6": version: 2.3.8 resolution: "@peculiar/asn1-schema@npm:2.3.8" @@ -4622,6 +4937,17 @@ __metadata: languageName: node linkType: hard +"@prisma/instrumentation@npm:5.14.0": + version: 5.14.0 + resolution: "@prisma/instrumentation@npm:5.14.0" + dependencies: + "@opentelemetry/api": "npm:^1.8" + "@opentelemetry/instrumentation": "npm:^0.49 || ^0.50 || ^0.51" + "@opentelemetry/sdk-trace-base": "npm:^1.22" + checksum: 10/fb146cd0b2b54c1427e9571a7ff4cbe2c03ab05e5be869cdcdd43a25eb38e4a4fa76aad2a4ccb604459c75f69e831c0daa41d1745e9d6fe0d04ee265ce04a831 + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -4910,6 +5236,16 @@ __metadata: languageName: node linkType: hard +"@sentry/core@npm:8.3.0": + version: 8.3.0 + resolution: "@sentry/core@npm:8.3.0" + dependencies: + "@sentry/types": "npm:8.3.0" + "@sentry/utils": "npm:8.3.0" + checksum: 10/8ef5419989236daaf1800457b27f5d97875e64620052e5cb66fd9e5ed61d9396bac8c0789b04d7b86881413b1e931afc8665fc3311fc0d37d99f2f7cc05352c8 + languageName: node + linkType: hard + "@sentry/integrations@npm:7.108.0": version: 7.108.0 resolution: "@sentry/integrations@npm:7.108.0" @@ -4962,6 +5298,61 @@ __metadata: languageName: node linkType: hard +"@sentry/node@npm:8.3.0": + version: 8.3.0 + resolution: "@sentry/node@npm:8.3.0" + dependencies: + "@opentelemetry/api": "npm:^1.8.0" + "@opentelemetry/context-async-hooks": "npm:^1.23.0" + "@opentelemetry/core": "npm:^1.24.1" + "@opentelemetry/instrumentation": "npm:^0.51.1" + "@opentelemetry/instrumentation-connect": "npm:0.36.0" + "@opentelemetry/instrumentation-express": "npm:0.39.0" + "@opentelemetry/instrumentation-fastify": "npm:0.36.1" + "@opentelemetry/instrumentation-graphql": "npm:0.40.0" + "@opentelemetry/instrumentation-hapi": "npm:0.38.0" + "@opentelemetry/instrumentation-http": "npm:0.51.1" + "@opentelemetry/instrumentation-ioredis": "npm:0.40.0" + "@opentelemetry/instrumentation-koa": "npm:0.40.0" + "@opentelemetry/instrumentation-mongodb": "npm:0.43.0" + "@opentelemetry/instrumentation-mongoose": "npm:0.38.1" + "@opentelemetry/instrumentation-mysql": "npm:0.38.1" + "@opentelemetry/instrumentation-mysql2": "npm:0.38.1" + "@opentelemetry/instrumentation-nestjs-core": "npm:0.37.1" + "@opentelemetry/instrumentation-pg": "npm:0.41.0" + "@opentelemetry/resources": "npm:^1.23.0" + "@opentelemetry/sdk-trace-base": "npm:^1.23.0" + "@opentelemetry/semantic-conventions": "npm:^1.23.0" + "@prisma/instrumentation": "npm:5.14.0" + "@sentry/core": "npm:8.3.0" + "@sentry/opentelemetry": "npm:8.3.0" + "@sentry/types": "npm:8.3.0" + "@sentry/utils": "npm:8.3.0" + opentelemetry-instrumentation-fetch-node: "npm:1.2.0" + dependenciesMeta: + opentelemetry-instrumentation-fetch-node: + optional: true + checksum: 10/3e40ababfa9736b428a563157063d55a66899825fb4951365b8085188fcb669786e3765855c703bb144cc670563466863a6096a9c5788d987cf08c713bacceea + languageName: node + linkType: hard + +"@sentry/opentelemetry@npm:8.3.0": + version: 8.3.0 + resolution: "@sentry/opentelemetry@npm:8.3.0" + dependencies: + "@sentry/core": "npm:8.3.0" + "@sentry/types": "npm:8.3.0" + "@sentry/utils": "npm:8.3.0" + peerDependencies: + "@opentelemetry/api": ^1.8.0 + "@opentelemetry/core": ^1.24.1 + "@opentelemetry/instrumentation": ^0.51.1 + "@opentelemetry/sdk-trace-base": ^1.23.0 + "@opentelemetry/semantic-conventions": ^1.23.0 + checksum: 10/884f95fe4181286d21921c3a8a50368d6faad755c2d949629dbcad7bf473ab4aed2ef3899b97b4436680886b3972f205631b646322e40e849631a2184e8da751 + languageName: node + linkType: hard + "@sentry/react@npm:7.108.0": version: 7.108.0 resolution: "@sentry/react@npm:7.108.0" @@ -5005,6 +5396,13 @@ __metadata: languageName: node linkType: hard +"@sentry/types@npm:8.3.0": + version: 8.3.0 + resolution: "@sentry/types@npm:8.3.0" + checksum: 10/e4294bfa568ca95234986633aac540ce8d8f657da564d1efe5e8c8592cc923304cf8a02b2789784f5747f13d40c00bfc0021c9463cb54bd82b09917aae12eb41 + languageName: node + linkType: hard + "@sentry/utils@npm:7.108.0": version: 7.108.0 resolution: "@sentry/utils@npm:7.108.0" @@ -5014,6 +5412,15 @@ __metadata: languageName: node linkType: hard +"@sentry/utils@npm:8.3.0": + version: 8.3.0 + resolution: "@sentry/utils@npm:8.3.0" + dependencies: + "@sentry/types": "npm:8.3.0" + checksum: 10/8b3e08928b7af045fd966381c8b16c18ff1669b3bb05bcff9801ac13bef2742cff99bdd0ac3cfa5b42ad9ccd8b915c9fade6ca03fc1b4d054cfc2a7b78c44b23 + languageName: node + linkType: hard + "@sentry/vercel-edge@npm:7.108.0": version: 7.108.0 resolution: "@sentry/vercel-edge@npm:7.108.0" @@ -5710,6 +6117,7 @@ __metadata: "@nestjs/schematics": "npm:10.1.1" "@nestjs/testing": "npm:10.3.8" "@prisma/client": "npm:5.14.0" + "@sentry/node": "npm:8.3.0" "@types/express": "npm:4.17.21" "@types/supertest": "npm:6.0.2" reflect-metadata: "npm:0.2.2" @@ -5773,6 +6181,7 @@ __metadata: dependencies: "@bugsnag/cuid": "npm:3.1.1" "@nestjs/common": "npm:10.3.8" + "@nestjs/testing": "npm:10.3.8" "@ngneat/falso": "npm:7.2.0" "@prisma/client": "npm:5.14.0" "@snipcode/utils": "workspace:*" @@ -6048,7 +6457,7 @@ __metadata: languageName: node linkType: hard -"@types/accepts@npm:^1.3.5": +"@types/accepts@npm:*, @types/accepts@npm:^1.3.5": version: 1.3.7 resolution: "@types/accepts@npm:1.3.7" dependencies: @@ -6160,6 +6569,22 @@ __metadata: languageName: node linkType: hard +"@types/connect@npm:3.4.36": + version: 3.4.36 + resolution: "@types/connect@npm:3.4.36" + dependencies: + "@types/node": "npm:*" + checksum: 10/4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172 + languageName: node + linkType: hard + +"@types/content-disposition@npm:*": + version: 0.5.8 + resolution: "@types/content-disposition@npm:0.5.8" + checksum: 10/eeea868fb510ae7a32aa2d7de680fba79d59001f3e758a334621e10bc0a6496d3a42bb79243a5e53b9c63cb524522853ccc144fe1ab160c4247d37cdb81146c4 + languageName: node + linkType: hard + "@types/cookie@npm:^0.6.0": version: 0.6.0 resolution: "@types/cookie@npm:0.6.0" @@ -6174,6 +6599,18 @@ __metadata: languageName: node linkType: hard +"@types/cookies@npm:*": + version: 0.9.0 + resolution: "@types/cookies@npm:0.9.0" + dependencies: + "@types/connect": "npm:*" + "@types/express": "npm:*" + "@types/keygrip": "npm:*" + "@types/node": "npm:*" + checksum: 10/88d2106834fca85cf9dfef984e99bf4969e77d48538d8e8408a29679b4d1f675fe4725d35f2e38d252a336b76d14a2bc84bcb34edc72238a7a8261c0808c7c56 + languageName: node + linkType: hard + "@types/cors@npm:2.8.12": version: 2.8.12 resolution: "@types/cors@npm:2.8.12" @@ -6240,27 +6677,27 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:4.17.14": - version: 4.17.14 - resolution: "@types/express@npm:4.17.14" +"@types/express@npm:*, @types/express@npm:4.17.21": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" dependencies: "@types/body-parser": "npm:*" - "@types/express-serve-static-core": "npm:^4.17.18" + "@types/express-serve-static-core": "npm:^4.17.33" "@types/qs": "npm:*" "@types/serve-static": "npm:*" - checksum: 10/293e53a7572ef93f70c830a0b1d620b5e16670509bb91e800393a67e7f41f170478809d862deed0edf573fc1afc3a6f7fc99ed176a28c0d8dd3f07c433f88672 + checksum: 10/7a6d26cf6f43d3151caf4fec66ea11c9d23166e4f3102edfe45a94170654a54ea08cf3103d26b3928d7ebcc24162c90488e33986b7e3a5f8941225edd5eb18c7 languageName: node linkType: hard -"@types/express@npm:4.17.21": - version: 4.17.21 - resolution: "@types/express@npm:4.17.21" +"@types/express@npm:4.17.14": + version: 4.17.14 + resolution: "@types/express@npm:4.17.14" dependencies: "@types/body-parser": "npm:*" - "@types/express-serve-static-core": "npm:^4.17.33" + "@types/express-serve-static-core": "npm:^4.17.18" "@types/qs": "npm:*" "@types/serve-static": "npm:*" - checksum: 10/7a6d26cf6f43d3151caf4fec66ea11c9d23166e4f3102edfe45a94170654a54ea08cf3103d26b3928d7ebcc24162c90488e33986b7e3a5f8941225edd5eb18c7 + checksum: 10/293e53a7572ef93f70c830a0b1d620b5e16670509bb91e800393a67e7f41f170478809d862deed0edf573fc1afc3a6f7fc99ed176a28c0d8dd3f07c433f88672 languageName: node linkType: hard @@ -6293,6 +6730,13 @@ __metadata: languageName: node linkType: hard +"@types/http-assert@npm:*": + version: 1.5.5 + resolution: "@types/http-assert@npm:1.5.5" + checksum: 10/cd6bb7fd42cc6e2a702cb55370b8b25231954ad74c04bcd185b943a74ded3d4c28099c30f77b26951df2426441baff41718816c60b5af80efe2b8888d900bf93 + languageName: node + linkType: hard + "@types/http-cache-semantics@npm:*": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" @@ -6390,6 +6834,13 @@ __metadata: languageName: node linkType: hard +"@types/keygrip@npm:*": + version: 1.0.6 + resolution: "@types/keygrip@npm:1.0.6" + checksum: 10/d157f60bf920492347791d2b26d530d5069ce05796549fbacd4c24d66ffbebbcb0ab67b21e7a1b80a593b9fd4b67dc4843dec04c12bbc2e0fddfb8577a826c41 + languageName: node + linkType: hard + "@types/keyv@npm:^3.1.4": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" @@ -6399,6 +6850,56 @@ __metadata: languageName: node linkType: hard +"@types/koa-compose@npm:*": + version: 3.2.8 + resolution: "@types/koa-compose@npm:3.2.8" + dependencies: + "@types/koa": "npm:*" + checksum: 10/95c32bdee738ac7c10439bbf6342ca3b9f0aafd7e8118739eac7fb0fa703a23cfe4c88f63e13a69a16fbde702e0bcdc62b272aa734325fc8efa7e5625479752e + languageName: node + linkType: hard + +"@types/koa@npm:*": + version: 2.15.0 + resolution: "@types/koa@npm:2.15.0" + dependencies: + "@types/accepts": "npm:*" + "@types/content-disposition": "npm:*" + "@types/cookies": "npm:*" + "@types/http-assert": "npm:*" + "@types/http-errors": "npm:*" + "@types/keygrip": "npm:*" + "@types/koa-compose": "npm:*" + "@types/node": "npm:*" + checksum: 10/2be9dff1ef66bf15b037386c188893761a8fb46390a5e1d2a2031d9e1ba4473e40ddfbd625980a504bd804d7148b3e230c18e240503f33eac3b6e5e830645d30 + languageName: node + linkType: hard + +"@types/koa@npm:2.14.0": + version: 2.14.0 + resolution: "@types/koa@npm:2.14.0" + dependencies: + "@types/accepts": "npm:*" + "@types/content-disposition": "npm:*" + "@types/cookies": "npm:*" + "@types/http-assert": "npm:*" + "@types/http-errors": "npm:*" + "@types/keygrip": "npm:*" + "@types/koa-compose": "npm:*" + "@types/node": "npm:*" + checksum: 10/00bd0dd9f2366eabbd05a9af1c83e10679b4241e69b75927c7653826508c03e9b19b2c03499c5ff6496acbb192f5c0a860b4e95308462e945e2fb79636cbf3cf + languageName: node + linkType: hard + +"@types/koa__router@npm:12.0.3": + version: 12.0.3 + resolution: "@types/koa__router@npm:12.0.3" + dependencies: + "@types/koa": "npm:*" + checksum: 10/4608eb48867aabcd5cf3049b8115b3df9dc32cf4f5b950245dc9ab9d26055162a7deaae0f2a819f583aa21f57a66326c532a8763f82dceaf03a7e1f8cc08977d + languageName: node + linkType: hard + "@types/lodash@npm:4.17.0": version: 4.17.0 resolution: "@types/lodash@npm:4.17.0" @@ -6448,6 +6949,15 @@ __metadata: languageName: node linkType: hard +"@types/mysql@npm:2.15.22": + version: 2.15.22 + resolution: "@types/mysql@npm:2.15.22" + dependencies: + "@types/node": "npm:*" + checksum: 10/6be0aac58fe5c0f20ebf149d2ab228c620f751569a24fda33df457e0520b3c2f071bda06973ad54815ef54b0e0fa2176e56aba96b65b5990054930f4e2b7bb4e + languageName: node + linkType: hard + "@types/node@npm:*": version: 20.11.0 resolution: "@types/node@npm:20.11.0" @@ -6496,6 +7006,37 @@ __metadata: languageName: node linkType: hard +"@types/pg-pool@npm:2.0.4": + version: 2.0.4 + resolution: "@types/pg-pool@npm:2.0.4" + dependencies: + "@types/pg": "npm:*" + checksum: 10/5ae1c49fe1820ec011f8e2a877198a62f4c9795d2cc340dff4527c26f24ee22dffe99a8ca5cdec6edb54613bded820cc51256fb668e0eb4d22794181b94fad82 + languageName: node + linkType: hard + +"@types/pg@npm:*": + version: 8.11.6 + resolution: "@types/pg@npm:8.11.6" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^4.0.1" + checksum: 10/4eb22d42c5363abf58b1be0104e01332a0928e9dce8571ad136ce3e256c16dd97343a17c29066e4f390ed366548cca0bda55ff48b495ee4c1d70d123cc75edf6 + languageName: node + linkType: hard + +"@types/pg@npm:8.6.1": + version: 8.6.1 + resolution: "@types/pg@npm:8.6.1" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^2.2.0" + checksum: 10/bf1134ea194ad9cb8bfe0aab7a532713c63bae1d95909fa45e8dc1945e44ede74f2d4c5b2cd2f9712c6b970896929e0d82480f9c9da79addf405c089b590e562 + languageName: node + linkType: hard + "@types/prop-types@npm:*": version: 15.7.11 resolution: "@types/prop-types@npm:15.7.11" @@ -6608,6 +7149,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.0.2": + version: 1.0.5 + resolution: "@types/shimmer@npm:1.0.5" + checksum: 10/f6b0c950dc9187464c5393faf4f4e2b7b44b16665bb49196da28affecceb4fdcd9749af15cbe50f1a2de39f3a84b7523e73445f117f6b48bdbd61b892568364a + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -7292,6 +7840,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-attributes@npm:^1.9.5": + version: 1.9.5 + resolution: "acorn-import-attributes@npm:1.9.5" + peerDependencies: + acorn: ^8 + checksum: 10/8bfbfbb6e2467b9b47abb4d095df717ab64fce2525da65eabee073e85e7975fb3a176b6c8bba17c99a7d8ede283a10a590272304eb54a93c4aa1af9790d47a8b + languageName: node + linkType: hard + "acorn-jsx@npm:^5.2.0, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -8896,6 +9453,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^1.2.2": + version: 1.3.1 + resolution: "cjs-module-lexer@npm:1.3.1" + checksum: 10/6629188d5ce74b57e5dce2222db851b5496a8d65b533a05957fb24089a3cec8d769378013c375a954c5a0f7522cde6a36d5a65bfd88f5575cb2de3176046fa8e + languageName: node + linkType: hard + "classnames@npm:2.5.1": version: 2.5.1 resolution: "classnames@npm:2.5.1" @@ -12716,6 +13280,30 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:1.4.2": + version: 1.4.2 + resolution: "import-in-the-middle@npm:1.4.2" + dependencies: + acorn: "npm:^8.8.2" + acorn-import-assertions: "npm:^1.9.0" + cjs-module-lexer: "npm:^1.2.2" + module-details-from-path: "npm:^1.0.3" + checksum: 10/fe853b5f4fe521b3dc6ee1946fd9ef3f4c1aaab33a1c80130e57983cab91f95b469d4da27878312bfd300f87b056ae1d7d77f5dbf636647418221fac174c8fc0 + languageName: node + linkType: hard + +"import-in-the-middle@npm:1.7.4": + version: 1.7.4 + resolution: "import-in-the-middle@npm:1.7.4" + dependencies: + acorn: "npm:^8.8.2" + acorn-import-attributes: "npm:^1.9.5" + cjs-module-lexer: "npm:^1.2.2" + module-details-from-path: "npm:^1.0.3" + checksum: 10/f1aeff5f3f4108be7c51b22d19a3528e527157c6c8671cef0aa8365c1cfa1d2f18342b7cba7a9478364ea564c483d33b9fcb34b5770d97db0a71e3ef0bd861eb + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.1.0 resolution: "import-local@npm:3.1.0" @@ -15324,6 +15912,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3": + version: 1.0.3 + resolution: "module-details-from-path@npm:1.0.3" + checksum: 10/f93226e9154fc8cb91f4609b639167ec7ad9155b30be4924d9717656648a3ae5f181d4e2338434d4c5afc7b5f4c10dd3b64109e5b89a4be70b20a25ba3573d54 + languageName: node + linkType: hard + "moment@npm:^2.29.1": version: 2.30.1 resolution: "moment@npm:2.30.1" @@ -15939,6 +16534,13 @@ __metadata: languageName: node linkType: hard +"obuf@npm:~1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 10/53ff4ab3a13cc33ba6c856cf281f2965c0aec9720967af450e8fd06cfd50aceeefc791986a16bcefa14e7898b3ca9acdfcf15b9d9a1b9c7e1366581a8ad6e65e + languageName: node + linkType: hard + "on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" @@ -16012,6 +16614,17 @@ __metadata: languageName: node linkType: hard +"opentelemetry-instrumentation-fetch-node@npm:1.2.0": + version: 1.2.0 + resolution: "opentelemetry-instrumentation-fetch-node@npm:1.2.0" + dependencies: + "@opentelemetry/api": "npm:^1.6.0" + "@opentelemetry/instrumentation": "npm:^0.43.0" + "@opentelemetry/semantic-conventions": "npm:^1.17.0" + checksum: 10/01435363058af094a66f91724a308ebafa81faf331ff92a1087146ca64986271e529417af361f65a47a8bc0202d1bf522f95e34b6ac2e74fd24bbdf5989a0a8f + languageName: node + linkType: hard + "optimism@npm:^0.18.0": version: 0.18.0 resolution: "optimism@npm:0.18.0" @@ -16419,6 +17032,55 @@ __metadata: languageName: node linkType: hard +"pg-int8@npm:1.0.1": + version: 1.0.1 + resolution: "pg-int8@npm:1.0.1" + checksum: 10/a1e3a05a69005ddb73e5f324b6b4e689868a447c5fa280b44cd4d04e6916a344ac289e0b8d2695d66e8e89a7fba023affb9e0e94778770ada5df43f003d664c9 + languageName: node + linkType: hard + +"pg-numeric@npm:1.0.2": + version: 1.0.2 + resolution: "pg-numeric@npm:1.0.2" + checksum: 10/8899f8200caa1744439a8778a9eb3ceefb599d893e40a09eef84ee0d4c151319fd416634a6c0fc7b7db4ac268710042da5be700b80ef0de716fe089b8652c84f + languageName: node + linkType: hard + +"pg-protocol@npm:*": + version: 1.6.1 + resolution: "pg-protocol@npm:1.6.1" + checksum: 10/9af672208adae8214f55f5b4597c4699ab9946205a99863d3e2bb8d024fdab16711457b539bc366cc29040218aa87508cf61294b76d288f48881b973d9117bd6 + languageName: node + linkType: hard + +"pg-types@npm:^2.2.0": + version: 2.2.0 + resolution: "pg-types@npm:2.2.0" + dependencies: + pg-int8: "npm:1.0.1" + postgres-array: "npm:~2.0.0" + postgres-bytea: "npm:~1.0.0" + postgres-date: "npm:~1.0.4" + postgres-interval: "npm:^1.1.0" + checksum: 10/87a84d4baa91378d3a3da6076c69685eb905d1087bf73525ae1ba84b291b9dd8738c6716b333d8eac6cec91bf087237adc3e9281727365e9cbab0d9d072778b1 + languageName: node + linkType: hard + +"pg-types@npm:^4.0.1": + version: 4.0.2 + resolution: "pg-types@npm:4.0.2" + dependencies: + pg-int8: "npm:1.0.1" + pg-numeric: "npm:1.0.2" + postgres-array: "npm:~3.0.1" + postgres-bytea: "npm:~3.0.0" + postgres-date: "npm:~2.1.0" + postgres-interval: "npm:^3.0.0" + postgres-range: "npm:^1.1.1" + checksum: 10/f4d529da864d4169afab300eb8629a84a6a06aa70c471160a7e46c34b6d4dd0e61cbd57d10d98c3a36e98f474e2ff85d41e4b1c953a321146b4bae09372c58d3 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -16603,6 +17265,73 @@ __metadata: languageName: node linkType: hard +"postgres-array@npm:~2.0.0": + version: 2.0.0 + resolution: "postgres-array@npm:2.0.0" + checksum: 10/aff99e79714d1271fe942fec4ffa2007b755e7e7dc3d2feecae3f1ceecb86fd3637c8138037fc3d9e7ec369231eeb136843c0b25927bf1ce295245a40ef849b4 + languageName: node + linkType: hard + +"postgres-array@npm:~3.0.1": + version: 3.0.2 + resolution: "postgres-array@npm:3.0.2" + checksum: 10/0159517e4e5f263bf9e324f0c4d3c10244a294021f2b5980abc8c23afdb965370a7fc0c82012fce4d28e83186ad089b6476b05fcef6c88f8e43e37a3a2fa0ad5 + languageName: node + linkType: hard + +"postgres-bytea@npm:~1.0.0": + version: 1.0.0 + resolution: "postgres-bytea@npm:1.0.0" + checksum: 10/d844ae4ca7a941b70e45cac1261a73ee8ed39d72d3d74ab1d645248185a1b7f0ac91a3c63d6159441020f4e1f7fe64689ac56536a307b31cef361e5187335090 + languageName: node + linkType: hard + +"postgres-bytea@npm:~3.0.0": + version: 3.0.0 + resolution: "postgres-bytea@npm:3.0.0" + dependencies: + obuf: "npm:~1.1.2" + checksum: 10/f5c01758fd2fa807afbd34e1ba2146f683818ebc2d23f4a62f0fd627c0b1126fc543cab1b63925f97ce6c7d8f5f316043218619c447445210ea82f10411efb1b + languageName: node + linkType: hard + +"postgres-date@npm:~1.0.4": + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 10/571ef45bec4551bb5d608c31b79987d7a895141f7d6c7b82e936a52d23d97474c770c6143e5cf8936c1cdc8b0dfd95e79f8136bf56a90164182a60f242c19f2b + languageName: node + linkType: hard + +"postgres-date@npm:~2.1.0": + version: 2.1.0 + resolution: "postgres-date@npm:2.1.0" + checksum: 10/faa1c70dfad0e35bd4aa7cb6088fcd4e4f039aa25dc42150129178fc2a0baa7e37eca0bf18e4142a40dea18d1955459b08783f78ec487ef27b4b93ab5e854597 + languageName: node + linkType: hard + +"postgres-interval@npm:^1.1.0": + version: 1.2.0 + resolution: "postgres-interval@npm:1.2.0" + dependencies: + xtend: "npm:^4.0.0" + checksum: 10/746b71f93805ae33b03528e429dc624706d1f9b20ee81bf743263efb6a0cd79ae02a642a8a480dbc0f09547b4315ab7df6ce5ec0be77ed700bac42730f5c76b2 + languageName: node + linkType: hard + +"postgres-interval@npm:^3.0.0": + version: 3.0.0 + resolution: "postgres-interval@npm:3.0.0" + checksum: 10/c7a1cf006de97de663b6b8c4d2b167aa9909a238c4866a94b15d303762f5ac884ff4796cd6e2111b7f0a91302b83c570453aa8506fd005b5a5d5dfa87441bebc + languageName: node + linkType: hard + +"postgres-range@npm:^1.1.1": + version: 1.1.4 + resolution: "postgres-range@npm:1.1.4" + checksum: 10/035759f17b44bf9ba7e71a30402ed2ca1e2b7fabb3ad794b08169a5b453d38d06905a6dfb51fe41a3f6d9fac4e183dac9e769b95053053db933be16785edce1f + languageName: node + linkType: hard + "preferred-pm@npm:^3.0.0": version: 3.1.3 resolution: "preferred-pm@npm:3.1.3" @@ -17311,6 +18040,17 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.3.0 + resolution: "require-in-the-middle@npm:7.3.0" + dependencies: + debug: "npm:^4.1.1" + module-details-from-path: "npm:^1.0.3" + resolve: "npm:^1.22.1" + checksum: 10/883343b9ba15d42dd443b20fba5f9135cc4b7c2c2af3ae87f0105c28c499f98438a414e49bbfafd3f607dbe60a91c0da3610d31c9c3f61d222e565a8e8dd161e + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -17385,7 +18125,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:1.22.8, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.22.2, resolve@npm:^1.22.4": +"resolve@npm:1.22.8, resolve@npm:^1.1.6, resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.22.2, resolve@npm:^1.22.4": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -17411,7 +18151,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@patch:resolve@npm%3A1.22.8#optional!builtin, resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.1.7#optional!builtin, resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -17771,6 +18511,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.2": + version: 7.6.2 + resolution: "semver@npm:7.6.2" + bin: + semver: bin/semver.js + checksum: 10/296b17d027f57a87ef645e9c725bff4865a38dfc9caf29b26aa084b85820972fbe7372caea1ba6857162fa990702c6d9c1d82297cecb72d56c78ab29070d2ca2 + languageName: node + linkType: hard + "semver@npm:~7.0.0": version: 7.0.0 resolution: "semver@npm:7.0.0" @@ -18163,6 +18912,13 @@ __metadata: languageName: node linkType: hard +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: 10/aa0d6252ad1c682a4fdfda69e541be987f7a265ac7b00b1208e5e48cc68dc55f293955346ea4c71a169b7324b82c70f8400b3d3d2d60b2a7519f0a3522423250 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4"