1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 08:29:36 +01:00

feat: Sentry-kompatibles Error-Tracking (Bugsink) für Frontend und Backend

Frontend: @sentry/node mit instrument.ts, globale Error-Handler, 5xx-Interceptor.
Backend: sentry-spring-boot-starter-jakarta, Sentry.captureException im GlobalExceptionHandler.
Konfiguration über SENTRY_DSN Env-Variable, Bugsink via make bugsink startbar.
This commit is contained in:
Sebastian Frick 2026-02-23 22:40:19 +01:00
parent 5fe0dfc139
commit df1d1dfdd3
9 changed files with 818 additions and 6 deletions

View file

@ -88,6 +88,13 @@
<artifactId>liquibase-core</artifactId>
</dependency>
<!-- Sentry / Bugsink Error Tracking -->
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring-boot-starter-jakarta</artifactId>
<version>8.28.0</version>
</dependency>
<!-- OpenAPI/Swagger Documentation -->
<dependency>
<groupId>org.springdoc</groupId>

View file

@ -26,6 +26,7 @@ import de.effigenix.infrastructure.usermanagement.web.controller.RoleController;
import de.effigenix.infrastructure.usermanagement.web.controller.UserController;
import de.effigenix.infrastructure.usermanagement.web.dto.ErrorResponse;
import io.sentry.Sentry;
import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -280,6 +281,7 @@ public class GlobalExceptionHandler {
) {
RepositoryError error = ex.getError();
logger.error("Role repository error: {}", error.message());
Sentry.captureException(ex);
ErrorResponse errorResponse = ErrorResponse.from(
"REPOSITORY_ERROR",
@ -440,6 +442,7 @@ public class GlobalExceptionHandler {
HttpServletRequest request
) {
logger.error("Unexpected runtime error: {}", ex.getMessage(), ex);
Sentry.captureException(ex);
ErrorResponse errorResponse = ErrorResponse.from(
"INTERNAL_ERROR",
@ -459,6 +462,7 @@ public class GlobalExceptionHandler {
HttpServletRequest request
) {
logger.error("Unexpected checked exception: {}", ex.getMessage(), ex);
Sentry.captureException(ex);
ErrorResponse errorResponse = ErrorResponse.from(
"INTERNAL_ERROR",

View file

@ -32,6 +32,12 @@ jwt:
expiration: 28800000 # 8 hours in milliseconds
refresh-expiration: 604800000 # 7 days in milliseconds
# Sentry / Bugsink Error Tracking
sentry:
dsn: ${SENTRY_DSN:}
environment: ${SENTRY_ENVIRONMENT:development}
traces-sample-rate: 0
# Server Configuration
server:
port: 8080

View file

@ -18,6 +18,7 @@
"@effigenix/config": "workspace:*",
"@effigenix/types": "workspace:*",
"@effigenix/validation": "workspace:*",
"@sentry/node": "^10.39.0",
"ink": "^5.0.1",
"ink-text-input": "^6.0.0",
"react": "^18.2.0",
@ -34,8 +35,12 @@
"vitest": "^1.2.0"
},
"tsup": {
"entry": ["src/index.tsx"],
"format": ["esm"],
"entry": [
"src/index.tsx"
],
"format": [
"esm"
],
"dts": false,
"clean": true,
"sourcemap": true,

View file

@ -1,3 +1,5 @@
import './instrument.js';
import * as Sentry from '@sentry/node';
import React from 'react';
import { render } from 'ink';
import { App } from './App.js';
@ -19,6 +21,26 @@ process.on('SIGTERM', () => {
process.exit(0);
});
process.on('uncaughtException', async (err) => {
Sentry.captureException(err);
await Sentry.flush(2000);
cleanup();
process.exit(1);
});
process.on('unhandledRejection', (reason) => {
Sentry.captureException(reason);
});
const { waitUntilExit } = render(<App />);
waitUntilExit().then(cleanup).catch(cleanup);
waitUntilExit()
.then(async () => {
await Sentry.close(2000);
cleanup();
})
.catch(async (err) => {
Sentry.captureException(err);
await Sentry.close(2000);
cleanup();
});

View file

@ -0,0 +1,10 @@
import * as Sentry from '@sentry/node';
Sentry.init({
dsn: process.env.SENTRY_DSN,
environment: process.env.NODE_ENV ?? 'development',
enabled: !!process.env.SENTRY_DSN,
tracesSampleRate: 0,
});
Sentry.captureException(new Error('Test from Effigenix TUI')); await
Sentry.flush(2000); console.log('Event sent');

View file

@ -6,6 +6,13 @@
import type { AxiosInstance, AxiosError } from 'axios';
import { ApiError, AuthenticationError, NetworkError } from '../errors.js';
let captureException: ((err: unknown) => void) | undefined;
try {
const sentryModule = '@sentry/node';
const Sentry: { captureException: (err: unknown) => void } = await import(sentryModule);
captureException = Sentry.captureException;
} catch { /* @sentry/node not available in this package */ }
interface BackendErrorResponse {
message?: string;
error?: string;
@ -42,6 +49,10 @@ export function setupErrorInterceptor(client: AxiosInstance): void {
return Promise.reject(new AuthenticationError(message, status));
}
if (status >= 500 && captureException) {
captureException(new ApiError(message, status, undefined, validationErrors));
}
return Promise.reject(new ApiError(message, status, undefined, validationErrors));
},
);

736
frontend/pnpm-lock.yaml generated
View file

@ -44,6 +44,9 @@ importers:
'@effigenix/validation':
specifier: workspace:*
version: link:../../packages/validation
'@sentry/node':
specifier: ^10.39.0
version: 10.39.0
ink:
specifier: ^5.0.1
version: 5.2.1(@types/react@18.3.28)(react@18.3.1)
@ -162,6 +165,12 @@ packages:
resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==}
engines: {node: '>=14.13.1'}
'@apm-js-collab/code-transformer@0.8.2':
resolution: {integrity: sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA==}
'@apm-js-collab/tracing-hooks@0.3.1':
resolution: {integrity: sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==}
'@babel/code-frame@7.29.0':
resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
engines: {node: '>=6.9.0'}
@ -524,10 +533,215 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
'@opentelemetry/api-logs@0.207.0':
resolution: {integrity: sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ==}
engines: {node: '>=8.0.0'}
'@opentelemetry/api-logs@0.211.0':
resolution: {integrity: sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg==}
engines: {node: '>=8.0.0'}
'@opentelemetry/api@1.9.0':
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
'@opentelemetry/context-async-hooks@2.5.1':
resolution: {integrity: sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/core@2.5.0':
resolution: {integrity: sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/core@2.5.1':
resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
'@opentelemetry/instrumentation-amqplib@0.58.0':
resolution: {integrity: sha512-fjpQtH18J6GxzUZ+cwNhWUpb71u+DzT7rFkg5pLssDGaEber91Y2WNGdpVpwGivfEluMlNMZumzjEqfg8DeKXQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-connect@0.54.0':
resolution: {integrity: sha512-43RmbhUhqt3uuPnc16cX6NsxEASEtn8z/cYV8Zpt6EP4p2h9s4FNuJ4Q9BbEQ2C0YlCCB/2crO1ruVz/hWt8fA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-dataloader@0.28.0':
resolution: {integrity: sha512-ExXGBp0sUj8yhm6Znhf9jmuOaGDsYfDES3gswZnKr4MCqoBWQdEFn6EoDdt5u+RdbxQER+t43FoUihEfTSqsjA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-express@0.59.0':
resolution: {integrity: sha512-pMKV/qnHiW/Q6pmbKkxt0eIhuNEtvJ7sUAyee192HErlr+a1Jx+FZ3WjfmzhQL1geewyGEiPGkmjjAgNY8TgDA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-fs@0.30.0':
resolution: {integrity: sha512-n3Cf8YhG7reaj5dncGlRIU7iT40bxPOjsBEA5Bc1a1g6e9Qvb+JFJ7SEiMlPbUw4PBmxE3h40ltE8LZ3zVt6OA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-generic-pool@0.54.0':
resolution: {integrity: sha512-8dXMBzzmEdXfH/wjuRvcJnUFeWzZHUnExkmFJ2uPfa31wmpyBCMxO59yr8f/OXXgSogNgi/uPo9KW9H7LMIZ+g==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-graphql@0.58.0':
resolution: {integrity: sha512-+yWVVY7fxOs3j2RixCbvue8vUuJ1inHxN2q1sduqDB0Wnkr4vOzVKRYl/Zy7B31/dcPS72D9lo/kltdOTBM3bQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-hapi@0.57.0':
resolution: {integrity: sha512-Os4THbvls8cTQTVA8ApLfZZztuuqGEeqog0XUnyRW7QVF0d/vOVBEcBCk1pazPFmllXGEdNbbat8e2fYIWdFbw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-http@0.211.0':
resolution: {integrity: sha512-n0IaQ6oVll9PP84SjbOCwDjaJasWRHi6BLsbMLiT6tNj7QbVOkuA5sk/EfZczwI0j5uTKl1awQPivO/ldVtsqA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-ioredis@0.59.0':
resolution: {integrity: sha512-875UxzBHWkW+P4Y45SoFM2AR8f8TzBMD8eO7QXGCyFSCUMP5s9vtt/BS8b/r2kqLyaRPK6mLbdnZznK3XzQWvw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-kafkajs@0.20.0':
resolution: {integrity: sha512-yJXOuWZROzj7WmYCUiyT27tIfqBrVtl1/TwVbQyWPz7rL0r1Lu7kWjD0PiVeTCIL6CrIZ7M2s8eBxsTAOxbNvw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-knex@0.55.0':
resolution: {integrity: sha512-FtTL5DUx5Ka/8VK6P1VwnlUXPa3nrb7REvm5ddLUIeXXq4tb9pKd+/ThB1xM/IjefkRSN3z8a5t7epYw1JLBJQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-koa@0.59.0':
resolution: {integrity: sha512-K9o2skADV20Skdu5tG2bogPKiSpXh4KxfLjz6FuqIVvDJNibwSdu5UvyyBzRVp1rQMV6UmoIk6d3PyPtJbaGSg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.9.0
'@opentelemetry/instrumentation-lru-memoizer@0.55.0':
resolution: {integrity: sha512-FDBfT7yDGcspN0Cxbu/k8A0Pp1Jhv/m7BMTzXGpcb8ENl3tDj/51U65R5lWzUH15GaZA15HQ5A5wtafklxYj7g==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-mongodb@0.64.0':
resolution: {integrity: sha512-pFlCJjweTqVp7B220mCvCld1c1eYKZfQt1p3bxSbcReypKLJTwat+wbL2YZoX9jPi5X2O8tTKFEOahO5ehQGsA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-mongoose@0.57.0':
resolution: {integrity: sha512-MthiekrU/BAJc5JZoZeJmo0OTX6ycJMiP6sMOSRTkvz5BrPMYDqaJos0OgsLPL/HpcgHP7eo5pduETuLguOqcg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-mysql2@0.57.0':
resolution: {integrity: sha512-nHSrYAwF7+aV1E1V9yOOP9TchOodb6fjn4gFvdrdQXiRE7cMuffyLLbCZlZd4wsspBzVwOXX8mpURdRserAhNA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-mysql@0.57.0':
resolution: {integrity: sha512-HFS/+FcZ6Q7piM7Il7CzQ4VHhJvGMJWjx7EgCkP5AnTntSN5rb5Xi3TkYJHBKeR27A0QqPlGaCITi93fUDs++Q==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-pg@0.63.0':
resolution: {integrity: sha512-dKm/ODNN3GgIQVlbD6ZPxwRc3kleLf95hrRWXM+l8wYo+vSeXtEpQPT53afEf6VFWDVzJK55VGn8KMLtSve/cg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-redis@0.59.0':
resolution: {integrity: sha512-JKv1KDDYA2chJ1PC3pLP+Q9ISMQk6h5ey+99mB57/ARk0vQPGZTTEb4h4/JlcEpy7AYT8HIGv7X6l+br03Neeg==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-tedious@0.30.0':
resolution: {integrity: sha512-bZy9Q8jFdycKQ2pAsyuHYUHNmCxCOGdG6eg1Mn75RvQDccq832sU5OWOBnc12EFUELI6icJkhR7+EQKMBam2GA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation-undici@0.21.0':
resolution: {integrity: sha512-gok0LPUOTz2FQ1YJMZzaHcOzDFyT64XJ8M9rNkugk923/p6lDGms/cRW1cqgqp6N6qcd6K6YdVHwPEhnx9BWbw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.7.0
'@opentelemetry/instrumentation@0.207.0':
resolution: {integrity: sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/instrumentation@0.211.0':
resolution: {integrity: sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.3.0
'@opentelemetry/redis-common@0.38.2':
resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==}
engines: {node: ^18.19.0 || >=20.6.0}
'@opentelemetry/resources@2.5.1':
resolution: {integrity: sha512-BViBCdE/GuXRlp9k7nS1w6wJvY5fnFX5XvuEtWsTAOQFIO89Eru7lGW3WbfbxtCuZ/GbrJfAziXG0w0dpxL7eQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
'@opentelemetry/sdk-trace-base@2.5.1':
resolution: {integrity: sha512-iZH3Gw8cxQn0gjpOjJMmKLd9GIaNh/E3v3ST67vyzLSxHBs14HsG4dy7jMYyC5WXGdBVEcM7U/XTF5hCQxjDMw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
'@opentelemetry/semantic-conventions@1.39.0':
resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==}
engines: {node: '>=14'}
'@opentelemetry/sql-common@0.41.2':
resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.1.0
'@pkgr/core@0.2.9':
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
'@prisma/instrumentation@7.2.0':
resolution: {integrity: sha512-Rh9Z4x5kEj1OdARd7U18AtVrnL6rmLSI0qYShaB4W7Wx5BKbgzndWF+QnuzMb7GLfVdlT5aYCXoPQVYuYtVu0g==}
peerDependencies:
'@opentelemetry/api': ^1.8
'@redocly/ajv@8.17.4':
resolution: {integrity: sha512-BieiCML/IgP6x99HZByJSt7fJE4ipgzO7KAFss92Bs+PEI35BhY7vGIysFXLT+YmS7nHtQjZjhOQyPPEf7xGHA==}
@ -663,21 +877,81 @@ packages:
cpu: [x64]
os: [win32]
'@sentry/core@10.39.0':
resolution: {integrity: sha512-xCLip2mBwCdRrvXHtVEULX0NffUTYZZBhEUGht0WFL+GNdNQ7gmBOGOczhZlrf2hgFFtDO0fs1xiP9bqq5orEQ==}
engines: {node: '>=18'}
'@sentry/node-core@10.39.0':
resolution: {integrity: sha512-xdeBG00TmtAcGvXnZNbqOCvnZ5kY3s5aT/L8wUQ0w0TT2KmrC9XL/7UHUfJ45TLbjl10kZOtaMQXgUjpwSJW+g==}
engines: {node: '>=18'}
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.39.0
peerDependenciesMeta:
'@opentelemetry/api':
optional: true
'@opentelemetry/context-async-hooks':
optional: true
'@opentelemetry/core':
optional: true
'@opentelemetry/instrumentation':
optional: true
'@opentelemetry/resources':
optional: true
'@opentelemetry/sdk-trace-base':
optional: true
'@opentelemetry/semantic-conventions':
optional: true
'@sentry/node@10.39.0':
resolution: {integrity: sha512-dx66DtU/xkCTPEDsjU+mYSIEbzu06pzKNQcDA2wvx7wvwsUciZ5yA32Ce/o6p2uHHgy0/joJX9rP5J/BIijaOA==}
engines: {node: '>=18'}
'@sentry/opentelemetry@10.39.0':
resolution: {integrity: sha512-eU8t/pyxjy7xYt6PNCVxT+8SJw5E3pnupdcUNN4ClqG4O5lX4QCDLtId48ki7i30VqrLtR7vmCHMSvqXXdvXPA==}
engines: {node: '>=18'}
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.39.0
'@sinclair/typebox@0.27.10':
resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==}
'@types/connect@3.4.38':
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/mysql@2.15.27':
resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==}
'@types/node@20.19.33':
resolution: {integrity: sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==}
'@types/pg-pool@2.0.7':
resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==}
'@types/pg@8.15.6':
resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==}
'@types/prop-types@15.7.15':
resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
'@types/react@18.3.28':
resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==}
'@types/tedious@4.0.14':
resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==}
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@ -760,6 +1034,11 @@ packages:
'@vitest/utils@1.6.1':
resolution: {integrity: sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==}
acorn-import-attributes@1.9.5:
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
acorn: ^8
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
@ -890,6 +1169,9 @@ packages:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
cjs-module-lexer@2.2.0:
resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
cli-boxes@3.0.0:
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
engines: {node: '>=10'}
@ -1163,6 +1445,9 @@ packages:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
forwarded-parse@2.1.2:
resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==}
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@ -1259,6 +1544,9 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
import-in-the-middle@2.0.6:
resolution: {integrity: sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==}
imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
@ -1465,6 +1753,9 @@ packages:
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
module-details-from-path@1.0.4:
resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@ -1561,6 +1852,17 @@ packages:
pathval@1.1.1:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
pg-protocol@1.11.0:
resolution: {integrity: sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==}
pg-types@2.2.0:
resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==}
engines: {node: '>=4'}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@ -1605,6 +1907,22 @@ packages:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
postgres-array@2.0.0:
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
engines: {node: '>=4'}
postgres-bytea@1.0.1:
resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==}
engines: {node: '>=0.10.0'}
postgres-date@1.0.7:
resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==}
engines: {node: '>=0.10.0'}
postgres-interval@1.2.0:
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
engines: {node: '>=0.10.0'}
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@ -1657,6 +1975,10 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
require-in-the-middle@8.0.1:
resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==}
engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'}
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@ -1990,6 +2312,10 @@ packages:
utf-8-validate:
optional: true
xtend@4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
y18n@5.0.8:
resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
engines: {node: '>=10'}
@ -2026,6 +2352,16 @@ snapshots:
ansi-styles: 6.2.3
is-fullwidth-code-point: 4.0.0
'@apm-js-collab/code-transformer@0.8.2': {}
'@apm-js-collab/tracing-hooks@0.3.1':
dependencies:
'@apm-js-collab/code-transformer': 0.8.2
debug: 4.4.3(supports-color@10.2.2)
module-details-from-path: 1.0.4
transitivePeerDependencies:
- supports-color
'@babel/code-frame@7.29.0':
dependencies:
'@babel/helper-validator-identifier': 7.28.5
@ -2246,8 +2582,270 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1
'@opentelemetry/api-logs@0.207.0':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs@0.211.0':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api@1.9.0': {}
'@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core@2.5.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.39.0
'@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.39.0
'@opentelemetry/instrumentation-amqplib@0.58.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-connect@0.54.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@types/connect': 3.4.38
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-dataloader@0.28.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-express@0.59.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-fs@0.30.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-generic-pool@0.54.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-graphql@0.58.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-hapi@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-http@0.211.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
forwarded-parse: 2.1.2
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-ioredis@0.59.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/redis-common': 0.38.2
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-kafkajs@0.20.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-knex@0.55.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-koa@0.59.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-lru-memoizer@0.55.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-mongodb@0.64.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-mongoose@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-mysql2@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-mysql@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@types/mysql': 2.15.27
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-pg@0.63.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
'@types/pg': 8.15.6
'@types/pg-pool': 2.0.7
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-redis@0.59.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/redis-common': 0.38.2
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-tedious@0.30.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@types/tedious': 4.0.14
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation-undici@0.21.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation@0.207.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.207.0
import-in-the-middle: 2.0.6
require-in-the-middle: 8.0.1
transitivePeerDependencies:
- supports-color
'@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.211.0
import-in-the-middle: 2.0.6
require-in-the-middle: 8.0.1
transitivePeerDependencies:
- supports-color
'@opentelemetry/redis-common@0.38.2': {}
'@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@opentelemetry/semantic-conventions@1.39.0': {}
'@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@pkgr/core@0.2.9': {}
'@prisma/instrumentation@7.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.207.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
'@redocly/ajv@8.17.4':
dependencies:
fast-deep-equal: 3.1.3
@ -2346,14 +2944,100 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.57.1':
optional: true
'@sentry/core@10.39.0': {}
'@sentry/node-core@10.39.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.39.0)':
dependencies:
'@apm-js-collab/tracing-hooks': 0.3.1
'@sentry/core': 10.39.0
'@sentry/opentelemetry': 10.39.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.39.0)
import-in-the-middle: 2.0.6
optionalDependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
transitivePeerDependencies:
- supports-color
'@sentry/node@10.39.0':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-amqplib': 0.58.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-connect': 0.54.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-dataloader': 0.28.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-express': 0.59.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-fs': 0.30.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-generic-pool': 0.54.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-graphql': 0.58.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-hapi': 0.57.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-http': 0.211.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-ioredis': 0.59.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-kafkajs': 0.20.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-knex': 0.55.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-koa': 0.59.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-lru-memoizer': 0.55.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-mongodb': 0.64.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-mongoose': 0.57.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-mysql': 0.57.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-mysql2': 0.57.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-pg': 0.63.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-redis': 0.59.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-tedious': 0.30.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-undici': 0.21.0(@opentelemetry/api@1.9.0)
'@opentelemetry/resources': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@prisma/instrumentation': 7.2.0(@opentelemetry/api@1.9.0)
'@sentry/core': 10.39.0
'@sentry/node-core': 10.39.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.211.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.39.0)
'@sentry/opentelemetry': 10.39.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.39.0)
import-in-the-middle: 2.0.6
minimatch: 9.0.5
transitivePeerDependencies:
- supports-color
'@sentry/opentelemetry@10.39.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.5.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.39.0)':
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/sdk-trace-base': 2.5.1(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.39.0
'@sentry/core': 10.39.0
'@sinclair/typebox@0.27.10': {}
'@types/connect@3.4.38':
dependencies:
'@types/node': 20.19.33
'@types/estree@1.0.8': {}
'@types/mysql@2.15.27':
dependencies:
'@types/node': 20.19.33
'@types/node@20.19.33':
dependencies:
undici-types: 6.21.0
'@types/pg-pool@2.0.7':
dependencies:
'@types/pg': 8.15.6
'@types/pg@8.15.6':
dependencies:
'@types/node': 20.19.33
pg-protocol: 1.11.0
pg-types: 2.2.0
'@types/prop-types@15.7.15': {}
'@types/react@18.3.28':
@ -2361,6 +3045,10 @@ snapshots:
'@types/prop-types': 15.7.15
csstype: 3.2.3
'@types/tedious@4.0.14':
dependencies:
'@types/node': 20.19.33
'@types/yargs-parser@21.0.3': {}
'@types/yargs@17.0.35':
@ -2479,6 +3167,10 @@ snapshots:
loupe: 2.3.7
pretty-format: 29.7.0
acorn-import-attributes@1.9.5(acorn@8.15.0):
dependencies:
acorn: 8.15.0
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
@ -2598,6 +3290,8 @@ snapshots:
dependencies:
readdirp: 4.1.2
cjs-module-lexer@2.2.0: {}
cli-boxes@3.0.0: {}
cli-cursor@4.0.0:
@ -2923,6 +3617,8 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
forwarded-parse@2.1.2: {}
fs.realpath@1.0.0: {}
fsevents@2.3.3:
@ -3022,6 +3718,13 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
import-in-the-middle@2.0.6:
dependencies:
acorn: 8.15.0
acorn-import-attributes: 1.9.5(acorn@8.15.0)
cjs-module-lexer: 2.2.0
module-details-from-path: 1.0.4
imurmurhash@0.1.4: {}
indent-string@5.0.0: {}
@ -3203,6 +3906,8 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.3
module-details-from-path@1.0.4: {}
ms@2.1.3: {}
mz@2.7.0:
@ -3292,6 +3997,18 @@ snapshots:
pathval@1.1.1: {}
pg-int8@1.0.1: {}
pg-protocol@1.11.0: {}
pg-types@2.2.0:
dependencies:
pg-int8: 1.0.1
postgres-array: 2.0.0
postgres-bytea: 1.0.1
postgres-date: 1.0.7
postgres-interval: 1.2.0
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@ -3321,6 +4038,16 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
postgres-array@2.0.0: {}
postgres-bytea@1.0.1: {}
postgres-date@1.0.7: {}
postgres-interval@1.2.0:
dependencies:
xtend: 4.0.2
prelude-ls@1.2.1: {}
prettier-linter-helpers@1.0.1:
@ -3359,6 +4086,13 @@ snapshots:
require-from-string@2.0.2: {}
require-in-the-middle@8.0.1:
dependencies:
debug: 4.4.3(supports-color@10.2.2)
module-details-from-path: 1.0.4
transitivePeerDependencies:
- supports-color
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
@ -3683,6 +4417,8 @@ snapshots:
ws@8.19.0: {}
xtend@4.0.2: {}
y18n@5.0.8: {}
yaml-ast-parser@0.0.43: {}

View file

@ -1,11 +1,22 @@
.PHONY: frontend-dev backend/run generate/openapi
.PHONY: frontend-dev backend/run generate/openapi bugsink
frontend/run:
cd frontend && pnpm dev
cd frontend/apps/cli && node --env-file=../../../.env --import tsx src/index.tsx
backend/run:
cd backend && mvn spring-boot:run
cd backend && SENTRY_DSN=$$(grep '^SENTRY_DSN=' ../.env 2>/dev/null | cut -d= -f2-) mvn spring-boot:run
generate/openapi:
./scripts/generate-openapi.sh
bugsink:
@. ./.env 2>/dev/null || true; \
docker start bugsink 2>/dev/null || \
docker run \
--name bugsink \
-p 8000:8000 \
-e SECRET_KEY=$${BUGSINK_SECRET_KEY:?BUGSINK_SECRET_KEY muss gesetzt sein} \
-e CREATE_SUPERUSER=admin:admin \
bugsink/bugsink:latest
@echo "Bugsink: http://localhost:8000 (admin/admin)"