diff --git a/app/utils/monitoring.server.ts b/app/utils/monitoring.server.ts index b1312da22..b38379b86 100644 --- a/app/utils/monitoring.server.ts +++ b/app/utils/monitoring.server.ts @@ -1,12 +1,8 @@ import { nodeProfilingIntegration } from '@sentry/profiling-node' -import { - init as sentryInit, - httpIntegration, - prismaIntegration, -} from '@sentry/remix' +import Sentry from '@sentry/remix' export function init() { - sentryInit({ + Sentry.init({ dsn: ENV.SENTRY_DSN, environment: ENV.MODE, tracesSampleRate: ENV.MODE === 'production' ? 1 : 0, @@ -23,8 +19,8 @@ export function init() { /\/site\.webmanifest/, ], integrations: [ - httpIntegration(), - prismaIntegration(), + Sentry.httpIntegration(), + Sentry.prismaIntegration(), nodeProfilingIntegration(), ], beforeSendTransaction(event) { diff --git a/mocks/index.ts b/mocks/index.ts index be1d7663b..c68f732d2 100644 --- a/mocks/index.ts +++ b/mocks/index.ts @@ -66,6 +66,12 @@ const miscHandlers = [ http.get('https://verifier.meetchopra.com/verify/:email', () => { return HttpResponse.json({ status: true }) }), + http.post('https://metrics.metronome.sh/telemetry/v5/metrics', () => { + return HttpResponse.json({ success: true }) + }), + http.post('https://metrics.metronome.sh/telemetry/v5/spans', () => { + return HttpResponse.json({ success: true }) + }), ] const server = setupServer( @@ -80,7 +86,20 @@ const server = setupServer( ...miscHandlers, ) -server.listen({ onUnhandledRequest: 'warn' }) +server.listen({ + onUnhandledRequest(request, print) { + // Do not print warnings on unhandled requests to https://<:userId>.ingest.us.sentry.io/api/ + // Note: a request handler with passthrough is not suited with this type of url + // until there is a more permissible url catching system + // like requested at https://github.com/mswjs/msw/issues/1804 + if (request.url.includes('.sentry.io')) { + return + } + + // Print the regular MSW unhandled request warning otherwise. + print.warning() + }, +}) console.info('🔶 Mock server installed') process.once('SIGINT', () => server.close()) diff --git a/package-lock.json b/package-lock.json index 426834ea1..217d7edb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "@remix-run/react": "2.9.2", "@remix-run/router": "1.16.1", "@remix-run/server-runtime": "2.9.2", + "@sentry/node": "^8.3.0", "@sentry/profiling-node": "^8.2.1", "@sentry/remix": "^8.2.1", "@sindresorhus/slugify": "^2.2.1", @@ -4959,9 +4960,9 @@ } }, "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.38.0.tgz", - "integrity": "sha512-izId/qcgMgfWV292ZI9b9E7HdV9446vi0Z5zu5fSlt4MF+R6LZXbZLTQAaboJ4Y2+JbtH7apvko1DF93qTFtqw==", + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.39.0.tgz", + "integrity": "sha512-AG8U7z7D0JcBu/7dDcwb47UMEzj9/FMiJV2iQZqrsZnxR3FjB9J9oIH2iszJYci2eUdp2WbdvtpD9RV/zmME5A==", "dependencies": { "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.51.0", @@ -5326,118 +5327,13 @@ } }, "node_modules/@prisma/instrumentation": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.13.0.tgz", - "integrity": "sha512-MEJX1aWLsEjS+2iheBkEy1LlzQuUruPgKEzA9HPMwzitCoUUK1qn5o+yIphU7wWs47Le/cED0egYQL7y9/rSsA==", - "dependencies": { - "@opentelemetry/api": "1.8.0", - "@opentelemetry/instrumentation": "0.50.0", - "@opentelemetry/sdk-trace-base": "1.23.0" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/api-logs": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.50.0.tgz", - "integrity": "sha512-JdZuKrhOYggqOpUljAq4WWNi5nB10PmgoF0y2CvedLGXd0kSawb/UBnWT8gg1ND3bHCNHStAIVT0ELlxJJRqrA==", - "dependencies": { - "@opentelemetry/api": "^1.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/core": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", - "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", - "dependencies": { - "@opentelemetry/semantic-conventions": "1.23.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.50.0.tgz", - "integrity": "sha512-bhGhbJiZKpuu7wTaSak4hyZcFPlnDeuSF/2vglze8B4w2LubcSbbOnkVTzTs5SXtzh4Xz8eRjaNnAm+u2GYufQ==", - "dependencies": { - "@opentelemetry/api-logs": "0.50.0", - "@types/shimmer": "^1.0.2", - "import-in-the-middle": "1.7.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.2", - "shimmer": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/resources": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.23.0.tgz", - "integrity": "sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==", - "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/semantic-conventions": "1.23.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.23.0.tgz", - "integrity": "sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==", - "dependencies": { - "@opentelemetry/core": "1.23.0", - "@opentelemetry/resources": "1.23.0", - "@opentelemetry/semantic-conventions": "1.23.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz", - "integrity": "sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@prisma/instrumentation/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/@prisma/instrumentation/node_modules/import-in-the-middle": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz", - "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.14.0.tgz", + "integrity": "sha512-DeybWvIZzu/mUsOYP9MVd6AyBj+MP7xIMrcuIn25MX8FiQX39QBnET5KhszTAip/ToctUuDwSJ46QkIoyo3RFA==", "dependencies": { - "acorn": "^8.8.2", - "acorn-import-assertions": "^1.9.0", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" + "@opentelemetry/api": "^1.8", + "@opentelemetry/instrumentation": "^0.49 || ^0.50 || ^0.51", + "@opentelemetry/sdk-trace-base": "^1.22" } }, "node_modules/@reach/accordion": { @@ -7042,16 +6938,16 @@ } }, "node_modules/@sentry/node": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.2.1.tgz", - "integrity": "sha512-7vQQnn+M6qqqWISwrjOaRGx24g9V2Tz+UvrPOWAsZyPBy3kSkuVFef4gHE1geo6CSXMsVpnWkZ8VKJ9I7PaxPg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.3.0.tgz", + "integrity": "sha512-7uAQoO/xUoKuWdjbI44IeNOrEPgRtwyn/RI5apN/JsrCoQUA1Z7wxtIwHRyrIt9jfguHUq9iKRM03S6iVayqkg==", "dependencies": { "@opentelemetry/api": "^1.8.0", "@opentelemetry/context-async-hooks": "^1.23.0", "@opentelemetry/core": "^1.24.1", "@opentelemetry/instrumentation": "^0.51.1", "@opentelemetry/instrumentation-connect": "0.36.0", - "@opentelemetry/instrumentation-express": "0.38.0", + "@opentelemetry/instrumentation-express": "0.39.0", "@opentelemetry/instrumentation-fastify": "0.36.1", "@opentelemetry/instrumentation-graphql": "0.40.0", "@opentelemetry/instrumentation-hapi": "0.38.0", @@ -7067,11 +6963,11 @@ "@opentelemetry/resources": "^1.23.0", "@opentelemetry/sdk-trace-base": "^1.23.0", "@opentelemetry/semantic-conventions": "^1.23.0", - "@prisma/instrumentation": "5.13.0", - "@sentry/core": "8.2.1", - "@sentry/opentelemetry": "8.2.1", - "@sentry/types": "8.2.1", - "@sentry/utils": "8.2.1" + "@prisma/instrumentation": "5.14.0", + "@sentry/core": "8.3.0", + "@sentry/opentelemetry": "8.3.0", + "@sentry/types": "8.3.0", + "@sentry/utils": "8.3.0" }, "engines": { "node": ">=14.18" @@ -7080,6 +6976,57 @@ "opentelemetry-instrumentation-fetch-node": "1.2.0" } }, + "node_modules/@sentry/node/node_modules/@sentry/core": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.3.0.tgz", + "integrity": "sha512-X7r0WujE7DILtgA5zt4hmHMBTF3xbjJB7Dgrw1Hv5C7WG5qkNqhDPpnRX7WswtHcLSgVPY2GRTQ5Iid7i33zEQ==", + "dependencies": { + "@sentry/types": "8.3.0", + "@sentry/utils": "8.3.0" + }, + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/opentelemetry": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.3.0.tgz", + "integrity": "sha512-VyvLM5JQryCjRtu5NENuGui9VXMY5ZZ948oY8dEUEfvX8SeOq0XhBp440XTgu2Nku62IwnwAp/m4auhiZ2rR/w==", + "dependencies": { + "@sentry/core": "8.3.0", + "@sentry/types": "8.3.0", + "@sentry/utils": "8.3.0" + }, + "engines": { + "node": ">=14.18" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.8.0", + "@opentelemetry/core": "^1.24.1", + "@opentelemetry/instrumentation": "^0.51.1", + "@opentelemetry/sdk-trace-base": "^1.23.0", + "@opentelemetry/semantic-conventions": "^1.23.0" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.3.0.tgz", + "integrity": "sha512-DbwRTdx5xn8c2EhElD1UneDbcfqz220INPJYiATGJ9pR+cV5kGohyxI6lJxebPdPhPLEFQqYdLXGA6Cjm/uC6A==", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/@sentry/node/node_modules/@sentry/utils": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.3.0.tgz", + "integrity": "sha512-WFaUZy0OWsF6Mrjenxj4N8zGzA6+pdH2lCV60/IB+V5PvGPgl40MUyjN6aLA/E9BRpqwLNQRMroZjln+J/3aiA==", + "dependencies": { + "@sentry/types": "8.3.0" + }, + "engines": { + "node": ">=14.18" + } + }, "node_modules/@sentry/opentelemetry": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.2.1.tgz", @@ -7120,6 +7067,190 @@ "node": ">=14.18" } }, + "node_modules/@sentry/profiling-node/node_modules/@opentelemetry/api-logs": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.50.0.tgz", + "integrity": "sha512-JdZuKrhOYggqOpUljAq4WWNi5nB10PmgoF0y2CvedLGXd0kSawb/UBnWT8gg1ND3bHCNHStAIVT0ELlxJJRqrA==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@opentelemetry/instrumentation-express": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.38.0.tgz", + "integrity": "sha512-izId/qcgMgfWV292ZI9b9E7HdV9446vi0Z5zu5fSlt4MF+R6LZXbZLTQAaboJ4Y2+JbtH7apvko1DF93qTFtqw==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.51.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@opentelemetry/resources": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.23.0.tgz", + "integrity": "sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==", + "dependencies": { + "@opentelemetry/core": "1.23.0", + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", + "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.23.0.tgz", + "integrity": "sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==", + "dependencies": { + "@opentelemetry/core": "1.23.0", + "@opentelemetry/resources": "1.23.0", + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", + "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz", + "integrity": "sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@prisma/instrumentation": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.13.0.tgz", + "integrity": "sha512-MEJX1aWLsEjS+2iheBkEy1LlzQuUruPgKEzA9HPMwzitCoUUK1qn5o+yIphU7wWs47Le/cED0egYQL7y9/rSsA==", + "dependencies": { + "@opentelemetry/api": "1.8.0", + "@opentelemetry/instrumentation": "0.50.0", + "@opentelemetry/sdk-trace-base": "1.23.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.50.0.tgz", + "integrity": "sha512-bhGhbJiZKpuu7wTaSak4hyZcFPlnDeuSF/2vglze8B4w2LubcSbbOnkVTzTs5SXtzh4Xz8eRjaNnAm+u2GYufQ==", + "dependencies": { + "@opentelemetry/api-logs": "0.50.0", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "1.7.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/@sentry/node": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.2.1.tgz", + "integrity": "sha512-7vQQnn+M6qqqWISwrjOaRGx24g9V2Tz+UvrPOWAsZyPBy3kSkuVFef4gHE1geo6CSXMsVpnWkZ8VKJ9I7PaxPg==", + "dependencies": { + "@opentelemetry/api": "^1.8.0", + "@opentelemetry/context-async-hooks": "^1.23.0", + "@opentelemetry/core": "^1.24.1", + "@opentelemetry/instrumentation": "^0.51.1", + "@opentelemetry/instrumentation-connect": "0.36.0", + "@opentelemetry/instrumentation-express": "0.38.0", + "@opentelemetry/instrumentation-fastify": "0.36.1", + "@opentelemetry/instrumentation-graphql": "0.40.0", + "@opentelemetry/instrumentation-hapi": "0.38.0", + "@opentelemetry/instrumentation-http": "0.51.1", + "@opentelemetry/instrumentation-ioredis": "0.40.0", + "@opentelemetry/instrumentation-koa": "0.40.0", + "@opentelemetry/instrumentation-mongodb": "0.43.0", + "@opentelemetry/instrumentation-mongoose": "0.38.1", + "@opentelemetry/instrumentation-mysql": "0.38.1", + "@opentelemetry/instrumentation-mysql2": "0.38.1", + "@opentelemetry/instrumentation-nestjs-core": "0.37.1", + "@opentelemetry/instrumentation-pg": "0.41.0", + "@opentelemetry/resources": "^1.23.0", + "@opentelemetry/sdk-trace-base": "^1.23.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@prisma/instrumentation": "5.13.0", + "@sentry/core": "8.2.1", + "@sentry/opentelemetry": "8.2.1", + "@sentry/types": "8.2.1", + "@sentry/utils": "8.2.1" + }, + "engines": { + "node": ">=14.18" + }, + "optionalDependencies": { + "opentelemetry-instrumentation-fetch-node": "1.2.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@sentry/profiling-node/node_modules/import-in-the-middle": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz", + "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, "node_modules/@sentry/react": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/@sentry/react/-/react-8.2.1.tgz", @@ -7166,6 +7297,190 @@ "react": "16.x || 17.x || 18.x" } }, + "node_modules/@sentry/remix/node_modules/@opentelemetry/api-logs": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.50.0.tgz", + "integrity": "sha512-JdZuKrhOYggqOpUljAq4WWNi5nB10PmgoF0y2CvedLGXd0kSawb/UBnWT8gg1ND3bHCNHStAIVT0ELlxJJRqrA==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sentry/remix/node_modules/@opentelemetry/instrumentation-express": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.38.0.tgz", + "integrity": "sha512-izId/qcgMgfWV292ZI9b9E7HdV9446vi0Z5zu5fSlt4MF+R6LZXbZLTQAaboJ4Y2+JbtH7apvko1DF93qTFtqw==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.51.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@sentry/remix/node_modules/@opentelemetry/resources": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.23.0.tgz", + "integrity": "sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==", + "dependencies": { + "@opentelemetry/core": "1.23.0", + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/remix/node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", + "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/remix/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.23.0.tgz", + "integrity": "sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==", + "dependencies": { + "@opentelemetry/core": "1.23.0", + "@opentelemetry/resources": "1.23.0", + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/remix/node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.23.0.tgz", + "integrity": "sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.23.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" + } + }, + "node_modules/@sentry/remix/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.23.0.tgz", + "integrity": "sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@sentry/remix/node_modules/@prisma/instrumentation": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.13.0.tgz", + "integrity": "sha512-MEJX1aWLsEjS+2iheBkEy1LlzQuUruPgKEzA9HPMwzitCoUUK1qn5o+yIphU7wWs47Le/cED0egYQL7y9/rSsA==", + "dependencies": { + "@opentelemetry/api": "1.8.0", + "@opentelemetry/instrumentation": "0.50.0", + "@opentelemetry/sdk-trace-base": "1.23.0" + } + }, + "node_modules/@sentry/remix/node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.50.0.tgz", + "integrity": "sha512-bhGhbJiZKpuu7wTaSak4hyZcFPlnDeuSF/2vglze8B4w2LubcSbbOnkVTzTs5SXtzh4Xz8eRjaNnAm+u2GYufQ==", + "dependencies": { + "@opentelemetry/api-logs": "0.50.0", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "1.7.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@sentry/remix/node_modules/@sentry/node": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.2.1.tgz", + "integrity": "sha512-7vQQnn+M6qqqWISwrjOaRGx24g9V2Tz+UvrPOWAsZyPBy3kSkuVFef4gHE1geo6CSXMsVpnWkZ8VKJ9I7PaxPg==", + "dependencies": { + "@opentelemetry/api": "^1.8.0", + "@opentelemetry/context-async-hooks": "^1.23.0", + "@opentelemetry/core": "^1.24.1", + "@opentelemetry/instrumentation": "^0.51.1", + "@opentelemetry/instrumentation-connect": "0.36.0", + "@opentelemetry/instrumentation-express": "0.38.0", + "@opentelemetry/instrumentation-fastify": "0.36.1", + "@opentelemetry/instrumentation-graphql": "0.40.0", + "@opentelemetry/instrumentation-hapi": "0.38.0", + "@opentelemetry/instrumentation-http": "0.51.1", + "@opentelemetry/instrumentation-ioredis": "0.40.0", + "@opentelemetry/instrumentation-koa": "0.40.0", + "@opentelemetry/instrumentation-mongodb": "0.43.0", + "@opentelemetry/instrumentation-mongoose": "0.38.1", + "@opentelemetry/instrumentation-mysql": "0.38.1", + "@opentelemetry/instrumentation-mysql2": "0.38.1", + "@opentelemetry/instrumentation-nestjs-core": "0.37.1", + "@opentelemetry/instrumentation-pg": "0.41.0", + "@opentelemetry/resources": "^1.23.0", + "@opentelemetry/sdk-trace-base": "^1.23.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@prisma/instrumentation": "5.13.0", + "@sentry/core": "8.2.1", + "@sentry/opentelemetry": "8.2.1", + "@sentry/types": "8.2.1", + "@sentry/utils": "8.2.1" + }, + "engines": { + "node": ">=14.18" + }, + "optionalDependencies": { + "opentelemetry-instrumentation-fetch-node": "1.2.0" + } + }, + "node_modules/@sentry/remix/node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@sentry/remix/node_modules/import-in-the-middle": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz", + "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, "node_modules/@sentry/types": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.2.1.tgz", diff --git a/package.json b/package.json index 08a2bbdd6..a459347e2 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "@remix-run/react": "2.9.2", "@remix-run/router": "1.16.1", "@remix-run/server-runtime": "2.9.2", + "@sentry/node": "^8.3.0", "@sentry/profiling-node": "^8.2.1", "@sentry/remix": "^8.2.1", "@sindresorhus/slugify": "^2.2.1", diff --git a/server/dev-server.js b/server/dev-server.js index bc046be27..8d09fae62 100644 --- a/server/dev-server.js +++ b/server/dev-server.js @@ -1,6 +1,8 @@ import { execa } from 'execa' if (process.env.NODE_ENV === 'production') { + // the file may not be there yet + // eslint-disable-next-line import/no-unresolved await import('../server-build/index.js') } else { const command = diff --git a/server/index.ts b/server/index.ts index 7eee84b3c..2b1b5cff0 100644 --- a/server/index.ts +++ b/server/index.ts @@ -316,7 +316,11 @@ async function getRequestHandler(): Promise { function getLoadContext(req: any, res: any) { return { cspNonce: res.locals.cspNonce } } - return createRequestHandler({ build: getBuild, mode: MODE, getLoadContext }) + return createRequestHandler({ + build: MODE === 'development' ? getBuild : await getBuild(), + mode: MODE, + getLoadContext, + }) } app.all('*', await getRequestHandler())