diff --git a/.github/actions/build-images/action.yml b/.github/actions/build-images/action.yml index 10c92c1a90..969c3e9e57 100644 --- a/.github/actions/build-images/action.yml +++ b/.github/actions/build-images/action.yml @@ -14,6 +14,9 @@ inputs: aws-role-arn: description: 'AWS Role to assume' required: true + sentry-token: + description: 'Sentry auth token to push sourcemaps' + required: true runs: using: composite @@ -31,5 +34,6 @@ runs: - name: Build and push the images env: TAG: ${{ inputs.tag }} + SENTRY_AUTH_TOKEN: ${{ inputs.sentry-token }} run: bash ./docker/build.sh ${{ inputs.aws-ecr-uri }} $TAG shell: bash diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml index e42565d436..94075cad53 100644 --- a/.github/workflows/deploy-dev.yml +++ b/.github/workflows/deploy-dev.yml @@ -37,3 +37,4 @@ jobs: aws-ecr-uri: ${{ vars.PRIVATE_ECR }} aws-role-arn: ${{ vars.AWS_ROLE_ARN }} aws-region: ${{ vars.AWS_REGION }} + sentry-token: ${{ secrets.SENTRY_AUTH_TOKEN }} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index e90690605a..4d17509002 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -33,6 +33,7 @@ jobs: aws-ecr-uri: ${{ vars.GRAASP_PUBLIC_ECR }} aws-role-arn: ${{ vars.AWS_ROLE_ARN }} aws-region: us-east-1 + sentry-token: ${{ secrets.SENTRY_AUTH_TOKEN }} - name: Auto Tag uses: graasp/graasp-deploy/.github/actions/auto-tag-after-release@v1 diff --git a/.gitignore b/.gitignore index b52806cba2..4e578cb16c 100644 --- a/.gitignore +++ b/.gitignore @@ -60,3 +60,6 @@ secret-key # Generated openapi.json vacuum-report.html + +# Sentry Config File +.sentryclirc diff --git a/docker/Dockerfile b/docker/Dockerfile index 641a7a08a4..6b7023c8ee 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -24,6 +24,38 @@ ENV NODE_ENV=production COPY . . RUN yarn build-ts +# ------------------------------------------------------- +FROM base AS build-sources + +WORKDIR /app +COPY package.json yarn.lock .yarnrc.yml ./ +# We need a specific command because we need to copy the folder with it, not just the content. +COPY .yarn/releases ./.yarn/releases/ +RUN yarn set version berry && yarn install --immutable + +ENV NODE_ENV=production +COPY . . +RUN yarn build-ts --sourceMap true --sourceRoot '/' + +# send sourcemaps to Sentry +RUN --mount=type=secret,id=SENTRY_AUTH_TOKEN,env=SENTRY_AUTH_TOKEN yarn sentry:sourcemaps + +# ------------------------------------------------------- +FROM base AS build-sources + +WORKDIR /app +COPY package.json yarn.lock .yarnrc.yml ./ +# We need a specific command because we need to copy the folder with it, not just the content. +COPY .yarn/releases ./.yarn/releases/ +RUN yarn set version berry && yarn install --immutable + +ENV NODE_ENV=production +COPY . . +RUN yarn build-ts --sourceMap true --sourceRoot '/' + +# send sourcemaps to Sentry +RUN --mount=type=secret,id=SENTRY_AUTH_TOKEN,env=SENTRY_AUTH_TOKEN yarn sentry:sourcemaps + # ------------------------------------------------------- FROM base AS deps diff --git a/docker/build.sh b/docker/build.sh index c94fe95fc2..406d133f34 100644 --- a/docker/build.sh +++ b/docker/build.sh @@ -45,7 +45,7 @@ workers_tag_full="$aws_ecr_uri/$workers_tag_short" migrate_tag_short="graasp:migrate-$tag_version" migrate_tag_full="$aws_ecr_uri/$migrate_tag_short" -docker build -t $core_tag_full -f docker/Dockerfile --build-arg APP_VERSION=$tag_version --build-arg BUILD_TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S) . +docker build -t $core_tag_full -f docker/Dockerfile --build-arg APP_VERSION=$tag_version --build-arg BUILD_TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S) --secret id=SENTRY_AUTH_TOKEN . docker push $core_tag_full docker build -t $workers_tag_full -f docker/workers.Dockerfile --build-arg APP_VERSION=$tag_version --build-arg BUILD_TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S) . diff --git a/package.json b/package.json index bf14c78d6e..acbbf613b6 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "migration:apply-test": "DB_CONNECTION=postgres://test:test@db:5432/test yarn migration:run", "migration:generate": "yarn drizzle-kit generate", "migration:run": "yarn drizzle-kit migrate", - "migration:check": "yarn drizzle-kit generate --name=migrationtest --out=./src/drizzle --schema=./src/drizzle/schema.ts --dialect=postgresql && [ -f '$(find ./src/drizzle | grep migrationtest)' ] && exit 1 || exit 0" + "migration:check": "yarn drizzle-kit generate --name=migrationtest --out=./src/drizzle --schema=./src/drizzle/schema.ts --dialect=postgresql && [ -f '$(find ./src/drizzle | grep migrationtest)' ] && exit 1 || exit 0", + "sentry:sourcemaps": "sentry-cli sourcemaps inject --org graasp --project graasp-core ./dist && sentry-cli sourcemaps upload --org graasp --project graasp-core ./dist" }, "dependencies": { "@aws-sdk/client-s3": "3.787.0", @@ -69,7 +70,10 @@ "@graasp/etherpad-api": "2.1.1", "@graasp/sdk": "5.16.3", "@rapideditor/country-coder": "5.4.0", - "@sentry/node": "7.119.2", + "@sentry/cli": "2.57.0", + "@sentry/node": "10.20.0", + "@sentry/opentelemetry": "10.20.0", + "@sentry/profiling-node": "10.20.0", "@sentry/tracing": "7.120.3", "@sinclair/typebox": "0.34.33", "ajv": "8.17.1", diff --git a/src/0-instrument.ts b/src/0-instrument.ts new file mode 100644 index 0000000000..d3e714b911 --- /dev/null +++ b/src/0-instrument.ts @@ -0,0 +1,40 @@ +/** + * This file is names with a leading 0- so that the import reorder does not change its place. + * + * It NEEDS to be the first imported file otherwise sentry instrumentation does not work. + */ +import * as Sentry from '@sentry/node'; +import { nodeProfilingIntegration } from '@sentry/profiling-node'; + +// Ensure to call this before importing any other modules! +Sentry.init({ + dsn: process.env.SENTRY_DSN, + environment: process.env.SENTRY_ENV, + release: process.env.APP_VERSION ?? 'not-specified', + // Adds request headers and IP for users, for more info visit: + // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#sendDefaultPii + sendDefaultPii: true, + + integrations: [ + Sentry.fastifyIntegration(), + // Add our Profiling integration + nodeProfilingIntegration(), + ], + + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for tracing. + // We recommend adjusting this value in production + // Learn more at + // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#tracesSampleRate + tracesSampleRate: 0.2, + + // Set profilesSampleRate to 1.0 to profile 100% + // of sampled transactions. + // This is relative to tracesSampleRate + // Learn more at + // https://docs.sentry.io/platforms/javascript/guides/node/configuration/options/#profilesSampleRate + profilesSampleRate: 0.2, + + // Enable if you need to troubleshoot the Sentry config + debug: true, +}); diff --git a/src/fastify.ts b/src/fastify.ts index bde9be3177..7f46fe7ec2 100644 --- a/src/fastify.ts +++ b/src/fastify.ts @@ -1,3 +1,5 @@ +import * as Sentry from '@sentry/node'; + import { fastifyHelmet } from '@fastify/helmet'; import type { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'; import { fastify } from 'fastify'; @@ -6,7 +8,6 @@ import registerAppPlugins from './app'; import { DEV, NODE_ENV, PROD } from './config/env'; import { client } from './drizzle/db'; import ajvFormats from './schemas/ajvFormats'; -import { initSentry } from './sentry'; import { APP_VERSION, CORS_ORIGIN_REGEX, HOST_LISTEN_ADDRESS, PORT } from './utils/config'; import { GREETING } from './utils/constants'; import { queueDashboardPlugin } from './workers/dashboard.controller'; @@ -42,8 +43,7 @@ instance.addHook('onClose', async () => { }); const start = async () => { - const { Sentry } = initSentry(instance); - + Sentry.setupFastifyErrorHandler(instance); instance.register(fastifyHelmet); if (CORS_ORIGIN_REGEX) { diff --git a/src/sentry.ts b/src/sentry.ts deleted file mode 100644 index 1450d422ea..0000000000 --- a/src/sentry.ts +++ /dev/null @@ -1,143 +0,0 @@ -import * as Sentry from '@sentry/node'; -import '@sentry/tracing'; - -import type { FastifyInstance } from 'fastify'; - -import { NODE_ENV } from './config/env'; -import { - APP_VERSION, - SENTRY_DSN, - SENTRY_ENABLE_PERFORMANCE, - SENTRY_ENABLE_PROFILING, - SENTRY_ENV, - SENTRY_PROFILES_SAMPLE_RATE, - SENTRY_TRACES_SAMPLE_RATE, -} from './utils/config'; - -declare module 'fastify' { - interface FastifyRequest { - /** - * Collects metrics for logs, monitoring, traces - */ - metrics?: { - /** - * Metrics collected by Sentry - */ - sentry?: { - /** - * Sentry transaction span attached to the request - */ - transaction: Sentry.Transaction; - }; - }; - } -} - -const IGNORED_TRANSACTIONS = { - // retry from websocket generates failed requests when builder is not authenticated (public item) - 'GET /ws': 'missing authorization header', -}; - -export const SentryConfig = { - enable: Boolean(SENTRY_DSN), - dsn: SENTRY_DSN, - enablePerformance: SENTRY_ENABLE_PERFORMANCE, - enableProfiling: SENTRY_ENABLE_PROFILING, - profilesSampleRate: SENTRY_PROFILES_SAMPLE_RATE, - tracesSampleRate: SENTRY_TRACES_SAMPLE_RATE, -}; - -export function initSentry(instance: FastifyInstance): { - SentryConfig: typeof SentryConfig; - Sentry?: typeof Sentry; -} { - if (!SentryConfig.enable) { - return { SentryConfig }; - } - - Sentry.init({ - dsn: SentryConfig.dsn, - environment: SENTRY_ENV ?? NODE_ENV, - release: APP_VERSION, - integrations: [ - // TODO: re-enable when @sentry/profiling-node is more stable - // (currently does not report profiles and also causes compilation issues) - // ...(SentryConfig.enableProfiling ? [new ProfilingIntegration()] : []), - ], - profilesSampleRate: SentryConfig.profilesSampleRate, - tracesSampleRate: SentryConfig.tracesSampleRate, - beforeBreadcrumb: (breadcrumb) => { - // fix: sentry collects some automatic breadcrumbs - // however these are currently irrelevant (logs http events such as S3 unrelated to current request lifecycle) - // TODO: find a better way to exclude unwanted irrelevant auto breadcrumbs (we blanket ban http ones for now) - if (breadcrumb.category === 'http' && breadcrumb.level === 'info') { - return null; - } - return breadcrumb; - }, - beforeSend: (event) => { - // filter events - const transaction = event.transaction; - if ( - transaction && - transaction in IGNORED_TRANSACTIONS && - event.exception?.values?.some( - ({ value }) => - value === IGNORED_TRANSACTIONS[transaction as keyof typeof IGNORED_TRANSACTIONS], - ) - ) { - return null; - } - // send all other event - return event; - }, - }); - - if (SentryConfig.enablePerformance) { - /** - * This is done for performance reasons: - * 1. First decorateRequest with the empty type of the value to be set (null for an object) - * BUT NEVER SET THE ACTUAL OBJECT IN decorateRequest FOR SECURITY (reference is shared) - * 2. Then later use a hook such as preHandler or onRequest to store the actual value - * (it will be properly encapsulated) - * @example - * fastify.decorateRequest('user', null) // <-- must use null here if user will be an object - * // later in the code - * fastify.addHook('preHandler', (request) => { - * request.user = { name: 'John Doe' } // <-- must set the actual object here - * }) - * @see - * https://www.fastify.io/docs/latest/Reference/Decorators/#decoraterequestname-value-dependencies - * https://www.fastify.io/docs/latest/Reference/Decorators/ - */ - // instance.decorateRequest('metrics', null); - - instance.addHook('onRequest', async (request) => { - request.metrics = { - sentry: { - transaction: Sentry.startTransaction({ - op: 'request', - name: `${request.routeOptions.method ?? request.method} ${request.routeOptions.url ?? request.url}`, - }), - }, - }; - }); - - instance.addHook('onResponse', async (request) => { - request.metrics?.sentry?.transaction?.finish(); - }); - } - - instance.addHook('onError', async (request, reply, error) => { - Sentry.withScope((scope) => { - scope.setSpan(request.metrics?.sentry?.transaction); - scope.setTransactionName(request.metrics?.sentry?.transaction?.name); - if (request.user?.account) { - scope.setUser({ ...request.user.account, password: undefined }); - } - Sentry.captureException(error); - }); - }); - - return { SentryConfig, Sentry }; -} diff --git a/src/server.ts b/src/server.ts index ff5a936804..55181abfbb 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,3 +1,5 @@ +// 0-instrumentation.ts should be the first imported file, so that sentry can instrument the whole app code. +import './0-instrument'; import start from './fastify'; start(); diff --git a/tsconfig.build.json b/tsconfig.build.json index dbac15fc5c..a9da6c1b1a 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -2,7 +2,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "noEmit": false, - "outDir": "dist" + "outDir": "dist", + "sourceMap": false }, "exclude": [ "node_modules", diff --git a/tsconfig.json b/tsconfig.json index 80a1bcd5b1..4b0a68b94b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,7 +27,11 @@ "./node_modules/@types", "./src/@types/*" ], - "sourceMap": true + "sourceMap": true, + // Set `sourceRoot` to "/" to strip the build path prefix + // from generated source code references. + // This improves issue grouping in Sentry. + // "sourceRoot": "/" }, "include": [ "src/**/*", diff --git a/yarn.lock b/yarn.lock index f0438abf5c..3a2cab310a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,6 +15,24 @@ __metadata: languageName: node linkType: hard +"@apm-js-collab/code-transformer@npm:^0.8.0": + version: 0.8.2 + resolution: "@apm-js-collab/code-transformer@npm:0.8.2" + checksum: 10/ff4b8fea9a27ef4e82a0a022bececfa9966e5e2a4ae1e6ca0b31f4a2bbc6d79f5bd1257f281ed8a90900d693e1a88a79c42982eabe7ca999b267d5d69c57393f + languageName: node + linkType: hard + +"@apm-js-collab/tracing-hooks@npm:^0.3.1": + version: 0.3.1 + resolution: "@apm-js-collab/tracing-hooks@npm:0.3.1" + dependencies: + "@apm-js-collab/code-transformer": "npm:^0.8.0" + debug: "npm:^4.4.1" + module-details-from-path: "npm:^1.0.4" + checksum: 10/0af2220168d4fc2700ec577632eac066f756c3aaa34ef2e833ea4725abb80f7486c1a585a93e8f0d8304c51192f63c53e7ddd70290abac489a734f9693359f7f + languageName: node + linkType: hard + "@aws-crypto/crc32@npm:5.2.0": version: 5.2.0 resolution: "@aws-crypto/crc32@npm:5.2.0" @@ -3295,6 +3313,408 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.204.0": + version: 0.204.0 + resolution: "@opentelemetry/api-logs@npm:0.204.0" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10/698d04b3fc014ec68b5571ef5bebb9c276e290035f060aae6c2554410115d42d41ad41255a809bde4ca26e32bc833dba413c1d90dcda624c6c0307c309ba9d08 + languageName: node + linkType: hard + +"@opentelemetry/api-logs@npm:0.57.2": + version: 0.57.2 + resolution: "@opentelemetry/api-logs@npm:0.57.2" + dependencies: + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10/8e3bac962e8f1fc93bfee6b433121bd2e07e8a8d1b86ef0d9d4a2c54d1759b64c74cf5da400f82f5ab5a4fe0da481726d8635fd1b15d123cf43090fa0adb8ea8 + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.9.0": + version: 1.9.0 + resolution: "@opentelemetry/api@npm:1.9.0" + checksum: 10/a607f0eef971893c4f2ee2a4c2069aade6ec3e84e2a1f5c2aac19f65c5d9eeea41aa72db917c1029faafdd71789a1a040bdc18f40d63690e22ccae5d7070f194 + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:^2.1.0": + version: 2.1.0 + resolution: "@opentelemetry/context-async-hooks@npm:2.1.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/72f0380ec1407303aadd173663c1cf83b80c104b79b7e1ded909d78cc63574d7d7011b85d21858dd0384839550406f0cdd346c0ecfa78f1915707340aa14ef1b + languageName: node + linkType: hard + +"@opentelemetry/core@npm:2.1.0, @opentelemetry/core@npm:^2.0.0, @opentelemetry/core@npm:^2.1.0": + version: 2.1.0 + resolution: "@opentelemetry/core@npm:2.1.0" + dependencies: + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 10/735bd1fe8a099c3aa3d7640875a5b30ab304f7e3b13efd622daabe47ff5470e9c453ad9fc119a5a0c0458ec2c7753f9a066afa32a269745b06b429ba7db90516 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-amqplib@npm:0.51.0": + version: 0.51.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.51.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/be46037ebe797cff15785bf95ce93b8a95984b4cfd2329401d9c5ee0f3a488a9601ee259ca5e104a73a8677639fa8658d9111a356c45ada6b0f35a9271314167 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-connect@npm:0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.48.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/connect": "npm:3.4.38" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/289edf6d1108f1fb7e9937d0be62fbf44879716c53addd226862c1ae4dedfe030961f8052248485177ae950382046b7c00cc50512f3a195a1c285f4c455dca81 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dataloader@npm:0.22.0": + version: 0.22.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.22.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/8e15a6c5e5720819fccf406cc847c104d0364ad85a1561f8f96087cd13b5555b33b6c07403a83ef7fd02de29f090b6e7171efded1dd52583b6d6567f047f62ab + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-express@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-express@npm:0.53.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/30a354dde6c498ac82ee5423965a03e2f31e7ae82687b4135bbb20d967e066eb1accd6ca8a60da1e4cf2be8dfe6d07c413ead7fd89e166c36e7da92645e4493c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fs@npm:0.24.0": + version: 0.24.0 + resolution: "@opentelemetry/instrumentation-fs@npm:0.24.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/9ccb9b9bb79bb8a372a42b8544e84f9e18dab5a1b128b891857e3186da67668493666b551c7909d27479003b73979ad85060f1d67cf1e5b1b01dc3810e47ea83 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-generic-pool@npm:0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/4827243b033e70fd8e62e8453b0932302dc6e2638123a47968661c8cab94a87e6149fe81160f75940bf3ab4e45b400fb3e61babd1e52fea219fa502668da220c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-graphql@npm:0.52.0": + version: 0.52.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.52.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/8f4226237a492928d48750110d548f40c3fa2e2ecb42fcf977bc6cc188afbbb646fad673b3ecb2d21eab28415ee31b1d23afe27e5e2ebdaf17e89b6bf44aff0f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-hapi@npm:0.51.0": + version: 0.51.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.51.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/e098437a63807ec288c9e139554ac866909aac2c5da483a9d981f6f2bec33b4b28f73a1b04a2a069870998c2c32eaf68572c6bce3992de0f0b6c09a7e6da1b23 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:0.204.0": + version: 0.204.0 + resolution: "@opentelemetry/instrumentation-http@npm:0.204.0" + dependencies: + "@opentelemetry/core": "npm:2.1.0" + "@opentelemetry/instrumentation": "npm:0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + forwarded-parse: "npm:2.1.2" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/ce62b8a829293b9e584ecee317d5639f621588f7740b7fc21140d7aa831e7ea298d00e6cc87b95c63d80294387a7f236eb9d4e57124f12b28437c8dd4e82e944 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-ioredis@npm:0.52.0": + version: 0.52.0 + resolution: "@opentelemetry/instrumentation-ioredis@npm:0.52.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/redis-common": "npm:^0.38.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/65eb7aa6db4b84b460f264e2ee4c0cdbd3701a818e11c08b2bccf498795bea8e8be4bbf9519c8e7b8043563fd2f3699f57875854bc27be3236f326de3792a292 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-kafkajs@npm:0.14.0": + version: 0.14.0 + resolution: "@opentelemetry/instrumentation-kafkajs@npm:0.14.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.30.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/488b0e7f42392a47dfbce3d1e728b34873793ee239c2646f9dffe1ecc9b1e2ea4337145cb5e4bcaa77a81899062ef586a6b3f391b4b4b49249529f29b871b053 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-knex@npm:0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-knex@npm:0.49.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.33.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/d4802b024dd2e49e63a65567fe3d6b8a6048c5cd70fb78a78134c56568496c8fc10ef867039f9525cabb5f9c06bb7e8ff07651bb5a15b89bdc0fb70a4cc5c96c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-koa@npm:0.52.0": + version: 0.52.0 + resolution: "@opentelemetry/instrumentation-koa@npm:0.52.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/88a444bd92c3e1906167820e63e40bfe6531f54c28a8aacec51e2d527465818c002a5dfe72fbc1709cac6f6b4f5a0d01e798c4089731b0ec1b28fe94b9a729de + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-lru-memoizer@npm:0.49.0": + version: 0.49.0 + resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.49.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/8aaad4a276ab9a754ceca28767261c930be98de728e9fab68ff304b2e6839b6d32c8e48984ff868499bf34765da76ee2e44bb98c54317fc904aed3480fecfd4b + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongodb@npm:0.57.0": + version: 0.57.0 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.57.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/f6e20ee84c83cb2f9752e198f106c5b7008b4e530c0207863723967008d9741987862cf8cc2a6d8853041c99f029d0d4d80fdf20ed6048eb782ec502bb730888 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongoose@npm:0.51.0": + version: 0.51.0 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.51.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/1c6d99a58cbedc8efa921411db62a8f756dd730cd5d0419b4073336c2b2f04d8e230665d5e54be200130caa7f0d55d37ba6514acbfafcc74f95c0035906a4556 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql2@npm:0.51.0": + version: 0.51.0 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.51.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@opentelemetry/sql-common": "npm:^0.41.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/dab850b1a7a6f0a90e319c16a657218f366d9d06d8a78b1678f78b663db121a723276fe649e41cd67b3f36ff516efe5df8b13f684d989f1df94bf7137c05635d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql@npm:0.50.0": + version: 0.50.0 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.50.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/mysql": "npm:2.15.27" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/c615b692e86e51d15f5e0c10669019e0d9cb728a175bda7d2e3ab7df07cb65f872f63f9c01843b3dc5a630379a2ccfaafc3a7c0396f09de7b025a891d5794ce4 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:0.57.0": + version: 0.57.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.57.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.34.0" + "@opentelemetry/sql-common": "npm:^0.41.0" + "@types/pg": "npm:8.15.5" + "@types/pg-pool": "npm:2.0.6" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/7ebaa287c1da8b6c0183e42f7bdc05fda99ad0e046208361fba173da8831ce0645b245c3c4c9ffdc234cc4c96c04622424e91f2cf18ff2d29b7d0f9ce3b7fc6e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis@npm:0.53.0": + version: 0.53.0 + resolution: "@opentelemetry/instrumentation-redis@npm:0.53.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/redis-common": "npm:^0.38.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/606c8877819c99d62266a106fa15703316fb703a60dd82e4995ebf33d892fecea35e6f4457a56f218b29adac8f573bf5a5437feeb406fb65002e65ed70ee178a + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-tedious@npm:0.23.0": + version: 0.23.0 + resolution: "@opentelemetry/instrumentation-tedious@npm:0.23.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/semantic-conventions": "npm:^1.27.0" + "@types/tedious": "npm:^4.0.14" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/00d922782c709dbc6e9fdaa77197423f76707904a71a920d60642f669e496f37b64a6376609bfafcda4d0778cdab15b161a56426a20fb1a5c24a131c9d2db8a5 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-undici@npm:0.15.0": + version: 0.15.0 + resolution: "@opentelemetry/instrumentation-undici@npm:0.15.0" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + peerDependencies: + "@opentelemetry/api": ^1.7.0 + checksum: 10/5190d2e08785e05c92815e2b1db5d85d7427fc1c7c4529ffb7a076793e8ac71117b8f9007f42ddd22565147dfee5b2d2d3b0e8237d46f2b83d48dd1a353e2c11 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.204.0, @opentelemetry/instrumentation@npm:^0.204.0": + version: 0.204.0 + resolution: "@opentelemetry/instrumentation@npm:0.204.0" + dependencies: + "@opentelemetry/api-logs": "npm:0.204.0" + import-in-the-middle: "npm:^1.8.1" + require-in-the-middle: "npm:^7.1.1" + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 10/a32b93e714e555dc1fca6c212bde565342370f0f62c1421e02cb307193ced1f8167223b3b70adc6e4539bf8508424f56b7249ecb527995406944434b29b73066 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0": + version: 0.57.2 + resolution: "@opentelemetry/instrumentation@npm:0.57.2" + dependencies: + "@opentelemetry/api-logs": "npm:0.57.2" + "@types/shimmer": "npm:^1.2.0" + import-in-the-middle: "npm:^1.8.1" + 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/b66b840e87976a5edf551a7011a395df8df5985571ac0506412943d07b4309fcc78fe71d3f55217a00f44384fbf61f59f1e54d544ab12f5490f6a7a56b71e02a + languageName: node + linkType: hard + +"@opentelemetry/redis-common@npm:^0.38.0": + version: 0.38.2 + resolution: "@opentelemetry/redis-common@npm:0.38.2" + checksum: 10/2a4f992572b1990a407ac92c7db941aecb6e8d71f034f4ea0b00b2b1739ad07c22767198a6759ab634cbbe9eebfbea062e2b79a25484289c226c665558041503 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:2.1.0, @opentelemetry/resources@npm:^2.1.0": + version: 2.1.0 + resolution: "@opentelemetry/resources@npm:2.1.0" + dependencies: + "@opentelemetry/core": "npm:2.1.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/8e2255443184fb889c54ed07fbcadb3b1595ce45219a39b5ac93e09648bf0b293098f84e2e47aec795deaf2d9d3db20302863f41e8e24195b2a19680eb9234fc + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:^2.1.0": + version: 2.1.0 + resolution: "@opentelemetry/sdk-trace-base@npm:2.1.0" + dependencies: + "@opentelemetry/core": "npm:2.1.0" + "@opentelemetry/resources": "npm:2.1.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10/bae338ed2f518e7873d17d28a756c1eed65990a5cc36930fba0f88a2e1f794ffa2eb2394f3eff1fd61420796536358534bce3be005c83812fc1a7f0ed9c61700 + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:^1.27.0, @opentelemetry/semantic-conventions@npm:^1.29.0, @opentelemetry/semantic-conventions@npm:^1.30.0, @opentelemetry/semantic-conventions@npm:^1.33.1, @opentelemetry/semantic-conventions@npm:^1.34.0, @opentelemetry/semantic-conventions@npm:^1.37.0": + version: 1.37.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.37.0" + checksum: 10/919951c2ddbe5509dad26afc7b09d9a5e3c169de187013d1836d2771a7e840e85ea500725128b798d7659d89aff480c07fd039cf77858df3f3573a15063db7c3 + languageName: node + linkType: hard + +"@opentelemetry/sql-common@npm:^0.41.0": + version: 0.41.2 + resolution: "@opentelemetry/sql-common@npm:0.41.2" + dependencies: + "@opentelemetry/core": "npm:^2.0.0" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 10/3d57d5162c69c29484cb166e99ac733fff1dcefa26aea401e40035d5daa3aef21af78936af7943d0dfdab385ff053b879117c2fa3bd980412dd378222b10bea3 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -3302,6 +3722,17 @@ __metadata: languageName: node linkType: hard +"@prisma/instrumentation@npm:6.15.0": + version: 6.15.0 + resolution: "@prisma/instrumentation@npm:6.15.0" + dependencies: + "@opentelemetry/instrumentation": "npm:^0.52.0 || ^0.53.0 || ^0.54.0 || ^0.55.0 || ^0.56.0 || ^0.57.0" + peerDependencies: + "@opentelemetry/api": ^1.8 + checksum: 10/25f69e3ea581b0cfa058c80acde5e5382d3b5d48e213654c011ab61909dd6311c17235dd26fa36c4e91d620f8ab49f1190732d6a48bbeec545e0664e1e1f86dc + languageName: node + linkType: hard + "@quobix/vacuum@npm:0.18.5": version: 0.18.5 resolution: "@quobix/vacuum@npm:0.18.5" @@ -3471,14 +3902,14 @@ __metadata: languageName: node linkType: hard -"@sentry-internal/tracing@npm:7.119.2": - version: 7.119.2 - resolution: "@sentry-internal/tracing@npm:7.119.2" +"@sentry-internal/node-cpu-profiler@npm:^2.2.0": + version: 2.2.0 + resolution: "@sentry-internal/node-cpu-profiler@npm:2.2.0" dependencies: - "@sentry/core": "npm:7.119.2" - "@sentry/types": "npm:7.119.2" - "@sentry/utils": "npm:7.119.2" - checksum: 10/5a3a0e3f33da1b502c37d0d2c91861dce206806fdedbf2bed687fa65912044e7fd684903f9d8c2f41123f8484feae98c12f90ff5368550a29a6cf2f9f6cd4c72 + detect-libc: "npm:^2.0.3" + node-abi: "npm:^3.73.0" + node-gyp: "npm:latest" + checksum: 10/94b82c8da52cca3c71f4515940cb5bd02d9902a802f10ba66bea96784e6ccfdb8285215c4a2d8f442a182b8e5543a301007217175cb6538bc9229f8a799b1219 languageName: node linkType: hard @@ -3493,13 +3924,106 @@ __metadata: languageName: node linkType: hard -"@sentry/core@npm:7.119.2": - version: 7.119.2 - resolution: "@sentry/core@npm:7.119.2" +"@sentry/cli-darwin@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-darwin@npm:2.57.0" + conditions: os=darwin + languageName: node + linkType: hard + +"@sentry/cli-linux-arm64@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-linux-arm64@npm:2.57.0" + conditions: (os=linux | os=freebsd | os=android) & cpu=arm64 + languageName: node + linkType: hard + +"@sentry/cli-linux-arm@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-linux-arm@npm:2.57.0" + conditions: (os=linux | os=freebsd | os=android) & cpu=arm + languageName: node + linkType: hard + +"@sentry/cli-linux-i686@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-linux-i686@npm:2.57.0" + conditions: (os=linux | os=freebsd | os=android) & (cpu=x86 | cpu=ia32) + languageName: node + linkType: hard + +"@sentry/cli-linux-x64@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-linux-x64@npm:2.57.0" + conditions: (os=linux | os=freebsd | os=android) & cpu=x64 + languageName: node + linkType: hard + +"@sentry/cli-win32-arm64@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-win32-arm64@npm:2.57.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@sentry/cli-win32-i686@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-win32-i686@npm:2.57.0" + conditions: os=win32 & (cpu=x86 | cpu=ia32) + languageName: node + linkType: hard + +"@sentry/cli-win32-x64@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli-win32-x64@npm:2.57.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@sentry/cli@npm:2.57.0": + version: 2.57.0 + resolution: "@sentry/cli@npm:2.57.0" dependencies: - "@sentry/types": "npm:7.119.2" - "@sentry/utils": "npm:7.119.2" - checksum: 10/67969ef7cc20da2cb4ba79887b3531d5f624e795c8404414506939b647fc3d6a0fac4c44657fa734dbb4f8d37c6b4ad12c14caf988d6e07d3bc7eb7e0fe0c2c2 + "@sentry/cli-darwin": "npm:2.57.0" + "@sentry/cli-linux-arm": "npm:2.57.0" + "@sentry/cli-linux-arm64": "npm:2.57.0" + "@sentry/cli-linux-i686": "npm:2.57.0" + "@sentry/cli-linux-x64": "npm:2.57.0" + "@sentry/cli-win32-arm64": "npm:2.57.0" + "@sentry/cli-win32-i686": "npm:2.57.0" + "@sentry/cli-win32-x64": "npm:2.57.0" + https-proxy-agent: "npm:^5.0.0" + node-fetch: "npm:^2.6.7" + progress: "npm:^2.0.3" + proxy-from-env: "npm:^1.1.0" + which: "npm:^2.0.2" + dependenciesMeta: + "@sentry/cli-darwin": + optional: true + "@sentry/cli-linux-arm": + optional: true + "@sentry/cli-linux-arm64": + optional: true + "@sentry/cli-linux-i686": + optional: true + "@sentry/cli-linux-x64": + optional: true + "@sentry/cli-win32-arm64": + optional: true + "@sentry/cli-win32-i686": + optional: true + "@sentry/cli-win32-x64": + optional: true + bin: + sentry-cli: bin/sentry-cli + checksum: 10/f73049676c210040fc704965d93668c2e56fb4347c378a3d418c1965457e28ac250cab3a042dd230730636de04df9a7c735789487baf7714f75385589733ef66 + languageName: node + linkType: hard + +"@sentry/core@npm:10.20.0": + version: 10.20.0 + resolution: "@sentry/core@npm:10.20.0" + checksum: 10/7c87a27bd8aedc25e4bf449a094b10d60c536485d099bb47efdbb2d5b7af5c87fbe55ede62cca9c4110a5a183c7d302e637af6344935699b992c8c56a3c83653 languageName: node linkType: hard @@ -3513,28 +4037,94 @@ __metadata: languageName: node linkType: hard -"@sentry/integrations@npm:7.119.2": - version: 7.119.2 - resolution: "@sentry/integrations@npm:7.119.2" +"@sentry/node-core@npm:10.20.0": + version: 10.20.0 + resolution: "@sentry/node-core@npm:10.20.0" dependencies: - "@sentry/core": "npm:7.119.2" - "@sentry/types": "npm:7.119.2" - "@sentry/utils": "npm:7.119.2" - localforage: "npm:^1.8.1" - checksum: 10/6e064ca92a21615d57d06469353b924b1c34254132615b2e8ec364375f31a18c607b3d46ad3390eef1ed9c654706793af4f01ce4c7c61486f6a638a70942c721 + "@apm-js-collab/tracing-hooks": "npm:^0.3.1" + "@sentry/core": "npm:10.20.0" + "@sentry/opentelemetry": "npm:10.20.0" + import-in-the-middle: "npm:^1.14.2" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/context-async-hooks": ^1.30.1 || ^2.1.0 + "@opentelemetry/core": ^1.30.1 || ^2.1.0 + "@opentelemetry/instrumentation": ">=0.57.1 <1" + "@opentelemetry/resources": ^1.30.1 || ^2.1.0 + "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.1.0 + "@opentelemetry/semantic-conventions": ^1.37.0 + checksum: 10/5b8b431915ff88ae3704fc4cfeff2794ba28411edc9c9d9f68a38ea78b10d7d7bbc1941a93d63c3aeaeaff57348bd34db06632b08d6b7d82ff547ae5c816be40 + languageName: node + linkType: hard + +"@sentry/node@npm:10.20.0": + version: 10.20.0 + resolution: "@sentry/node@npm:10.20.0" + dependencies: + "@opentelemetry/api": "npm:^1.9.0" + "@opentelemetry/context-async-hooks": "npm:^2.1.0" + "@opentelemetry/core": "npm:^2.1.0" + "@opentelemetry/instrumentation": "npm:^0.204.0" + "@opentelemetry/instrumentation-amqplib": "npm:0.51.0" + "@opentelemetry/instrumentation-connect": "npm:0.48.0" + "@opentelemetry/instrumentation-dataloader": "npm:0.22.0" + "@opentelemetry/instrumentation-express": "npm:0.53.0" + "@opentelemetry/instrumentation-fs": "npm:0.24.0" + "@opentelemetry/instrumentation-generic-pool": "npm:0.48.0" + "@opentelemetry/instrumentation-graphql": "npm:0.52.0" + "@opentelemetry/instrumentation-hapi": "npm:0.51.0" + "@opentelemetry/instrumentation-http": "npm:0.204.0" + "@opentelemetry/instrumentation-ioredis": "npm:0.52.0" + "@opentelemetry/instrumentation-kafkajs": "npm:0.14.0" + "@opentelemetry/instrumentation-knex": "npm:0.49.0" + "@opentelemetry/instrumentation-koa": "npm:0.52.0" + "@opentelemetry/instrumentation-lru-memoizer": "npm:0.49.0" + "@opentelemetry/instrumentation-mongodb": "npm:0.57.0" + "@opentelemetry/instrumentation-mongoose": "npm:0.51.0" + "@opentelemetry/instrumentation-mysql": "npm:0.50.0" + "@opentelemetry/instrumentation-mysql2": "npm:0.51.0" + "@opentelemetry/instrumentation-pg": "npm:0.57.0" + "@opentelemetry/instrumentation-redis": "npm:0.53.0" + "@opentelemetry/instrumentation-tedious": "npm:0.23.0" + "@opentelemetry/instrumentation-undici": "npm:0.15.0" + "@opentelemetry/resources": "npm:^2.1.0" + "@opentelemetry/sdk-trace-base": "npm:^2.1.0" + "@opentelemetry/semantic-conventions": "npm:^1.37.0" + "@prisma/instrumentation": "npm:6.15.0" + "@sentry/core": "npm:10.20.0" + "@sentry/node-core": "npm:10.20.0" + "@sentry/opentelemetry": "npm:10.20.0" + import-in-the-middle: "npm:^1.14.2" + minimatch: "npm:^9.0.0" + checksum: 10/eff5f47d0196f9261958d59a034f97a898af4f5116ed61b9455a3007ddf08a8816c854d0ac5496e5fad1e0a9a95f4a4c62fe8edd7c0cc22a5b6bb8b97f05f09c + languageName: node + linkType: hard + +"@sentry/opentelemetry@npm:10.20.0": + version: 10.20.0 + resolution: "@sentry/opentelemetry@npm:10.20.0" + dependencies: + "@sentry/core": "npm:10.20.0" + peerDependencies: + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/context-async-hooks": ^1.30.1 || ^2.1.0 + "@opentelemetry/core": ^1.30.1 || ^2.1.0 + "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.1.0 + "@opentelemetry/semantic-conventions": ^1.37.0 + checksum: 10/c74563459f98c8424677d604158fea430c2d596bfd5cb6158579018fbedbd573f2469036b936949a757277c5fb72efb4b6dad5ca9a7b0b2be0be141088c709d8 languageName: node linkType: hard -"@sentry/node@npm:7.119.2": - version: 7.119.2 - resolution: "@sentry/node@npm:7.119.2" +"@sentry/profiling-node@npm:10.20.0": + version: 10.20.0 + resolution: "@sentry/profiling-node@npm:10.20.0" dependencies: - "@sentry-internal/tracing": "npm:7.119.2" - "@sentry/core": "npm:7.119.2" - "@sentry/integrations": "npm:7.119.2" - "@sentry/types": "npm:7.119.2" - "@sentry/utils": "npm:7.119.2" - checksum: 10/2160288943093d0a5617508482095e5b118a1a67c4a858150b801e110d12ebbc8cdef69a5d50aa55a448447dc3db6251102fb6eaf58deb976de0042682469af1 + "@sentry-internal/node-cpu-profiler": "npm:^2.2.0" + "@sentry/core": "npm:10.20.0" + "@sentry/node": "npm:10.20.0" + bin: + sentry-prune-profiler-binaries: scripts/prune-profiler-binaries.js + checksum: 10/e79a0ab8f682114507b4fc8e13b73111f4a684525fc400c48cc3bc6860ba93d87f0cf3951077559cc7f79aa0dff2f713e263c2b4034346bdfefbfbb8de29c333 languageName: node linkType: hard @@ -3547,13 +4137,6 @@ __metadata: languageName: node linkType: hard -"@sentry/types@npm:7.119.2": - version: 7.119.2 - resolution: "@sentry/types@npm:7.119.2" - checksum: 10/8a4c8d13e1e5232be33837d42af8f85539a61d7bde1e174d4a077485f6a53896a3fe2c53cdaf13840f5e8ef6dea3977d5aa506a28f23431f8c629359b9cf8be9 - languageName: node - linkType: hard - "@sentry/types@npm:7.120.3": version: 7.120.3 resolution: "@sentry/types@npm:7.120.3" @@ -3561,15 +4144,6 @@ __metadata: languageName: node linkType: hard -"@sentry/utils@npm:7.119.2": - version: 7.119.2 - resolution: "@sentry/utils@npm:7.119.2" - dependencies: - "@sentry/types": "npm:7.119.2" - checksum: 10/97501d95e169f91ed3718845975dc69a9f03fe0ca9058ef4558c9c67d0653df62cfa9c696a6c48c7dd0eb12a9417a7ffdaa9efa675333283c75654ef9f27eb40 - languageName: node - linkType: hard - "@sentry/utils@npm:7.120.3": version: 7.120.3 resolution: "@sentry/utils@npm:7.120.3" @@ -4372,7 +4946,7 @@ __metadata: languageName: node linkType: hard -"@types/connect@npm:*": +"@types/connect@npm:*, @types/connect@npm:3.4.38": version: 3.4.38 resolution: "@types/connect@npm:3.4.38" dependencies: @@ -4607,6 +5181,15 @@ __metadata: languageName: node linkType: hard +"@types/mysql@npm:2.15.27": + version: 2.15.27 + resolution: "@types/mysql@npm:2.15.27" + dependencies: + "@types/node": "npm:*" + checksum: 10/a8c743501036f494bb8b26ee04ce914c9cce88955d9ba48ff77d2b5b1bc403d4d99804dbf02238c1491fa93e2242983b1492ad8c2b39755dabd68683dada9e8f + languageName: node + linkType: hard + "@types/node-fetch@npm:2": version: 2.6.12 resolution: "@types/node-fetch@npm:2.6.12" @@ -4707,6 +5290,26 @@ __metadata: languageName: node linkType: hard +"@types/pg-pool@npm:2.0.6": + version: 2.0.6 + resolution: "@types/pg-pool@npm:2.0.6" + dependencies: + "@types/pg": "npm:*" + checksum: 10/cc54ce97115effc982bd052f79901a78215e76554aca0ecc92e78eb907e4fb2962924039369cd9aaf48075f1637593ce14647c62d3a2eb03789ce5d1c6df750b + languageName: node + linkType: hard + +"@types/pg@npm:*, @types/pg@npm:8.15.5": + version: 8.15.5 + resolution: "@types/pg@npm:8.15.5" + dependencies: + "@types/node": "npm:*" + pg-protocol: "npm:*" + pg-types: "npm:^2.2.0" + checksum: 10/31bae283d044cd87a62fcbf1dc4d5a431783f4b19cad769bf5ad23794ccff969ae6fe7915c352a7b78a7159bc8b945560a5f76e74091e283c089618d1aacfff5 + languageName: node + linkType: hard + "@types/pg@npm:8.15.4": version: 8.15.4 resolution: "@types/pg@npm:8.15.4" @@ -4771,6 +5374,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.2.0": + version: 1.2.0 + resolution: "@types/shimmer@npm:1.2.0" + checksum: 10/f081a31d826ce7bfe8cc7ba8129d2b1dffae44fd580eba4fcf741237646c4c2494ae6de2cada4b7713d138f35f4bc512dbf01311d813dee82020f97d7d8c491c + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -4778,6 +5388,15 @@ __metadata: languageName: node linkType: hard +"@types/tedious@npm:^4.0.14": + version: 4.0.14 + resolution: "@types/tedious@npm:4.0.14" + dependencies: + "@types/node": "npm:*" + checksum: 10/c8f6480cf68d95b5e9f64fa6210f50915e8ff124638965a2c5a4c87641cc7f762155b9a8e01e3e517d48f8931e2d3920a40c4e677398e8b93c9cf1c8a36d2fbb + languageName: node + linkType: hard + "@types/uuid@npm:10.0.0": version: 10.0.0 resolution: "@types/uuid@npm:10.0.0" @@ -5216,6 +5835,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.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -5243,6 +5871,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0": + version: 8.15.0 + resolution: "acorn@npm:8.15.0" + bin: + acorn: bin/acorn + checksum: 10/77f2de5051a631cf1729c090e5759148459cdb76b5f5c70f890503d629cf5052357b0ce783c0f976dd8a93c5150f59f6d18df1def3f502396a20f81282482fa4 + languageName: node + linkType: hard + "acorn@npm:^8.4.1, acorn@npm:^8.9.0": version: 8.11.3 resolution: "acorn@npm:8.11.3" @@ -6079,7 +6716,7 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.0.0": +"cjs-module-lexer@npm:^1.0.0, cjs-module-lexer@npm:^1.2.2": version: 1.4.3 resolution: "cjs-module-lexer@npm:1.4.3" checksum: 10/d2b92f919a2dedbfd61d016964fce8da0035f827182ed6839c97cac56e8a8077cfa6a59388adfe2bc588a19cef9bbe830d683a76a6e93c51f65852062cfe2591 @@ -6549,6 +7186,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.5": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10/9ada3434ea2993800bd9a1e320bd4aa7af69659fb51cca685d390949434bc0a8873c21ed7c9b852af6f2455a55c6d050aa3937d52b3c69f796dab666f762acad + languageName: node + linkType: hard + "debug@npm:^4.4.0": version: 4.4.0 resolution: "debug@npm:4.4.0" @@ -8196,6 +8845,13 @@ __metadata: languageName: node linkType: hard +"forwarded-parse@npm:2.1.2": + version: 2.1.2 + resolution: "forwarded-parse@npm:2.1.2" + checksum: 10/fca4df8898248d123d9d29a9fdf48005dd757366c2c17c1e195e8311a9aa89caf9f5e592f58f7d3d635087675ff39e85c32c6205838510f6f1fa4109de519930 + languageName: node + linkType: hard + "fs-extra@npm:11.3.0, fs-extra@npm:^11.0.0": version: 11.3.0 resolution: "fs-extra@npm:11.3.0" @@ -8597,7 +9253,10 @@ __metadata: "@jest/globals": "npm:29.7.0" "@quobix/vacuum": "npm:0.18.5" "@rapideditor/country-coder": "npm:5.4.0" - "@sentry/node": "npm:7.119.2" + "@sentry/cli": "npm:2.57.0" + "@sentry/node": "npm:10.20.0" + "@sentry/opentelemetry": "npm:10.20.0" + "@sentry/profiling-node": "npm:10.20.0" "@sentry/tracing": "npm:7.120.3" "@sinclair/typebox": "npm:0.34.33" "@trivago/prettier-plugin-sort-imports": "npm:5.2.2" @@ -9004,6 +9663,18 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^1.14.2, import-in-the-middle@npm:^1.8.1": + version: 1.15.0 + resolution: "import-in-the-middle@npm:1.15.0" + dependencies: + acorn: "npm:^8.14.0" + acorn-import-attributes: "npm:^1.9.5" + cjs-module-lexer: "npm:^1.2.2" + module-details-from-path: "npm:^1.0.3" + checksum: 10/a1ff65ea557ffe67e63dd67b411255fedd8622b324ff22ba99f4436b8fcf74da0333e62b4e8142f447e5db64a42ec9e65f926d50fa55e89c4e4d64626d8cf5f8 + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.2.0 resolution: "import-local@npm:3.2.0" @@ -10385,15 +11056,6 @@ __metadata: languageName: node linkType: hard -"lie@npm:3.1.1": - version: 3.1.1 - resolution: "lie@npm:3.1.1" - dependencies: - immediate: "npm:~3.0.5" - checksum: 10/c2c7d9dcc3a9aae641f41cde4e2e2cd571e4426b1f5915862781d77776672dcbca43461e16f4d382c9a300825c15e1a4923f1def3a5568d97577e077a3cecb44 - languageName: node - linkType: hard - "lie@npm:~3.3.0": version: 3.3.0 resolution: "lie@npm:3.3.0" @@ -10428,15 +11090,6 @@ __metadata: languageName: node linkType: hard -"localforage@npm:^1.8.1": - version: 1.10.0 - resolution: "localforage@npm:1.10.0" - dependencies: - lie: "npm:3.1.1" - checksum: 10/d5c44be3a09169b013a3ebe252e678aaeb6938ffe72e9e12c199fd4307c1ec9d1a057ac2dfdfbb1379dfeec467a34ad0fc3ecd27489a2c43a154fb72b2822542 - languageName: node - linkType: hard - "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -10908,21 +11561,21 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^9.0.1": - version: 9.0.4 - resolution: "minimatch@npm:9.0.4" +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 10/4cdc18d112b164084513e890d6323370db14c22249d536ad1854539577a895e690a27513dc346392f61a4a50afbbd8abc88f3f25558bfbbbb862cd56508b20f5 + checksum: 10/dd6a8927b063aca6d910b119e1f2df6d2ce7d36eab91de83167dd136bb85e1ebff97b0d3de1cb08bd1f7e018ca170b4962479fefab5b2a69e2ae12cb2edc8348 languageName: node linkType: hard -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" +"minimatch@npm:^9.0.1": + version: 9.0.4 + resolution: "minimatch@npm:9.0.4" dependencies: brace-expansion: "npm:^2.0.1" - checksum: 10/dd6a8927b063aca6d910b119e1f2df6d2ce7d36eab91de83167dd136bb85e1ebff97b0d3de1cb08bd1f7e018ca170b4962479fefab5b2a69e2ae12cb2edc8348 + checksum: 10/4cdc18d112b164084513e890d6323370db14c22249d536ad1854539577a895e690a27513dc346392f61a4a50afbbd8abc88f3f25558bfbbbb862cd56508b20f5 languageName: node linkType: hard @@ -11071,6 +11724,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3, module-details-from-path@npm:^1.0.4": + version: 1.0.4 + resolution: "module-details-from-path@npm:1.0.4" + checksum: 10/2ebfada5358492f6ab496b70f70a1042f2ee7a4c79d29467f59ed6704f741fb4461d7cecb5082144ed39a05fec4d19e9ff38b731c76228151be97227240a05b2 + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -11196,6 +11856,15 @@ __metadata: languageName: node linkType: hard +"node-abi@npm:^3.73.0": + version: 3.78.0 + resolution: "node-abi@npm:3.78.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10/59b41028d02070b79b491f0cb944efedd875d26de52a57bd0d11f02c2ef4268b320bdfe839eb576d3163709894b92b39e24a236179cb952051cbf4d83887ac88 + languageName: node + linkType: hard + "node-abort-controller@npm:^3.1.1": version: 3.1.1 resolution: "node-abort-controller@npm:3.1.1" @@ -12212,6 +12881,13 @@ __metadata: languageName: node linkType: hard +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: 10/e6f0bcb71f716eee9dfac0fe8a2606e3704d6a64dd93baaf49fbadbc8499989a610fe14cf1bc6f61b6d6653c49408d94f4a94e124538084efd8e4cf525e0293d + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -12497,6 +13173,17 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.5.2 + resolution: "require-in-the-middle@npm:7.5.2" + dependencies: + debug: "npm:^4.3.5" + module-details-from-path: "npm:^1.0.3" + resolve: "npm:^1.22.8" + checksum: 10/d8f137d72eec1c53987647d19cd3bd2c64d5417bcd06b9ac8f7a14e83924c1e7636e327df7d96066a2b446b41f50d0bc1856a521388d5e90ba5c3b18dd5ab4e8 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -12556,6 +13243,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.22.8": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/e1b2e738884a08de03f97ee71494335eba8c2b0feb1de9ae065e82c48997f349f77a2b10e8817e147cf610bfabc4b1cb7891ee8eaf5bf80d4ad514a34c4fab0a + languageName: node + linkType: hard + "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.4#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" @@ -12569,6 +13269,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@npm%3A^1.22.8#optional!builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#optional!builtin::version=1.22.11&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.1" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10/fd342cad25e52cd6f4f3d1716e189717f2522bfd6641109fe7aa372f32b5714a296ed7c238ddbe7ebb0c1ddfe0b7f71c9984171024c97cf1b2073e3e40ff71a8 + languageName: node + linkType: hard + "ret@npm:~0.5.0": version: 0.5.0 resolution: "ret@npm:0.5.0" @@ -12897,6 +13610,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.2": + version: 7.7.3 + resolution: "semver@npm:7.7.3" + bin: + semver: bin/semver.js + checksum: 10/8dbc3168e057a38fc322af909c7f5617483c50caddba135439ff09a754b20bdd6482a5123ff543dad4affa488ecf46ec5fb56d61312ad20bb140199b88dfaea9 + languageName: node + linkType: hard + "semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" @@ -13072,6 +13794,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-list@npm:^1.0.0": version: 1.0.0 resolution: "side-channel-list@npm:1.0.0" @@ -14700,7 +15429,7 @@ __metadata: languageName: node linkType: hard -"which@npm:^2.0.1": +"which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: